From 76c115f72b394afb9942eee2854a46398eef6d5f Mon Sep 17 00:00:00 2001 From: snyk-bot Date: Fri, 8 Sep 2023 03:18:58 +0000 Subject: [PATCH 01/37] fix: upgrade @aws-sdk/lib-storage from 3.370.0 to 3.391.0 Snyk has created this PR to upgrade @aws-sdk/lib-storage from 3.370.0 to 3.391.0. See this package in npm: https://www.npmjs.com/package/@aws-sdk/lib-storage See this project in Snyk: https://app.snyk.io/org/datamanagement/project/39f686fe-9e69-4343-a9ce-129e22bff288?utm_source=github&utm_medium=referral&page=upgrade-pr --- package-lock.json | 261 ++++++++++++++++++++++++++++++++++++++++++++-- package.json | 2 +- 2 files changed, 255 insertions(+), 8 deletions(-) diff --git a/package-lock.json b/package-lock.json index 580253c4da..475bfe9715 100644 --- a/package-lock.json +++ b/package-lock.json @@ -13,7 +13,7 @@ "@aws-sdk/client-personalize": "^3.363.0", "@aws-sdk/client-s3": "^3.370.0", "@aws-sdk/credential-providers": "^3.363.0", - "@aws-sdk/lib-storage": "^3.370.0", + "@aws-sdk/lib-storage": "^3.391.0", "@bugsnag/js": "^7.20.2", "@datadog/pprof": "^3.1.0", "@koa/router": "^12.0.0", @@ -1339,13 +1339,13 @@ } }, "node_modules/@aws-sdk/lib-storage": { - "version": "3.370.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/lib-storage/-/lib-storage-3.370.0.tgz", - "integrity": "sha512-vUdvd8jvusl81A0OdCz3y2E7Nhqwa57cxJviK6P262zqL2Ge5WlfR9djjv78sqdclvm7iXTxj7o1djMu1aScNg==", + "version": "3.391.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/lib-storage/-/lib-storage-3.391.0.tgz", + "integrity": "sha512-W2TPkYZb5fyq95cgjNXnsCSMI0fo8OzQGnVWBTiBDj1N7Yx1OEBDTkCJf+y08I4YaRBsca4h1p+jsw9EysALug==", "dependencies": { - "@smithy/abort-controller": "^1.0.1", - "@smithy/middleware-endpoint": "^1.0.2", - "@smithy/smithy-client": "^1.0.3", + "@smithy/abort-controller": "^2.0.1", + "@smithy/middleware-endpoint": "^2.0.3", + "@smithy/smithy-client": "^2.0.3", "buffer": "5.6.0", "events": "3.3.0", "stream-browserify": "3.0.0", @@ -1358,6 +1358,253 @@ "@aws-sdk/client-s3": "^3.0.0" } }, + "node_modules/@aws-sdk/lib-storage/node_modules/@smithy/abort-controller": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@smithy/abort-controller/-/abort-controller-2.0.6.tgz", + "integrity": "sha512-4I7g0lyGUlW2onf8mD76IzU37oRWSHsQ5zlW5MjDzgg4I4J9bOK4500Gx6qOuoN7+GulAnGLe1YwyrIluzhakg==", + "dependencies": { + "@smithy/types": "^2.3.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/lib-storage/node_modules/@smithy/fetch-http-handler": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/@smithy/fetch-http-handler/-/fetch-http-handler-2.1.2.tgz", + "integrity": "sha512-3Gm3pQm4viUPU+e7KkRScS9t5phBxSNRS8rQSZ+HeCwK/busrX0/2HJZiwLvGblqPqi1laJB0lD18AdiOioJww==", + "dependencies": { + "@smithy/protocol-http": "^3.0.2", + "@smithy/querystring-builder": "^2.0.6", + "@smithy/types": "^2.3.0", + "@smithy/util-base64": "^2.0.0", + "tslib": "^2.5.0" + } + }, + "node_modules/@aws-sdk/lib-storage/node_modules/@smithy/is-array-buffer": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-2.0.0.tgz", + "integrity": "sha512-z3PjFjMyZNI98JFRJi/U0nGoLWMSJlDjAW4QUX2WNZLas5C0CmVV6LJ01JI0k90l7FvpmixjWxPFmENSClQ7ug==", + "dependencies": { + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/lib-storage/node_modules/@smithy/middleware-endpoint": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@smithy/middleware-endpoint/-/middleware-endpoint-2.0.6.tgz", + "integrity": "sha512-MuSPPtEHFal/M77tR3ffLsdOfX29IZpA990nGuoPj5zQnAYrA4PYBGoqqrASQKm8Xb3C0NwuYzOATT7WX4f5Pg==", + "dependencies": { + "@smithy/middleware-serde": "^2.0.6", + "@smithy/types": "^2.3.0", + "@smithy/url-parser": "^2.0.6", + "@smithy/util-middleware": "^2.0.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/lib-storage/node_modules/@smithy/middleware-serde": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@smithy/middleware-serde/-/middleware-serde-2.0.6.tgz", + "integrity": "sha512-8/GODBngYbrS28CMZtaHIL4R9rLNSQ/zgb+N1OAZ02NwBUawlnLDcatve9YRzhJC/IWz0/pt+WimJZaO1sGcig==", + "dependencies": { + "@smithy/types": "^2.3.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/lib-storage/node_modules/@smithy/middleware-stack": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@smithy/middleware-stack/-/middleware-stack-2.0.0.tgz", + "integrity": "sha512-31XC1xNF65nlbc16yuh3wwTudmqs6qy4EseQUGF8A/p2m/5wdd/cnXJqpniy/XvXVwkHPz/GwV36HqzHtIKATQ==", + "dependencies": { + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/lib-storage/node_modules/@smithy/node-http-handler": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/@smithy/node-http-handler/-/node-http-handler-2.1.2.tgz", + "integrity": "sha512-PdEEDCShuM8zxGoaRxmGB/1ikB8oeqz+ZAF9VIA8FCP3E59j8zDTF+wCELoWd1Y6gtxr+RcTAg5sA8nvn5qH/w==", + "dependencies": { + "@smithy/abort-controller": "^2.0.6", + "@smithy/protocol-http": "^3.0.2", + "@smithy/querystring-builder": "^2.0.6", + "@smithy/types": "^2.3.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/lib-storage/node_modules/@smithy/protocol-http": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-3.0.2.tgz", + "integrity": "sha512-LUOWCPRihvJBkdSs+ivK9m1f/rMfF3n9Zpzg8qdry2eIG4HQqqLBMWQyF9bgk7JhsrrOa3//jJKhXzvL7wL5Xw==", + "dependencies": { + "@smithy/types": "^2.3.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/lib-storage/node_modules/@smithy/querystring-builder": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@smithy/querystring-builder/-/querystring-builder-2.0.6.tgz", + "integrity": "sha512-HnU00shCGoV8vKJZTiNBkNvR9NogU3NIUaVMAGJPSqNGJj3psWo+TUrC0BVCDcwiCljXwXCFGJqIcsWtClrktQ==", + "dependencies": { + "@smithy/types": "^2.3.0", + "@smithy/util-uri-escape": "^2.0.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/lib-storage/node_modules/@smithy/querystring-parser": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@smithy/querystring-parser/-/querystring-parser-2.0.6.tgz", + "integrity": "sha512-i4LKoXHP7pTFAPjLIJyQXYOhWokbcFha3WWsX74sAKmuluv0XM2cxONZoFxwEzmWhsNyM6buSwJSZXyPiec0AQ==", + "dependencies": { + "@smithy/types": "^2.3.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/lib-storage/node_modules/@smithy/smithy-client": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/@smithy/smithy-client/-/smithy-client-2.1.2.tgz", + "integrity": "sha512-quUuJ0SsqgG7Flopvfd8iQJLhHfnMYtYPuvImVQzPHXtqUQImtVz5msudMxW3t3jl+L0w8RlR+IN2zT6UqCJ6g==", + "dependencies": { + "@smithy/middleware-stack": "^2.0.0", + "@smithy/types": "^2.3.0", + "@smithy/util-stream": "^2.0.8", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/lib-storage/node_modules/@smithy/types": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-2.3.0.tgz", + "integrity": "sha512-pJce3rd39MElkV57UTPAoSYAApjQLELUxjU5adHNLYk9gnPvyIGbJNJTZVVFu00BrgZH3W/cQe8QuFcknDyodQ==", + "dependencies": { + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/lib-storage/node_modules/@smithy/url-parser": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@smithy/url-parser/-/url-parser-2.0.6.tgz", + "integrity": "sha512-9i6j5QW6bapHZ4rtkXOAm0hOUG1+5IVdVJXNSUTcNskwJchZH5IQuDNPCbgUi/u2P8EZazKt4wXT51QxOXCz1A==", + "dependencies": { + "@smithy/querystring-parser": "^2.0.6", + "@smithy/types": "^2.3.0", + "tslib": "^2.5.0" + } + }, + "node_modules/@aws-sdk/lib-storage/node_modules/@smithy/util-base64": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-base64/-/util-base64-2.0.0.tgz", + "integrity": "sha512-Zb1E4xx+m5Lud8bbeYi5FkcMJMnn+1WUnJF3qD7rAdXpaL7UjkFQLdmW5fHadoKbdHpwH9vSR8EyTJFHJs++tA==", + "dependencies": { + "@smithy/util-buffer-from": "^2.0.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/lib-storage/node_modules/@smithy/util-buffer-from": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-2.0.0.tgz", + "integrity": "sha512-/YNnLoHsR+4W4Vf2wL5lGv0ksg8Bmk3GEGxn2vEQt52AQaPSCuaO5PM5VM7lP1K9qHRKHwrPGktqVoAHKWHxzw==", + "dependencies": { + "@smithy/is-array-buffer": "^2.0.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/lib-storage/node_modules/@smithy/util-hex-encoding": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-hex-encoding/-/util-hex-encoding-2.0.0.tgz", + "integrity": "sha512-c5xY+NUnFqG6d7HFh1IFfrm3mGl29lC+vF+geHv4ToiuJCBmIfzx6IeHLg+OgRdPFKDXIw6pvi+p3CsscaMcMA==", + "dependencies": { + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/lib-storage/node_modules/@smithy/util-middleware": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-middleware/-/util-middleware-2.0.0.tgz", + "integrity": "sha512-eCWX4ECuDHn1wuyyDdGdUWnT4OGyIzV0LN1xRttBFMPI9Ff/4heSHVxneyiMtOB//zpXWCha1/SWHJOZstG7kA==", + "dependencies": { + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/lib-storage/node_modules/@smithy/util-stream": { + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/@smithy/util-stream/-/util-stream-2.0.8.tgz", + "integrity": "sha512-1JoSHL/AOFRo/RVYdbOOGG5qSkU1IQN+F0f3HOZcwvGeGT5KnGwd4hLzmr0qkjKh4PW7nzuvPMdR7L8THV24Hw==", + "dependencies": { + "@smithy/fetch-http-handler": "^2.1.2", + "@smithy/node-http-handler": "^2.1.2", + "@smithy/types": "^2.3.0", + "@smithy/util-base64": "^2.0.0", + "@smithy/util-buffer-from": "^2.0.0", + "@smithy/util-hex-encoding": "^2.0.0", + "@smithy/util-utf8": "^2.0.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/lib-storage/node_modules/@smithy/util-uri-escape": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-uri-escape/-/util-uri-escape-2.0.0.tgz", + "integrity": "sha512-ebkxsqinSdEooQduuk9CbKcI+wheijxEb3utGXkCoYQkJnwTnLbH1JXGimJtUkQwNQbsbuYwG2+aFVyZf5TLaw==", + "dependencies": { + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/lib-storage/node_modules/@smithy/util-utf8": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-2.0.0.tgz", + "integrity": "sha512-rctU1VkziY84n5OXe3bPNpKR001ZCME2JCaBBFgtiM2hfKbHFudc/BkMuPab8hRbLd0j3vbnBTTZ1igBf0wgiQ==", + "dependencies": { + "@smithy/util-buffer-from": "^2.0.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, "node_modules/@aws-sdk/md5-js": { "version": "3.370.0", "resolved": "https://registry.npmjs.org/@aws-sdk/md5-js/-/md5-js-3.370.0.tgz", diff --git a/package.json b/package.json index 34cb1b4feb..43c7deccb0 100644 --- a/package.json +++ b/package.json @@ -54,7 +54,7 @@ "@aws-sdk/client-personalize": "^3.363.0", "@aws-sdk/client-s3": "^3.370.0", "@aws-sdk/credential-providers": "^3.363.0", - "@aws-sdk/lib-storage": "^3.370.0", + "@aws-sdk/lib-storage": "^3.391.0", "@bugsnag/js": "^7.20.2", "@datadog/pprof": "^3.1.0", "@koa/router": "^12.0.0", From 305a9d4e95937268fa95aff92d89cad19cc31a0c Mon Sep 17 00:00:00 2001 From: snyk-bot Date: Fri, 8 Sep 2023 03:19:03 +0000 Subject: [PATCH 02/37] fix: upgrade @aws-sdk/credential-providers from 3.363.0 to 3.391.0 Snyk has created this PR to upgrade @aws-sdk/credential-providers from 3.363.0 to 3.391.0. See this package in npm: https://www.npmjs.com/package/@aws-sdk/credential-providers See this project in Snyk: https://app.snyk.io/org/datamanagement/project/39f686fe-9e69-4343-a9ce-129e22bff288?utm_source=github&utm_medium=referral&page=upgrade-pr --- package-lock.json | 18201 -------------------------------------------- package.json | 2 +- 2 files changed, 1 insertion(+), 18202 deletions(-) delete mode 100644 package-lock.json diff --git a/package-lock.json b/package-lock.json deleted file mode 100644 index 475bfe9715..0000000000 --- a/package-lock.json +++ /dev/null @@ -1,18201 +0,0 @@ -{ - "name": "rudder-transformer", - "version": "1.40.1", - "lockfileVersion": 3, - "requires": true, - "packages": { - "": { - "name": "rudder-transformer", - "version": "1.40.1", - "license": "ISC", - "dependencies": { - "@amplitude/ua-parser-js": "^0.7.24", - "@aws-sdk/client-personalize": "^3.363.0", - "@aws-sdk/client-s3": "^3.370.0", - "@aws-sdk/credential-providers": "^3.363.0", - "@aws-sdk/lib-storage": "^3.391.0", - "@bugsnag/js": "^7.20.2", - "@datadog/pprof": "^3.1.0", - "@koa/router": "^12.0.0", - "@ndhoule/extend": "^2.0.0", - "ajv": "^8.12.0", - "ajv-draft-04": "^1.0.0", - "ajv-formats": "^2.1.1", - "axios": "^1.4.0", - "btoa": "^1.2.1", - "component-each": "^0.2.6", - "crypto-js": "^4.1.1", - "dotenv": "^16.0.3", - "flat": "^5.0.2", - "form-data": "^4.0.0", - "get-value": "^3.0.1", - "handlebars": "^4.7.7", - "http-graceful-shutdown": "^3.1.13", - "https-proxy-agent": "^5.0.1", - "ioredis": "^5.3.2", - "is": "^3.3.0", - "is-ip": "^3.1.0", - "isolated-vm": "4.5.0", - "js-sha1": "^0.6.0", - "json-diff": "^1.0.3", - "json-size": "^1.0.0", - "jsontoxml": "^1.0.1", - "koa": "^2.14.1", - "koa-bodyparser": "^4.4.0", - "koa2-swagger-ui": "^5.7.0", - "lodash": "^4.17.21", - "match-json": "^1.3.5", - "md5": "^2.3.0", - "modclean": "^3.0.0-beta.1", - "moment": "^2.29.4", - "moment-timezone": "^0.5.43", - "node-cache": "^5.1.2", - "node-fetch": "^2.6.9", - "oauth-1.0a": "^2.2.6", - "object-hash": "^3.0.0", - "parse-static-imports": "^1.1.0", - "prom-client": "^14.2.0", - "qs": "^6.11.1", - "rudder-transformer-cdk": "^1.4.11", - "rudder-workflow-engine": "^0.4.7", - "set-value": "^4.1.0", - "sha256": "^0.2.0", - "stacktrace-parser": "^0.1.10", - "statsd-client": "^0.4.7", - "truncate-utf8-bytes": "^1.0.2", - "ua-parser-js": "^1.0.35", - "unset-value": "^2.0.1", - "uuid": "^9.0.0", - "valid-url": "^1.0.9" - }, - "devDependencies": { - "@commitlint/config-conventional": "^17.6.3", - "@digitalroute/cz-conventional-changelog-for-jira": "^8.0.1", - "@types/jest": "^29.5.1", - "@types/koa": "^2.13.6", - "@types/koa-bodyparser": "^4.3.10", - "@types/lodash": "^4.14.197", - "@types/node": "^20.2.5", - "@typescript-eslint/eslint-plugin": "^5.61.0", - "@typescript-eslint/parser": "^5.59.2", - "benchmark-suite": "^0.1.8", - "commander": "^10.0.1", - "commitizen": "^4.3.0", - "commitlint": "^17.6.3", - "conventional-github-releaser": "^3.1.5", - "eslint": "^8.40.0", - "eslint-config-airbnb-base": "^15.0.0", - "eslint-config-airbnb-typescript": "^17.0.0", - "eslint-config-prettier": "^8.8.0", - "eslint-plugin-import": "^2.27.5", - "eslint-plugin-json": "^3.1.0", - "eslint-plugin-sonarjs": "^0.19.0", - "eslint-plugin-unicorn": "^46.0.1", - "glob": "^10.3.3", - "http-terminator": "^3.2.0", - "husky": "^8.0.3", - "jest": "^29.5.0", - "jest-sonar": "^0.2.16", - "jest-when": "^3.5.2", - "lint-staged": "^13.2.2", - "madge": "^6.1.0", - "mocked-env": "^1.3.5", - "node-notifier": "^10.0.1", - "prettier": "^2.8.8", - "semver": "^7.5.3", - "standard-version": "^9.5.0", - "supertest": "^6.3.3", - "swagger-cli": "^4.0.4", - "ts-jest": "^29.1.0", - "typescript": "^5.0.4" - } - }, - "node_modules/@aashutoshrathi/word-wrap": { - "version": "1.2.6", - "resolved": "https://registry.npmjs.org/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz", - "integrity": "sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/@amplitude/ua-parser-js": { - "version": "0.7.24", - "resolved": "https://registry.npmjs.org/@amplitude/ua-parser-js/-/ua-parser-js-0.7.24.tgz", - "integrity": "sha512-VbQuJymJ20WEw0HtI2np7EdC3NJGUWi8+Xdbc7uk8WfMIF308T0howpzkQ3JFMN7ejnrcSM/OyNGveeE3TP3TA==", - "engines": { - "node": "*" - } - }, - "node_modules/@ampproject/remapping": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.0.tgz", - "integrity": "sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w==", - "dev": true, - "dependencies": { - "@jridgewell/gen-mapping": "^0.1.0", - "@jridgewell/trace-mapping": "^0.3.9" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@apidevtools/json-schema-ref-parser": { - "version": "9.0.6", - "resolved": "https://registry.npmjs.org/@apidevtools/json-schema-ref-parser/-/json-schema-ref-parser-9.0.6.tgz", - "integrity": "sha512-M3YgsLjI0lZxvrpeGVk9Ap032W6TPQkH6pRAZz81Ac3WUNF79VQooAFnp8umjvVzUmD93NkogxEwbSce7qMsUg==", - "dev": true, - "dependencies": { - "@jsdevtools/ono": "^7.1.3", - "call-me-maybe": "^1.0.1", - "js-yaml": "^3.13.1" - } - }, - "node_modules/@apidevtools/json-schema-ref-parser/node_modules/argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "dev": true, - "dependencies": { - "sprintf-js": "~1.0.2" - } - }, - "node_modules/@apidevtools/json-schema-ref-parser/node_modules/js-yaml": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", - "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", - "dev": true, - "dependencies": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/@apidevtools/openapi-schemas": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@apidevtools/openapi-schemas/-/openapi-schemas-2.1.0.tgz", - "integrity": "sha512-Zc1AlqrJlX3SlpupFGpiLi2EbteyP7fXmUOGup6/DnkRgjP9bgMM/ag+n91rsv0U1Gpz0H3VILA/o3bW7Ua6BQ==", - "dev": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/@apidevtools/swagger-methods": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/@apidevtools/swagger-methods/-/swagger-methods-3.0.2.tgz", - "integrity": "sha512-QAkD5kK2b1WfjDS/UQn/qQkbwF31uqRjPTrsCs5ZG9BQGAkjwvqGFjjPqAuzac/IYzpPtRzjCP1WrTuAIjMrXg==", - "dev": true - }, - "node_modules/@apidevtools/swagger-parser": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/@apidevtools/swagger-parser/-/swagger-parser-10.1.0.tgz", - "integrity": "sha512-9Kt7EuS/7WbMAUv2gSziqjvxwDbFSg3Xeyfuj5laUODX8o/k/CpsAKiQ8W7/R88eXFTMbJYg6+7uAmOWNKmwnw==", - "dev": true, - "dependencies": { - "@apidevtools/json-schema-ref-parser": "9.0.6", - "@apidevtools/openapi-schemas": "^2.1.0", - "@apidevtools/swagger-methods": "^3.0.2", - "@jsdevtools/ono": "^7.1.3", - "ajv": "^8.6.3", - "ajv-draft-04": "^1.0.0", - "call-me-maybe": "^1.0.1" - }, - "peerDependencies": { - "openapi-types": ">=7" - } - }, - "node_modules/@aws-crypto/crc32": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@aws-crypto/crc32/-/crc32-3.0.0.tgz", - "integrity": "sha512-IzSgsrxUcsrejQbPVilIKy16kAT52EwB6zSaI+M3xxIhKh5+aldEyvI+z6erM7TCLB2BJsFrtHjp6/4/sr+3dA==", - "dependencies": { - "@aws-crypto/util": "^3.0.0", - "@aws-sdk/types": "^3.222.0", - "tslib": "^1.11.1" - } - }, - "node_modules/@aws-crypto/crc32/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" - }, - "node_modules/@aws-crypto/crc32c": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@aws-crypto/crc32c/-/crc32c-3.0.0.tgz", - "integrity": "sha512-ENNPPManmnVJ4BTXlOjAgD7URidbAznURqD0KvfREyc4o20DPYdEldU1f5cQ7Jbj0CJJSPaMIk/9ZshdB3210w==", - "dependencies": { - "@aws-crypto/util": "^3.0.0", - "@aws-sdk/types": "^3.222.0", - "tslib": "^1.11.1" - } - }, - "node_modules/@aws-crypto/crc32c/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" - }, - "node_modules/@aws-crypto/ie11-detection": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@aws-crypto/ie11-detection/-/ie11-detection-3.0.0.tgz", - "integrity": "sha512-341lBBkiY1DfDNKai/wXM3aujNBkXR7tq1URPQDL9wi3AUbI80NR74uF1TXHMm7po1AcnFk8iu2S2IeU/+/A+Q==", - "dependencies": { - "tslib": "^1.11.1" - } - }, - "node_modules/@aws-crypto/ie11-detection/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" - }, - "node_modules/@aws-crypto/sha1-browser": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@aws-crypto/sha1-browser/-/sha1-browser-3.0.0.tgz", - "integrity": "sha512-NJth5c997GLHs6nOYTzFKTbYdMNA6/1XlKVgnZoaZcQ7z7UJlOgj2JdbHE8tiYLS3fzXNCguct77SPGat2raSw==", - "dependencies": { - "@aws-crypto/ie11-detection": "^3.0.0", - "@aws-crypto/supports-web-crypto": "^3.0.0", - "@aws-crypto/util": "^3.0.0", - "@aws-sdk/types": "^3.222.0", - "@aws-sdk/util-locate-window": "^3.0.0", - "@aws-sdk/util-utf8-browser": "^3.0.0", - "tslib": "^1.11.1" - } - }, - "node_modules/@aws-crypto/sha1-browser/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" - }, - "node_modules/@aws-crypto/sha256-browser": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@aws-crypto/sha256-browser/-/sha256-browser-3.0.0.tgz", - "integrity": "sha512-8VLmW2B+gjFbU5uMeqtQM6Nj0/F1bro80xQXCW6CQBWgosFWXTx77aeOF5CAIAmbOK64SdMBJdNr6J41yP5mvQ==", - "dependencies": { - "@aws-crypto/ie11-detection": "^3.0.0", - "@aws-crypto/sha256-js": "^3.0.0", - "@aws-crypto/supports-web-crypto": "^3.0.0", - "@aws-crypto/util": "^3.0.0", - "@aws-sdk/types": "^3.222.0", - "@aws-sdk/util-locate-window": "^3.0.0", - "@aws-sdk/util-utf8-browser": "^3.0.0", - "tslib": "^1.11.1" - } - }, - "node_modules/@aws-crypto/sha256-browser/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" - }, - "node_modules/@aws-crypto/sha256-js": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@aws-crypto/sha256-js/-/sha256-js-3.0.0.tgz", - "integrity": "sha512-PnNN7os0+yd1XvXAy23CFOmTbMaDxgxXtTKHybrJ39Y8kGzBATgBFibWJKH6BhytLI/Zyszs87xCOBNyBig6vQ==", - "dependencies": { - "@aws-crypto/util": "^3.0.0", - "@aws-sdk/types": "^3.222.0", - "tslib": "^1.11.1" - } - }, - "node_modules/@aws-crypto/sha256-js/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" - }, - "node_modules/@aws-crypto/supports-web-crypto": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@aws-crypto/supports-web-crypto/-/supports-web-crypto-3.0.0.tgz", - "integrity": "sha512-06hBdMwUAb2WFTuGG73LSC0wfPu93xWwo5vL2et9eymgmu3Id5vFAHBbajVWiGhPO37qcsdCap/FqXvJGJWPIg==", - "dependencies": { - "tslib": "^1.11.1" - } - }, - "node_modules/@aws-crypto/supports-web-crypto/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" - }, - "node_modules/@aws-crypto/util": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@aws-crypto/util/-/util-3.0.0.tgz", - "integrity": "sha512-2OJlpeJpCR48CC8r+uKVChzs9Iungj9wkZrl8Z041DWEWvyIHILYKCPNzJghKsivj+S3mLo6BVc7mBNzdxA46w==", - "dependencies": { - "@aws-sdk/types": "^3.222.0", - "@aws-sdk/util-utf8-browser": "^3.0.0", - "tslib": "^1.11.1" - } - }, - "node_modules/@aws-crypto/util/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" - }, - "node_modules/@aws-sdk/chunked-blob-reader": { - "version": "3.310.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/chunked-blob-reader/-/chunked-blob-reader-3.310.0.tgz", - "integrity": "sha512-CrJS3exo4mWaLnWxfCH+w88Ou0IcAZSIkk4QbmxiHl/5Dq705OLoxf4385MVyExpqpeVJYOYQ2WaD8i/pQZ2fg==", - "dependencies": { - "tslib": "^2.5.0" - } - }, - "node_modules/@aws-sdk/chunked-blob-reader-native": { - "version": "3.310.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/chunked-blob-reader-native/-/chunked-blob-reader-native-3.310.0.tgz", - "integrity": "sha512-RuhyUY9hCd6KWA2DMF/U6rilYLLRYrDY6e0lq3Of1yzSRFxi4bk9ZMCF0mxf/9ppsB5eudUjrOypYgm6Axt3zw==", - "dependencies": { - "@aws-sdk/util-base64": "3.310.0", - "tslib": "^2.5.0" - } - }, - "node_modules/@aws-sdk/client-cognito-identity": { - "version": "3.363.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-cognito-identity/-/client-cognito-identity-3.363.0.tgz", - "integrity": "sha512-tsJzgBSCpna85IVsuS7FBIK9wkSl7fs8TJ/QzapIgu8rKss0ySHVO6TeMVAdw2BvaQl7CxU9c3PosjhLWHu6KQ==", - "dependencies": { - "@aws-crypto/sha256-browser": "3.0.0", - "@aws-crypto/sha256-js": "3.0.0", - "@aws-sdk/client-sts": "3.363.0", - "@aws-sdk/credential-provider-node": "3.363.0", - "@aws-sdk/middleware-host-header": "3.363.0", - "@aws-sdk/middleware-logger": "3.363.0", - "@aws-sdk/middleware-recursion-detection": "3.363.0", - "@aws-sdk/middleware-signing": "3.363.0", - "@aws-sdk/middleware-user-agent": "3.363.0", - "@aws-sdk/types": "3.357.0", - "@aws-sdk/util-endpoints": "3.357.0", - "@aws-sdk/util-user-agent-browser": "3.363.0", - "@aws-sdk/util-user-agent-node": "3.363.0", - "@smithy/config-resolver": "^1.0.1", - "@smithy/fetch-http-handler": "^1.0.1", - "@smithy/hash-node": "^1.0.1", - "@smithy/invalid-dependency": "^1.0.1", - "@smithy/middleware-content-length": "^1.0.1", - "@smithy/middleware-endpoint": "^1.0.1", - "@smithy/middleware-retry": "^1.0.2", - "@smithy/middleware-serde": "^1.0.1", - "@smithy/middleware-stack": "^1.0.1", - "@smithy/node-config-provider": "^1.0.1", - "@smithy/node-http-handler": "^1.0.2", - "@smithy/protocol-http": "^1.0.1", - "@smithy/smithy-client": "^1.0.3", - "@smithy/types": "^1.0.0", - "@smithy/url-parser": "^1.0.1", - "@smithy/util-base64": "^1.0.1", - "@smithy/util-body-length-browser": "^1.0.1", - "@smithy/util-body-length-node": "^1.0.1", - "@smithy/util-defaults-mode-browser": "^1.0.1", - "@smithy/util-defaults-mode-node": "^1.0.1", - "@smithy/util-retry": "^1.0.2", - "@smithy/util-utf8": "^1.0.1", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/client-cognito-identity/node_modules/@aws-sdk/types": { - "version": "3.357.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.357.0.tgz", - "integrity": "sha512-/riCRaXg3p71BeWnShrai0y0QTdXcouPSM0Cn1olZbzTf7s71aLEewrc96qFrL70XhY4XvnxMpqQh+r43XIL3g==", - "dependencies": { - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/client-personalize": { - "version": "3.363.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-personalize/-/client-personalize-3.363.0.tgz", - "integrity": "sha512-SZ9QO3LLuIiAvT28F2Qo7ImbmAvedticrDMoFpvVQB2TJ/NR0wzu33udMqN4ZCy8bUY9eG1mhdo35YAhzVgjBQ==", - "dependencies": { - "@aws-crypto/sha256-browser": "3.0.0", - "@aws-crypto/sha256-js": "3.0.0", - "@aws-sdk/client-sts": "3.363.0", - "@aws-sdk/credential-provider-node": "3.363.0", - "@aws-sdk/middleware-host-header": "3.363.0", - "@aws-sdk/middleware-logger": "3.363.0", - "@aws-sdk/middleware-recursion-detection": "3.363.0", - "@aws-sdk/middleware-signing": "3.363.0", - "@aws-sdk/middleware-user-agent": "3.363.0", - "@aws-sdk/types": "3.357.0", - "@aws-sdk/util-endpoints": "3.357.0", - "@aws-sdk/util-user-agent-browser": "3.363.0", - "@aws-sdk/util-user-agent-node": "3.363.0", - "@smithy/config-resolver": "^1.0.1", - "@smithy/fetch-http-handler": "^1.0.1", - "@smithy/hash-node": "^1.0.1", - "@smithy/invalid-dependency": "^1.0.1", - "@smithy/middleware-content-length": "^1.0.1", - "@smithy/middleware-endpoint": "^1.0.1", - "@smithy/middleware-retry": "^1.0.2", - "@smithy/middleware-serde": "^1.0.1", - "@smithy/middleware-stack": "^1.0.1", - "@smithy/node-config-provider": "^1.0.1", - "@smithy/node-http-handler": "^1.0.2", - "@smithy/protocol-http": "^1.0.1", - "@smithy/smithy-client": "^1.0.3", - "@smithy/types": "^1.0.0", - "@smithy/url-parser": "^1.0.1", - "@smithy/util-base64": "^1.0.1", - "@smithy/util-body-length-browser": "^1.0.1", - "@smithy/util-body-length-node": "^1.0.1", - "@smithy/util-defaults-mode-browser": "^1.0.1", - "@smithy/util-defaults-mode-node": "^1.0.1", - "@smithy/util-retry": "^1.0.2", - "@smithy/util-utf8": "^1.0.1", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/client-personalize/node_modules/@aws-sdk/types": { - "version": "3.357.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.357.0.tgz", - "integrity": "sha512-/riCRaXg3p71BeWnShrai0y0QTdXcouPSM0Cn1olZbzTf7s71aLEewrc96qFrL70XhY4XvnxMpqQh+r43XIL3g==", - "dependencies": { - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/client-s3": { - "version": "3.370.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-s3/-/client-s3-3.370.0.tgz", - "integrity": "sha512-+b53hI+C+tIiE6OhIvaUXD5qC0zFrCWIu6EKT597W+4XzfFIZE0BGgolP8pC1lLDghPjCFSmAm9Efcb2a1sPvw==", - "dependencies": { - "@aws-crypto/sha1-browser": "3.0.0", - "@aws-crypto/sha256-browser": "3.0.0", - "@aws-crypto/sha256-js": "3.0.0", - "@aws-sdk/client-sts": "3.370.0", - "@aws-sdk/credential-provider-node": "3.370.0", - "@aws-sdk/hash-blob-browser": "3.370.0", - "@aws-sdk/hash-stream-node": "3.370.0", - "@aws-sdk/md5-js": "3.370.0", - "@aws-sdk/middleware-bucket-endpoint": "3.370.0", - "@aws-sdk/middleware-expect-continue": "3.370.0", - "@aws-sdk/middleware-flexible-checksums": "3.370.0", - "@aws-sdk/middleware-host-header": "3.370.0", - "@aws-sdk/middleware-location-constraint": "3.370.0", - "@aws-sdk/middleware-logger": "3.370.0", - "@aws-sdk/middleware-recursion-detection": "3.370.0", - "@aws-sdk/middleware-sdk-s3": "3.370.0", - "@aws-sdk/middleware-signing": "3.370.0", - "@aws-sdk/middleware-ssec": "3.370.0", - "@aws-sdk/middleware-user-agent": "3.370.0", - "@aws-sdk/signature-v4-multi-region": "3.370.0", - "@aws-sdk/types": "3.370.0", - "@aws-sdk/util-endpoints": "3.370.0", - "@aws-sdk/util-user-agent-browser": "3.370.0", - "@aws-sdk/util-user-agent-node": "3.370.0", - "@aws-sdk/xml-builder": "3.310.0", - "@smithy/config-resolver": "^1.0.1", - "@smithy/eventstream-serde-browser": "^1.0.1", - "@smithy/eventstream-serde-config-resolver": "^1.0.1", - "@smithy/eventstream-serde-node": "^1.0.1", - "@smithy/fetch-http-handler": "^1.0.1", - "@smithy/hash-node": "^1.0.1", - "@smithy/invalid-dependency": "^1.0.1", - "@smithy/middleware-content-length": "^1.0.1", - "@smithy/middleware-endpoint": "^1.0.2", - "@smithy/middleware-retry": "^1.0.3", - "@smithy/middleware-serde": "^1.0.1", - "@smithy/middleware-stack": "^1.0.1", - "@smithy/node-config-provider": "^1.0.1", - "@smithy/node-http-handler": "^1.0.2", - "@smithy/protocol-http": "^1.1.0", - "@smithy/smithy-client": "^1.0.3", - "@smithy/types": "^1.1.0", - "@smithy/url-parser": "^1.0.1", - "@smithy/util-base64": "^1.0.1", - "@smithy/util-body-length-browser": "^1.0.1", - "@smithy/util-body-length-node": "^1.0.1", - "@smithy/util-defaults-mode-browser": "^1.0.1", - "@smithy/util-defaults-mode-node": "^1.0.1", - "@smithy/util-retry": "^1.0.3", - "@smithy/util-stream": "^1.0.1", - "@smithy/util-utf8": "^1.0.1", - "@smithy/util-waiter": "^1.0.1", - "fast-xml-parser": "4.2.5", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/client-s3/node_modules/@aws-sdk/client-sso": { - "version": "3.370.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso/-/client-sso-3.370.0.tgz", - "integrity": "sha512-0Ty1iHuzNxMQtN7nahgkZr4Wcu1XvqGfrQniiGdKKif9jG/4elxsQPiydRuQpFqN6b+bg7wPP7crFP1uTxx2KQ==", - "dependencies": { - "@aws-crypto/sha256-browser": "3.0.0", - "@aws-crypto/sha256-js": "3.0.0", - "@aws-sdk/middleware-host-header": "3.370.0", - "@aws-sdk/middleware-logger": "3.370.0", - "@aws-sdk/middleware-recursion-detection": "3.370.0", - "@aws-sdk/middleware-user-agent": "3.370.0", - "@aws-sdk/types": "3.370.0", - "@aws-sdk/util-endpoints": "3.370.0", - "@aws-sdk/util-user-agent-browser": "3.370.0", - "@aws-sdk/util-user-agent-node": "3.370.0", - "@smithy/config-resolver": "^1.0.1", - "@smithy/fetch-http-handler": "^1.0.1", - "@smithy/hash-node": "^1.0.1", - "@smithy/invalid-dependency": "^1.0.1", - "@smithy/middleware-content-length": "^1.0.1", - "@smithy/middleware-endpoint": "^1.0.2", - "@smithy/middleware-retry": "^1.0.3", - "@smithy/middleware-serde": "^1.0.1", - "@smithy/middleware-stack": "^1.0.1", - "@smithy/node-config-provider": "^1.0.1", - "@smithy/node-http-handler": "^1.0.2", - "@smithy/protocol-http": "^1.1.0", - "@smithy/smithy-client": "^1.0.3", - "@smithy/types": "^1.1.0", - "@smithy/url-parser": "^1.0.1", - "@smithy/util-base64": "^1.0.1", - "@smithy/util-body-length-browser": "^1.0.1", - "@smithy/util-body-length-node": "^1.0.1", - "@smithy/util-defaults-mode-browser": "^1.0.1", - "@smithy/util-defaults-mode-node": "^1.0.1", - "@smithy/util-retry": "^1.0.3", - "@smithy/util-utf8": "^1.0.1", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/client-s3/node_modules/@aws-sdk/client-sso-oidc": { - "version": "3.370.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso-oidc/-/client-sso-oidc-3.370.0.tgz", - "integrity": "sha512-jAYOO74lmVXylQylqkPrjLzxvUnMKw476JCUTvCO6Q8nv3LzCWd76Ihgv/m9Q4M2Tbqi1iP2roVK5bstsXzEjA==", - "dependencies": { - "@aws-crypto/sha256-browser": "3.0.0", - "@aws-crypto/sha256-js": "3.0.0", - "@aws-sdk/middleware-host-header": "3.370.0", - "@aws-sdk/middleware-logger": "3.370.0", - "@aws-sdk/middleware-recursion-detection": "3.370.0", - "@aws-sdk/middleware-user-agent": "3.370.0", - "@aws-sdk/types": "3.370.0", - "@aws-sdk/util-endpoints": "3.370.0", - "@aws-sdk/util-user-agent-browser": "3.370.0", - "@aws-sdk/util-user-agent-node": "3.370.0", - "@smithy/config-resolver": "^1.0.1", - "@smithy/fetch-http-handler": "^1.0.1", - "@smithy/hash-node": "^1.0.1", - "@smithy/invalid-dependency": "^1.0.1", - "@smithy/middleware-content-length": "^1.0.1", - "@smithy/middleware-endpoint": "^1.0.2", - "@smithy/middleware-retry": "^1.0.3", - "@smithy/middleware-serde": "^1.0.1", - "@smithy/middleware-stack": "^1.0.1", - "@smithy/node-config-provider": "^1.0.1", - "@smithy/node-http-handler": "^1.0.2", - "@smithy/protocol-http": "^1.1.0", - "@smithy/smithy-client": "^1.0.3", - "@smithy/types": "^1.1.0", - "@smithy/url-parser": "^1.0.1", - "@smithy/util-base64": "^1.0.1", - "@smithy/util-body-length-browser": "^1.0.1", - "@smithy/util-body-length-node": "^1.0.1", - "@smithy/util-defaults-mode-browser": "^1.0.1", - "@smithy/util-defaults-mode-node": "^1.0.1", - "@smithy/util-retry": "^1.0.3", - "@smithy/util-utf8": "^1.0.1", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/client-s3/node_modules/@aws-sdk/client-sts": { - "version": "3.370.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-sts/-/client-sts-3.370.0.tgz", - "integrity": "sha512-utFxOPWIzbN+3kc415Je2o4J72hOLNhgR2Gt5EnRSggC3yOnkC4GzauxG8n7n5gZGBX45eyubHyPOXLOIyoqQA==", - "dependencies": { - "@aws-crypto/sha256-browser": "3.0.0", - "@aws-crypto/sha256-js": "3.0.0", - "@aws-sdk/credential-provider-node": "3.370.0", - "@aws-sdk/middleware-host-header": "3.370.0", - "@aws-sdk/middleware-logger": "3.370.0", - "@aws-sdk/middleware-recursion-detection": "3.370.0", - "@aws-sdk/middleware-sdk-sts": "3.370.0", - "@aws-sdk/middleware-signing": "3.370.0", - "@aws-sdk/middleware-user-agent": "3.370.0", - "@aws-sdk/types": "3.370.0", - "@aws-sdk/util-endpoints": "3.370.0", - "@aws-sdk/util-user-agent-browser": "3.370.0", - "@aws-sdk/util-user-agent-node": "3.370.0", - "@smithy/config-resolver": "^1.0.1", - "@smithy/fetch-http-handler": "^1.0.1", - "@smithy/hash-node": "^1.0.1", - "@smithy/invalid-dependency": "^1.0.1", - "@smithy/middleware-content-length": "^1.0.1", - "@smithy/middleware-endpoint": "^1.0.2", - "@smithy/middleware-retry": "^1.0.3", - "@smithy/middleware-serde": "^1.0.1", - "@smithy/middleware-stack": "^1.0.1", - "@smithy/node-config-provider": "^1.0.1", - "@smithy/node-http-handler": "^1.0.2", - "@smithy/protocol-http": "^1.1.0", - "@smithy/smithy-client": "^1.0.3", - "@smithy/types": "^1.1.0", - "@smithy/url-parser": "^1.0.1", - "@smithy/util-base64": "^1.0.1", - "@smithy/util-body-length-browser": "^1.0.1", - "@smithy/util-body-length-node": "^1.0.1", - "@smithy/util-defaults-mode-browser": "^1.0.1", - "@smithy/util-defaults-mode-node": "^1.0.1", - "@smithy/util-retry": "^1.0.3", - "@smithy/util-utf8": "^1.0.1", - "fast-xml-parser": "4.2.5", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/client-s3/node_modules/@aws-sdk/credential-provider-env": { - "version": "3.370.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-env/-/credential-provider-env-3.370.0.tgz", - "integrity": "sha512-raR3yP/4GGbKFRPP5hUBNkEmTnzxI9mEc2vJAJrcv4G4J4i/UP6ELiLInQ5eO2/VcV/CeKGZA3t7d1tsJ+jhCg==", - "dependencies": { - "@aws-sdk/types": "3.370.0", - "@smithy/property-provider": "^1.0.1", - "@smithy/types": "^1.1.0", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/client-s3/node_modules/@aws-sdk/credential-provider-ini": { - "version": "3.370.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.370.0.tgz", - "integrity": "sha512-eJyapFKa4NrC9RfTgxlXnXfS9InG/QMEUPPVL+VhG7YS6nKqetC1digOYgivnEeu+XSKE0DJ7uZuXujN2Y7VAQ==", - "dependencies": { - "@aws-sdk/credential-provider-env": "3.370.0", - "@aws-sdk/credential-provider-process": "3.370.0", - "@aws-sdk/credential-provider-sso": "3.370.0", - "@aws-sdk/credential-provider-web-identity": "3.370.0", - "@aws-sdk/types": "3.370.0", - "@smithy/credential-provider-imds": "^1.0.1", - "@smithy/property-provider": "^1.0.1", - "@smithy/shared-ini-file-loader": "^1.0.1", - "@smithy/types": "^1.1.0", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/client-s3/node_modules/@aws-sdk/credential-provider-node": { - "version": "3.370.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.370.0.tgz", - "integrity": "sha512-gkFiotBFKE4Fcn8CzQnMeab9TAR06FEAD02T4ZRYW1xGrBJOowmje9dKqdwQFHSPgnWAP+8HoTA8iwbhTLvjNA==", - "dependencies": { - "@aws-sdk/credential-provider-env": "3.370.0", - "@aws-sdk/credential-provider-ini": "3.370.0", - "@aws-sdk/credential-provider-process": "3.370.0", - "@aws-sdk/credential-provider-sso": "3.370.0", - "@aws-sdk/credential-provider-web-identity": "3.370.0", - "@aws-sdk/types": "3.370.0", - "@smithy/credential-provider-imds": "^1.0.1", - "@smithy/property-provider": "^1.0.1", - "@smithy/shared-ini-file-loader": "^1.0.1", - "@smithy/types": "^1.1.0", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/client-s3/node_modules/@aws-sdk/credential-provider-process": { - "version": "3.370.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-process/-/credential-provider-process-3.370.0.tgz", - "integrity": "sha512-0BKFFZmUO779Xdw3u7wWnoWhYA4zygxJbgGVSyjkOGBvdkbPSTTcdwT1KFkaQy2kOXYeZPl+usVVRXs+ph4ejg==", - "dependencies": { - "@aws-sdk/types": "3.370.0", - "@smithy/property-provider": "^1.0.1", - "@smithy/shared-ini-file-loader": "^1.0.1", - "@smithy/types": "^1.1.0", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/client-s3/node_modules/@aws-sdk/credential-provider-sso": { - "version": "3.370.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.370.0.tgz", - "integrity": "sha512-PFroYm5hcPSfC/jkZnCI34QFL3I7WVKveVk6/F3fud/cnP8hp6YjA9NiTNbqdFSzsyoiN/+e5fZgNKih8vVPTA==", - "dependencies": { - "@aws-sdk/client-sso": "3.370.0", - "@aws-sdk/token-providers": "3.370.0", - "@aws-sdk/types": "3.370.0", - "@smithy/property-provider": "^1.0.1", - "@smithy/shared-ini-file-loader": "^1.0.1", - "@smithy/types": "^1.1.0", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/client-s3/node_modules/@aws-sdk/credential-provider-web-identity": { - "version": "3.370.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.370.0.tgz", - "integrity": "sha512-CFaBMLRudwhjv1sDzybNV93IaT85IwS+L8Wq6VRMa0mro1q9rrWsIZO811eF+k0NEPfgU1dLH+8Vc2qhw4SARQ==", - "dependencies": { - "@aws-sdk/types": "3.370.0", - "@smithy/property-provider": "^1.0.1", - "@smithy/types": "^1.1.0", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/client-s3/node_modules/@aws-sdk/middleware-host-header": { - "version": "3.370.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-host-header/-/middleware-host-header-3.370.0.tgz", - "integrity": "sha512-CPXOm/TnOFC7KyXcJglICC7OiA7Kj6mT3ChvEijr56TFOueNHvJdV4aNIFEQy0vGHOWtY12qOWLNto/wYR1BAQ==", - "dependencies": { - "@aws-sdk/types": "3.370.0", - "@smithy/protocol-http": "^1.1.0", - "@smithy/types": "^1.1.0", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/client-s3/node_modules/@aws-sdk/middleware-logger": { - "version": "3.370.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-logger/-/middleware-logger-3.370.0.tgz", - "integrity": "sha512-cQMq9SaZ/ORmTJPCT6VzMML7OxFdQzNkhMAgKpTDl+tdPWynlHF29E5xGoSzROnThHlQPCjogU0NZ8AxI0SWPA==", - "dependencies": { - "@aws-sdk/types": "3.370.0", - "@smithy/types": "^1.1.0", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/client-s3/node_modules/@aws-sdk/middleware-recursion-detection": { - "version": "3.370.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.370.0.tgz", - "integrity": "sha512-L7ZF/w0lAAY/GK1khT8VdoU0XB7nWHk51rl/ecAg64J70dHnMOAg8n+5FZ9fBu/xH1FwUlHOkwlodJOgzLJjtg==", - "dependencies": { - "@aws-sdk/types": "3.370.0", - "@smithy/protocol-http": "^1.1.0", - "@smithy/types": "^1.1.0", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/client-s3/node_modules/@aws-sdk/middleware-sdk-sts": { - "version": "3.370.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-sdk-sts/-/middleware-sdk-sts-3.370.0.tgz", - "integrity": "sha512-ykbsoVy0AJtVbuhAlTAMcaz/tCE3pT8nAp0L7CQQxSoanRCvOux7au0KwMIQVhxgnYid4dWVF6d00SkqU5MXRA==", - "dependencies": { - "@aws-sdk/middleware-signing": "3.370.0", - "@aws-sdk/types": "3.370.0", - "@smithy/types": "^1.1.0", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/client-s3/node_modules/@aws-sdk/middleware-signing": { - "version": "3.370.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-signing/-/middleware-signing-3.370.0.tgz", - "integrity": "sha512-Dwr/RTCWOXdm394wCwICGT2VNOTMRe4IGPsBRJAsM24pm+EEqQzSS3Xu/U/zF4exuxqpMta4wec4QpSarPNTxA==", - "dependencies": { - "@aws-sdk/types": "3.370.0", - "@smithy/property-provider": "^1.0.1", - "@smithy/protocol-http": "^1.1.0", - "@smithy/signature-v4": "^1.0.1", - "@smithy/types": "^1.1.0", - "@smithy/util-middleware": "^1.0.1", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/client-s3/node_modules/@aws-sdk/middleware-user-agent": { - "version": "3.370.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.370.0.tgz", - "integrity": "sha512-2+3SB6MtMAq1+gVXhw0Y3ONXuljorh6ijnxgTpv+uQnBW5jHCUiAS8WDYiDEm7i9euJPbvJfM8WUrSMDMU6Cog==", - "dependencies": { - "@aws-sdk/types": "3.370.0", - "@aws-sdk/util-endpoints": "3.370.0", - "@smithy/protocol-http": "^1.1.0", - "@smithy/types": "^1.1.0", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/client-s3/node_modules/@aws-sdk/token-providers": { - "version": "3.370.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/token-providers/-/token-providers-3.370.0.tgz", - "integrity": "sha512-EyR2ZYr+lJeRiZU2/eLR+mlYU9RXLQvNyGFSAekJKgN13Rpq/h0syzXVFLP/RSod/oZenh/fhVZ2HwlZxuGBtQ==", - "dependencies": { - "@aws-sdk/client-sso-oidc": "3.370.0", - "@aws-sdk/types": "3.370.0", - "@smithy/property-provider": "^1.0.1", - "@smithy/shared-ini-file-loader": "^1.0.1", - "@smithy/types": "^1.1.0", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/client-s3/node_modules/@aws-sdk/util-endpoints": { - "version": "3.370.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-endpoints/-/util-endpoints-3.370.0.tgz", - "integrity": "sha512-5ltVAnM79nRlywwzZN5i8Jp4tk245OCGkKwwXbnDU+gq7zT3CIOsct1wNZvmpfZEPGt/bv7/NyRcjP+7XNsX/g==", - "dependencies": { - "@aws-sdk/types": "3.370.0", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/client-s3/node_modules/@aws-sdk/util-user-agent-browser": { - "version": "3.370.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.370.0.tgz", - "integrity": "sha512-028LxYZMQ0DANKhW+AKFQslkScZUeYlPmSphrCIXgdIItRZh6ZJHGzE7J/jDsEntZOrZJsjI4z0zZ5W2idj04w==", - "dependencies": { - "@aws-sdk/types": "3.370.0", - "@smithy/types": "^1.1.0", - "bowser": "^2.11.0", - "tslib": "^2.5.0" - } - }, - "node_modules/@aws-sdk/client-s3/node_modules/@aws-sdk/util-user-agent-node": { - "version": "3.370.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.370.0.tgz", - "integrity": "sha512-33vxZUp8vxTT/DGYIR3PivQm07sSRGWI+4fCv63Rt7Q++fO24E0kQtmVAlikRY810I10poD6rwILVtITtFSzkg==", - "dependencies": { - "@aws-sdk/types": "3.370.0", - "@smithy/node-config-provider": "^1.0.1", - "@smithy/types": "^1.1.0", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - }, - "peerDependencies": { - "aws-crt": ">=1.0.0" - }, - "peerDependenciesMeta": { - "aws-crt": { - "optional": true - } - } - }, - "node_modules/@aws-sdk/client-sso": { - "version": "3.363.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso/-/client-sso-3.363.0.tgz", - "integrity": "sha512-PZ+HfKSgS4hlMnJzG+Ev8/mgHd/b/ETlJWPSWjC/f2NwVoBQkBnqHjdyEx7QjF6nksJozcVh5Q+kkYLKc/QwBQ==", - "dependencies": { - "@aws-crypto/sha256-browser": "3.0.0", - "@aws-crypto/sha256-js": "3.0.0", - "@aws-sdk/middleware-host-header": "3.363.0", - "@aws-sdk/middleware-logger": "3.363.0", - "@aws-sdk/middleware-recursion-detection": "3.363.0", - "@aws-sdk/middleware-user-agent": "3.363.0", - "@aws-sdk/types": "3.357.0", - "@aws-sdk/util-endpoints": "3.357.0", - "@aws-sdk/util-user-agent-browser": "3.363.0", - "@aws-sdk/util-user-agent-node": "3.363.0", - "@smithy/config-resolver": "^1.0.1", - "@smithy/fetch-http-handler": "^1.0.1", - "@smithy/hash-node": "^1.0.1", - "@smithy/invalid-dependency": "^1.0.1", - "@smithy/middleware-content-length": "^1.0.1", - "@smithy/middleware-endpoint": "^1.0.1", - "@smithy/middleware-retry": "^1.0.2", - "@smithy/middleware-serde": "^1.0.1", - "@smithy/middleware-stack": "^1.0.1", - "@smithy/node-config-provider": "^1.0.1", - "@smithy/node-http-handler": "^1.0.2", - "@smithy/protocol-http": "^1.0.1", - "@smithy/smithy-client": "^1.0.3", - "@smithy/types": "^1.0.0", - "@smithy/url-parser": "^1.0.1", - "@smithy/util-base64": "^1.0.1", - "@smithy/util-body-length-browser": "^1.0.1", - "@smithy/util-body-length-node": "^1.0.1", - "@smithy/util-defaults-mode-browser": "^1.0.1", - "@smithy/util-defaults-mode-node": "^1.0.1", - "@smithy/util-retry": "^1.0.2", - "@smithy/util-utf8": "^1.0.1", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/client-sso-oidc": { - "version": "3.363.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso-oidc/-/client-sso-oidc-3.363.0.tgz", - "integrity": "sha512-V3Ebiq/zNtDS/O92HUWGBa7MY59RYSsqWd+E0XrXv6VYTA00RlMTbNcseivNgp2UghOgB9a20Nkz6EqAeIN+RQ==", - "dependencies": { - "@aws-crypto/sha256-browser": "3.0.0", - "@aws-crypto/sha256-js": "3.0.0", - "@aws-sdk/middleware-host-header": "3.363.0", - "@aws-sdk/middleware-logger": "3.363.0", - "@aws-sdk/middleware-recursion-detection": "3.363.0", - "@aws-sdk/middleware-user-agent": "3.363.0", - "@aws-sdk/types": "3.357.0", - "@aws-sdk/util-endpoints": "3.357.0", - "@aws-sdk/util-user-agent-browser": "3.363.0", - "@aws-sdk/util-user-agent-node": "3.363.0", - "@smithy/config-resolver": "^1.0.1", - "@smithy/fetch-http-handler": "^1.0.1", - "@smithy/hash-node": "^1.0.1", - "@smithy/invalid-dependency": "^1.0.1", - "@smithy/middleware-content-length": "^1.0.1", - "@smithy/middleware-endpoint": "^1.0.1", - "@smithy/middleware-retry": "^1.0.2", - "@smithy/middleware-serde": "^1.0.1", - "@smithy/middleware-stack": "^1.0.1", - "@smithy/node-config-provider": "^1.0.1", - "@smithy/node-http-handler": "^1.0.2", - "@smithy/protocol-http": "^1.0.1", - "@smithy/smithy-client": "^1.0.3", - "@smithy/types": "^1.0.0", - "@smithy/url-parser": "^1.0.1", - "@smithy/util-base64": "^1.0.1", - "@smithy/util-body-length-browser": "^1.0.1", - "@smithy/util-body-length-node": "^1.0.1", - "@smithy/util-defaults-mode-browser": "^1.0.1", - "@smithy/util-defaults-mode-node": "^1.0.1", - "@smithy/util-retry": "^1.0.2", - "@smithy/util-utf8": "^1.0.1", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/client-sso-oidc/node_modules/@aws-sdk/types": { - "version": "3.357.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.357.0.tgz", - "integrity": "sha512-/riCRaXg3p71BeWnShrai0y0QTdXcouPSM0Cn1olZbzTf7s71aLEewrc96qFrL70XhY4XvnxMpqQh+r43XIL3g==", - "dependencies": { - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/client-sso/node_modules/@aws-sdk/types": { - "version": "3.357.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.357.0.tgz", - "integrity": "sha512-/riCRaXg3p71BeWnShrai0y0QTdXcouPSM0Cn1olZbzTf7s71aLEewrc96qFrL70XhY4XvnxMpqQh+r43XIL3g==", - "dependencies": { - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/client-sts": { - "version": "3.363.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-sts/-/client-sts-3.363.0.tgz", - "integrity": "sha512-0jj14WvBPJQ8xr72cL0mhlmQ90tF0O0wqXwSbtog6PsC8+KDE6Yf+WsxsumyI8E5O8u3eYijBL+KdqG07F/y/w==", - "dependencies": { - "@aws-crypto/sha256-browser": "3.0.0", - "@aws-crypto/sha256-js": "3.0.0", - "@aws-sdk/credential-provider-node": "3.363.0", - "@aws-sdk/middleware-host-header": "3.363.0", - "@aws-sdk/middleware-logger": "3.363.0", - "@aws-sdk/middleware-recursion-detection": "3.363.0", - "@aws-sdk/middleware-sdk-sts": "3.363.0", - "@aws-sdk/middleware-signing": "3.363.0", - "@aws-sdk/middleware-user-agent": "3.363.0", - "@aws-sdk/types": "3.357.0", - "@aws-sdk/util-endpoints": "3.357.0", - "@aws-sdk/util-user-agent-browser": "3.363.0", - "@aws-sdk/util-user-agent-node": "3.363.0", - "@smithy/config-resolver": "^1.0.1", - "@smithy/fetch-http-handler": "^1.0.1", - "@smithy/hash-node": "^1.0.1", - "@smithy/invalid-dependency": "^1.0.1", - "@smithy/middleware-content-length": "^1.0.1", - "@smithy/middleware-endpoint": "^1.0.1", - "@smithy/middleware-retry": "^1.0.1", - "@smithy/middleware-serde": "^1.0.1", - "@smithy/middleware-stack": "^1.0.1", - "@smithy/node-config-provider": "^1.0.1", - "@smithy/node-http-handler": "^1.0.1", - "@smithy/protocol-http": "^1.1.0", - "@smithy/smithy-client": "^1.0.2", - "@smithy/types": "^1.1.0", - "@smithy/url-parser": "^1.0.1", - "@smithy/util-base64": "^1.0.1", - "@smithy/util-body-length-browser": "^1.0.1", - "@smithy/util-body-length-node": "^1.0.1", - "@smithy/util-defaults-mode-browser": "^1.0.1", - "@smithy/util-defaults-mode-node": "^1.0.1", - "@smithy/util-retry": "^1.0.1", - "@smithy/util-utf8": "^1.0.1", - "fast-xml-parser": "4.2.5", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/client-sts/node_modules/@aws-sdk/types": { - "version": "3.357.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.357.0.tgz", - "integrity": "sha512-/riCRaXg3p71BeWnShrai0y0QTdXcouPSM0Cn1olZbzTf7s71aLEewrc96qFrL70XhY4XvnxMpqQh+r43XIL3g==", - "dependencies": { - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/credential-provider-cognito-identity": { - "version": "3.363.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-cognito-identity/-/credential-provider-cognito-identity-3.363.0.tgz", - "integrity": "sha512-5x42JvqEsBUrm6/qdf0WWe4mlmJjPItxamQhRjuOzeQD/BxsA2W5VS/7n0Ws0e27DNhlnUErcIJd+bBy6j1fqA==", - "dependencies": { - "@aws-sdk/client-cognito-identity": "3.363.0", - "@aws-sdk/types": "3.357.0", - "@smithy/property-provider": "^1.0.1", - "@smithy/types": "^1.1.0", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/credential-provider-cognito-identity/node_modules/@aws-sdk/types": { - "version": "3.357.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.357.0.tgz", - "integrity": "sha512-/riCRaXg3p71BeWnShrai0y0QTdXcouPSM0Cn1olZbzTf7s71aLEewrc96qFrL70XhY4XvnxMpqQh+r43XIL3g==", - "dependencies": { - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/credential-provider-env": { - "version": "3.363.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-env/-/credential-provider-env-3.363.0.tgz", - "integrity": "sha512-VAQ3zITT2Q0acht0HezouYnMFKZ2vIOa20X4zQA3WI0HfaP4D6ga6KaenbDcb/4VFiqfqiRHfdyXHP0ThcDRMA==", - "dependencies": { - "@aws-sdk/types": "3.357.0", - "@smithy/property-provider": "^1.0.1", - "@smithy/types": "^1.1.0", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/credential-provider-env/node_modules/@aws-sdk/types": { - "version": "3.357.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.357.0.tgz", - "integrity": "sha512-/riCRaXg3p71BeWnShrai0y0QTdXcouPSM0Cn1olZbzTf7s71aLEewrc96qFrL70XhY4XvnxMpqQh+r43XIL3g==", - "dependencies": { - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/credential-provider-ini": { - "version": "3.363.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.363.0.tgz", - "integrity": "sha512-ZYN+INoqyX5FVC3rqUxB6O8nOWkr0gHRRBm1suoOlmuFJ/WSlW/uUGthRBY5x1AQQnBF8cpdlxZzGHd41lFVNw==", - "dependencies": { - "@aws-sdk/credential-provider-env": "3.363.0", - "@aws-sdk/credential-provider-process": "3.363.0", - "@aws-sdk/credential-provider-sso": "3.363.0", - "@aws-sdk/credential-provider-web-identity": "3.363.0", - "@aws-sdk/types": "3.357.0", - "@smithy/credential-provider-imds": "^1.0.1", - "@smithy/property-provider": "^1.0.1", - "@smithy/shared-ini-file-loader": "^1.0.1", - "@smithy/types": "^1.1.0", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/credential-provider-ini/node_modules/@aws-sdk/types": { - "version": "3.357.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.357.0.tgz", - "integrity": "sha512-/riCRaXg3p71BeWnShrai0y0QTdXcouPSM0Cn1olZbzTf7s71aLEewrc96qFrL70XhY4XvnxMpqQh+r43XIL3g==", - "dependencies": { - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/credential-provider-node": { - "version": "3.363.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.363.0.tgz", - "integrity": "sha512-C1qXFIN2yMxD6pGgug0vR1UhScOki6VqdzuBHzXZAGu7MOjvgHNdscEcb3CpWnITHaPL2ztkiw75T1sZ7oIgQg==", - "dependencies": { - "@aws-sdk/credential-provider-env": "3.363.0", - "@aws-sdk/credential-provider-ini": "3.363.0", - "@aws-sdk/credential-provider-process": "3.363.0", - "@aws-sdk/credential-provider-sso": "3.363.0", - "@aws-sdk/credential-provider-web-identity": "3.363.0", - "@aws-sdk/types": "3.357.0", - "@smithy/credential-provider-imds": "^1.0.1", - "@smithy/property-provider": "^1.0.1", - "@smithy/shared-ini-file-loader": "^1.0.1", - "@smithy/types": "^1.1.0", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/credential-provider-node/node_modules/@aws-sdk/types": { - "version": "3.357.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.357.0.tgz", - "integrity": "sha512-/riCRaXg3p71BeWnShrai0y0QTdXcouPSM0Cn1olZbzTf7s71aLEewrc96qFrL70XhY4XvnxMpqQh+r43XIL3g==", - "dependencies": { - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/credential-provider-process": { - "version": "3.363.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-process/-/credential-provider-process-3.363.0.tgz", - "integrity": "sha512-fOKAINU7Rtj2T8pP13GdCt+u0Ml3gYynp8ki+1jMZIQ+Ju/MdDOqZpKMFKicMn3Z1ttUOgqr+grUdus6z8ceBQ==", - "dependencies": { - "@aws-sdk/types": "3.357.0", - "@smithy/property-provider": "^1.0.1", - "@smithy/shared-ini-file-loader": "^1.0.1", - "@smithy/types": "^1.1.0", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/credential-provider-process/node_modules/@aws-sdk/types": { - "version": "3.357.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.357.0.tgz", - "integrity": "sha512-/riCRaXg3p71BeWnShrai0y0QTdXcouPSM0Cn1olZbzTf7s71aLEewrc96qFrL70XhY4XvnxMpqQh+r43XIL3g==", - "dependencies": { - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/credential-provider-sso": { - "version": "3.363.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.363.0.tgz", - "integrity": "sha512-5RUZ5oM0lwZSo3EehT0dXggOjgtxFogpT3cZvoLGtIwrPBvm8jOQPXQUlaqCj10ThF1sYltEyukz/ovtDwYGew==", - "dependencies": { - "@aws-sdk/client-sso": "3.363.0", - "@aws-sdk/token-providers": "3.363.0", - "@aws-sdk/types": "3.357.0", - "@smithy/property-provider": "^1.0.1", - "@smithy/shared-ini-file-loader": "^1.0.1", - "@smithy/types": "^1.1.0", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/credential-provider-sso/node_modules/@aws-sdk/types": { - "version": "3.357.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.357.0.tgz", - "integrity": "sha512-/riCRaXg3p71BeWnShrai0y0QTdXcouPSM0Cn1olZbzTf7s71aLEewrc96qFrL70XhY4XvnxMpqQh+r43XIL3g==", - "dependencies": { - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/credential-provider-web-identity": { - "version": "3.363.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.363.0.tgz", - "integrity": "sha512-Z6w7fjgy79pAax580wdixbStQw10xfyZ+hOYLcPudoYFKjoNx0NQBejg5SwBzCF/HQL23Ksm9kDfbXDX9fkPhA==", - "dependencies": { - "@aws-sdk/types": "3.357.0", - "@smithy/property-provider": "^1.0.1", - "@smithy/types": "^1.1.0", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/credential-provider-web-identity/node_modules/@aws-sdk/types": { - "version": "3.357.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.357.0.tgz", - "integrity": "sha512-/riCRaXg3p71BeWnShrai0y0QTdXcouPSM0Cn1olZbzTf7s71aLEewrc96qFrL70XhY4XvnxMpqQh+r43XIL3g==", - "dependencies": { - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/credential-providers": { - "version": "3.363.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-providers/-/credential-providers-3.363.0.tgz", - "integrity": "sha512-hVa1DdYasnLud2EKjDAlDHiV/+H/Zq52chHU00c/R8XwPu1s0kZX3NMmlt0D2HhYqC1mUwtdmE58Jra2POviQQ==", - "dependencies": { - "@aws-sdk/client-cognito-identity": "3.363.0", - "@aws-sdk/client-sso": "3.363.0", - "@aws-sdk/client-sts": "3.363.0", - "@aws-sdk/credential-provider-cognito-identity": "3.363.0", - "@aws-sdk/credential-provider-env": "3.363.0", - "@aws-sdk/credential-provider-ini": "3.363.0", - "@aws-sdk/credential-provider-node": "3.363.0", - "@aws-sdk/credential-provider-process": "3.363.0", - "@aws-sdk/credential-provider-sso": "3.363.0", - "@aws-sdk/credential-provider-web-identity": "3.363.0", - "@aws-sdk/types": "3.357.0", - "@smithy/credential-provider-imds": "^1.0.1", - "@smithy/property-provider": "^1.0.1", - "@smithy/types": "^1.1.0", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/credential-providers/node_modules/@aws-sdk/types": { - "version": "3.357.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.357.0.tgz", - "integrity": "sha512-/riCRaXg3p71BeWnShrai0y0QTdXcouPSM0Cn1olZbzTf7s71aLEewrc96qFrL70XhY4XvnxMpqQh+r43XIL3g==", - "dependencies": { - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/hash-blob-browser": { - "version": "3.370.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/hash-blob-browser/-/hash-blob-browser-3.370.0.tgz", - "integrity": "sha512-DyStaznfloyF9jN3KvG6puOAjt25alXoBNeHBF2FyLlEEbrOqUmso39JB5LVAw2/KB4UmCNsbAXFb6WktX/yHQ==", - "dependencies": { - "@aws-sdk/chunked-blob-reader": "3.310.0", - "@aws-sdk/chunked-blob-reader-native": "3.310.0", - "@aws-sdk/types": "3.370.0", - "tslib": "^2.5.0" - } - }, - "node_modules/@aws-sdk/hash-stream-node": { - "version": "3.370.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/hash-stream-node/-/hash-stream-node-3.370.0.tgz", - "integrity": "sha512-ExsbBiIMiL9AN1VpWlD8+xaO5s0cXUZJC2UONiQbgMb1jz7Wq9fa1GmKUDyaGXOuQTT7DDhAmalb9fIpauZKuA==", - "dependencies": { - "@aws-sdk/types": "3.370.0", - "@aws-sdk/util-utf8": "3.310.0", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/is-array-buffer": { - "version": "3.310.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/is-array-buffer/-/is-array-buffer-3.310.0.tgz", - "integrity": "sha512-urnbcCR+h9NWUnmOtet/s4ghvzsidFmspfhYaHAmSRdy9yDjdjBJMFjjsn85A1ODUktztm+cVncXjQ38WCMjMQ==", - "dependencies": { - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/lib-storage": { - "version": "3.391.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/lib-storage/-/lib-storage-3.391.0.tgz", - "integrity": "sha512-W2TPkYZb5fyq95cgjNXnsCSMI0fo8OzQGnVWBTiBDj1N7Yx1OEBDTkCJf+y08I4YaRBsca4h1p+jsw9EysALug==", - "dependencies": { - "@smithy/abort-controller": "^2.0.1", - "@smithy/middleware-endpoint": "^2.0.3", - "@smithy/smithy-client": "^2.0.3", - "buffer": "5.6.0", - "events": "3.3.0", - "stream-browserify": "3.0.0", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - }, - "peerDependencies": { - "@aws-sdk/client-s3": "^3.0.0" - } - }, - "node_modules/@aws-sdk/lib-storage/node_modules/@smithy/abort-controller": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/@smithy/abort-controller/-/abort-controller-2.0.6.tgz", - "integrity": "sha512-4I7g0lyGUlW2onf8mD76IzU37oRWSHsQ5zlW5MjDzgg4I4J9bOK4500Gx6qOuoN7+GulAnGLe1YwyrIluzhakg==", - "dependencies": { - "@smithy/types": "^2.3.0", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/lib-storage/node_modules/@smithy/fetch-http-handler": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/@smithy/fetch-http-handler/-/fetch-http-handler-2.1.2.tgz", - "integrity": "sha512-3Gm3pQm4viUPU+e7KkRScS9t5phBxSNRS8rQSZ+HeCwK/busrX0/2HJZiwLvGblqPqi1laJB0lD18AdiOioJww==", - "dependencies": { - "@smithy/protocol-http": "^3.0.2", - "@smithy/querystring-builder": "^2.0.6", - "@smithy/types": "^2.3.0", - "@smithy/util-base64": "^2.0.0", - "tslib": "^2.5.0" - } - }, - "node_modules/@aws-sdk/lib-storage/node_modules/@smithy/is-array-buffer": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-2.0.0.tgz", - "integrity": "sha512-z3PjFjMyZNI98JFRJi/U0nGoLWMSJlDjAW4QUX2WNZLas5C0CmVV6LJ01JI0k90l7FvpmixjWxPFmENSClQ7ug==", - "dependencies": { - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/lib-storage/node_modules/@smithy/middleware-endpoint": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/@smithy/middleware-endpoint/-/middleware-endpoint-2.0.6.tgz", - "integrity": "sha512-MuSPPtEHFal/M77tR3ffLsdOfX29IZpA990nGuoPj5zQnAYrA4PYBGoqqrASQKm8Xb3C0NwuYzOATT7WX4f5Pg==", - "dependencies": { - "@smithy/middleware-serde": "^2.0.6", - "@smithy/types": "^2.3.0", - "@smithy/url-parser": "^2.0.6", - "@smithy/util-middleware": "^2.0.0", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/lib-storage/node_modules/@smithy/middleware-serde": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/@smithy/middleware-serde/-/middleware-serde-2.0.6.tgz", - "integrity": "sha512-8/GODBngYbrS28CMZtaHIL4R9rLNSQ/zgb+N1OAZ02NwBUawlnLDcatve9YRzhJC/IWz0/pt+WimJZaO1sGcig==", - "dependencies": { - "@smithy/types": "^2.3.0", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/lib-storage/node_modules/@smithy/middleware-stack": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@smithy/middleware-stack/-/middleware-stack-2.0.0.tgz", - "integrity": "sha512-31XC1xNF65nlbc16yuh3wwTudmqs6qy4EseQUGF8A/p2m/5wdd/cnXJqpniy/XvXVwkHPz/GwV36HqzHtIKATQ==", - "dependencies": { - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/lib-storage/node_modules/@smithy/node-http-handler": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/@smithy/node-http-handler/-/node-http-handler-2.1.2.tgz", - "integrity": "sha512-PdEEDCShuM8zxGoaRxmGB/1ikB8oeqz+ZAF9VIA8FCP3E59j8zDTF+wCELoWd1Y6gtxr+RcTAg5sA8nvn5qH/w==", - "dependencies": { - "@smithy/abort-controller": "^2.0.6", - "@smithy/protocol-http": "^3.0.2", - "@smithy/querystring-builder": "^2.0.6", - "@smithy/types": "^2.3.0", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/lib-storage/node_modules/@smithy/protocol-http": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-3.0.2.tgz", - "integrity": "sha512-LUOWCPRihvJBkdSs+ivK9m1f/rMfF3n9Zpzg8qdry2eIG4HQqqLBMWQyF9bgk7JhsrrOa3//jJKhXzvL7wL5Xw==", - "dependencies": { - "@smithy/types": "^2.3.0", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/lib-storage/node_modules/@smithy/querystring-builder": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/@smithy/querystring-builder/-/querystring-builder-2.0.6.tgz", - "integrity": "sha512-HnU00shCGoV8vKJZTiNBkNvR9NogU3NIUaVMAGJPSqNGJj3psWo+TUrC0BVCDcwiCljXwXCFGJqIcsWtClrktQ==", - "dependencies": { - "@smithy/types": "^2.3.0", - "@smithy/util-uri-escape": "^2.0.0", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/lib-storage/node_modules/@smithy/querystring-parser": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/@smithy/querystring-parser/-/querystring-parser-2.0.6.tgz", - "integrity": "sha512-i4LKoXHP7pTFAPjLIJyQXYOhWokbcFha3WWsX74sAKmuluv0XM2cxONZoFxwEzmWhsNyM6buSwJSZXyPiec0AQ==", - "dependencies": { - "@smithy/types": "^2.3.0", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/lib-storage/node_modules/@smithy/smithy-client": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/@smithy/smithy-client/-/smithy-client-2.1.2.tgz", - "integrity": "sha512-quUuJ0SsqgG7Flopvfd8iQJLhHfnMYtYPuvImVQzPHXtqUQImtVz5msudMxW3t3jl+L0w8RlR+IN2zT6UqCJ6g==", - "dependencies": { - "@smithy/middleware-stack": "^2.0.0", - "@smithy/types": "^2.3.0", - "@smithy/util-stream": "^2.0.8", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/lib-storage/node_modules/@smithy/types": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/@smithy/types/-/types-2.3.0.tgz", - "integrity": "sha512-pJce3rd39MElkV57UTPAoSYAApjQLELUxjU5adHNLYk9gnPvyIGbJNJTZVVFu00BrgZH3W/cQe8QuFcknDyodQ==", - "dependencies": { - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/lib-storage/node_modules/@smithy/url-parser": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/@smithy/url-parser/-/url-parser-2.0.6.tgz", - "integrity": "sha512-9i6j5QW6bapHZ4rtkXOAm0hOUG1+5IVdVJXNSUTcNskwJchZH5IQuDNPCbgUi/u2P8EZazKt4wXT51QxOXCz1A==", - "dependencies": { - "@smithy/querystring-parser": "^2.0.6", - "@smithy/types": "^2.3.0", - "tslib": "^2.5.0" - } - }, - "node_modules/@aws-sdk/lib-storage/node_modules/@smithy/util-base64": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@smithy/util-base64/-/util-base64-2.0.0.tgz", - "integrity": "sha512-Zb1E4xx+m5Lud8bbeYi5FkcMJMnn+1WUnJF3qD7rAdXpaL7UjkFQLdmW5fHadoKbdHpwH9vSR8EyTJFHJs++tA==", - "dependencies": { - "@smithy/util-buffer-from": "^2.0.0", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/lib-storage/node_modules/@smithy/util-buffer-from": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-2.0.0.tgz", - "integrity": "sha512-/YNnLoHsR+4W4Vf2wL5lGv0ksg8Bmk3GEGxn2vEQt52AQaPSCuaO5PM5VM7lP1K9qHRKHwrPGktqVoAHKWHxzw==", - "dependencies": { - "@smithy/is-array-buffer": "^2.0.0", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/lib-storage/node_modules/@smithy/util-hex-encoding": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@smithy/util-hex-encoding/-/util-hex-encoding-2.0.0.tgz", - "integrity": "sha512-c5xY+NUnFqG6d7HFh1IFfrm3mGl29lC+vF+geHv4ToiuJCBmIfzx6IeHLg+OgRdPFKDXIw6pvi+p3CsscaMcMA==", - "dependencies": { - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/lib-storage/node_modules/@smithy/util-middleware": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@smithy/util-middleware/-/util-middleware-2.0.0.tgz", - "integrity": "sha512-eCWX4ECuDHn1wuyyDdGdUWnT4OGyIzV0LN1xRttBFMPI9Ff/4heSHVxneyiMtOB//zpXWCha1/SWHJOZstG7kA==", - "dependencies": { - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/lib-storage/node_modules/@smithy/util-stream": { - "version": "2.0.8", - "resolved": "https://registry.npmjs.org/@smithy/util-stream/-/util-stream-2.0.8.tgz", - "integrity": "sha512-1JoSHL/AOFRo/RVYdbOOGG5qSkU1IQN+F0f3HOZcwvGeGT5KnGwd4hLzmr0qkjKh4PW7nzuvPMdR7L8THV24Hw==", - "dependencies": { - "@smithy/fetch-http-handler": "^2.1.2", - "@smithy/node-http-handler": "^2.1.2", - "@smithy/types": "^2.3.0", - "@smithy/util-base64": "^2.0.0", - "@smithy/util-buffer-from": "^2.0.0", - "@smithy/util-hex-encoding": "^2.0.0", - "@smithy/util-utf8": "^2.0.0", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/lib-storage/node_modules/@smithy/util-uri-escape": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@smithy/util-uri-escape/-/util-uri-escape-2.0.0.tgz", - "integrity": "sha512-ebkxsqinSdEooQduuk9CbKcI+wheijxEb3utGXkCoYQkJnwTnLbH1JXGimJtUkQwNQbsbuYwG2+aFVyZf5TLaw==", - "dependencies": { - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/lib-storage/node_modules/@smithy/util-utf8": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-2.0.0.tgz", - "integrity": "sha512-rctU1VkziY84n5OXe3bPNpKR001ZCME2JCaBBFgtiM2hfKbHFudc/BkMuPab8hRbLd0j3vbnBTTZ1igBf0wgiQ==", - "dependencies": { - "@smithy/util-buffer-from": "^2.0.0", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/md5-js": { - "version": "3.370.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/md5-js/-/md5-js-3.370.0.tgz", - "integrity": "sha512-wch3+hiRdFGsu5E+w3WU9qmumQErKshtgetd6wMgFYm2MPSksFU58rM/aiwiWRA6knpcaShKaPKMmGnuX3HwhQ==", - "dependencies": { - "@aws-sdk/types": "3.370.0", - "@aws-sdk/util-utf8": "3.310.0", - "tslib": "^2.5.0" - } - }, - "node_modules/@aws-sdk/middleware-bucket-endpoint": { - "version": "3.370.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-bucket-endpoint/-/middleware-bucket-endpoint-3.370.0.tgz", - "integrity": "sha512-B36+fOeJVO0D9cjR92Ob6Ki2FTzyTQ/uKk8w+xtur6W6zYVOPU4IQNpNZvN3Ykt4jitR2uUnVSlBb3sXHHhdFA==", - "dependencies": { - "@aws-sdk/types": "3.370.0", - "@aws-sdk/util-arn-parser": "3.310.0", - "@smithy/protocol-http": "^1.1.0", - "@smithy/types": "^1.1.0", - "@smithy/util-config-provider": "^1.0.1", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/middleware-expect-continue": { - "version": "3.370.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-expect-continue/-/middleware-expect-continue-3.370.0.tgz", - "integrity": "sha512-OlFIpXa53obLryHyrqedE2Cp8lp2k+1Vjd++hlZFDFJncRlWZMxoXSyl6shQPqhIiGnNW4vt7tG5xE4jg4NAvw==", - "dependencies": { - "@aws-sdk/types": "3.370.0", - "@smithy/protocol-http": "^1.1.0", - "@smithy/types": "^1.1.0", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/middleware-flexible-checksums": { - "version": "3.370.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-flexible-checksums/-/middleware-flexible-checksums-3.370.0.tgz", - "integrity": "sha512-62fyW4hZxppvkQKSXdkzjHQ95dXyVCuL18Sfnlciy9pr9f/t5w6LhZIxsNIW+Ge9mbgc661SVRKTwxlZj6FuLQ==", - "dependencies": { - "@aws-crypto/crc32": "3.0.0", - "@aws-crypto/crc32c": "3.0.0", - "@aws-sdk/types": "3.370.0", - "@smithy/is-array-buffer": "^1.0.1", - "@smithy/protocol-http": "^1.1.0", - "@smithy/types": "^1.1.0", - "@smithy/util-utf8": "^1.0.1", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/middleware-host-header": { - "version": "3.363.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-host-header/-/middleware-host-header-3.363.0.tgz", - "integrity": "sha512-FobpclDCf5Y1ueyJDmb9MqguAdPssNMlnqWQpujhYVABq69KHu73fSCWSauFPUrw7YOpV8kG1uagDF0POSxHzA==", - "dependencies": { - "@aws-sdk/types": "3.357.0", - "@smithy/protocol-http": "^1.1.0", - "@smithy/types": "^1.1.0", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/middleware-host-header/node_modules/@aws-sdk/types": { - "version": "3.357.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.357.0.tgz", - "integrity": "sha512-/riCRaXg3p71BeWnShrai0y0QTdXcouPSM0Cn1olZbzTf7s71aLEewrc96qFrL70XhY4XvnxMpqQh+r43XIL3g==", - "dependencies": { - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/middleware-location-constraint": { - "version": "3.370.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-location-constraint/-/middleware-location-constraint-3.370.0.tgz", - "integrity": "sha512-NlDZEbBOF1IN7svUTcjbLodkUctt9zsfDI8+DqNlklRs5lsPb91WYvahOfjFO/EvACixa+a5d3cCumMCaIq4Cw==", - "dependencies": { - "@aws-sdk/types": "3.370.0", - "@smithy/types": "^1.1.0", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/middleware-logger": { - "version": "3.363.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-logger/-/middleware-logger-3.363.0.tgz", - "integrity": "sha512-SSGgthScYnFGTOw8EzbkvquqweFmvn7uJihkpFekbtBNGC/jGOGO+8ziHjTQ8t/iI/YKubEwv+LMi0f77HKSEg==", - "dependencies": { - "@aws-sdk/types": "3.357.0", - "@smithy/types": "^1.1.0", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/middleware-logger/node_modules/@aws-sdk/types": { - "version": "3.357.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.357.0.tgz", - "integrity": "sha512-/riCRaXg3p71BeWnShrai0y0QTdXcouPSM0Cn1olZbzTf7s71aLEewrc96qFrL70XhY4XvnxMpqQh+r43XIL3g==", - "dependencies": { - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/middleware-recursion-detection": { - "version": "3.363.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.363.0.tgz", - "integrity": "sha512-MWD/57QgI/N7fG8rtzDTUdSqNpYohQfgj9XCFAoVeI/bU4usrkOrew43L4smJG4XrDxlNT8lSJlDtd64tuiUZA==", - "dependencies": { - "@aws-sdk/types": "3.357.0", - "@smithy/protocol-http": "^1.1.0", - "@smithy/types": "^1.1.0", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/middleware-recursion-detection/node_modules/@aws-sdk/types": { - "version": "3.357.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.357.0.tgz", - "integrity": "sha512-/riCRaXg3p71BeWnShrai0y0QTdXcouPSM0Cn1olZbzTf7s71aLEewrc96qFrL70XhY4XvnxMpqQh+r43XIL3g==", - "dependencies": { - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/middleware-sdk-s3": { - "version": "3.370.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-sdk-s3/-/middleware-sdk-s3-3.370.0.tgz", - "integrity": "sha512-DPYXtveWBDS5MzSHWTThg2KkLaOzZkCgPejjEuw3yl4ljsHawDs/ZIVCtmWXlBIS2lLCaBMpCV+t9psuJ/6/zQ==", - "dependencies": { - "@aws-sdk/types": "3.370.0", - "@aws-sdk/util-arn-parser": "3.310.0", - "@smithy/protocol-http": "^1.1.0", - "@smithy/types": "^1.1.0", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/middleware-sdk-sts": { - "version": "3.363.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-sdk-sts/-/middleware-sdk-sts-3.363.0.tgz", - "integrity": "sha512-1yy2Ac50FO8BrODaw5bPWvVrRhaVLqXTFH6iHB+dJLPUkwtY5zLM3Mp+9Ilm7kME+r7oIB1wuO6ZB1Lf4ZszIw==", - "dependencies": { - "@aws-sdk/middleware-signing": "3.363.0", - "@aws-sdk/types": "3.357.0", - "@smithy/types": "^1.1.0", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/middleware-sdk-sts/node_modules/@aws-sdk/types": { - "version": "3.357.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.357.0.tgz", - "integrity": "sha512-/riCRaXg3p71BeWnShrai0y0QTdXcouPSM0Cn1olZbzTf7s71aLEewrc96qFrL70XhY4XvnxMpqQh+r43XIL3g==", - "dependencies": { - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/middleware-signing": { - "version": "3.363.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-signing/-/middleware-signing-3.363.0.tgz", - "integrity": "sha512-/7qia715pt9JKYIPDGu22WmdZxD8cfF/5xB+1kmILg7ZtjO0pPuTaCNJ7xiIuFd7Dn7JXp5lop08anX/GOhNRQ==", - "dependencies": { - "@aws-sdk/types": "3.357.0", - "@smithy/property-provider": "^1.0.1", - "@smithy/protocol-http": "^1.1.0", - "@smithy/signature-v4": "^1.0.1", - "@smithy/types": "^1.1.0", - "@smithy/util-middleware": "^1.0.1", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/middleware-signing/node_modules/@aws-sdk/types": { - "version": "3.357.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.357.0.tgz", - "integrity": "sha512-/riCRaXg3p71BeWnShrai0y0QTdXcouPSM0Cn1olZbzTf7s71aLEewrc96qFrL70XhY4XvnxMpqQh+r43XIL3g==", - "dependencies": { - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/middleware-ssec": { - "version": "3.370.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-ssec/-/middleware-ssec-3.370.0.tgz", - "integrity": "sha512-NIosfLS7mxCNdGYnuy76W9qP3f3YWVTusUA+uv+s6rnwG+Z2UheXCf1wpnJKzxORA8pioSP7ylZ8w2A0reCgYQ==", - "dependencies": { - "@aws-sdk/types": "3.370.0", - "@smithy/types": "^1.1.0", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/middleware-user-agent": { - "version": "3.363.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.363.0.tgz", - "integrity": "sha512-ri8YaQvXP6odteVTMfxPqFR26Q0h9ejtqhUDv47P34FaKXedEM4nC6ix6o+5FEYj6l8syGyktftZ5O70NoEhug==", - "dependencies": { - "@aws-sdk/types": "3.357.0", - "@aws-sdk/util-endpoints": "3.357.0", - "@smithy/protocol-http": "^1.1.0", - "@smithy/types": "^1.1.0", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/middleware-user-agent/node_modules/@aws-sdk/types": { - "version": "3.357.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.357.0.tgz", - "integrity": "sha512-/riCRaXg3p71BeWnShrai0y0QTdXcouPSM0Cn1olZbzTf7s71aLEewrc96qFrL70XhY4XvnxMpqQh+r43XIL3g==", - "dependencies": { - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/signature-v4-multi-region": { - "version": "3.370.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/signature-v4-multi-region/-/signature-v4-multi-region-3.370.0.tgz", - "integrity": "sha512-Q3NQopPDnHbJXMhtYl0Mfy5U2o76K6tzhdnYRcrYImY0ze/zOkCQI7KPC4588PuyvAXCdQ02cmCPPjYD55UeNg==", - "dependencies": { - "@aws-sdk/types": "3.370.0", - "@smithy/protocol-http": "^1.1.0", - "@smithy/signature-v4": "^1.0.1", - "@smithy/types": "^1.1.0", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - }, - "peerDependencies": { - "@aws-sdk/signature-v4-crt": "^3.118.0" - }, - "peerDependenciesMeta": { - "@aws-sdk/signature-v4-crt": { - "optional": true - } - } - }, - "node_modules/@aws-sdk/token-providers": { - "version": "3.363.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/token-providers/-/token-providers-3.363.0.tgz", - "integrity": "sha512-6+0aJ1zugNgsMmhTtW2LBWxOVSaXCUk2q3xyTchSXkNzallYaRiZMRkieW+pKNntnu0g5H1T0zyfCO0tbXwxEA==", - "dependencies": { - "@aws-sdk/client-sso-oidc": "3.363.0", - "@aws-sdk/types": "3.357.0", - "@smithy/property-provider": "^1.0.1", - "@smithy/shared-ini-file-loader": "^1.0.1", - "@smithy/types": "^1.1.0", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/token-providers/node_modules/@aws-sdk/types": { - "version": "3.357.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.357.0.tgz", - "integrity": "sha512-/riCRaXg3p71BeWnShrai0y0QTdXcouPSM0Cn1olZbzTf7s71aLEewrc96qFrL70XhY4XvnxMpqQh+r43XIL3g==", - "dependencies": { - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/types": { - "version": "3.370.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.370.0.tgz", - "integrity": "sha512-8PGMKklSkRKjunFhzM2y5Jm0H2TBu7YRNISdYzXLUHKSP9zlMEYagseKVdmox0zKHf1LXVNuSlUV2b6SRrieCQ==", - "dependencies": { - "@smithy/types": "^1.1.0", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/util-arn-parser": { - "version": "3.310.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-arn-parser/-/util-arn-parser-3.310.0.tgz", - "integrity": "sha512-jL8509owp/xB9+Or0pvn3Fe+b94qfklc2yPowZZIFAkFcCSIdkIglz18cPDWnYAcy9JGewpMS1COXKIUhZkJsA==", - "dependencies": { - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/util-base64": { - "version": "3.310.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-base64/-/util-base64-3.310.0.tgz", - "integrity": "sha512-v3+HBKQvqgdzcbL+pFswlx5HQsd9L6ZTlyPVL2LS9nNXnCcR3XgGz9jRskikRUuUvUXtkSG1J88GAOnJ/apTPg==", - "dependencies": { - "@aws-sdk/util-buffer-from": "3.310.0", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/util-buffer-from": { - "version": "3.310.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-buffer-from/-/util-buffer-from-3.310.0.tgz", - "integrity": "sha512-i6LVeXFtGih5Zs8enLrt+ExXY92QV25jtEnTKHsmlFqFAuL3VBeod6boeMXkN2p9lbSVVQ1sAOOYZOHYbYkntw==", - "dependencies": { - "@aws-sdk/is-array-buffer": "3.310.0", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/util-endpoints": { - "version": "3.357.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-endpoints/-/util-endpoints-3.357.0.tgz", - "integrity": "sha512-XHKyS5JClT9su9hDif715jpZiWHQF9gKZXER8tW0gOizU3R9cyWc9EsJ2BRhFNhi7nt/JF/CLUEc5qDx3ETbUw==", - "dependencies": { - "@aws-sdk/types": "3.357.0", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/util-endpoints/node_modules/@aws-sdk/types": { - "version": "3.357.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.357.0.tgz", - "integrity": "sha512-/riCRaXg3p71BeWnShrai0y0QTdXcouPSM0Cn1olZbzTf7s71aLEewrc96qFrL70XhY4XvnxMpqQh+r43XIL3g==", - "dependencies": { - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/util-locate-window": { - "version": "3.310.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-locate-window/-/util-locate-window-3.310.0.tgz", - "integrity": "sha512-qo2t/vBTnoXpjKxlsC2e1gBrRm80M3bId27r0BRB2VniSSe7bL1mmzM+/HFtujm0iAxtPM+aLEflLJlJeDPg0w==", - "dependencies": { - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/util-user-agent-browser": { - "version": "3.363.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.363.0.tgz", - "integrity": "sha512-fk9ymBUIYbxiGm99Cn+kAAXmvMCWTf/cHAcB79oCXV4ELXdPa9lN5xQhZRFNxLUeXG4OAMEuCAUUuZEj8Fnc1Q==", - "dependencies": { - "@aws-sdk/types": "3.357.0", - "@smithy/types": "^1.1.0", - "bowser": "^2.11.0", - "tslib": "^2.5.0" - } - }, - "node_modules/@aws-sdk/util-user-agent-browser/node_modules/@aws-sdk/types": { - "version": "3.357.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.357.0.tgz", - "integrity": "sha512-/riCRaXg3p71BeWnShrai0y0QTdXcouPSM0Cn1olZbzTf7s71aLEewrc96qFrL70XhY4XvnxMpqQh+r43XIL3g==", - "dependencies": { - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/util-user-agent-node": { - "version": "3.363.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.363.0.tgz", - "integrity": "sha512-Fli/dvgGA9hdnQUrYb1//wNSFlK2jAfdJcfNXA6SeBYzSeH5pVGYF4kXF0FCdnMA3Fef+Zn1zAP/hw9v8VJHWQ==", - "dependencies": { - "@aws-sdk/types": "3.357.0", - "@smithy/node-config-provider": "^1.0.1", - "@smithy/types": "^1.1.0", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - }, - "peerDependencies": { - "aws-crt": ">=1.0.0" - }, - "peerDependenciesMeta": { - "aws-crt": { - "optional": true - } - } - }, - "node_modules/@aws-sdk/util-user-agent-node/node_modules/@aws-sdk/types": { - "version": "3.357.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.357.0.tgz", - "integrity": "sha512-/riCRaXg3p71BeWnShrai0y0QTdXcouPSM0Cn1olZbzTf7s71aLEewrc96qFrL70XhY4XvnxMpqQh+r43XIL3g==", - "dependencies": { - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/util-utf8": { - "version": "3.310.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-utf8/-/util-utf8-3.310.0.tgz", - "integrity": "sha512-DnLfFT8uCO22uOJc0pt0DsSNau1GTisngBCDw8jQuWT5CqogMJu4b/uXmwEqfj8B3GX6Xsz8zOd6JpRlPftQoA==", - "dependencies": { - "@aws-sdk/util-buffer-from": "3.310.0", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/util-utf8-browser": { - "version": "3.259.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-utf8-browser/-/util-utf8-browser-3.259.0.tgz", - "integrity": "sha512-UvFa/vR+e19XookZF8RzFZBrw2EUkQWxiBW0yYQAhvk3C+QVGl0H3ouca8LDBlBfQKXwmW3huo/59H8rwb1wJw==", - "dependencies": { - "tslib": "^2.3.1" - } - }, - "node_modules/@aws-sdk/xml-builder": { - "version": "3.310.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/xml-builder/-/xml-builder-3.310.0.tgz", - "integrity": "sha512-TqELu4mOuSIKQCqj63fGVs86Yh+vBx5nHRpWKNUNhB2nPTpfbziTs5c1X358be3peVWA4wPxW7Nt53KIg1tnNw==", - "dependencies": { - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@babel/code-frame": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.22.5.tgz", - "integrity": "sha512-Xmwn266vad+6DAqEB2A6V/CcZVp62BbwVmcOJc2RPuwih1kw02TjQvWVWlcKGbBPd+8/0V5DEkOcizRGYsspYQ==", - "dependencies": { - "@babel/highlight": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/compat-data": { - "version": "7.22.6", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.22.6.tgz", - "integrity": "sha512-29tfsWTq2Ftu7MXmimyC0C5FDZv5DYxOZkh3XD3+QW4V/BYuv/LyEsjj3c0hqedEaDt6DBfDvexMKU8YevdqFg==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/core": { - "version": "7.22.6", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.22.6.tgz", - "integrity": "sha512-HPIyDa6n+HKw5dEuway3vVAhBboYCtREBMp+IWeseZy6TFtzn6MHkCH2KKYUOC/vKKwgSMHQW4htBOrmuRPXfw==", - "dev": true, - "dependencies": { - "@ampproject/remapping": "^2.2.0", - "@babel/code-frame": "^7.22.5", - "@babel/generator": "^7.22.5", - "@babel/helper-compilation-targets": "^7.22.6", - "@babel/helper-module-transforms": "^7.22.5", - "@babel/helpers": "^7.22.6", - "@babel/parser": "^7.22.6", - "@babel/template": "^7.22.5", - "@babel/traverse": "^7.22.6", - "@babel/types": "^7.22.5", - "@nicolo-ribaudo/semver-v6": "^6.3.3", - "convert-source-map": "^1.7.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.2", - "json5": "^2.2.2" - }, - "engines": { - "node": ">=6.9.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/babel" - } - }, - "node_modules/@babel/generator": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.22.5.tgz", - "integrity": "sha512-+lcUbnTRhd0jOewtFSedLyiPsD5tswKkbgcezOqqWFUVNEwoUTlpPOBmvhG7OXWLR4jMdv0czPGH5XbflnD1EA==", - "dev": true, - "dependencies": { - "@babel/types": "^7.22.5", - "@jridgewell/gen-mapping": "^0.3.2", - "@jridgewell/trace-mapping": "^0.3.17", - "jsesc": "^2.5.1" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/generator/node_modules/@jridgewell/gen-mapping": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz", - "integrity": "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==", - "dev": true, - "dependencies": { - "@jridgewell/set-array": "^1.0.1", - "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.9" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@babel/helper-compilation-targets": { - "version": "7.22.6", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.22.6.tgz", - "integrity": "sha512-534sYEqWD9VfUm3IPn2SLcH4Q3P86XL+QvqdC7ZsFrzyyPF3T4XGiVghF6PTYNdWg6pXuoqXxNQAhbYeEInTzA==", - "dev": true, - "dependencies": { - "@babel/compat-data": "^7.22.6", - "@babel/helper-validator-option": "^7.22.5", - "@nicolo-ribaudo/semver-v6": "^6.3.3", - "browserslist": "^4.21.9", - "lru-cache": "^5.1.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/helper-environment-visitor": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.5.tgz", - "integrity": "sha512-XGmhECfVA/5sAt+H+xpSg0mfrHq6FzNr9Oxh7PSEBBRUb/mL7Kz3NICXb194rCqAEdxkhPT1a88teizAFyvk8Q==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-function-name": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.22.5.tgz", - "integrity": "sha512-wtHSq6jMRE3uF2otvfuD3DIvVhOsSNshQl0Qrd7qC9oQJzHvOL4qQXlQn2916+CXGywIjpGuIkoyZRRxHPiNQQ==", - "dev": true, - "dependencies": { - "@babel/template": "^7.22.5", - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-hoist-variables": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz", - "integrity": "sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==", - "dev": true, - "dependencies": { - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-module-imports": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.22.5.tgz", - "integrity": "sha512-8Dl6+HD/cKifutF5qGd/8ZJi84QeAKh+CEe1sBzz8UayBBGg1dAIJrdHOcOM5b2MpzWL2yuotJTtGjETq0qjXg==", - "dev": true, - "dependencies": { - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-module-transforms": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.22.5.tgz", - "integrity": "sha512-+hGKDt/Ze8GFExiVHno/2dvG5IdstpzCq0y4Qc9OJ25D4q3pKfiIP/4Vp3/JvhDkLKsDK2api3q3fpIgiIF5bw==", - "dev": true, - "dependencies": { - "@babel/helper-environment-visitor": "^7.22.5", - "@babel/helper-module-imports": "^7.22.5", - "@babel/helper-simple-access": "^7.22.5", - "@babel/helper-split-export-declaration": "^7.22.5", - "@babel/helper-validator-identifier": "^7.22.5", - "@babel/template": "^7.22.5", - "@babel/traverse": "^7.22.5", - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-plugin-utils": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.22.5.tgz", - "integrity": "sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-simple-access": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.22.5.tgz", - "integrity": "sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==", - "dev": true, - "dependencies": { - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-split-export-declaration": { - "version": "7.22.6", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz", - "integrity": "sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==", - "dev": true, - "dependencies": { - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-string-parser": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.22.5.tgz", - "integrity": "sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-validator-identifier": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.5.tgz", - "integrity": "sha512-aJXu+6lErq8ltp+JhkJUfk1MTGyuA4v7f3pA+BJ5HLfNC6nAQ0Cpi9uOquUj8Hehg0aUiHzWQbOVJGao6ztBAQ==", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-validator-option": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.22.5.tgz", - "integrity": "sha512-R3oB6xlIVKUnxNUxbmgq7pKjxpru24zlimpE8WK47fACIlM0II/Hm1RS8IaOI7NgCr6LNS+jl5l75m20npAziw==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helpers": { - "version": "7.22.6", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.22.6.tgz", - "integrity": "sha512-YjDs6y/fVOYFV8hAf1rxd1QvR9wJe1pDBZ2AREKq/SDayfPzgk0PBnVuTCE5X1acEpMMNOVUqoe+OwiZGJ+OaA==", - "dev": true, - "dependencies": { - "@babel/template": "^7.22.5", - "@babel/traverse": "^7.22.6", - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/highlight": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.22.5.tgz", - "integrity": "sha512-BSKlD1hgnedS5XRnGOljZawtag7H1yPfQp0tdNJCHoH6AZ+Pcm9VvkrK59/Yy593Ypg0zMxH2BxD1VPYUQ7UIw==", - "dependencies": { - "@babel/helper-validator-identifier": "^7.22.5", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/highlight/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/highlight/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/highlight/node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/@babel/highlight/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" - }, - "node_modules/@babel/highlight/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/highlight/node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/parser": { - "version": "7.22.6", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.22.6.tgz", - "integrity": "sha512-EIQu22vNkceq3LbjAq7knDf/UmtI2qbcNI8GRBlijez6TpQLvSodJPYfydQmNA5buwkxxxa/PVI44jjYZ+/cLw==", - "dev": true, - "bin": { - "parser": "bin/babel-parser.js" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@babel/plugin-syntax-async-generators": { - "version": "7.8.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", - "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-bigint": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz", - "integrity": "sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-class-properties": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", - "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.12.13" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-import-meta": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz", - "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-json-strings": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", - "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-jsx": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.22.5.tgz", - "integrity": "sha512-gvyP4hZrgrs/wWMaocvxZ44Hw0b3W8Pe+cMxc8V1ULQ07oh8VNbIRaoD1LRZVTvD+0nieDKjfgKg89sD7rrKrg==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-logical-assignment-operators": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", - "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-nullish-coalescing-operator": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", - "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-numeric-separator": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", - "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-object-rest-spread": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", - "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-optional-catch-binding": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", - "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-optional-chaining": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", - "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-top-level-await": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", - "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-typescript": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.22.5.tgz", - "integrity": "sha512-1mS2o03i7t1c6VzH6fdQ3OA8tcEIxwG18zIPRp+UY1Ihv6W+XZzBCVxExF9upussPXJ0xE9XRHwMoNs1ep/nRQ==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/template": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.22.5.tgz", - "integrity": "sha512-X7yV7eiwAxdj9k94NEylvbVHLiVG1nvzCV2EAowhxLTwODV1jl9UzZ48leOC0sH7OnuHrIkllaBgneUykIcZaw==", - "dev": true, - "dependencies": { - "@babel/code-frame": "^7.22.5", - "@babel/parser": "^7.22.5", - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/traverse": { - "version": "7.22.6", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.22.6.tgz", - "integrity": "sha512-53CijMvKlLIDlOTrdWiHileRddlIiwUIyCKqYa7lYnnPldXCG5dUSN38uT0cA6i7rHWNKJLH0VU/Kxdr1GzB3w==", - "dev": true, - "dependencies": { - "@babel/code-frame": "^7.22.5", - "@babel/generator": "^7.22.5", - "@babel/helper-environment-visitor": "^7.22.5", - "@babel/helper-function-name": "^7.22.5", - "@babel/helper-hoist-variables": "^7.22.5", - "@babel/helper-split-export-declaration": "^7.22.6", - "@babel/parser": "^7.22.6", - "@babel/types": "^7.22.5", - "debug": "^4.1.0", - "globals": "^11.1.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/traverse/node_modules/globals": { - "version": "11.12.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", - "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/types": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.22.5.tgz", - "integrity": "sha512-zo3MIHGOkPOfoRXitsgHLjEXmlDaD/5KU1Uzuc9GNiZPhSqVxVRtxuPaSBZDsYZ9qV88AjtMtWW7ww98loJ9KA==", - "dev": true, - "dependencies": { - "@babel/helper-string-parser": "^7.22.5", - "@babel/helper-validator-identifier": "^7.22.5", - "to-fast-properties": "^2.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@bcoe/v8-coverage": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz", - "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==", - "dev": true - }, - "node_modules/@bugsnag/browser": { - "version": "7.20.2", - "resolved": "https://registry.npmjs.org/@bugsnag/browser/-/browser-7.20.2.tgz", - "integrity": "sha512-4J4s53ZpYr3hHA+QjxUjOI6U+A8+XuUVH45UshE87Jp2Y4mV8ML2DovejqJS8J8yjdbnh2z1Wtg/v3WUNt4ayQ==", - "dependencies": { - "@bugsnag/core": "^7.19.0" - } - }, - "node_modules/@bugsnag/core": { - "version": "7.19.0", - "resolved": "https://registry.npmjs.org/@bugsnag/core/-/core-7.19.0.tgz", - "integrity": "sha512-2KGwdaLD9PhR7Wk7xPi3jGuGsKTatc/28U4TOZIDU3CgC2QhGjubwiXSECel5gwxhZ3jACKcMKSV2ovHhv1NrA==", - "dependencies": { - "@bugsnag/cuid": "^3.0.0", - "@bugsnag/safe-json-stringify": "^6.0.0", - "error-stack-parser": "^2.0.3", - "iserror": "0.0.2", - "stack-generator": "^2.0.3" - } - }, - "node_modules/@bugsnag/cuid": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/@bugsnag/cuid/-/cuid-3.0.2.tgz", - "integrity": "sha512-cIwzC93r3PQ/INeuwtZwkZIG2K8WWN0rRLZQhu+mr48Ay+i6sEki4GYfTsflse7hZ1BeDWrNb/Q9vgY3B31xHQ==" - }, - "node_modules/@bugsnag/js": { - "version": "7.20.2", - "resolved": "https://registry.npmjs.org/@bugsnag/js/-/js-7.20.2.tgz", - "integrity": "sha512-Q08k0h0h6NFwFGkFmib39Uln2WpvJdqT1EGF1JlyYiGW03Y+VopVb9r37pZrRrN9IY08mxaIEO8la5xeaWAs6A==", - "dependencies": { - "@bugsnag/browser": "^7.20.2", - "@bugsnag/node": "^7.19.0" - } - }, - "node_modules/@bugsnag/node": { - "version": "7.19.0", - "resolved": "https://registry.npmjs.org/@bugsnag/node/-/node-7.19.0.tgz", - "integrity": "sha512-c4snyxx5d/fsMogmgehFBGc//daH6+4XCplia4zrEQYltjaQ+l8ud0dPx623DgJl/2j1+2zlRc7y7IHSd7Gm5w==", - "dependencies": { - "@bugsnag/core": "^7.19.0", - "byline": "^5.0.0", - "error-stack-parser": "^2.0.2", - "iserror": "^0.0.2", - "pump": "^3.0.0", - "stack-generator": "^2.0.3" - } - }, - "node_modules/@bugsnag/safe-json-stringify": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/@bugsnag/safe-json-stringify/-/safe-json-stringify-6.0.0.tgz", - "integrity": "sha512-htzFO1Zc57S8kgdRK9mLcPVTW1BY2ijfH7Dk2CeZmspTWKdKqSo1iwmqrq2WtRjFlo8aRZYgLX0wFrDXF/9DLA==" - }, - "node_modules/@colors/colors": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/@colors/colors/-/colors-1.5.0.tgz", - "integrity": "sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==", - "engines": { - "node": ">=0.1.90" - } - }, - "node_modules/@commitlint/cli": { - "version": "17.6.6", - "resolved": "https://registry.npmjs.org/@commitlint/cli/-/cli-17.6.6.tgz", - "integrity": "sha512-sTKpr2i/Fjs9OmhU+beBxjPavpnLSqZaO6CzwKVq2Tc4UYVTMFgpKOslDhUBVlfAUBfjVO8ParxC/MXkIOevEA==", - "dev": true, - "dependencies": { - "@commitlint/format": "^17.4.4", - "@commitlint/lint": "^17.6.6", - "@commitlint/load": "^17.5.0", - "@commitlint/read": "^17.5.1", - "@commitlint/types": "^17.4.4", - "execa": "^5.0.0", - "lodash.isfunction": "^3.0.9", - "resolve-from": "5.0.0", - "resolve-global": "1.0.0", - "yargs": "^17.0.0" - }, - "bin": { - "commitlint": "cli.js" - }, - "engines": { - "node": ">=v14" - } - }, - "node_modules/@commitlint/config-conventional": { - "version": "17.6.5", - "resolved": "https://registry.npmjs.org/@commitlint/config-conventional/-/config-conventional-17.6.5.tgz", - "integrity": "sha512-Xl9H9KLl86NZm5CYNTNF9dcz1xelE/EbvhWIWcYxG/rn3UWYWdWmmnX2q6ZduNdLFSGbOxzUpIx61j5zxbeXxg==", - "dev": true, - "dependencies": { - "conventional-changelog-conventionalcommits": "^5.0.0" - }, - "engines": { - "node": ">=v14" - } - }, - "node_modules/@commitlint/config-conventional/node_modules/conventional-changelog-conventionalcommits": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/conventional-changelog-conventionalcommits/-/conventional-changelog-conventionalcommits-5.0.0.tgz", - "integrity": "sha512-lCDbA+ZqVFQGUj7h9QBKoIpLhl8iihkO0nCTyRNzuXtcd7ubODpYB04IFy31JloiJgG0Uovu8ot8oxRzn7Nwtw==", - "dev": true, - "dependencies": { - "compare-func": "^2.0.0", - "lodash": "^4.17.15", - "q": "^1.5.1" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@commitlint/config-validator": { - "version": "17.4.4", - "resolved": "https://registry.npmjs.org/@commitlint/config-validator/-/config-validator-17.4.4.tgz", - "integrity": "sha512-bi0+TstqMiqoBAQDvdEP4AFh0GaKyLFlPPEObgI29utoKEYoPQTvF0EYqIwYYLEoJYhj5GfMIhPHJkTJhagfeg==", - "dev": true, - "dependencies": { - "@commitlint/types": "^17.4.4", - "ajv": "^8.11.0" - }, - "engines": { - "node": ">=v14" - } - }, - "node_modules/@commitlint/ensure": { - "version": "17.4.4", - "resolved": "https://registry.npmjs.org/@commitlint/ensure/-/ensure-17.4.4.tgz", - "integrity": "sha512-AHsFCNh8hbhJiuZ2qHv/m59W/GRE9UeOXbkOqxYMNNg9pJ7qELnFcwj5oYpa6vzTSHtPGKf3C2yUFNy1GGHq6g==", - "dev": true, - "dependencies": { - "@commitlint/types": "^17.4.4", - "lodash.camelcase": "^4.3.0", - "lodash.kebabcase": "^4.1.1", - "lodash.snakecase": "^4.1.1", - "lodash.startcase": "^4.4.0", - "lodash.upperfirst": "^4.3.1" - }, - "engines": { - "node": ">=v14" - } - }, - "node_modules/@commitlint/execute-rule": { - "version": "17.4.0", - "resolved": "https://registry.npmjs.org/@commitlint/execute-rule/-/execute-rule-17.4.0.tgz", - "integrity": "sha512-LIgYXuCSO5Gvtc0t9bebAMSwd68ewzmqLypqI2Kke1rqOqqDbMpYcYfoPfFlv9eyLIh4jocHWwCK5FS7z9icUA==", - "dev": true, - "engines": { - "node": ">=v14" - } - }, - "node_modules/@commitlint/format": { - "version": "17.4.4", - "resolved": "https://registry.npmjs.org/@commitlint/format/-/format-17.4.4.tgz", - "integrity": "sha512-+IS7vpC4Gd/x+uyQPTAt3hXs5NxnkqAZ3aqrHd5Bx/R9skyCAWusNlNbw3InDbAK6j166D9asQM8fnmYIa+CXQ==", - "dev": true, - "dependencies": { - "@commitlint/types": "^17.4.4", - "chalk": "^4.1.0" - }, - "engines": { - "node": ">=v14" - } - }, - "node_modules/@commitlint/is-ignored": { - "version": "17.6.6", - "resolved": "https://registry.npmjs.org/@commitlint/is-ignored/-/is-ignored-17.6.6.tgz", - "integrity": "sha512-4Fw875faAKO+2nILC04yW/2Vy/wlV3BOYCSQ4CEFzriPEprc1Td2LILmqmft6PDEK5Sr14dT9tEzeaZj0V56Gg==", - "dev": true, - "dependencies": { - "@commitlint/types": "^17.4.4", - "semver": "7.5.2" - }, - "engines": { - "node": ">=v14" - } - }, - "node_modules/@commitlint/is-ignored/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@commitlint/is-ignored/node_modules/semver": { - "version": "7.5.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.2.tgz", - "integrity": "sha512-SoftuTROv/cRjCze/scjGyiDtcUyxw1rgYQSZY7XTmtR5hX+dm76iDbTH8TkLPHCQmlbQVSSbNZCPM2hb0knnQ==", - "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@commitlint/is-ignored/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - }, - "node_modules/@commitlint/lint": { - "version": "17.6.6", - "resolved": "https://registry.npmjs.org/@commitlint/lint/-/lint-17.6.6.tgz", - "integrity": "sha512-5bN+dnHcRLkTvwCHYMS7Xpbr+9uNi0Kq5NR3v4+oPNx6pYXt8ACuw9luhM/yMgHYwW0ajIR20wkPAFkZLEMGmg==", - "dev": true, - "dependencies": { - "@commitlint/is-ignored": "^17.6.6", - "@commitlint/parse": "^17.6.5", - "@commitlint/rules": "^17.6.5", - "@commitlint/types": "^17.4.4" - }, - "engines": { - "node": ">=v14" - } - }, - "node_modules/@commitlint/load": { - "version": "17.5.0", - "resolved": "https://registry.npmjs.org/@commitlint/load/-/load-17.5.0.tgz", - "integrity": "sha512-l+4W8Sx4CD5rYFsrhHH8HP01/8jEP7kKf33Xlx2Uk2out/UKoKPYMOIRcDH5ppT8UXLMV+x6Wm5osdRKKgaD1Q==", - "dev": true, - "dependencies": { - "@commitlint/config-validator": "^17.4.4", - "@commitlint/execute-rule": "^17.4.0", - "@commitlint/resolve-extends": "^17.4.4", - "@commitlint/types": "^17.4.4", - "@types/node": "*", - "chalk": "^4.1.0", - "cosmiconfig": "^8.0.0", - "cosmiconfig-typescript-loader": "^4.0.0", - "lodash.isplainobject": "^4.0.6", - "lodash.merge": "^4.6.2", - "lodash.uniq": "^4.5.0", - "resolve-from": "^5.0.0", - "ts-node": "^10.8.1", - "typescript": "^4.6.4 || ^5.0.0" - }, - "engines": { - "node": ">=v14" - } - }, - "node_modules/@commitlint/message": { - "version": "17.4.2", - "resolved": "https://registry.npmjs.org/@commitlint/message/-/message-17.4.2.tgz", - "integrity": "sha512-3XMNbzB+3bhKA1hSAWPCQA3lNxR4zaeQAQcHj0Hx5sVdO6ryXtgUBGGv+1ZCLMgAPRixuc6en+iNAzZ4NzAa8Q==", - "dev": true, - "engines": { - "node": ">=v14" - } - }, - "node_modules/@commitlint/parse": { - "version": "17.6.5", - "resolved": "https://registry.npmjs.org/@commitlint/parse/-/parse-17.6.5.tgz", - "integrity": "sha512-0zle3bcn1Hevw5Jqpz/FzEWNo2KIzUbc1XyGg6WrWEoa6GH3A1pbqNF6MvE6rjuy6OY23c8stWnb4ETRZyN+Yw==", - "dev": true, - "dependencies": { - "@commitlint/types": "^17.4.4", - "conventional-changelog-angular": "^5.0.11", - "conventional-commits-parser": "^3.2.2" - }, - "engines": { - "node": ">=v14" - } - }, - "node_modules/@commitlint/read": { - "version": "17.5.1", - "resolved": "https://registry.npmjs.org/@commitlint/read/-/read-17.5.1.tgz", - "integrity": "sha512-7IhfvEvB//p9aYW09YVclHbdf1u7g7QhxeYW9ZHSO8Huzp8Rz7m05aCO1mFG7G8M+7yfFnXB5xOmG18brqQIBg==", - "dev": true, - "dependencies": { - "@commitlint/top-level": "^17.4.0", - "@commitlint/types": "^17.4.4", - "fs-extra": "^11.0.0", - "git-raw-commits": "^2.0.11", - "minimist": "^1.2.6" - }, - "engines": { - "node": ">=v14" - } - }, - "node_modules/@commitlint/read/node_modules/fs-extra": { - "version": "11.1.1", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.1.1.tgz", - "integrity": "sha512-MGIE4HOvQCeUCzmlHs0vXpih4ysz4wg9qiSAu6cd42lVwPbTM1TjV7RusoyQqMmk/95gdQZX72u+YW+c3eEpFQ==", - "dev": true, - "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, - "engines": { - "node": ">=14.14" - } - }, - "node_modules/@commitlint/resolve-extends": { - "version": "17.4.4", - "resolved": "https://registry.npmjs.org/@commitlint/resolve-extends/-/resolve-extends-17.4.4.tgz", - "integrity": "sha512-znXr1S0Rr8adInptHw0JeLgumS11lWbk5xAWFVno+HUFVN45875kUtqjrI6AppmD3JI+4s0uZlqqlkepjJd99A==", - "dev": true, - "dependencies": { - "@commitlint/config-validator": "^17.4.4", - "@commitlint/types": "^17.4.4", - "import-fresh": "^3.0.0", - "lodash.mergewith": "^4.6.2", - "resolve-from": "^5.0.0", - "resolve-global": "^1.0.0" - }, - "engines": { - "node": ">=v14" - } - }, - "node_modules/@commitlint/rules": { - "version": "17.6.5", - "resolved": "https://registry.npmjs.org/@commitlint/rules/-/rules-17.6.5.tgz", - "integrity": "sha512-uTB3zSmnPyW2qQQH+Dbq2rekjlWRtyrjDo4aLFe63uteandgkI+cc0NhhbBAzcXShzVk0qqp8SlkQMu0mgHg/A==", - "dev": true, - "dependencies": { - "@commitlint/ensure": "^17.4.4", - "@commitlint/message": "^17.4.2", - "@commitlint/to-lines": "^17.4.0", - "@commitlint/types": "^17.4.4", - "execa": "^5.0.0" - }, - "engines": { - "node": ">=v14" - } - }, - "node_modules/@commitlint/to-lines": { - "version": "17.4.0", - "resolved": "https://registry.npmjs.org/@commitlint/to-lines/-/to-lines-17.4.0.tgz", - "integrity": "sha512-LcIy/6ZZolsfwDUWfN1mJ+co09soSuNASfKEU5sCmgFCvX5iHwRYLiIuoqXzOVDYOy7E7IcHilr/KS0e5T+0Hg==", - "dev": true, - "engines": { - "node": ">=v14" - } - }, - "node_modules/@commitlint/top-level": { - "version": "17.4.0", - "resolved": "https://registry.npmjs.org/@commitlint/top-level/-/top-level-17.4.0.tgz", - "integrity": "sha512-/1loE/g+dTTQgHnjoCy0AexKAEFyHsR2zRB4NWrZ6lZSMIxAhBJnmCqwao7b4H8888PsfoTBCLBYIw8vGnej8g==", - "dev": true, - "dependencies": { - "find-up": "^5.0.0" - }, - "engines": { - "node": ">=v14" - } - }, - "node_modules/@commitlint/types": { - "version": "17.4.4", - "resolved": "https://registry.npmjs.org/@commitlint/types/-/types-17.4.4.tgz", - "integrity": "sha512-amRN8tRLYOsxRr6mTnGGGvB5EmW/4DDjLMgiwK3CCVEmN6Sr/6xePGEpWaspKkckILuUORCwe6VfDBw6uj4axQ==", - "dev": true, - "dependencies": { - "chalk": "^4.1.0" - }, - "engines": { - "node": ">=v14" - } - }, - "node_modules/@cspotcode/source-map-support": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", - "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==", - "dev": true, - "dependencies": { - "@jridgewell/trace-mapping": "0.3.9" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/@cspotcode/source-map-support/node_modules/@jridgewell/trace-mapping": { - "version": "0.3.9", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", - "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", - "dev": true, - "dependencies": { - "@jridgewell/resolve-uri": "^3.0.3", - "@jridgewell/sourcemap-codec": "^1.4.10" - } - }, - "node_modules/@dabh/diagnostics": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@dabh/diagnostics/-/diagnostics-2.0.3.tgz", - "integrity": "sha512-hrlQOIi7hAfzsMqlGSFyVucrx38O+j6wiGOf//H2ecvIEqYN4ADBSS2iLMh5UFyDunCNniUIPk/q3riFv45xRA==", - "dependencies": { - "colorspace": "1.1.x", - "enabled": "2.0.x", - "kuler": "^2.0.0" - } - }, - "node_modules/@datadog/pprof": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@datadog/pprof/-/pprof-3.1.0.tgz", - "integrity": "sha512-Bg8O8yrHeL2KKHXhLoAAT33ZfzLnZ6rWfOjy8PkcNhUJy3UwNVLbUoApf+99EyLjqpzpk/kZXrIAMBzMMB8ilg==", - "hasInstallScript": true, - "dependencies": { - "delay": "^5.0.0", - "node-gyp-build": "<4.0", - "p-limit": "^3.1.0", - "pprof-format": "^2.0.7", - "source-map": "^0.7.4" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/@datadog/pprof/node_modules/source-map": { - "version": "0.7.4", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz", - "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==", - "engines": { - "node": ">= 8" - } - }, - "node_modules/@dependents/detective-less": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@dependents/detective-less/-/detective-less-3.0.1.tgz", - "integrity": "sha512-NjjCPJbx/za2287T6gnC5zD2IFSplro1evaTV9yvx3jnPpHi7s8PwJvh9vvJRFnMx5nbakodwNOnFvk8+9YQTg==", - "dev": true, - "dependencies": { - "gonzales-pe": "^4.3.0", - "node-source-walk": "^5.0.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/@dependents/detective-less/node_modules/node-source-walk": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/node-source-walk/-/node-source-walk-5.0.1.tgz", - "integrity": "sha512-fe5rFjPqkWQb4CLfsOf10fZAJvImfLpcVx+Nqbozaj6PBoAEjyEK1HZGCGvQNyre2HdL1HnZG6mxBf2UHSzr/w==", - "dev": true, - "dependencies": { - "@babel/parser": "^7.0.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/@digitalroute/cz-conventional-changelog-for-jira": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/@digitalroute/cz-conventional-changelog-for-jira/-/cz-conventional-changelog-for-jira-8.0.1.tgz", - "integrity": "sha512-I7uNQ2R5LnDYVhQ01sfNvaxqe1PutXyDl8Kltj4L8uDa1LTYqQgWWp3yEj3XYDNjhUjsAheHW0lsmF1oiAjWVg==", - "dev": true, - "dependencies": { - "boxen": "^5.1.2", - "chalk": "^2.4.1", - "commitizen": "^4.2.6", - "cz-conventional-changelog": "^3.3.0", - "inquirer": "^8.2.4", - "lodash.map": "^4.5.1", - "longest": "^2.0.1", - "right-pad": "^1.0.1", - "word-wrap": "^1.0.3" - }, - "engines": { - "node": ">= 10" - }, - "optionalDependencies": { - "@commitlint/load": ">6.1.1" - } - }, - "node_modules/@digitalroute/cz-conventional-changelog-for-jira/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@digitalroute/cz-conventional-changelog-for-jira/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@digitalroute/cz-conventional-changelog-for-jira/node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/@digitalroute/cz-conventional-changelog-for-jira/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "dev": true - }, - "node_modules/@digitalroute/cz-conventional-changelog-for-jira/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/@digitalroute/cz-conventional-changelog-for-jira/node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@eslint-community/eslint-utils": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.3.0.tgz", - "integrity": "sha512-v3oplH6FYCULtFuCeqyuTd9D2WKO937Dxdq+GmHOLL72TTRriLxz2VLlNfkZRsvj6PKnOPAtuT6dwrs/pA5DvA==", - "dev": true, - "dependencies": { - "eslint-visitor-keys": "^3.3.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "peerDependencies": { - "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" - } - }, - "node_modules/@eslint-community/regexpp": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.4.0.tgz", - "integrity": "sha512-A9983Q0LnDGdLPjxyXQ00sbV+K+O+ko2Dr+CZigbHWtX9pNfxlaBkMR8X1CztI73zuEyEBXTVjx7CE+/VSwDiQ==", - "dev": true, - "engines": { - "node": "^12.0.0 || ^14.0.0 || >=16.0.0" - } - }, - "node_modules/@eslint/eslintrc": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.0.3.tgz", - "integrity": "sha512-+5gy6OQfk+xx3q0d6jGZZC3f3KzAkXc/IanVxd1is/VIIziRqqt3ongQz0FiTUXqTk0c7aDB3OaFuKnuSoJicQ==", - "dev": true, - "dependencies": { - "ajv": "^6.12.4", - "debug": "^4.3.2", - "espree": "^9.5.2", - "globals": "^13.19.0", - "ignore": "^5.2.0", - "import-fresh": "^3.2.1", - "js-yaml": "^4.1.0", - "minimatch": "^3.1.2", - "strip-json-comments": "^3.1.1" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/@eslint/eslintrc/node_modules/ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "dev": true, - "dependencies": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/@eslint/eslintrc/node_modules/json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true - }, - "node_modules/@eslint/js": { - "version": "8.41.0", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.41.0.tgz", - "integrity": "sha512-LxcyMGxwmTh2lY9FwHPGWOHmYFCZvbrFCBZL4FzSSsxsRPuhrYUg/49/0KDfW8tnIEaEHtfmn6+NPN+1DqaNmA==", - "dev": true, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - } - }, - "node_modules/@ewoudenberg/difflib": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/@ewoudenberg/difflib/-/difflib-0.1.0.tgz", - "integrity": "sha512-OU5P5mJyD3OoWYMWY+yIgwvgNS9cFAU10f+DDuvtogcWQOoJIsQ4Hy2McSfUfhKjq8L0FuWVb4Rt7kgA+XK86A==", - "dependencies": { - "heap": ">= 0.2.0" - } - }, - "node_modules/@hapi/hoek": { - "version": "9.3.0", - "resolved": "https://registry.npmjs.org/@hapi/hoek/-/hoek-9.3.0.tgz", - "integrity": "sha512-/c6rf4UJlmHlC9b5BaNvzAcFv7HZ2QHaV0D4/HNlBdvFnvQq8RI4kYdhyPCl7Xj+oWvTWQ8ujhqS53LIgAe6KQ==" - }, - "node_modules/@hapi/topo": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/@hapi/topo/-/topo-5.1.0.tgz", - "integrity": "sha512-foQZKJig7Ob0BMAYBfcJk8d77QtOe7Wo4ox7ff1lQYoNNAb6jwcY1ncdoy2e9wQZzvNy7ODZCYJkK8kzmcAnAg==", - "dependencies": { - "@hapi/hoek": "^9.0.0" - } - }, - "node_modules/@humanwhocodes/config-array": { - "version": "0.11.8", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.8.tgz", - "integrity": "sha512-UybHIJzJnR5Qc/MsD9Kr+RpO2h+/P1GhOwdiLPXK5TWk5sgTdu88bTD9UP+CKbPPh5Rni1u0GjAdYQLemG8g+g==", - "dev": true, - "dependencies": { - "@humanwhocodes/object-schema": "^1.2.1", - "debug": "^4.1.1", - "minimatch": "^3.0.5" - }, - "engines": { - "node": ">=10.10.0" - } - }, - "node_modules/@humanwhocodes/module-importer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", - "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", - "dev": true, - "engines": { - "node": ">=12.22" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/nzakas" - } - }, - "node_modules/@humanwhocodes/object-schema": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", - "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", - "dev": true - }, - "node_modules/@hutson/parse-repository-url": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/@hutson/parse-repository-url/-/parse-repository-url-3.0.2.tgz", - "integrity": "sha512-H9XAx3hc0BQHY6l+IFSWHDySypcXsvsuLhgYLUGywmJ5pswRVQJUHpOsobnLYp2ZUaUlKiKDrgWWhosOwAEM8Q==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@ioredis/commands": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@ioredis/commands/-/commands-1.2.0.tgz", - "integrity": "sha512-Sx1pU8EM64o2BrqNpEO1CNLtKQwyhuXuqyfH7oGKCk+1a33d2r5saW8zNwm3j6BTExtjrv2BxTgzzkMwts6vGg==" - }, - "node_modules/@isaacs/cliui": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", - "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", - "dev": true, - "dependencies": { - "string-width": "^5.1.2", - "string-width-cjs": "npm:string-width@^4.2.0", - "strip-ansi": "^7.0.1", - "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", - "wrap-ansi": "^8.1.0", - "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/@isaacs/cliui/node_modules/ansi-regex": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", - "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", - "dev": true, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-regex?sponsor=1" - } - }, - "node_modules/@isaacs/cliui/node_modules/ansi-styles": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", - "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", - "dev": true, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/@isaacs/cliui/node_modules/string-width": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", - "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", - "dev": true, - "dependencies": { - "eastasianwidth": "^0.2.0", - "emoji-regex": "^9.2.2", - "strip-ansi": "^7.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@isaacs/cliui/node_modules/strip-ansi": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", - "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", - "dev": true, - "dependencies": { - "ansi-regex": "^6.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/strip-ansi?sponsor=1" - } - }, - "node_modules/@isaacs/cliui/node_modules/wrap-ansi": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", - "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", - "dev": true, - "dependencies": { - "ansi-styles": "^6.1.0", - "string-width": "^5.0.1", - "strip-ansi": "^7.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, - "node_modules/@istanbuljs/load-nyc-config": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", - "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==", - "dev": true, - "dependencies": { - "camelcase": "^5.3.1", - "find-up": "^4.1.0", - "get-package-type": "^0.1.0", - "js-yaml": "^3.13.1", - "resolve-from": "^5.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@istanbuljs/load-nyc-config/node_modules/argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "dev": true, - "dependencies": { - "sprintf-js": "~1.0.2" - } - }, - "node_modules/@istanbuljs/load-nyc-config/node_modules/find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dev": true, - "dependencies": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@istanbuljs/load-nyc-config/node_modules/js-yaml": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", - "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", - "dev": true, - "dependencies": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/@istanbuljs/load-nyc-config/node_modules/locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dev": true, - "dependencies": { - "p-locate": "^4.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@istanbuljs/load-nyc-config/node_modules/p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dev": true, - "dependencies": { - "p-try": "^2.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@istanbuljs/load-nyc-config/node_modules/p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dev": true, - "dependencies": { - "p-limit": "^2.2.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@istanbuljs/schema": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", - "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/@jest/console": { - "version": "29.6.0", - "resolved": "https://registry.npmjs.org/@jest/console/-/console-29.6.0.tgz", - "integrity": "sha512-anb6L1yg7uPQpytNVA5skRaXy3BmrsU8icRhTVNbWdjYWDDfy8M1Kq5HIVRpYoABdbpqsc5Dr+jtu4+qWRQBiQ==", - "dev": true, - "dependencies": { - "@jest/types": "^29.6.0", - "@types/node": "*", - "chalk": "^4.0.0", - "jest-message-util": "^29.6.0", - "jest-util": "^29.6.0", - "slash": "^3.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/core": { - "version": "29.6.0", - "resolved": "https://registry.npmjs.org/@jest/core/-/core-29.6.0.tgz", - "integrity": "sha512-5dbMHfY/5R9m8NbgmB3JlxQqooZ/ooPSOiwEQZZ+HODwJTbIu37seVcZNBK29aMdXtjvTRB3f6LCvkKq+r8uQA==", - "dev": true, - "dependencies": { - "@jest/console": "^29.6.0", - "@jest/reporters": "^29.6.0", - "@jest/test-result": "^29.6.0", - "@jest/transform": "^29.6.0", - "@jest/types": "^29.6.0", - "@types/node": "*", - "ansi-escapes": "^4.2.1", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "exit": "^0.1.2", - "graceful-fs": "^4.2.9", - "jest-changed-files": "^29.5.0", - "jest-config": "^29.6.0", - "jest-haste-map": "^29.6.0", - "jest-message-util": "^29.6.0", - "jest-regex-util": "^29.4.3", - "jest-resolve": "^29.6.0", - "jest-resolve-dependencies": "^29.6.0", - "jest-runner": "^29.6.0", - "jest-runtime": "^29.6.0", - "jest-snapshot": "^29.6.0", - "jest-util": "^29.6.0", - "jest-validate": "^29.6.0", - "jest-watcher": "^29.6.0", - "micromatch": "^4.0.4", - "pretty-format": "^29.6.0", - "slash": "^3.0.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - }, - "peerDependencies": { - "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" - }, - "peerDependenciesMeta": { - "node-notifier": { - "optional": true - } - } - }, - "node_modules/@jest/environment": { - "version": "29.6.0", - "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-29.6.0.tgz", - "integrity": "sha512-bUZLYUxYlUIsslBbxII0fq0kr1+friI3Gty+cRLmocGB1jdcAHs7FS8QdCDqedE8q4DZE1g/AJHH6OJZBLGGsg==", - "dev": true, - "dependencies": { - "@jest/fake-timers": "^29.6.0", - "@jest/types": "^29.6.0", - "@types/node": "*", - "jest-mock": "^29.6.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/expect": { - "version": "29.6.0", - "resolved": "https://registry.npmjs.org/@jest/expect/-/expect-29.6.0.tgz", - "integrity": "sha512-a7pISPW28Q3c0/pLwz4mQ6tbAI+hc8/0CJp9ix6e9U4dQ6TiHQX82CT5DV5BMWaw8bFH4E6zsfZxXdn6Ka23Bw==", - "dev": true, - "dependencies": { - "expect": "^29.6.0", - "jest-snapshot": "^29.6.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/expect-utils": { - "version": "29.6.0", - "resolved": "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-29.6.0.tgz", - "integrity": "sha512-LLSQQN7oypMSETKoPWpsWYVKJd9LQWmSDDAc4hUQ4JocVC7LAMy9R3ZMhlnLwbcFvQORZnZR7HM893Px6cJhvA==", - "dev": true, - "dependencies": { - "jest-get-type": "^29.4.3" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/fake-timers": { - "version": "29.6.0", - "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-29.6.0.tgz", - "integrity": "sha512-nuCU46AsZoskthWSDS2Aj6LARgyNcp5Fjx2qxsO/fPl1Wp1CJ+dBDqs0OkEcJK8FBeV/MbjH5efe79M2sHcV+A==", - "dev": true, - "dependencies": { - "@jest/types": "^29.6.0", - "@sinonjs/fake-timers": "^10.0.2", - "@types/node": "*", - "jest-message-util": "^29.6.0", - "jest-mock": "^29.6.0", - "jest-util": "^29.6.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/globals": { - "version": "29.6.0", - "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-29.6.0.tgz", - "integrity": "sha512-IQQ3hZ2D/hwEwXSMv5GbfhzdH0nTQR3KPYxnuW6gYWbd6+7/zgMz7Okn6EgBbNtJNONq03k5EKA6HqGyzRbpeg==", - "dev": true, - "dependencies": { - "@jest/environment": "^29.6.0", - "@jest/expect": "^29.6.0", - "@jest/types": "^29.6.0", - "jest-mock": "^29.6.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/reporters": { - "version": "29.6.0", - "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-29.6.0.tgz", - "integrity": "sha512-dWEq4HI0VvHcAD6XTtyBKKARLytyyWPIy1SvGOcU91106MfvHPdxZgupFwVHd8TFpZPpA3SebYjtwS5BUS76Rw==", - "dev": true, - "dependencies": { - "@bcoe/v8-coverage": "^0.2.3", - "@jest/console": "^29.6.0", - "@jest/test-result": "^29.6.0", - "@jest/transform": "^29.6.0", - "@jest/types": "^29.6.0", - "@jridgewell/trace-mapping": "^0.3.18", - "@types/node": "*", - "chalk": "^4.0.0", - "collect-v8-coverage": "^1.0.0", - "exit": "^0.1.2", - "glob": "^7.1.3", - "graceful-fs": "^4.2.9", - "istanbul-lib-coverage": "^3.0.0", - "istanbul-lib-instrument": "^5.1.0", - "istanbul-lib-report": "^3.0.0", - "istanbul-lib-source-maps": "^4.0.0", - "istanbul-reports": "^3.1.3", - "jest-message-util": "^29.6.0", - "jest-util": "^29.6.0", - "jest-worker": "^29.6.0", - "slash": "^3.0.0", - "string-length": "^4.0.1", - "strip-ansi": "^6.0.0", - "v8-to-istanbul": "^9.0.1" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - }, - "peerDependencies": { - "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" - }, - "peerDependenciesMeta": { - "node-notifier": { - "optional": true - } - } - }, - "node_modules/@jest/reporters/node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "dev": true, - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/@jest/schemas": { - "version": "29.6.0", - "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.6.0.tgz", - "integrity": "sha512-rxLjXyJBTL4LQeJW3aKo0M/+GkCOXsO+8i9Iu7eDb6KwtP65ayoDsitrdPBtujxQ88k4wI2FNYfa6TOGwSn6cQ==", - "dev": true, - "dependencies": { - "@sinclair/typebox": "^0.27.8" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/source-map": { - "version": "29.6.0", - "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-29.6.0.tgz", - "integrity": "sha512-oA+I2SHHQGxDCZpbrsCQSoMLb3Bz547JnM+jUr9qEbuw0vQlWZfpPS7CO9J7XiwKicEz9OFn/IYoLkkiUD7bzA==", - "dev": true, - "dependencies": { - "@jridgewell/trace-mapping": "^0.3.18", - "callsites": "^3.0.0", - "graceful-fs": "^4.2.9" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/test-result": { - "version": "29.6.0", - "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-29.6.0.tgz", - "integrity": "sha512-9qLb7xITeyWhM4yatn2muqfomuoCTOhv0QV9i7XiIyYi3QLfnvPv5NeJp5u0PZeutAOROMLKakOkmoAisOr3YQ==", - "dev": true, - "dependencies": { - "@jest/console": "^29.6.0", - "@jest/types": "^29.6.0", - "@types/istanbul-lib-coverage": "^2.0.0", - "collect-v8-coverage": "^1.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/test-sequencer": { - "version": "29.6.0", - "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-29.6.0.tgz", - "integrity": "sha512-HYCS3LKRQotKWj2mnA3AN13PPevYZu8MJKm12lzYojpJNnn6kI/3PWmr1At/e3tUu+FHQDiOyaDVuR4EV3ezBw==", - "dev": true, - "dependencies": { - "@jest/test-result": "^29.6.0", - "graceful-fs": "^4.2.9", - "jest-haste-map": "^29.6.0", - "slash": "^3.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/transform": { - "version": "29.6.0", - "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-29.6.0.tgz", - "integrity": "sha512-bhP/KxPo3e322FJ0nKAcb6WVK76ZYyQd1lWygJzoSqP8SYMSLdxHqP4wnPTI4WvbB8PKPDV30y5y7Tya4RHOBA==", - "dev": true, - "dependencies": { - "@babel/core": "^7.11.6", - "@jest/types": "^29.6.0", - "@jridgewell/trace-mapping": "^0.3.18", - "babel-plugin-istanbul": "^6.1.1", - "chalk": "^4.0.0", - "convert-source-map": "^2.0.0", - "fast-json-stable-stringify": "^2.1.0", - "graceful-fs": "^4.2.9", - "jest-haste-map": "^29.6.0", - "jest-regex-util": "^29.4.3", - "jest-util": "^29.6.0", - "micromatch": "^4.0.4", - "pirates": "^4.0.4", - "slash": "^3.0.0", - "write-file-atomic": "^4.0.2" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/transform/node_modules/convert-source-map": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", - "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", - "dev": true - }, - "node_modules/@jest/transform/node_modules/write-file-atomic": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-4.0.2.tgz", - "integrity": "sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==", - "dev": true, - "dependencies": { - "imurmurhash": "^0.1.4", - "signal-exit": "^3.0.7" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/@jest/types": { - "version": "29.6.0", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.0.tgz", - "integrity": "sha512-8XCgL9JhqbJTFnMRjEAO+TuW251+MoMd5BSzLiE3vvzpQ8RlBxy8NoyNkDhs3K3OL3HeVinlOl9or5p7GTeOLg==", - "dev": true, - "dependencies": { - "@jest/schemas": "^29.6.0", - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^17.0.8", - "chalk": "^4.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jridgewell/gen-mapping": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.1.1.tgz", - "integrity": "sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w==", - "dev": true, - "dependencies": { - "@jridgewell/set-array": "^1.0.0", - "@jridgewell/sourcemap-codec": "^1.4.10" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/resolve-uri": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", - "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==", - "dev": true, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/set-array": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", - "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", - "dev": true, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.4.14", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", - "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==", - "dev": true - }, - "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.18", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.18.tgz", - "integrity": "sha512-w+niJYzMHdd7USdiH2U6869nqhD2nbfZXND5Yp93qIbEmnDNk7PD48o+YchRVpzMU7M6jVCbenTR7PA1FLQ9pA==", - "dev": true, - "dependencies": { - "@jridgewell/resolve-uri": "3.1.0", - "@jridgewell/sourcemap-codec": "1.4.14" - } - }, - "node_modules/@jsdevtools/ono": { - "version": "7.1.3", - "resolved": "https://registry.npmjs.org/@jsdevtools/ono/-/ono-7.1.3.tgz", - "integrity": "sha512-4JQNk+3mVzK3xh2rqd6RB4J46qUR19azEHBneZyTZM+c456qOrbbM/5xcR8huNCCcbVt7+UmizG6GuUvPvKUYg==", - "dev": true - }, - "node_modules/@koa/router": { - "version": "12.0.0", - "resolved": "https://registry.npmjs.org/@koa/router/-/router-12.0.0.tgz", - "integrity": "sha512-cnnxeKHXlt7XARJptflGURdJaO+ITpNkOHmQu7NHmCoRinPbyvFzce/EG/E8Zy81yQ1W9MoSdtklc3nyaDReUw==", - "dependencies": { - "http-errors": "^2.0.0", - "koa-compose": "^4.1.0", - "methods": "^1.1.2", - "path-to-regexp": "^6.2.1" - }, - "engines": { - "node": ">= 12" - } - }, - "node_modules/@koa/router/node_modules/http-errors": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", - "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", - "dependencies": { - "depd": "2.0.0", - "inherits": "2.0.4", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "toidentifier": "1.0.1" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/@koa/router/node_modules/statuses": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", - "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/@ndhoule/extend": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@ndhoule/extend/-/extend-2.0.0.tgz", - "integrity": "sha512-xb77tVVGDGwjy25a6RmBiiBQ9uvxhkG0OEpVkQ74oNFsy9u+4PGp5BIIblmJZmJBMgXiKxZtkr4GcmHCNVubBQ==" - }, - "node_modules/@nicolo-ribaudo/semver-v6": { - "version": "6.3.3", - "resolved": "https://registry.npmjs.org/@nicolo-ribaudo/semver-v6/-/semver-v6-6.3.3.tgz", - "integrity": "sha512-3Yc1fUTs69MG/uZbJlLSI3JISMn2UV2rg+1D/vROUqZyh3l6iYHCs7GMp+M40ZD7yOdDbYjJcU1oTJhrc+dGKg==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/@nodelib/fs.scandir": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", - "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", - "dev": true, - "dependencies": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.stat": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", - "dev": true, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.walk": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", - "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", - "dev": true, - "dependencies": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@pkgjs/parseargs": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", - "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", - "dev": true, - "optional": true, - "engines": { - "node": ">=14" - } - }, - "node_modules/@sideway/address": { - "version": "4.1.4", - "resolved": "https://registry.npmjs.org/@sideway/address/-/address-4.1.4.tgz", - "integrity": "sha512-7vwq+rOHVWjyXxVlR76Agnvhy8I9rpzjosTESvmhNeXOXdZZB15Fl+TI9x1SiHZH5Jv2wTGduSxFDIaq0m3DUw==", - "dependencies": { - "@hapi/hoek": "^9.0.0" - } - }, - "node_modules/@sideway/formula": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@sideway/formula/-/formula-3.0.1.tgz", - "integrity": "sha512-/poHZJJVjx3L+zVD6g9KgHfYnb443oi7wLu/XKojDviHy6HOEOA6z1Trk5aR1dGcmPenJEgb2sK2I80LeS3MIg==" - }, - "node_modules/@sideway/pinpoint": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@sideway/pinpoint/-/pinpoint-2.0.0.tgz", - "integrity": "sha512-RNiOoTPkptFtSVzQevY/yWtZwf/RxyVnPy/OcA9HBM3MlGDnBEYL5B41H0MTn0Uec8Hi+2qUtTfG2WWZBmMejQ==" - }, - "node_modules/@sinclair/typebox": { - "version": "0.27.8", - "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz", - "integrity": "sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==", - "dev": true - }, - "node_modules/@sindresorhus/is": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-0.7.0.tgz", - "integrity": "sha512-ONhaKPIufzzrlNbqtWFFd+jlnemX6lJAgq9ZeiZtS7I1PIf/la7CW4m83rTXRnVnsMbW2k56pGYu7AUFJD9Pow==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/@sinonjs/commons": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-3.0.0.tgz", - "integrity": "sha512-jXBtWAF4vmdNmZgD5FoKsVLv3rPgDnLgPbU84LIJ3otV44vJlDRokVng5v8NFJdCf/da9legHcKaRuZs4L7faA==", - "dev": true, - "dependencies": { - "type-detect": "4.0.8" - } - }, - "node_modules/@sinonjs/fake-timers": { - "version": "10.3.0", - "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-10.3.0.tgz", - "integrity": "sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA==", - "dev": true, - "dependencies": { - "@sinonjs/commons": "^3.0.0" - } - }, - "node_modules/@smithy/abort-controller": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@smithy/abort-controller/-/abort-controller-1.0.1.tgz", - "integrity": "sha512-An6irzp9NCji2JtJHhrEFlDbxLwHd6c6Y9fq3ZeomyUR8BIXlGXVTxsemUSZVVgOq3166iYbYs/CrPAmgRSFLw==", - "dependencies": { - "@smithy/types": "^1.1.0", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@smithy/config-resolver": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@smithy/config-resolver/-/config-resolver-1.0.1.tgz", - "integrity": "sha512-quj0xUiEVG/UHfY82EtthR/+S5/17p3IxXArC3NFSNqryMobWbG9oWgJy2s2cgUSVZLzxevjKKvxrilK7JEDaA==", - "dependencies": { - "@smithy/types": "^1.1.0", - "@smithy/util-config-provider": "^1.0.1", - "@smithy/util-middleware": "^1.0.1", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@smithy/credential-provider-imds": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@smithy/credential-provider-imds/-/credential-provider-imds-1.0.1.tgz", - "integrity": "sha512-hkRJoxVCh4CEt1zYOBElE+G/MV6lyx3g68hSJpesM4pwMT/bzEVo5E5XzXY+6dVq8yszeatWKbFuqCCBQte8tg==", - "dependencies": { - "@smithy/node-config-provider": "^1.0.1", - "@smithy/property-provider": "^1.0.1", - "@smithy/types": "^1.1.0", - "@smithy/url-parser": "^1.0.1", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@smithy/eventstream-codec": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@smithy/eventstream-codec/-/eventstream-codec-1.0.1.tgz", - "integrity": "sha512-cpcTXQEOEs2wEvIyxW/iTHJ2m0RVqoEOTjjWEXD6SY8Gcs3FCFP6E8MXadC098tdH5ctMIUXc8POXyMpxzGnjw==", - "dependencies": { - "@aws-crypto/crc32": "3.0.0", - "@smithy/types": "^1.1.0", - "@smithy/util-hex-encoding": "^1.0.1", - "tslib": "^2.5.0" - } - }, - "node_modules/@smithy/eventstream-serde-browser": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-browser/-/eventstream-serde-browser-1.0.1.tgz", - "integrity": "sha512-oc8vxe+AU2RzvXH/Ehh0TzM/Nsw3I3ywu7V3qaCzqdkBIntAwK9JGZqcSDsqTK0WxZKBRgFIEwopcuZ2slVnFQ==", - "dependencies": { - "@smithy/eventstream-serde-universal": "^1.0.1", - "@smithy/types": "^1.1.0", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@smithy/eventstream-serde-config-resolver": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-config-resolver/-/eventstream-serde-config-resolver-1.0.1.tgz", - "integrity": "sha512-TJwaXima0djnNY819utO1j93qZHaheFH1bhHxBkMrImtEOuXY48Tjma/L2m8swkIq8dy8jFC9hrYOkD0eYHkFA==", - "dependencies": { - "@smithy/types": "^1.1.0", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@smithy/eventstream-serde-node": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-node/-/eventstream-serde-node-1.0.1.tgz", - "integrity": "sha512-JEj8w7IRs4l+kcwKxbv3pNuu8n7ORC4pMFrIOrM4rERzrRnI7vMNTRzvAPGYA53rqm/Y9tBA9dw4C+H6hLXcsA==", - "dependencies": { - "@smithy/eventstream-serde-universal": "^1.0.1", - "@smithy/types": "^1.1.0", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@smithy/eventstream-serde-universal": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-universal/-/eventstream-serde-universal-1.0.1.tgz", - "integrity": "sha512-c6m9DH7m6D2S93dof4wSxysaGSQdauO20TNcSePzrgHd4rkTnz5pqZ1a7Pt22q2SKf09SvTugq5cV2Sy4r8zHw==", - "dependencies": { - "@smithy/eventstream-codec": "^1.0.1", - "@smithy/types": "^1.1.0", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@smithy/fetch-http-handler": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@smithy/fetch-http-handler/-/fetch-http-handler-1.0.1.tgz", - "integrity": "sha512-/e2A8eOMk4FVZBQ0o6uF/ttLtFZcmsK5MIwDu1UE3crM4pCAIP19Ul8U9rdLlHhIu81X4AcJmSw55RDSpVRL/w==", - "dependencies": { - "@smithy/protocol-http": "^1.1.0", - "@smithy/querystring-builder": "^1.0.1", - "@smithy/types": "^1.1.0", - "@smithy/util-base64": "^1.0.1", - "tslib": "^2.5.0" - } - }, - "node_modules/@smithy/hash-node": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@smithy/hash-node/-/hash-node-1.0.1.tgz", - "integrity": "sha512-eCz08BySBcOjVObjbRAS/XMKUGY4ujnuS+GoWeEpzpCSKDnO8/YQ0rStRt4C0llRmhApizYc1tK9DiJwfvXcBg==", - "dependencies": { - "@smithy/types": "^1.1.0", - "@smithy/util-buffer-from": "^1.0.1", - "@smithy/util-utf8": "^1.0.1", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@smithy/invalid-dependency": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@smithy/invalid-dependency/-/invalid-dependency-1.0.1.tgz", - "integrity": "sha512-kib63GFlAzRn/wf8M0cRWrZA1cyOy5IvpTkLavCY782DPFMP0EaEeD6VrlNIOvD6ncf7uCJ68HqckhwK1qLT3g==", - "dependencies": { - "@smithy/types": "^1.1.0", - "tslib": "^2.5.0" - } - }, - "node_modules/@smithy/is-array-buffer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-1.0.1.tgz", - "integrity": "sha512-fHSTW70gANnzPYWNDcWkPXpp+QMbHhKozbQm/+Denkhp4gwSiPuAovWZRpJa9sXO+Q4dOnNzYN2max1vTCEroA==", - "dependencies": { - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@smithy/middleware-content-length": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@smithy/middleware-content-length/-/middleware-content-length-1.0.1.tgz", - "integrity": "sha512-vWWigayk5i2cFp9xPX5vdzHyK+P0t/xZ3Ovp4Ss+c8JQ1Hlq2kpJZVWtTKsmdfND5rVo5lu0kD5wgAMUCcmuhw==", - "dependencies": { - "@smithy/protocol-http": "^1.1.0", - "@smithy/types": "^1.1.0", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@smithy/middleware-endpoint": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@smithy/middleware-endpoint/-/middleware-endpoint-1.0.2.tgz", - "integrity": "sha512-F3CyXgjtDI4quGFkDmVNytt6KMwlzzeMxtopk6Edue4uKdKcMC1vUmoRS5xTbFzKDDp4XwpnEV7FshPaL3eCPw==", - "dependencies": { - "@smithy/middleware-serde": "^1.0.1", - "@smithy/types": "^1.1.0", - "@smithy/url-parser": "^1.0.1", - "@smithy/util-middleware": "^1.0.1", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@smithy/middleware-retry": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@smithy/middleware-retry/-/middleware-retry-1.0.3.tgz", - "integrity": "sha512-ZRsjG8adtxQ456FULPqPFmWtrW44Fq8IgdQvQB+rC2RSho3OUzS+TiEIwb5Zs6rf2IoewITKtfdtsUZcxXO0ng==", - "dependencies": { - "@smithy/protocol-http": "^1.1.0", - "@smithy/service-error-classification": "^1.0.2", - "@smithy/types": "^1.1.0", - "@smithy/util-middleware": "^1.0.1", - "@smithy/util-retry": "^1.0.3", - "tslib": "^2.5.0", - "uuid": "^8.3.2" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@smithy/middleware-retry/node_modules/uuid": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", - "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", - "bin": { - "uuid": "dist/bin/uuid" - } - }, - "node_modules/@smithy/middleware-serde": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@smithy/middleware-serde/-/middleware-serde-1.0.1.tgz", - "integrity": "sha512-bn5lWk8UUeXFCQfkrNErz5SbeNd+2hgYegHMLsOLPt4URDIsyREar6wMsdsR+8UCdgR5s8udG3Zalgc7puizIQ==", - "dependencies": { - "@smithy/types": "^1.1.0", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@smithy/middleware-stack": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@smithy/middleware-stack/-/middleware-stack-1.0.1.tgz", - "integrity": "sha512-T6+gsAO1JYamOJqmORCrByDeQ/NB+ggjHb33UDOgdX4xIjXz/FB/3UqHgQu6PL1cSFrK+i4oteDIwqARDs/Szw==", - "dependencies": { - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@smithy/node-config-provider": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@smithy/node-config-provider/-/node-config-provider-1.0.1.tgz", - "integrity": "sha512-FRxifH/J2SgOaVLihIqBFuGhiHR/NfzbZYp5nYO7BGgT/gc/f9nAuuRJcEy/hwO3aI6ThyG5apH4tGec6A2sCw==", - "dependencies": { - "@smithy/property-provider": "^1.0.1", - "@smithy/shared-ini-file-loader": "^1.0.1", - "@smithy/types": "^1.1.0", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@smithy/node-http-handler": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@smithy/node-http-handler/-/node-http-handler-1.0.2.tgz", - "integrity": "sha512-PzPrGRSt3kNuruLCeR4ffJp57ZLVnIukMXVL3Ppr65ZoxiE+HBsOVAa/Z/T+4HzjCM6RaXnnmB8YKfsDjlb0iA==", - "dependencies": { - "@smithy/abort-controller": "^1.0.1", - "@smithy/protocol-http": "^1.1.0", - "@smithy/querystring-builder": "^1.0.1", - "@smithy/types": "^1.1.0", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@smithy/property-provider": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@smithy/property-provider/-/property-provider-1.0.1.tgz", - "integrity": "sha512-3EG/61Ls1MrgEaafpltXBJHSqFPqmTzEX7QKO7lOEHuYGmGYzZ08t1SsTgd1vM74z0IihoZyGPynZ7WmXKvTeg==", - "dependencies": { - "@smithy/types": "^1.1.0", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@smithy/protocol-http": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-1.1.0.tgz", - "integrity": "sha512-H5y/kZOqfJSqRkwtcAoVbqONmhdXwSgYNJ1Glk5Ry8qlhVVy5qUzD9EklaCH8/XLnoCsLO/F/Giee8MIvaBRkg==", - "dependencies": { - "@smithy/types": "^1.1.0", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@smithy/querystring-builder": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@smithy/querystring-builder/-/querystring-builder-1.0.1.tgz", - "integrity": "sha512-J5Tzkw1PMtu01h6wl+tlN5vsyROmS6/z5lEfNlLo/L4ELHeVkQ4Q0PEIjDddPLfjVLCm8biQTESE5GCMixSRNQ==", - "dependencies": { - "@smithy/types": "^1.1.0", - "@smithy/util-uri-escape": "^1.0.1", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@smithy/querystring-parser": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@smithy/querystring-parser/-/querystring-parser-1.0.1.tgz", - "integrity": "sha512-zauxdMc3cwxoLitI5DZqH7xN6Fk0mwRxrUMAETbav2j6Se2U0UGak/55rZcDg2yGzOURaLYi5iOm1gHr98P+Bw==", - "dependencies": { - "@smithy/types": "^1.1.0", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@smithy/service-error-classification": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@smithy/service-error-classification/-/service-error-classification-1.0.2.tgz", - "integrity": "sha512-Q5CCuzYL5FGo6Rr/O+lZxXHm2hrRgbmMn8MgyjqZUWZg20COg20DuNtIbho2iht6CoB7jOpmpBqhWizLlzUZgg==", - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@smithy/shared-ini-file-loader": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-1.0.1.tgz", - "integrity": "sha512-EztziuIPoNronENGqh+MWVKJErA4rJpaPzJCPukzBeEoG2USka0/q4B5Mr/1zszOnrb49fPNh4u3u5LfiH7QzA==", - "dependencies": { - "@smithy/types": "^1.1.0", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@smithy/signature-v4": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@smithy/signature-v4/-/signature-v4-1.0.1.tgz", - "integrity": "sha512-2D69je14ou1vBTnAQeysSK4QVMm0j3WHS3MDg/DnHnFFcXRCzVl/xAARO7POD8+fpi4tMFPs8Z4hzo1Zw40L0Q==", - "dependencies": { - "@smithy/eventstream-codec": "^1.0.1", - "@smithy/is-array-buffer": "^1.0.1", - "@smithy/types": "^1.1.0", - "@smithy/util-hex-encoding": "^1.0.1", - "@smithy/util-middleware": "^1.0.1", - "@smithy/util-uri-escape": "^1.0.1", - "@smithy/util-utf8": "^1.0.1", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@smithy/smithy-client": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@smithy/smithy-client/-/smithy-client-1.0.3.tgz", - "integrity": "sha512-Wh1mNP/1yUZK0uYkgCQ6NMxpBT3Fmc45TMdUfOlH1xD2zGYL7U4yDHFOhEZdi/suyjaelFobXB2p9pPIw6LjRQ==", - "dependencies": { - "@smithy/middleware-stack": "^1.0.1", - "@smithy/types": "^1.1.0", - "@smithy/util-stream": "^1.0.1", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@smithy/types": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@smithy/types/-/types-1.1.0.tgz", - "integrity": "sha512-KzmvisMmuwD2jZXuC9e65JrgsZM97y5NpDU7g347oB+Q+xQLU6hQZ5zFNNbEfwwOJHoOvEVTna+dk1h/lW7alw==", - "dependencies": { - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@smithy/url-parser": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@smithy/url-parser/-/url-parser-1.0.1.tgz", - "integrity": "sha512-33vWEtE6HzmwjEcEb4I58XMLRAchwPS93YhfDyXAXr1jwDCzfXmMayQwwpyW847rpWj0XJimxqia8q0z+k/ybw==", - "dependencies": { - "@smithy/querystring-parser": "^1.0.1", - "@smithy/types": "^1.1.0", - "tslib": "^2.5.0" - } - }, - "node_modules/@smithy/util-base64": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@smithy/util-base64/-/util-base64-1.0.1.tgz", - "integrity": "sha512-rJcpRi/yUi6TyCEkjdTH86/ExBuKlfctEXhG9/4gMJ3/cnPcHJJnr0mQ9evSEO+3DbpT/Nxq90bcTBdTIAmCig==", - "dependencies": { - "@smithy/util-buffer-from": "^1.0.1", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@smithy/util-body-length-browser": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@smithy/util-body-length-browser/-/util-body-length-browser-1.0.1.tgz", - "integrity": "sha512-Pdp744fmF7E1NWoSb7256Anhm8eYoCubvosdMwXzOnHuPRVbDa15pKUz2027K3+jrfGpXo1r+MnDerajME1Osw==", - "dependencies": { - "tslib": "^2.5.0" - } - }, - "node_modules/@smithy/util-body-length-node": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@smithy/util-body-length-node/-/util-body-length-node-1.0.1.tgz", - "integrity": "sha512-4PIHjDFwG07SNensAiVq/CJmubEVuwclWSYOTNtzBNTvxOeGLznvygkGYgPzS3erByT8C4S9JvnLYgtrsVV3nQ==", - "dependencies": { - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@smithy/util-buffer-from": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-1.0.1.tgz", - "integrity": "sha512-363N7Wq0ceUgE5lLe6kaR6GlJs2/m4r9V6bRMfIszb6P1FZbbRRM2FQYUWWPFSsRymm9mJL18b3fjiVsIvhDGg==", - "dependencies": { - "@smithy/is-array-buffer": "^1.0.1", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@smithy/util-config-provider": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@smithy/util-config-provider/-/util-config-provider-1.0.1.tgz", - "integrity": "sha512-4Qy38Oy5/q43MpTwCLV1P+7NeaOp4W2etQDxMjgEeRlOyGGNlgttn0syi4g2rVSukFVqQ6FbeRs5xbnFmS6kaQ==", - "dependencies": { - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@smithy/util-defaults-mode-browser": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-browser/-/util-defaults-mode-browser-1.0.1.tgz", - "integrity": "sha512-/9ObwNch4Z/NJYfkO4AvqBWku60Ju+c2Ck32toPOLmWe/V6eI9FLn8C1abri+GxDRCkLIqvkaWU1lgZ3nWZIIw==", - "dependencies": { - "@smithy/property-provider": "^1.0.1", - "@smithy/types": "^1.1.0", - "bowser": "^2.11.0", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">= 10.0.0" - } - }, - "node_modules/@smithy/util-defaults-mode-node": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-node/-/util-defaults-mode-node-1.0.1.tgz", - "integrity": "sha512-XQM3KvqRLgv7bwAzVkXTITkOmcOINoG9icJiGT8FA0zV35lY5UvyIsg5kHw01xigQS8ufa/33AwG3ZoXip+V5g==", - "dependencies": { - "@smithy/config-resolver": "^1.0.1", - "@smithy/credential-provider-imds": "^1.0.1", - "@smithy/node-config-provider": "^1.0.1", - "@smithy/property-provider": "^1.0.1", - "@smithy/types": "^1.1.0", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">= 10.0.0" - } - }, - "node_modules/@smithy/util-hex-encoding": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@smithy/util-hex-encoding/-/util-hex-encoding-1.0.1.tgz", - "integrity": "sha512-FPTtMz/t02/rbfq5Pdll/TWUYP+GVFLCQNr+DgifrLzVRU0g8rdRjyFpDh8nPTdkDDusTTo9P1bepAYj68s0eA==", - "dependencies": { - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@smithy/util-middleware": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@smithy/util-middleware/-/util-middleware-1.0.1.tgz", - "integrity": "sha512-u9akN3Zmbr0vZH4F+2iehG7cFg+3fvDfnvS/hhsXH4UHuhqiQ+ADefibnLzPoz1pooY7rvwaQ/TVHyJmZHdLdQ==", - "dependencies": { - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@smithy/util-retry": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@smithy/util-retry/-/util-retry-1.0.3.tgz", - "integrity": "sha512-gYQnZDD8I2XJFspVwUISyukjPWVikTzKR0IdG8hCWYPTpeULFl1o6yzXlT5SL63TBkuEYl0R1/93cdNtMiNnoA==", - "dependencies": { - "@smithy/service-error-classification": "^1.0.2", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">= 14.0.0" - } - }, - "node_modules/@smithy/util-stream": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@smithy/util-stream/-/util-stream-1.0.1.tgz", - "integrity": "sha512-4aBCIz35aZAnt2Rbq341KrnUzGhWv2/Zu8HouJqYLvSWCzlrvsNCGlXP4e70Kjzcw8hSuuCNtdUICwQ5qUWLxg==", - "dependencies": { - "@smithy/fetch-http-handler": "^1.0.1", - "@smithy/node-http-handler": "^1.0.2", - "@smithy/types": "^1.1.0", - "@smithy/util-base64": "^1.0.1", - "@smithy/util-buffer-from": "^1.0.1", - "@smithy/util-hex-encoding": "^1.0.1", - "@smithy/util-utf8": "^1.0.1", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@smithy/util-uri-escape": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@smithy/util-uri-escape/-/util-uri-escape-1.0.1.tgz", - "integrity": "sha512-IJUrRnXKEIc+PKnU1XzTsIENVR+60jUDPBP3iWX/EvuuT3Xfob47x1FGUe2c3yMXNuU6ax8VDk27hL5LKNoehQ==", - "dependencies": { - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@smithy/util-utf8": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-1.0.1.tgz", - "integrity": "sha512-iX6XHpjh4DFEUIBSKp2tjy3pYnLQMsJ62zYi1BVAC0kobE6p8AVpiZnxsU3ZkgQatAsUaEspFHUZ7CL7oSqaPQ==", - "dependencies": { - "@smithy/util-buffer-from": "^1.0.1", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@smithy/util-waiter": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@smithy/util-waiter/-/util-waiter-1.0.1.tgz", - "integrity": "sha512-dsn8O0s3pFIgxFzySLe1dv0w4tEQizEP6UqbgZ4r/Kar4n8pSdrPi6DJg8BzXwkwEIZpMtV4/nhSeGZ7HksDXA==", - "dependencies": { - "@smithy/abort-controller": "^1.0.1", - "@smithy/types": "^1.1.0", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@tsconfig/node10": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.9.tgz", - "integrity": "sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA==", - "dev": true - }, - "node_modules/@tsconfig/node12": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz", - "integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==", - "dev": true - }, - "node_modules/@tsconfig/node14": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz", - "integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==", - "dev": true - }, - "node_modules/@tsconfig/node16": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.3.tgz", - "integrity": "sha512-yOlFc+7UtL/89t2ZhjPvvB/DeAr3r+Dq58IgzsFkOAvVC6NMJXmCGjbptdXdR9qsX7pKcTL+s87FtYREi2dEEQ==", - "dev": true - }, - "node_modules/@types/accepts": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/@types/accepts/-/accepts-1.3.5.tgz", - "integrity": "sha512-jOdnI/3qTpHABjM5cx1Hc0sKsPoYCp+DP/GJRGtDlPd7fiV9oXGGIcjW/ZOxLIvjGz8MA+uMZI9metHlgqbgwQ==", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/babel__core": { - "version": "7.1.20", - "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.1.20.tgz", - "integrity": "sha512-PVb6Bg2QuscZ30FvOU7z4guG6c926D9YRvOxEaelzndpMsvP+YM74Q/dAFASpg2l6+XLalxSGxcq/lrgYWZtyQ==", - "dev": true, - "dependencies": { - "@babel/parser": "^7.1.0", - "@babel/types": "^7.0.0", - "@types/babel__generator": "*", - "@types/babel__template": "*", - "@types/babel__traverse": "*" - } - }, - "node_modules/@types/babel__generator": { - "version": "7.6.4", - "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.4.tgz", - "integrity": "sha512-tFkciB9j2K755yrTALxD44McOrk+gfpIpvC3sxHjRawj6PfnQxrse4Clq5y/Rq+G3mrBurMax/lG8Qn2t9mSsg==", - "dev": true, - "dependencies": { - "@babel/types": "^7.0.0" - } - }, - "node_modules/@types/babel__template": { - "version": "7.4.1", - "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.1.tgz", - "integrity": "sha512-azBFKemX6kMg5Io+/rdGT0dkGreboUVR0Cdm3fz9QJWpaQGJRQXl7C+6hOTCZcMll7KFyEQpgbYI2lHdsS4U7g==", - "dev": true, - "dependencies": { - "@babel/parser": "^7.1.0", - "@babel/types": "^7.0.0" - } - }, - "node_modules/@types/babel__traverse": { - "version": "7.18.3", - "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.18.3.tgz", - "integrity": "sha512-1kbcJ40lLB7MHsj39U4Sh1uTd2E7rLEa79kmDpI6cy+XiXsteB3POdQomoq4FxszMrO3ZYchkhYJw7A2862b3w==", - "dev": true, - "dependencies": { - "@babel/types": "^7.3.0" - } - }, - "node_modules/@types/body-parser": { - "version": "1.19.2", - "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.2.tgz", - "integrity": "sha512-ALYone6pm6QmwZoAgeyNksccT9Q4AWZQ6PvfwR37GT6r6FWUPguq6sUmNGSMV2Wr761oQoBxwGGa6DR5o1DC9g==", - "dependencies": { - "@types/connect": "*", - "@types/node": "*" - } - }, - "node_modules/@types/connect": { - "version": "3.4.35", - "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.35.tgz", - "integrity": "sha512-cdeYyv4KWoEgpBISTxWvqYsVy444DOqehiF3fM3ne10AmJ62RSyNkUnxMJXHQWRQQX2eR94m5y1IZyDwBjV9FQ==", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/content-disposition": { - "version": "0.5.5", - "resolved": "https://registry.npmjs.org/@types/content-disposition/-/content-disposition-0.5.5.tgz", - "integrity": "sha512-v6LCdKfK6BwcqMo+wYW05rLS12S0ZO0Fl4w1h4aaZMD7bqT3gVUns6FvLJKGZHQmYn3SX55JWGpziwJRwVgutA==" - }, - "node_modules/@types/cookies": { - "version": "0.7.7", - "resolved": "https://registry.npmjs.org/@types/cookies/-/cookies-0.7.7.tgz", - "integrity": "sha512-h7BcvPUogWbKCzBR2lY4oqaZbO3jXZksexYJVFvkrFeLgbZjQkU4x8pRq6eg2MHXQhY0McQdqmmsxRWlVAHooA==", - "dependencies": { - "@types/connect": "*", - "@types/express": "*", - "@types/keygrip": "*", - "@types/node": "*" - } - }, - "node_modules/@types/express": { - "version": "4.17.17", - "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.17.tgz", - "integrity": "sha512-Q4FmmuLGBG58btUnfS1c1r/NQdlp3DMfGDGig8WhfpA2YRUtEkxAjkZb0yvplJGYdF1fsQ81iMDcH24sSCNC/Q==", - "dependencies": { - "@types/body-parser": "*", - "@types/express-serve-static-core": "^4.17.33", - "@types/qs": "*", - "@types/serve-static": "*" - } - }, - "node_modules/@types/express-serve-static-core": { - "version": "4.17.35", - "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.35.tgz", - "integrity": "sha512-wALWQwrgiB2AWTT91CB62b6Yt0sNHpznUXeZEcnPU3DRdlDIz74x8Qg1UUYKSVFi+va5vKOLYRBI1bRKiLLKIg==", - "dependencies": { - "@types/node": "*", - "@types/qs": "*", - "@types/range-parser": "*", - "@types/send": "*" - } - }, - "node_modules/@types/graceful-fs": { - "version": "4.1.6", - "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.6.tgz", - "integrity": "sha512-Sig0SNORX9fdW+bQuTEovKj3uHcUL6LQKbCrrqb1X7J6/ReAbhCXRAhc+SMejhLELFj2QcyuxmUooZ4bt5ReSw==", - "dev": true, - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/http-assert": { - "version": "1.5.3", - "resolved": "https://registry.npmjs.org/@types/http-assert/-/http-assert-1.5.3.tgz", - "integrity": "sha512-FyAOrDuQmBi8/or3ns4rwPno7/9tJTijVW6aQQjK02+kOQ8zmoNg2XJtAuQhvQcy1ASJq38wirX5//9J1EqoUA==" - }, - "node_modules/@types/http-errors": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@types/http-errors/-/http-errors-2.0.1.tgz", - "integrity": "sha512-/K3ds8TRAfBvi5vfjuz8y6+GiAYBZ0x4tXv1Av6CWBWn0IlADc+ZX9pMq7oU0fNQPnBwIZl3rmeLp6SBApbxSQ==" - }, - "node_modules/@types/istanbul-lib-coverage": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.4.tgz", - "integrity": "sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g==", - "dev": true - }, - "node_modules/@types/istanbul-lib-report": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", - "integrity": "sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg==", - "dev": true, - "dependencies": { - "@types/istanbul-lib-coverage": "*" - } - }, - "node_modules/@types/istanbul-reports": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz", - "integrity": "sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw==", - "dev": true, - "dependencies": { - "@types/istanbul-lib-report": "*" - } - }, - "node_modules/@types/jest": { - "version": "29.5.1", - "resolved": "https://registry.npmjs.org/@types/jest/-/jest-29.5.1.tgz", - "integrity": "sha512-tEuVcHrpaixS36w7hpsfLBLpjtMRJUE09/MHXn923LOVojDwyC14cWcfc0rDs0VEfUyYmt/+iX1kxxp+gZMcaQ==", - "dev": true, - "dependencies": { - "expect": "^29.0.0", - "pretty-format": "^29.0.0" - } - }, - "node_modules/@types/json-schema": { - "version": "7.0.12", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.12.tgz", - "integrity": "sha512-Hr5Jfhc9eYOQNPYO5WLDq/n4jqijdHNlDXjuAQkkt+mWdQR+XJToOHrsD4cPaMXpn6KO7y2+wM8AZEs8VpBLVA==", - "dev": true - }, - "node_modules/@types/json5": { - "version": "0.0.29", - "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", - "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==", - "dev": true - }, - "node_modules/@types/keygrip": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@types/keygrip/-/keygrip-1.0.2.tgz", - "integrity": "sha512-GJhpTepz2udxGexqos8wgaBx4I/zWIDPh/KOGEwAqtuGDkOUJu5eFvwmdBX4AmB8Odsr+9pHCQqiAqDL/yKMKw==" - }, - "node_modules/@types/koa": { - "version": "2.13.6", - "resolved": "https://registry.npmjs.org/@types/koa/-/koa-2.13.6.tgz", - "integrity": "sha512-diYUfp/GqfWBAiwxHtYJ/FQYIXhlEhlyaU7lB/bWQrx4Il9lCET5UwpFy3StOAohfsxxvEQ11qIJgT1j2tfBvw==", - "dependencies": { - "@types/accepts": "*", - "@types/content-disposition": "*", - "@types/cookies": "*", - "@types/http-assert": "*", - "@types/http-errors": "*", - "@types/keygrip": "*", - "@types/koa-compose": "*", - "@types/node": "*" - } - }, - "node_modules/@types/koa-bodyparser": { - "version": "4.3.10", - "resolved": "https://registry.npmjs.org/@types/koa-bodyparser/-/koa-bodyparser-4.3.10.tgz", - "integrity": "sha512-6ae05pjhmrmGhUR8GYD5qr5p9LTEMEGfGXCsK8VaSL+totwigm8+H/7MHW7K4854CMeuwRAubT8qcc/EagaeIA==", - "dev": true, - "dependencies": { - "@types/koa": "*" - } - }, - "node_modules/@types/koa-compose": { - "version": "3.2.5", - "resolved": "https://registry.npmjs.org/@types/koa-compose/-/koa-compose-3.2.5.tgz", - "integrity": "sha512-B8nG/OoE1ORZqCkBVsup/AKcvjdgoHnfi4pZMn5UwAPCbhk/96xyv284eBYW8JlQbQ7zDmnpFr68I/40mFoIBQ==", - "dependencies": { - "@types/koa": "*" - } - }, - "node_modules/@types/lodash": { - "version": "4.14.197", - "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.197.tgz", - "integrity": "sha512-BMVOiWs0uNxHVlHBgzTIqJYmj+PgCo4euloGF+5m4okL3rEYzM2EEv78mw8zWSMM57dM7kVIgJ2QDvwHSoCI5g==", - "dev": true - }, - "node_modules/@types/mime": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.2.tgz", - "integrity": "sha512-YATxVxgRqNH6nHEIsvg6k2Boc1JHI9ZbH5iWFFv/MTkchz3b1ieGDa5T0a9RznNdI0KhVbdbWSN+KWWrQZRxTw==" - }, - "node_modules/@types/minimist": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/@types/minimist/-/minimist-1.2.2.tgz", - "integrity": "sha512-jhuKLIRrhvCPLqwPcx6INqmKeiA5EWrsCOPhrlFSrbrmU4ZMPjj5Ul/oLCMDO98XRUIwVm78xICz4EPCektzeQ==", - "dev": true - }, - "node_modules/@types/node": { - "version": "20.2.5", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.2.5.tgz", - "integrity": "sha512-JJulVEQXmiY9Px5axXHeYGLSjhkZEnD+MDPDGbCbIAbMslkKwmygtZFy1X6s/075Yo94sf8GuSlFfPzysQrWZQ==" - }, - "node_modules/@types/normalize-package-data": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.1.tgz", - "integrity": "sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw==" - }, - "node_modules/@types/prettier": { - "version": "2.7.3", - "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.7.3.tgz", - "integrity": "sha512-+68kP9yzs4LMp7VNh8gdzMSPZFL44MLGqiHWvttYJe+6qnuVr4Ek9wSBQoveqY/r+LwjCcU29kNVkidwim+kYA==", - "dev": true - }, - "node_modules/@types/qs": { - "version": "6.9.7", - "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.7.tgz", - "integrity": "sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw==" - }, - "node_modules/@types/range-parser": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.4.tgz", - "integrity": "sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw==" - }, - "node_modules/@types/semver": { - "version": "7.5.0", - "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.0.tgz", - "integrity": "sha512-G8hZ6XJiHnuhQKR7ZmysCeJWE08o8T0AXtk5darsCaTVsYZhhgUrq53jizaR2FvsoeCwJhlmwTjkXBY5Pn/ZHw==", - "dev": true - }, - "node_modules/@types/send": { - "version": "0.17.1", - "resolved": "https://registry.npmjs.org/@types/send/-/send-0.17.1.tgz", - "integrity": "sha512-Cwo8LE/0rnvX7kIIa3QHCkcuF21c05Ayb0ZfxPiv0W8VRiZiNW/WuRupHKpqqGVGf7SUA44QSOUKaEd9lIrd/Q==", - "dependencies": { - "@types/mime": "^1", - "@types/node": "*" - } - }, - "node_modules/@types/serve-static": { - "version": "1.15.1", - "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.1.tgz", - "integrity": "sha512-NUo5XNiAdULrJENtJXZZ3fHtfMolzZwczzBbnAeBbqBwG+LaG6YaJtuwzwGSQZ2wsCrxjEhNNjAkKigy3n8teQ==", - "dependencies": { - "@types/mime": "*", - "@types/node": "*" - } - }, - "node_modules/@types/stack-utils": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.1.tgz", - "integrity": "sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw==", - "dev": true - }, - "node_modules/@types/yargs": { - "version": "17.0.23", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.23.tgz", - "integrity": "sha512-yuogunc04OnzGQCrfHx+Kk883Q4X0aSwmYZhKjI21m+SVYzjIbrWl8dOOwSv5hf2Um2pdCOXWo9isteZTNXUZQ==", - "dev": true, - "dependencies": { - "@types/yargs-parser": "*" - } - }, - "node_modules/@types/yargs-parser": { - "version": "21.0.0", - "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.0.tgz", - "integrity": "sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA==", - "dev": true - }, - "node_modules/@typescript-eslint/eslint-plugin": { - "version": "5.61.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.61.0.tgz", - "integrity": "sha512-A5l/eUAug103qtkwccSCxn8ZRwT+7RXWkFECdA4Cvl1dOlDUgTpAOfSEElZn2uSUxhdDpnCdetrf0jvU4qrL+g==", - "dev": true, - "dependencies": { - "@eslint-community/regexpp": "^4.4.0", - "@typescript-eslint/scope-manager": "5.61.0", - "@typescript-eslint/type-utils": "5.61.0", - "@typescript-eslint/utils": "5.61.0", - "debug": "^4.3.4", - "graphemer": "^1.4.0", - "ignore": "^5.2.0", - "natural-compare-lite": "^1.4.0", - "semver": "^7.3.7", - "tsutils": "^3.21.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "@typescript-eslint/parser": "^5.0.0", - "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/eslint-plugin/node_modules/@typescript-eslint/scope-manager": { - "version": "5.61.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.61.0.tgz", - "integrity": "sha512-W8VoMjoSg7f7nqAROEmTt6LoBpn81AegP7uKhhW5KzYlehs8VV0ZW0fIDVbcZRcaP3aPSW+JZFua+ysQN+m/Nw==", - "dev": true, - "dependencies": { - "@typescript-eslint/types": "5.61.0", - "@typescript-eslint/visitor-keys": "5.61.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@typescript-eslint/parser": { - "version": "5.59.2", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.59.2.tgz", - "integrity": "sha512-uq0sKyw6ao1iFOZZGk9F8Nro/8+gfB5ezl1cA06SrqbgJAt0SRoFhb9pXaHvkrxUpZaoLxt8KlovHNk8Gp6/HQ==", - "dev": true, - "dependencies": { - "@typescript-eslint/scope-manager": "5.59.2", - "@typescript-eslint/types": "5.59.2", - "@typescript-eslint/typescript-estree": "5.59.2", - "debug": "^4.3.4" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/parser/node_modules/@typescript-eslint/types": { - "version": "5.59.2", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.59.2.tgz", - "integrity": "sha512-LbJ/HqoVs2XTGq5shkiKaNTuVv5tTejdHgfdjqRUGdYhjW1crm/M7og2jhVskMt8/4wS3T1+PfFvL1K3wqYj4w==", - "dev": true, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@typescript-eslint/parser/node_modules/@typescript-eslint/typescript-estree": { - "version": "5.59.2", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.59.2.tgz", - "integrity": "sha512-+j4SmbwVmZsQ9jEyBMgpuBD0rKwi9RxRpjX71Brr73RsYnEr3Lt5QZ624Bxphp8HUkSKfqGnPJp1kA5nl0Sh7Q==", - "dev": true, - "dependencies": { - "@typescript-eslint/types": "5.59.2", - "@typescript-eslint/visitor-keys": "5.59.2", - "debug": "^4.3.4", - "globby": "^11.1.0", - "is-glob": "^4.0.3", - "semver": "^7.3.7", - "tsutils": "^3.21.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/parser/node_modules/@typescript-eslint/visitor-keys": { - "version": "5.59.2", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.59.2.tgz", - "integrity": "sha512-EEpsO8m3RASrKAHI9jpavNv9NlEUebV4qmF1OWxSTtKSFBpC1NCmWazDQHFivRf0O1DV11BA645yrLEVQ0/Lig==", - "dev": true, - "dependencies": { - "@typescript-eslint/types": "5.59.2", - "eslint-visitor-keys": "^3.3.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@typescript-eslint/scope-manager": { - "version": "5.59.2", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.59.2.tgz", - "integrity": "sha512-dB1v7ROySwQWKqQ8rEWcdbTsFjh2G0vn8KUyvTXdPoyzSL6lLGkiXEV5CvpJsEe9xIdKV+8Zqb7wif2issoOFA==", - "dev": true, - "dependencies": { - "@typescript-eslint/types": "5.59.2", - "@typescript-eslint/visitor-keys": "5.59.2" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@typescript-eslint/scope-manager/node_modules/@typescript-eslint/types": { - "version": "5.59.2", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.59.2.tgz", - "integrity": "sha512-LbJ/HqoVs2XTGq5shkiKaNTuVv5tTejdHgfdjqRUGdYhjW1crm/M7og2jhVskMt8/4wS3T1+PfFvL1K3wqYj4w==", - "dev": true, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@typescript-eslint/scope-manager/node_modules/@typescript-eslint/visitor-keys": { - "version": "5.59.2", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.59.2.tgz", - "integrity": "sha512-EEpsO8m3RASrKAHI9jpavNv9NlEUebV4qmF1OWxSTtKSFBpC1NCmWazDQHFivRf0O1DV11BA645yrLEVQ0/Lig==", - "dev": true, - "dependencies": { - "@typescript-eslint/types": "5.59.2", - "eslint-visitor-keys": "^3.3.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@typescript-eslint/type-utils": { - "version": "5.61.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.61.0.tgz", - "integrity": "sha512-kk8u//r+oVK2Aj3ph/26XdH0pbAkC2RiSjUYhKD+PExemG4XSjpGFeyZ/QM8lBOa7O8aGOU+/yEbMJgQv/DnCg==", - "dev": true, - "dependencies": { - "@typescript-eslint/typescript-estree": "5.61.0", - "@typescript-eslint/utils": "5.61.0", - "debug": "^4.3.4", - "tsutils": "^3.21.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "*" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/types": { - "version": "5.61.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.61.0.tgz", - "integrity": "sha512-ldyueo58KjngXpzloHUog/h9REmHl59G1b3a5Sng1GfBo14BkS3ZbMEb3693gnP1k//97lh7bKsp6/V/0v1veQ==", - "dev": true, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@typescript-eslint/typescript-estree": { - "version": "5.61.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.61.0.tgz", - "integrity": "sha512-Fud90PxONnnLZ36oR5ClJBLTLfU4pIWBmnvGwTbEa2cXIqj70AEDEmOmpkFComjBZ/037ueKrOdHuYmSFVD7Rw==", - "dev": true, - "dependencies": { - "@typescript-eslint/types": "5.61.0", - "@typescript-eslint/visitor-keys": "5.61.0", - "debug": "^4.3.4", - "globby": "^11.1.0", - "is-glob": "^4.0.3", - "semver": "^7.3.7", - "tsutils": "^3.21.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/utils": { - "version": "5.61.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.61.0.tgz", - "integrity": "sha512-mV6O+6VgQmVE6+xzlA91xifndPW9ElFW8vbSF0xCT/czPXVhwDewKila1jOyRwa9AE19zKnrr7Cg5S3pJVrTWQ==", - "dev": true, - "dependencies": { - "@eslint-community/eslint-utils": "^4.2.0", - "@types/json-schema": "^7.0.9", - "@types/semver": "^7.3.12", - "@typescript-eslint/scope-manager": "5.61.0", - "@typescript-eslint/types": "5.61.0", - "@typescript-eslint/typescript-estree": "5.61.0", - "eslint-scope": "^5.1.1", - "semver": "^7.3.7" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" - } - }, - "node_modules/@typescript-eslint/utils/node_modules/@typescript-eslint/scope-manager": { - "version": "5.61.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.61.0.tgz", - "integrity": "sha512-W8VoMjoSg7f7nqAROEmTt6LoBpn81AegP7uKhhW5KzYlehs8VV0ZW0fIDVbcZRcaP3aPSW+JZFua+ysQN+m/Nw==", - "dev": true, - "dependencies": { - "@typescript-eslint/types": "5.61.0", - "@typescript-eslint/visitor-keys": "5.61.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@typescript-eslint/utils/node_modules/eslint-scope": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", - "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", - "dev": true, - "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^4.1.1" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/@typescript-eslint/utils/node_modules/estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", - "dev": true, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/@typescript-eslint/visitor-keys": { - "version": "5.61.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.61.0.tgz", - "integrity": "sha512-50XQ5VdbWrX06mQXhy93WywSFZZGsv3EOjq+lqp6WC2t+j3mb6A9xYVdrRxafvK88vg9k9u+CT4l6D8PEatjKg==", - "dev": true, - "dependencies": { - "@typescript-eslint/types": "5.61.0", - "eslint-visitor-keys": "^3.3.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/accepts": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", - "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", - "dependencies": { - "mime-types": "~2.1.34", - "negotiator": "0.6.3" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/acorn": { - "version": "8.8.2", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.2.tgz", - "integrity": "sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw==", - "dev": true, - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/acorn-jsx": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", - "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", - "dev": true, - "peerDependencies": { - "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" - } - }, - "node_modules/add-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/add-stream/-/add-stream-1.0.0.tgz", - "integrity": "sha512-qQLMr+8o0WC4FZGQTcJiKBVC59JylcPSrTtk6usvmIDFUOCKegapy1VHQwRbFMOFyb/inzUVqHs+eMYKDM1YeQ==", - "dev": true - }, - "node_modules/agent-base": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", - "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", - "dependencies": { - "debug": "4" - }, - "engines": { - "node": ">= 6.0.0" - } - }, - "node_modules/aggregate-error": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", - "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", - "dev": true, - "dependencies": { - "clean-stack": "^2.0.0", - "indent-string": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/ajv": { - "version": "8.12.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", - "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", - "dependencies": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/ajv-draft-04": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/ajv-draft-04/-/ajv-draft-04-1.0.0.tgz", - "integrity": "sha512-mv00Te6nmYbRp5DCwclxtt7yV/joXJPGS7nM+97GdxvuttCOfgI3K4U25zboyeX0O+myI8ERluxQe5wljMmVIw==", - "peerDependencies": { - "ajv": "^8.5.0" - }, - "peerDependenciesMeta": { - "ajv": { - "optional": true - } - } - }, - "node_modules/ajv-formats": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz", - "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==", - "dependencies": { - "ajv": "^8.0.0" - }, - "peerDependencies": { - "ajv": "^8.0.0" - }, - "peerDependenciesMeta": { - "ajv": { - "optional": true - } - } - }, - "node_modules/ansi-align": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-3.0.1.tgz", - "integrity": "sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w==", - "dev": true, - "dependencies": { - "string-width": "^4.1.0" - } - }, - "node_modules/ansi-escapes": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", - "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", - "dev": true, - "dependencies": { - "type-fest": "^0.21.3" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/ansi-escapes/node_modules/type-fest": { - "version": "0.21.3", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", - "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/any-promise": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz", - "integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==", - "dev": true - }, - "node_modules/anymatch": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", - "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", - "dev": true, - "dependencies": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/app-module-path": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/app-module-path/-/app-module-path-2.2.0.tgz", - "integrity": "sha512-gkco+qxENJV+8vFcDiiFhuoSvRXb2a/QPqpSoWhVz829VNJfOTnELbBmPmNKFxf3xdNnw4DWCkzkDaavcX/1YQ==", - "dev": true - }, - "node_modules/arg": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", - "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", - "dev": true - }, - "node_modules/argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" - }, - "node_modules/array-find-index": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/array-find-index/-/array-find-index-1.0.2.tgz", - "integrity": "sha512-M1HQyIXcBGtVywBt8WVdim+lrNaK7VHp99Qt5pSNziXznKHViIBbXWtfRTpEFpF/c4FdfxNAsCCwPp5phBYJtw==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/array-ify": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/array-ify/-/array-ify-1.0.0.tgz", - "integrity": "sha512-c5AMf34bKdvPhQ7tBGhqkgKNUzMr4WUs+WDtC2ZUGOUncbxKMTvqxYctiseW3+L4bA8ec+GcZ6/A/FW4m8ukng==", - "dev": true - }, - "node_modules/array-includes": { - "version": "3.1.6", - "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.6.tgz", - "integrity": "sha512-sgTbLvL6cNnw24FnbaDyjmvddQ2ML8arZsgaJhoABMoplz/4QRhtrYS+alr1BUM1Bwp6dhx8vVCBSLG+StwOFw==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4", - "get-intrinsic": "^1.1.3", - "is-string": "^1.0.7" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/array-union": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", - "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/array.prototype.flat": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.1.tgz", - "integrity": "sha512-roTU0KWIOmJ4DRLmwKd19Otg0/mT3qPNt0Qb3GWW8iObuZXxrjB/pzn0R3hqpRSWg4HCwqx+0vwOnWnvlOyeIA==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4", - "es-shim-unscopables": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/array.prototype.flatmap": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.1.tgz", - "integrity": "sha512-8UGn9O1FDVvMNB0UlLv4voxRMze7+FpHyF5mSMRjWHUMlpoDViniy05870VlxhfgTnLbpuwTzvD76MTtWxB/mQ==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4", - "es-shim-unscopables": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/arrify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", - "integrity": "sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/asap": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", - "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==", - "dev": true - }, - "node_modules/ast-module-types": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ast-module-types/-/ast-module-types-3.0.0.tgz", - "integrity": "sha512-CMxMCOCS+4D+DkOQfuZf+vLrSEmY/7xtORwdxs4wtcC1wVgvk2MqFFTwQCFhvWsI4KPU9lcWXPI8DgRiz+xetQ==", - "dev": true, - "engines": { - "node": ">=6.0" - } - }, - "node_modules/astral-regex": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", - "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/async": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/async/-/async-3.2.4.tgz", - "integrity": "sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ==" - }, - "node_modules/asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" - }, - "node_modules/at-least-node": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", - "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==", - "dev": true, - "engines": { - "node": ">= 4.0.0" - } - }, - "node_modules/available-typed-arrays": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz", - "integrity": "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==", - "dev": true, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/await-handler": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/await-handler/-/await-handler-1.1.2.tgz", - "integrity": "sha512-dihteGhwbJpT89kVbacWiyKeAZr+En0YGK6pAKQJLR0En9ZxSH2H4TTvfG4bBjzFq9gDAma4y9BrpDns6j5UiQ==" - }, - "node_modules/axios": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.4.0.tgz", - "integrity": "sha512-S4XCWMEmzvo64T9GfvQDOXgYRDJ/wsSZc7Jvdgx5u1sd0JwsuPLqb3SYmusag+edF6ziyMensPVqLTSc1PiSEA==", - "dependencies": { - "follow-redirects": "^1.15.0", - "form-data": "^4.0.0", - "proxy-from-env": "^1.1.0" - } - }, - "node_modules/babel-jest": { - "version": "29.6.0", - "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-29.6.0.tgz", - "integrity": "sha512-Jj8Bq2yKsk11XLk06Nm8SdvYkAcecH+GuhxB8DnK5SncjHnJ88TQjSnGgE7jpajpnSvz9DZ6X8hXrDkD/6/TPQ==", - "dev": true, - "dependencies": { - "@jest/transform": "^29.6.0", - "@types/babel__core": "^7.1.14", - "babel-plugin-istanbul": "^6.1.1", - "babel-preset-jest": "^29.5.0", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.9", - "slash": "^3.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - }, - "peerDependencies": { - "@babel/core": "^7.8.0" - } - }, - "node_modules/babel-plugin-istanbul": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz", - "integrity": "sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.0.0", - "@istanbuljs/load-nyc-config": "^1.0.0", - "@istanbuljs/schema": "^0.1.2", - "istanbul-lib-instrument": "^5.0.4", - "test-exclude": "^6.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/babel-plugin-jest-hoist": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-29.5.0.tgz", - "integrity": "sha512-zSuuuAlTMT4mzLj2nPnUm6fsE6270vdOfnpbJ+RmruU75UhLFvL0N2NgI7xpeS7NaB6hGqmd5pVpGTDYvi4Q3w==", - "dev": true, - "dependencies": { - "@babel/template": "^7.3.3", - "@babel/types": "^7.3.3", - "@types/babel__core": "^7.1.14", - "@types/babel__traverse": "^7.0.6" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/babel-preset-current-node-syntax": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.0.1.tgz", - "integrity": "sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ==", - "dev": true, - "dependencies": { - "@babel/plugin-syntax-async-generators": "^7.8.4", - "@babel/plugin-syntax-bigint": "^7.8.3", - "@babel/plugin-syntax-class-properties": "^7.8.3", - "@babel/plugin-syntax-import-meta": "^7.8.3", - "@babel/plugin-syntax-json-strings": "^7.8.3", - "@babel/plugin-syntax-logical-assignment-operators": "^7.8.3", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", - "@babel/plugin-syntax-numeric-separator": "^7.8.3", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", - "@babel/plugin-syntax-optional-chaining": "^7.8.3", - "@babel/plugin-syntax-top-level-await": "^7.8.3" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/babel-preset-jest": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-29.5.0.tgz", - "integrity": "sha512-JOMloxOqdiBSxMAzjRaH023/vvcaSaec49zvg+2LmNsktC7ei39LTJGw02J+9uUtTZUq6xbLyJ4dxe9sSmIuAg==", - "dev": true, - "dependencies": { - "babel-plugin-jest-hoist": "^29.5.0", - "babel-preset-current-node-syntax": "^1.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" - }, - "node_modules/base64-js": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", - "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/benchmark-suite": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/benchmark-suite/-/benchmark-suite-0.1.8.tgz", - "integrity": "sha512-UDfWBQfeq/lXcsjuGAanOrX6AhP6HQSsutGS7CfStcbE1loLge7aQr5DT6n8r/4bUoiK+5RYwnogNu5UuTBMNg==", - "dev": true, - "dependencies": { - "eventemitter3": "^4.0.7", - "expose-gc": "^1.0.0", - "human-format": "^1.0.0", - "pretty-bytes": "^5.6.0", - "stats-accumulator": "^1.1.2" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/bintrees": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/bintrees/-/bintrees-1.0.2.tgz", - "integrity": "sha512-VOMgTMwjAaUG580SXn3LacVgjurrbMme7ZZNYGSSV7mmtY6QQRh0Eg3pwIcntQ77DErK1L0NxkbetjcoXzVwKw==" - }, - "node_modules/bl": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", - "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", - "dev": true, - "dependencies": { - "buffer": "^5.5.0", - "inherits": "^2.0.4", - "readable-stream": "^3.4.0" - } - }, - "node_modules/bl/node_modules/readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "dev": true, - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/boolean": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/boolean/-/boolean-3.2.0.tgz", - "integrity": "sha512-d0II/GO9uf9lfUHH2BQsjxzRJZBdsjgsBiW4BvhWk/3qoKwQFjIDVN19PfX8F2D/r9PCMTtLWjYVCFrpeYUzsw==", - "dev": true - }, - "node_modules/bowser": { - "version": "2.11.0", - "resolved": "https://registry.npmjs.org/bowser/-/bowser-2.11.0.tgz", - "integrity": "sha512-AlcaJBi/pqqJBIQ8U9Mcpc9i8Aqxn88Skv5d+xBX006BY5u8N3mGLHa5Lgppa7L/HfwgwLgZ6NYs+Ag6uUmJRA==" - }, - "node_modules/boxen": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/boxen/-/boxen-5.1.2.tgz", - "integrity": "sha512-9gYgQKXx+1nP8mP7CzFyaUARhg7D3n1dF/FnErWmu9l6JvGpNUN278h0aSb+QjoiKSWG+iZ3uHrcqk0qrY9RQQ==", - "dev": true, - "dependencies": { - "ansi-align": "^3.0.0", - "camelcase": "^6.2.0", - "chalk": "^4.1.0", - "cli-boxes": "^2.2.1", - "string-width": "^4.2.2", - "type-fest": "^0.20.2", - "widest-line": "^3.1.0", - "wrap-ansi": "^7.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/boxen/node_modules/camelcase": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", - "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/boxen/node_modules/type-fest": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "dev": true, - "dependencies": { - "fill-range": "^7.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/browserslist": { - "version": "4.21.9", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.9.tgz", - "integrity": "sha512-M0MFoZzbUrRU4KNfCrDLnvyE7gub+peetoTid3TBIqtunaDJyXlwhakT+/VkvSXcfIzFfK/nkCs4nmyTmxdNSg==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/browserslist" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "dependencies": { - "caniuse-lite": "^1.0.30001503", - "electron-to-chromium": "^1.4.431", - "node-releases": "^2.0.12", - "update-browserslist-db": "^1.0.11" - }, - "bin": { - "browserslist": "cli.js" - }, - "engines": { - "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" - } - }, - "node_modules/bs-logger": { - "version": "0.2.6", - "resolved": "https://registry.npmjs.org/bs-logger/-/bs-logger-0.2.6.tgz", - "integrity": "sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog==", - "dev": true, - "dependencies": { - "fast-json-stable-stringify": "2.x" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/bser": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz", - "integrity": "sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==", - "dev": true, - "dependencies": { - "node-int64": "^0.4.0" - } - }, - "node_modules/btoa": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/btoa/-/btoa-1.2.1.tgz", - "integrity": "sha512-SB4/MIGlsiVkMcHmT+pSmIPoNDoHg+7cMzmt3Uxt628MTz2487DKSqK/fuhFBrkuqrYv5UCEnACpF4dTFNKc/g==", - "bin": { - "btoa": "bin/btoa.js" - }, - "engines": { - "node": ">= 0.4.0" - } - }, - "node_modules/buffer": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.6.0.tgz", - "integrity": "sha512-/gDYp/UtU0eA1ys8bOs9J6a+E/KWIY+DZ+Q2WESNUA0jFRsJOc0SNUO6xJ5SGA1xueg3NL65W6s+NY5l9cunuw==", - "dependencies": { - "base64-js": "^1.0.2", - "ieee754": "^1.1.4" - } - }, - "node_modules/buffer-from": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", - "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", - "dev": true - }, - "node_modules/builtin-modules": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.3.0.tgz", - "integrity": "sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==", - "dev": true, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/byline": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/byline/-/byline-5.0.0.tgz", - "integrity": "sha512-s6webAy+R4SR8XVuJWt2V2rGvhnrhxN+9S15GNuTK3wKPOXFF6RNc+8ug2XhH+2s4f+uudG4kUVYmYOQWL2g0Q==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/bytes": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", - "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/cache-content-type": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/cache-content-type/-/cache-content-type-1.0.1.tgz", - "integrity": "sha512-IKufZ1o4Ut42YUrZSo8+qnMTrFuKkvyoLXUywKz9GJ5BrhOFGhLdkx9sG4KAnVvbY6kEcSFjLQul+DVmBm2bgA==", - "dependencies": { - "mime-types": "^2.1.18", - "ylru": "^1.2.0" - }, - "engines": { - "node": ">= 6.0.0" - } - }, - "node_modules/cacheable-request": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-2.1.4.tgz", - "integrity": "sha512-vag0O2LKZ/najSoUwDbVlnlCFvhBE/7mGTY2B5FgCBDcRD+oVV1HYTOwM6JZfMg/hIcM6IwnTZ1uQQL5/X3xIQ==", - "dev": true, - "dependencies": { - "clone-response": "1.0.2", - "get-stream": "3.0.0", - "http-cache-semantics": "3.8.1", - "keyv": "3.0.0", - "lowercase-keys": "1.0.0", - "normalize-url": "2.0.1", - "responselike": "1.0.2" - } - }, - "node_modules/cacheable-request/node_modules/get-stream": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", - "integrity": "sha512-GlhdIUuVakc8SJ6kK0zAFbiGzRFzNnY4jUuEbV9UROo4Y+0Ny4fjvcZFVTeDA4odpFyOQzaw6hXukJSq/f28sQ==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/cacheable-request/node_modules/lowercase-keys": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.0.tgz", - "integrity": "sha512-RPlX0+PHuvxVDZ7xX+EBVAp4RsVxP/TdDSN2mJYdiq1Lc4Hz7EUSjUI7RZrKKlmrIzVhf6Jo2stj7++gVarS0A==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/cachedir": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/cachedir/-/cachedir-2.3.0.tgz", - "integrity": "sha512-A+Fezp4zxnit6FanDmv9EqXNAi3vt9DWp51/71UEhXukb7QUuvtv9344h91dyAxuTLoSYJFU299qzR3tzwPAhw==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/call-bind": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", - "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", - "dependencies": { - "function-bind": "^1.1.1", - "get-intrinsic": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/call-me-maybe": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-me-maybe/-/call-me-maybe-1.0.2.tgz", - "integrity": "sha512-HpX65o1Hnr9HH25ojC1YGs7HCQLq0GCOibSaWER0eNpgJ/Z1MZv2mTc7+xh6WOPxbRVcmgbv4hGU+uSQ/2xFZQ==", - "dev": true - }, - "node_modules/callsites": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/camelcase-keys": { - "version": "6.2.2", - "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-6.2.2.tgz", - "integrity": "sha512-YrwaA0vEKazPBkn0ipTiMpSajYDSe+KjQfrjhcBMxJt/znbvlHd8Pw/Vamaz5EB4Wfhs3SUR3Z9mwRu/P3s3Yg==", - "dev": true, - "dependencies": { - "camelcase": "^5.3.1", - "map-obj": "^4.0.0", - "quick-lru": "^4.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/caniuse-lite": { - "version": "1.0.30001512", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001512.tgz", - "integrity": "sha512-2S9nK0G/mE+jasCUsMPlARhRCts1ebcp2Ji8Y8PWi4NDE1iRdLCnEPHkEfeBrGC45L4isBx5ur3IQ6yTE2mRZw==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/caniuse-lite" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ] - }, - "node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/char-regex": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/char-regex/-/char-regex-1.0.2.tgz", - "integrity": "sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==", - "dev": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/chardet": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", - "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==", - "dev": true - }, - "node_modules/charenc": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/charenc/-/charenc-0.0.2.tgz", - "integrity": "sha512-yrLQ/yVUFXkzg7EDQsPieE/53+0RlaWTs+wBrvW36cyilJ2SaDWfl4Yj7MtLTXleV9uEKefbAGUPv2/iWSooRA==", - "engines": { - "node": "*" - } - }, - "node_modules/check-more-types": { - "version": "2.24.0", - "resolved": "https://registry.npmjs.org/check-more-types/-/check-more-types-2.24.0.tgz", - "integrity": "sha512-Pj779qHxV2tuapviy1bSZNEL1maXr13bPYpsvSDB68HlYcYuhlDrmGd63i0JHMCLKzc7rUSNIrpdJlhVlNwrxA==", - "dev": true, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/ci-info": { - "version": "3.7.1", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.7.1.tgz", - "integrity": "sha512-4jYS4MOAaCIStSRwiuxc4B8MYhIe676yO1sYGzARnjXkWpmzZMMYxY6zu8WYWDhSuth5zhrQ1rhNSibyyvv4/w==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/sibiraj-s" - } - ], - "engines": { - "node": ">=8" - } - }, - "node_modules/cjs-module-lexer": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.2.3.tgz", - "integrity": "sha512-0TNiGstbQmCFwt4akjjBg5pLRTSyj/PkWQ1ZoO2zntmg9yLqSRxwEa4iCfQLGjqhiqBfOJa7W/E8wfGrTDmlZQ==", - "dev": true - }, - "node_modules/clean-regexp": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/clean-regexp/-/clean-regexp-1.0.0.tgz", - "integrity": "sha512-GfisEZEJvzKrmGWkvfhgzcz/BllN1USeqD2V6tg14OAOgaCD2Z/PUEuxnAZ/nPvmaHRG7a8y77p1T/IRQ4D1Hw==", - "dev": true, - "dependencies": { - "escape-string-regexp": "^1.0.5" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/clean-stack": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", - "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/cli-boxes": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-2.2.1.tgz", - "integrity": "sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw==", - "dev": true, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/cli-cursor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", - "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", - "dev": true, - "dependencies": { - "restore-cursor": "^3.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/cli-spinners": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.7.0.tgz", - "integrity": "sha512-qu3pN8Y3qHNgE2AFweciB1IfMnmZ/fsNTEE+NOFjmGB2F/7rLhnhzppvpCnN4FovtP26k8lHyy9ptEbNwWFLzw==", - "dev": true, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/cli-truncate": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-3.1.0.tgz", - "integrity": "sha512-wfOBkjXteqSnI59oPcJkcPl/ZmwvMMOj340qUIY1SKZCv0B9Cf4D4fAucRkIKQmsIuYK3x1rrgU7MeGRruiuiA==", - "dev": true, - "dependencies": { - "slice-ansi": "^5.0.0", - "string-width": "^5.0.0" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/cli-truncate/node_modules/ansi-regex": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", - "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", - "dev": true, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-regex?sponsor=1" - } - }, - "node_modules/cli-truncate/node_modules/string-width": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", - "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", - "dev": true, - "dependencies": { - "eastasianwidth": "^0.2.0", - "emoji-regex": "^9.2.2", - "strip-ansi": "^7.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/cli-truncate/node_modules/strip-ansi": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.0.1.tgz", - "integrity": "sha512-cXNxvT8dFNRVfhVME3JAe98mkXDYN2O1l7jmcwMnOslDeESg1rF/OZMtK0nRAhiari1unG5cD4jG3rapUAkLbw==", - "dev": true, - "dependencies": { - "ansi-regex": "^6.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/strip-ansi?sponsor=1" - } - }, - "node_modules/cli-width": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-3.0.0.tgz", - "integrity": "sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==", - "dev": true, - "engines": { - "node": ">= 10" - } - }, - "node_modules/cliui": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", - "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", - "dev": true, - "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.1", - "wrap-ansi": "^7.0.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/clone": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz", - "integrity": "sha512-3Pe/CF1Nn94hyhIYpjtiLhdCoEoz0DqQ+988E9gmeEdQZlojxnOb74wctFyuwWQHzqyf9X7C7MG8juUpqBJT8w==", - "engines": { - "node": ">=0.8" - } - }, - "node_modules/clone-response": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.2.tgz", - "integrity": "sha512-yjLXh88P599UOyPTFX0POsd7WxnbsVsGohcwzHOLspIhhpalPw1BcqED8NblyZLKcGrL8dTgMlcaZxV2jAD41Q==", - "dev": true, - "dependencies": { - "mimic-response": "^1.0.0" - } - }, - "node_modules/cluster-key-slot": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/cluster-key-slot/-/cluster-key-slot-1.1.2.tgz", - "integrity": "sha512-RMr0FhtfXemyinomL4hrWcYJxmX6deFdCxpJzhDttxgO1+bcCnkk+9drydLVDmAMG7NE6aN/fl4F7ucU/90gAA==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/co": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", - "integrity": "sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==", - "engines": { - "iojs": ">= 1.0.0", - "node": ">= 0.12.0" - } - }, - "node_modules/co-body": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/co-body/-/co-body-6.1.0.tgz", - "integrity": "sha512-m7pOT6CdLN7FuXUcpuz/8lfQ/L77x8SchHCF4G0RBTJO20Wzmhn5Sp4/5WsKy8OSpifBSUrmg83qEqaDHdyFuQ==", - "dependencies": { - "inflation": "^2.0.0", - "qs": "^6.5.2", - "raw-body": "^2.3.3", - "type-is": "^1.6.16" - } - }, - "node_modules/collect-v8-coverage": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.1.tgz", - "integrity": "sha512-iBPtljfCNcTKNAto0KEtDfZ3qzjJvqE3aTGZsbhjSBlorqpXJlaWWtPO35D+ZImoC3KWejX64o+yPGxhWSTzfg==", - "dev": true - }, - "node_modules/color": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/color/-/color-3.2.1.tgz", - "integrity": "sha512-aBl7dZI9ENN6fUGC7mWpMTPNHmWUSNan9tuWN6ahh5ZLNk9baLJOnSMlrQkHcrfFgz2/RigjUVAjdx36VcemKA==", - "dependencies": { - "color-convert": "^1.9.3", - "color-string": "^1.6.0" - } - }, - "node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" - }, - "node_modules/color-string": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.9.1.tgz", - "integrity": "sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==", - "dependencies": { - "color-name": "^1.0.0", - "simple-swizzle": "^0.2.2" - } - }, - "node_modules/color/node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/color/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" - }, - "node_modules/colorette": { - "version": "2.0.19", - "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.19.tgz", - "integrity": "sha512-3tlv/dIP7FWvj3BsbHrGLJ6l/oKh1O3TcgBqMn+yyCagOxc23fyzDS6HypQbgxWbkpDnf52p1LuR4eWDQ/K9WQ==", - "dev": true - }, - "node_modules/colors": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz", - "integrity": "sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==", - "engines": { - "node": ">=0.1.90" - } - }, - "node_modules/colorspace": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/colorspace/-/colorspace-1.1.4.tgz", - "integrity": "sha512-BgvKJiuVu1igBUF2kEjRCZXol6wiiGbY5ipL/oVPwm0BL9sIpMIzM8IK7vwuxIIzOXMV3Ey5w+vxhm0rR/TN8w==", - "dependencies": { - "color": "^3.1.3", - "text-hex": "1.0.x" - } - }, - "node_modules/combined-stream": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", - "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", - "dependencies": { - "delayed-stream": "~1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/commander": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-10.0.1.tgz", - "integrity": "sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==", - "dev": true, - "engines": { - "node": ">=14" - } - }, - "node_modules/commitizen": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/commitizen/-/commitizen-4.3.0.tgz", - "integrity": "sha512-H0iNtClNEhT0fotHvGV3E9tDejDeS04sN1veIebsKYGMuGscFaswRoYJKmT3eW85eIJAs0F28bG2+a/9wCOfPw==", - "dev": true, - "dependencies": { - "cachedir": "2.3.0", - "cz-conventional-changelog": "3.3.0", - "dedent": "0.7.0", - "detect-indent": "6.1.0", - "find-node-modules": "^2.1.2", - "find-root": "1.1.0", - "fs-extra": "9.1.0", - "glob": "7.2.3", - "inquirer": "8.2.5", - "is-utf8": "^0.2.1", - "lodash": "4.17.21", - "minimist": "1.2.7", - "strip-bom": "4.0.0", - "strip-json-comments": "3.1.1" - }, - "bin": { - "commitizen": "bin/commitizen", - "cz": "bin/git-cz", - "git-cz": "bin/git-cz" - }, - "engines": { - "node": ">= 12" - } - }, - "node_modules/commitizen/node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "dev": true, - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/commitizen/node_modules/inquirer": { - "version": "8.2.5", - "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-8.2.5.tgz", - "integrity": "sha512-QAgPDQMEgrDssk1XiwwHoOGYF9BAbUcc1+j+FhEvaOt8/cKRqyLn0U5qA6F74fGhTMGxf92pOvPBeh29jQJDTQ==", - "dev": true, - "dependencies": { - "ansi-escapes": "^4.2.1", - "chalk": "^4.1.1", - "cli-cursor": "^3.1.0", - "cli-width": "^3.0.0", - "external-editor": "^3.0.3", - "figures": "^3.0.0", - "lodash": "^4.17.21", - "mute-stream": "0.0.8", - "ora": "^5.4.1", - "run-async": "^2.4.0", - "rxjs": "^7.5.5", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0", - "through": "^2.3.6", - "wrap-ansi": "^7.0.0" - }, - "engines": { - "node": ">=12.0.0" - } - }, - "node_modules/commitizen/node_modules/minimist": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.7.tgz", - "integrity": "sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g==", - "dev": true, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/commitlint": { - "version": "17.6.6", - "resolved": "https://registry.npmjs.org/commitlint/-/commitlint-17.6.6.tgz", - "integrity": "sha512-Q5M+w1nqGQSEkEW43EtPNrU+uKL2pENrJl6QigFupZ0v4AfvI8k5Q6uFgWmxlEOrSkgCYaN436Q9c9pydqyJqg==", - "dev": true, - "dependencies": { - "@commitlint/cli": "^17.6.6", - "@commitlint/types": "^17.4.4" - }, - "bin": { - "commitlint": "cli.js" - }, - "engines": { - "node": ">=v14" - } - }, - "node_modules/commondir": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", - "integrity": "sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==", - "dev": true - }, - "node_modules/compare-func": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/compare-func/-/compare-func-2.0.0.tgz", - "integrity": "sha512-zHig5N+tPWARooBnb0Zx1MFcdfpyJrfTJ3Y5L+IFvUm8rM74hHz66z0gw0x4tijh5CorKkKUCnW82R2vmpeCRA==", - "dev": true, - "dependencies": { - "array-ify": "^1.0.0", - "dot-prop": "^5.1.0" - } - }, - "node_modules/compare-func/node_modules/dot-prop": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-4.2.1.tgz", - "integrity": "sha512-l0p4+mIuJIua0mhxGoh4a+iNL9bmeK5DvnSVQa6T0OhrVmaEa1XScX5Etc673FePCJOArq/4Pa2cLGODUWTPOQ==", - "dev": true, - "dependencies": { - "is-obj": "^1.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/compare-func/node_modules/is-obj": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz", - "integrity": "sha512-l4RyHgRqGN4Y3+9JHVrNqO+tN0rV5My76uW5/nuO4K1b6vw5G8d/cmFjP9tRfEsdhZNt0IFdZuK/c2Vr4Nb+Qg==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/component-each": { - "version": "0.2.6", - "resolved": "https://registry.npmjs.org/component-each/-/component-each-0.2.6.tgz", - "integrity": "sha512-IOXG+HZmbgaBS8Rqy+tAMrwsPdEY1BWcPcp0xI2ZOzKQhHvSVGrL7iCnoDU37TEKOCfaf4ywsR6GwAr0JivPjg==", - "dependencies": { - "component-type": "1.0.0", - "to-function": "2.0.6" - } - }, - "node_modules/component-emitter": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", - "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==", - "dev": true - }, - "node_modules/component-props": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/component-props/-/component-props-1.1.1.tgz", - "integrity": "sha512-69pIRJs9fCCHRqCz3390YF2LV1Lu6iEMZ5zuVqqUn+G20V9BNXlMs0cWawWeW9g4Ynmg29JmkG6R7/lUJoGd1Q==" - }, - "node_modules/component-type": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/component-type/-/component-type-1.0.0.tgz", - "integrity": "sha512-qzUg4SGDH6KFYlcklmeZwucbtosh/XGwuIffqXAhC1dZyjO7Xu1UuaxwKRY29EncuBj/DH+h6Zot3AdZS6xdFw==" - }, - "node_modules/concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" - }, - "node_modules/confusing-browser-globals": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/confusing-browser-globals/-/confusing-browser-globals-1.0.11.tgz", - "integrity": "sha512-JsPKdmh8ZkmnHxDk55FZ1TqVLvEQTvoByJZRN9jzI0UjxK/QgAmsphz7PGtqgPieQZ/CQcHWXCR7ATDNhGe+YA==", - "dev": true - }, - "node_modules/content-disposition": { - "version": "0.5.4", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", - "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", - "dependencies": { - "safe-buffer": "5.2.1" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/content-type": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", - "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/conventional-changelog": { - "version": "3.1.25", - "resolved": "https://registry.npmjs.org/conventional-changelog/-/conventional-changelog-3.1.25.tgz", - "integrity": "sha512-ryhi3fd1mKf3fSjbLXOfK2D06YwKNic1nC9mWqybBHdObPd8KJ2vjaXZfYj1U23t+V8T8n0d7gwnc9XbIdFbyQ==", - "dev": true, - "dependencies": { - "conventional-changelog-angular": "^5.0.12", - "conventional-changelog-atom": "^2.0.8", - "conventional-changelog-codemirror": "^2.0.8", - "conventional-changelog-conventionalcommits": "^4.5.0", - "conventional-changelog-core": "^4.2.1", - "conventional-changelog-ember": "^2.0.9", - "conventional-changelog-eslint": "^3.0.9", - "conventional-changelog-express": "^2.0.6", - "conventional-changelog-jquery": "^3.0.11", - "conventional-changelog-jshint": "^2.0.9", - "conventional-changelog-preset-loader": "^2.3.4" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/conventional-changelog-angular": { - "version": "5.0.13", - "resolved": "https://registry.npmjs.org/conventional-changelog-angular/-/conventional-changelog-angular-5.0.13.tgz", - "integrity": "sha512-i/gipMxs7s8L/QeuavPF2hLnJgH6pEZAttySB6aiQLWcX3puWDL3ACVmvBhJGxnAy52Qc15ua26BufY6KpmrVA==", - "dev": true, - "dependencies": { - "compare-func": "^2.0.0", - "q": "^1.5.1" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/conventional-changelog-atom": { - "version": "2.0.8", - "resolved": "https://registry.npmjs.org/conventional-changelog-atom/-/conventional-changelog-atom-2.0.8.tgz", - "integrity": "sha512-xo6v46icsFTK3bb7dY/8m2qvc8sZemRgdqLb/bjpBsH2UyOS8rKNTgcb5025Hri6IpANPApbXMg15QLb1LJpBw==", - "dev": true, - "dependencies": { - "q": "^1.5.1" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/conventional-changelog-codemirror": { - "version": "2.0.8", - "resolved": "https://registry.npmjs.org/conventional-changelog-codemirror/-/conventional-changelog-codemirror-2.0.8.tgz", - "integrity": "sha512-z5DAsn3uj1Vfp7po3gpt2Boc+Bdwmw2++ZHa5Ak9k0UKsYAO5mH1UBTN0qSCuJZREIhX6WU4E1p3IW2oRCNzQw==", - "dev": true, - "dependencies": { - "q": "^1.5.1" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/conventional-changelog-config-spec": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/conventional-changelog-config-spec/-/conventional-changelog-config-spec-2.1.0.tgz", - "integrity": "sha512-IpVePh16EbbB02V+UA+HQnnPIohgXvJRxHcS5+Uwk4AT5LjzCZJm5sp/yqs5C6KZJ1jMsV4paEV13BN1pvDuxQ==", - "dev": true - }, - "node_modules/conventional-changelog-conventionalcommits": { - "version": "4.6.3", - "resolved": "https://registry.npmjs.org/conventional-changelog-conventionalcommits/-/conventional-changelog-conventionalcommits-4.6.3.tgz", - "integrity": "sha512-LTTQV4fwOM4oLPad317V/QNQ1FY4Hju5qeBIM1uTHbrnCE+Eg4CdRZ3gO2pUeR+tzWdp80M2j3qFFEDWVqOV4g==", - "dev": true, - "dependencies": { - "compare-func": "^2.0.0", - "lodash": "^4.17.15", - "q": "^1.5.1" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/conventional-changelog-core": { - "version": "4.2.4", - "resolved": "https://registry.npmjs.org/conventional-changelog-core/-/conventional-changelog-core-4.2.4.tgz", - "integrity": "sha512-gDVS+zVJHE2v4SLc6B0sLsPiloR0ygU7HaDW14aNJE1v4SlqJPILPl/aJC7YdtRE4CybBf8gDwObBvKha8Xlyg==", - "dev": true, - "dependencies": { - "add-stream": "^1.0.0", - "conventional-changelog-writer": "^5.0.0", - "conventional-commits-parser": "^3.2.0", - "dateformat": "^3.0.0", - "get-pkg-repo": "^4.0.0", - "git-raw-commits": "^2.0.8", - "git-remote-origin-url": "^2.0.0", - "git-semver-tags": "^4.1.1", - "lodash": "^4.17.15", - "normalize-package-data": "^3.0.0", - "q": "^1.5.1", - "read-pkg": "^3.0.0", - "read-pkg-up": "^3.0.0", - "through2": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/conventional-changelog-core/node_modules/find-up": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", - "integrity": "sha512-NWzkk0jSJtTt08+FBFMvXoeZnOJD+jTtsRmBYbAIzJdX6l7dLgR7CTubCM5/eDdPUBvLCeVasP1brfVR/9/EZQ==", - "dev": true, - "dependencies": { - "locate-path": "^2.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/conventional-changelog-core/node_modules/hosted-git-info": { - "version": "2.8.9", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", - "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", - "dev": true - }, - "node_modules/conventional-changelog-core/node_modules/locate-path": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", - "integrity": "sha512-NCI2kiDkyR7VeEKm27Kda/iQHyKJe1Bu0FlTbYp3CqJu+9IFe9bLyAjMxf5ZDDbEg+iMPzB5zYyUTSm8wVTKmA==", - "dev": true, - "dependencies": { - "p-locate": "^2.0.0", - "path-exists": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/conventional-changelog-core/node_modules/p-limit": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", - "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", - "dev": true, - "dependencies": { - "p-try": "^1.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/conventional-changelog-core/node_modules/p-locate": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", - "integrity": "sha512-nQja7m7gSKuewoVRen45CtVfODR3crN3goVQ0DDZ9N3yHxgpkuBhZqsaiotSQRrADUrne346peY7kT3TSACykg==", - "dev": true, - "dependencies": { - "p-limit": "^1.1.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/conventional-changelog-core/node_modules/p-try": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", - "integrity": "sha512-U1etNYuMJoIz3ZXSrrySFjsXQTWOx2/jdi86L+2pRvph/qMKL6sbcCYdH23fqsbm8TH2Gn0OybpT4eSFlCVHww==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/conventional-changelog-core/node_modules/path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/conventional-changelog-core/node_modules/path-type": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz", - "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==", - "dev": true, - "dependencies": { - "pify": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/conventional-changelog-core/node_modules/pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/conventional-changelog-core/node_modules/read-pkg": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz", - "integrity": "sha512-BLq/cCO9two+lBgiTYNqD6GdtK8s4NpaWrl6/rCO9w0TUS8oJl7cmToOZfRYllKTISY6nt1U7jQ53brmKqY6BA==", - "dev": true, - "dependencies": { - "load-json-file": "^4.0.0", - "normalize-package-data": "^2.3.2", - "path-type": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/conventional-changelog-core/node_modules/read-pkg-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-3.0.0.tgz", - "integrity": "sha512-YFzFrVvpC6frF1sz8psoHDBGF7fLPc+llq/8NB43oagqWkx8ar5zYtsTORtOjw9W2RHLpWP+zTWwBvf1bCmcSw==", - "dev": true, - "dependencies": { - "find-up": "^2.0.0", - "read-pkg": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/conventional-changelog-core/node_modules/read-pkg/node_modules/normalize-package-data": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", - "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", - "dev": true, - "dependencies": { - "hosted-git-info": "^2.1.4", - "resolve": "^1.10.0", - "semver": "2 || 3 || 4 || 5", - "validate-npm-package-license": "^3.0.1" - } - }, - "node_modules/conventional-changelog-core/node_modules/semver": { - "version": "5.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", - "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", - "dev": true, - "bin": { - "semver": "bin/semver" - } - }, - "node_modules/conventional-changelog-ember": { - "version": "2.0.9", - "resolved": "https://registry.npmjs.org/conventional-changelog-ember/-/conventional-changelog-ember-2.0.9.tgz", - "integrity": "sha512-ulzIReoZEvZCBDhcNYfDIsLTHzYHc7awh+eI44ZtV5cx6LVxLlVtEmcO+2/kGIHGtw+qVabJYjdI5cJOQgXh1A==", - "dev": true, - "dependencies": { - "q": "^1.5.1" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/conventional-changelog-eslint": { - "version": "3.0.9", - "resolved": "https://registry.npmjs.org/conventional-changelog-eslint/-/conventional-changelog-eslint-3.0.9.tgz", - "integrity": "sha512-6NpUCMgU8qmWmyAMSZO5NrRd7rTgErjrm4VASam2u5jrZS0n38V7Y9CzTtLT2qwz5xEChDR4BduoWIr8TfwvXA==", - "dev": true, - "dependencies": { - "q": "^1.5.1" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/conventional-changelog-express": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/conventional-changelog-express/-/conventional-changelog-express-2.0.6.tgz", - "integrity": "sha512-SDez2f3iVJw6V563O3pRtNwXtQaSmEfTCaTBPCqn0oG0mfkq0rX4hHBq5P7De2MncoRixrALj3u3oQsNK+Q0pQ==", - "dev": true, - "dependencies": { - "q": "^1.5.1" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/conventional-changelog-jquery": { - "version": "3.0.11", - "resolved": "https://registry.npmjs.org/conventional-changelog-jquery/-/conventional-changelog-jquery-3.0.11.tgz", - "integrity": "sha512-x8AWz5/Td55F7+o/9LQ6cQIPwrCjfJQ5Zmfqi8thwUEKHstEn4kTIofXub7plf1xvFA2TqhZlq7fy5OmV6BOMw==", - "dev": true, - "dependencies": { - "q": "^1.5.1" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/conventional-changelog-jscs": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/conventional-changelog-jscs/-/conventional-changelog-jscs-0.1.0.tgz", - "integrity": "sha512-V8sey4tE0nJUlWGi2PZKDMfawYLf/+F165xhhDjcIoTEJDxssVV5PMVzTQzjS6U/dEX85fWkur+bs6imOqkIng==", - "dev": true, - "dependencies": { - "q": "^1.4.1" - } - }, - "node_modules/conventional-changelog-jshint": { - "version": "2.0.9", - "resolved": "https://registry.npmjs.org/conventional-changelog-jshint/-/conventional-changelog-jshint-2.0.9.tgz", - "integrity": "sha512-wMLdaIzq6TNnMHMy31hql02OEQ8nCQfExw1SE0hYL5KvU+JCTuPaDO+7JiogGT2gJAxiUGATdtYYfh+nT+6riA==", - "dev": true, - "dependencies": { - "compare-func": "^2.0.0", - "q": "^1.5.1" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/conventional-changelog-preset-loader": { - "version": "2.3.4", - "resolved": "https://registry.npmjs.org/conventional-changelog-preset-loader/-/conventional-changelog-preset-loader-2.3.4.tgz", - "integrity": "sha512-GEKRWkrSAZeTq5+YjUZOYxdHq+ci4dNwHvpaBC3+ENalzFWuCWa9EZXSuZBpkr72sMdKB+1fyDV4takK1Lf58g==", - "dev": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/conventional-changelog-writer": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/conventional-changelog-writer/-/conventional-changelog-writer-5.0.1.tgz", - "integrity": "sha512-5WsuKUfxW7suLblAbFnxAcrvf6r+0b7GvNaWUwUIk0bXMnENP/PEieGKVUQrjPqwPT4o3EPAASBXiY6iHooLOQ==", - "dev": true, - "dependencies": { - "conventional-commits-filter": "^2.0.7", - "dateformat": "^3.0.0", - "handlebars": "^4.7.7", - "json-stringify-safe": "^5.0.1", - "lodash": "^4.17.15", - "meow": "^8.0.0", - "semver": "^6.0.0", - "split": "^1.0.0", - "through2": "^4.0.0" - }, - "bin": { - "conventional-changelog-writer": "cli.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/conventional-changelog-writer/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/conventional-commit-types": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/conventional-commit-types/-/conventional-commit-types-3.0.0.tgz", - "integrity": "sha512-SmmCYnOniSsAa9GqWOeLqc179lfr5TRu5b4QFDkbsrJ5TZjPJx85wtOr3zn+1dbeNiXDKGPbZ72IKbPhLXh/Lg==", - "dev": true - }, - "node_modules/conventional-commits-filter": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/conventional-commits-filter/-/conventional-commits-filter-2.0.7.tgz", - "integrity": "sha512-ASS9SamOP4TbCClsRHxIHXRfcGCnIoQqkvAzCSbZzTFLfcTqJVugB0agRgsEELsqaeWgsXv513eS116wnlSSPA==", - "dev": true, - "dependencies": { - "lodash.ismatch": "^4.4.0", - "modify-values": "^1.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/conventional-commits-parser": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/conventional-commits-parser/-/conventional-commits-parser-3.2.4.tgz", - "integrity": "sha512-nK7sAtfi+QXbxHCYfhpZsfRtaitZLIA6889kFIouLvz6repszQDgxBu7wf2WbU+Dco7sAnNCJYERCwt54WPC2Q==", - "dev": true, - "dependencies": { - "is-text-path": "^1.0.1", - "JSONStream": "^1.0.4", - "lodash": "^4.17.15", - "meow": "^8.0.0", - "split2": "^3.0.0", - "through2": "^4.0.0" - }, - "bin": { - "conventional-commits-parser": "cli.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/conventional-github-releaser": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/conventional-github-releaser/-/conventional-github-releaser-3.1.5.tgz", - "integrity": "sha512-VhPKbdN92b2ygnQLkuwHIfUaPAVrVfJVuQdxbmmVPkN927LDP98HthLWFVShh4pxqLK0nE66v78RERGJVeCzbg==", - "dev": true, - "dependencies": { - "conventional-changelog": "^2.0.0", - "dateformat": "^3.0.0", - "debug": "^3.1.0", - "gh-got": "^7.0.0", - "git-semver-tags": "^2.0.0", - "lodash.merge": "^4.0.2", - "meow": "^7.0.0", - "object-assign": "^4.0.1", - "q": "^1.4.1", - "semver": "^5.0.1", - "semver-regex": "^2.0.0", - "through2": "^2.0.0" - }, - "bin": { - "conventional-github-releaser": "src/cli.js" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/conventional-github-releaser/node_modules/compare-func": { - "version": "1.3.4", - "resolved": "https://registry.npmjs.org/compare-func/-/compare-func-1.3.4.tgz", - "integrity": "sha512-sq2sWtrqKPkEXAC8tEJA1+BqAH9GbFkGBtUOqrUX57VSfwp8xyktctk+uLoRy5eccTdxzDcVIztlYDpKs3Jv1Q==", - "dev": true, - "dependencies": { - "array-ify": "^1.0.0", - "dot-prop": "^3.0.0" - } - }, - "node_modules/conventional-github-releaser/node_modules/conventional-changelog": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/conventional-changelog/-/conventional-changelog-2.0.3.tgz", - "integrity": "sha512-4bcII9cJHSKb2qi9e8qGF6aJHLf/AB0dokhyR+X6QILTMl77s4l163vK+reXhajvfOYbbHQvsrWybr5+PKZwNA==", - "dev": true, - "dependencies": { - "conventional-changelog-angular": "^1.6.6", - "conventional-changelog-atom": "^2.0.0", - "conventional-changelog-codemirror": "^2.0.0", - "conventional-changelog-core": "^3.1.0", - "conventional-changelog-ember": "^2.0.1", - "conventional-changelog-eslint": "^3.0.0", - "conventional-changelog-express": "^2.0.0", - "conventional-changelog-jquery": "^0.1.0", - "conventional-changelog-jscs": "^0.1.0", - "conventional-changelog-jshint": "^2.0.0", - "conventional-changelog-preset-loader": "^2.0.1" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/conventional-github-releaser/node_modules/conventional-changelog-angular": { - "version": "1.6.6", - "resolved": "https://registry.npmjs.org/conventional-changelog-angular/-/conventional-changelog-angular-1.6.6.tgz", - "integrity": "sha512-suQnFSqCxRwyBxY68pYTsFkG0taIdinHLNEAX5ivtw8bCRnIgnpvcHmlR/yjUyZIrNPYAoXlY1WiEKWgSE4BNg==", - "dev": true, - "dependencies": { - "compare-func": "^1.3.1", - "q": "^1.5.1" - } - }, - "node_modules/conventional-github-releaser/node_modules/conventional-changelog-core": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/conventional-changelog-core/-/conventional-changelog-core-3.2.3.tgz", - "integrity": "sha512-LMMX1JlxPIq/Ez5aYAYS5CpuwbOk6QFp8O4HLAcZxe3vxoCtABkhfjetk8IYdRB9CDQGwJFLR3Dr55Za6XKgUQ==", - "dev": true, - "dependencies": { - "conventional-changelog-writer": "^4.0.6", - "conventional-commits-parser": "^3.0.3", - "dateformat": "^3.0.0", - "get-pkg-repo": "^1.0.0", - "git-raw-commits": "2.0.0", - "git-remote-origin-url": "^2.0.0", - "git-semver-tags": "^2.0.3", - "lodash": "^4.2.1", - "normalize-package-data": "^2.3.5", - "q": "^1.5.1", - "read-pkg": "^3.0.0", - "read-pkg-up": "^3.0.0", - "through2": "^3.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/conventional-github-releaser/node_modules/conventional-changelog-core/node_modules/read-pkg-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-3.0.0.tgz", - "integrity": "sha512-YFzFrVvpC6frF1sz8psoHDBGF7fLPc+llq/8NB43oagqWkx8ar5zYtsTORtOjw9W2RHLpWP+zTWwBvf1bCmcSw==", - "dev": true, - "dependencies": { - "find-up": "^2.0.0", - "read-pkg": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/conventional-github-releaser/node_modules/conventional-changelog-core/node_modules/through2": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/through2/-/through2-3.0.2.tgz", - "integrity": "sha512-enaDQ4MUyP2W6ZyT6EsMzqBPZaM/avg8iuo+l2d3QCs0J+6RaqkHV/2/lOwDTueBHeJ/2LG9lrLW3d5rWPucuQ==", - "dev": true, - "dependencies": { - "inherits": "^2.0.4", - "readable-stream": "2 || 3" - } - }, - "node_modules/conventional-github-releaser/node_modules/conventional-changelog-jquery": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/conventional-changelog-jquery/-/conventional-changelog-jquery-0.1.0.tgz", - "integrity": "sha512-wbz5vVcvu/SPZTDFB21fF/xo5zFq6NQR42jhtUfOrrP1N/ZjNshhGb3expCGqHYdnUHzPevHeUafsVrdxVD5Og==", - "dev": true, - "dependencies": { - "q": "^1.4.1" - } - }, - "node_modules/conventional-github-releaser/node_modules/conventional-changelog-writer": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/conventional-changelog-writer/-/conventional-changelog-writer-4.1.0.tgz", - "integrity": "sha512-WwKcUp7WyXYGQmkLsX4QmU42AZ1lqlvRW9mqoyiQzdD+rJWbTepdWoKJuwXTS+yq79XKnQNa93/roViPQrAQgw==", - "dev": true, - "dependencies": { - "compare-func": "^2.0.0", - "conventional-commits-filter": "^2.0.7", - "dateformat": "^3.0.0", - "handlebars": "^4.7.6", - "json-stringify-safe": "^5.0.1", - "lodash": "^4.17.15", - "meow": "^8.0.0", - "semver": "^6.0.0", - "split": "^1.0.0", - "through2": "^4.0.0" - }, - "bin": { - "conventional-changelog-writer": "cli.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/conventional-github-releaser/node_modules/conventional-changelog-writer/node_modules/compare-func": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/compare-func/-/compare-func-2.0.0.tgz", - "integrity": "sha512-zHig5N+tPWARooBnb0Zx1MFcdfpyJrfTJ3Y5L+IFvUm8rM74hHz66z0gw0x4tijh5CorKkKUCnW82R2vmpeCRA==", - "dev": true, - "dependencies": { - "array-ify": "^1.0.0", - "dot-prop": "^5.1.0" - } - }, - "node_modules/conventional-github-releaser/node_modules/conventional-changelog-writer/node_modules/hosted-git-info": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz", - "integrity": "sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==", - "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/conventional-github-releaser/node_modules/conventional-changelog-writer/node_modules/meow": { - "version": "8.1.2", - "resolved": "https://registry.npmjs.org/meow/-/meow-8.1.2.tgz", - "integrity": "sha512-r85E3NdZ+mpYk1C6RjPFEMSE+s1iZMuHtsHAqY0DT3jZczl0diWUZ8g6oU7h0M9cD2EL+PzaYghhCLzR0ZNn5Q==", - "dev": true, - "dependencies": { - "@types/minimist": "^1.2.0", - "camelcase-keys": "^6.2.2", - "decamelize-keys": "^1.1.0", - "hard-rejection": "^2.1.0", - "minimist-options": "4.1.0", - "normalize-package-data": "^3.0.0", - "read-pkg-up": "^7.0.1", - "redent": "^3.0.0", - "trim-newlines": "^3.0.0", - "type-fest": "^0.18.0", - "yargs-parser": "^20.2.3" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/conventional-github-releaser/node_modules/conventional-changelog-writer/node_modules/normalize-package-data": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-3.0.3.tgz", - "integrity": "sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA==", - "dev": true, - "dependencies": { - "hosted-git-info": "^4.0.1", - "is-core-module": "^2.5.0", - "semver": "^7.3.4", - "validate-npm-package-license": "^3.0.1" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/conventional-github-releaser/node_modules/conventional-changelog-writer/node_modules/normalize-package-data/node_modules/semver": { - "version": "7.5.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.3.tgz", - "integrity": "sha512-QBlUtyVk/5EeHbi7X0fw6liDZc7BBmEaSYn01fMU1OUYbf6GPsbTtd8WmnqbI20SeycoHSeiybkE/q1Q+qlThQ==", - "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/conventional-github-releaser/node_modules/conventional-changelog-writer/node_modules/readable-stream": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", - "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", - "dev": true, - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/conventional-github-releaser/node_modules/conventional-changelog-writer/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/conventional-github-releaser/node_modules/conventional-changelog-writer/node_modules/through2": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/through2/-/through2-4.0.2.tgz", - "integrity": "sha512-iOqSav00cVxEEICeD7TjLB1sueEL+81Wpzp2bY17uZjZN0pWZPuo4suZ/61VujxmqSGFfgOcNuTZ85QJwNZQpw==", - "dev": true, - "dependencies": { - "readable-stream": "3" - } - }, - "node_modules/conventional-github-releaser/node_modules/conventional-changelog-writer/node_modules/type-fest": { - "version": "0.18.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.18.1.tgz", - "integrity": "sha512-OIAYXk8+ISY+qTOwkHtKqzAuxchoMiD9Udx+FSGQDuiRR+PJKJHc2NJAXlbhkGwTt/4/nKZxELY1w3ReWOL8mw==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/conventional-github-releaser/node_modules/dargs": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/dargs/-/dargs-4.1.0.tgz", - "integrity": "sha512-jyweV/k0rbv2WK4r9KLayuBrSh2Py0tNmV7LBoSMH4hMQyrG8OPyIOWB2VEx4DJKXWmK4lopYMVvORlDt2S8Aw==", - "dev": true, - "dependencies": { - "number-is-nan": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/conventional-github-releaser/node_modules/debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dev": true, - "dependencies": { - "ms": "^2.1.1" - } - }, - "node_modules/conventional-github-releaser/node_modules/dot-prop": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-4.2.1.tgz", - "integrity": "sha512-l0p4+mIuJIua0mhxGoh4a+iNL9bmeK5DvnSVQa6T0OhrVmaEa1XScX5Etc673FePCJOArq/4Pa2cLGODUWTPOQ==", - "dev": true, - "dependencies": { - "is-obj": "^1.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/conventional-github-releaser/node_modules/find-up": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", - "integrity": "sha512-NWzkk0jSJtTt08+FBFMvXoeZnOJD+jTtsRmBYbAIzJdX6l7dLgR7CTubCM5/eDdPUBvLCeVasP1brfVR/9/EZQ==", - "dev": true, - "dependencies": { - "locate-path": "^2.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/conventional-github-releaser/node_modules/get-pkg-repo": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/get-pkg-repo/-/get-pkg-repo-1.4.0.tgz", - "integrity": "sha512-xPCyvcEOxCJDxhBfXDNH+zA7mIRGb2aY1gIUJWsZkpJbp1BLHl+/Sycg26Dv+ZbZAJkO61tzbBtqHUi30NGBvg==", - "dev": true, - "dependencies": { - "hosted-git-info": "^2.1.4", - "meow": "^3.3.0", - "normalize-package-data": "^2.3.0", - "parse-github-repo-url": "^1.3.0", - "through2": "^2.0.0" - }, - "bin": { - "get-pkg-repo": "cli.js" - } - }, - "node_modules/conventional-github-releaser/node_modules/get-pkg-repo/node_modules/camelcase": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-2.1.1.tgz", - "integrity": "sha512-DLIsRzJVBQu72meAKPkWQOLcujdXT32hwdfnkI1frSiSRMK1MofjKHf+MEx0SB6fjEFXL8fBDv1dKymBlOp4Qw==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/conventional-github-releaser/node_modules/get-pkg-repo/node_modules/camelcase-keys": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-2.1.0.tgz", - "integrity": "sha512-bA/Z/DERHKqoEOrp+qeGKw1QlvEQkGZSc0XaY6VnTxZr+Kv1G5zFwttpjv8qxZ/sBPT4nthwZaAcsAZTJlSKXQ==", - "dev": true, - "dependencies": { - "camelcase": "^2.0.0", - "map-obj": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/conventional-github-releaser/node_modules/get-pkg-repo/node_modules/find-up": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", - "integrity": "sha512-jvElSjyuo4EMQGoTwo1uJU5pQMwTW5lS1x05zzfJuTIyLR3zwO27LYrxNg+dlvKpGOuGy/MzBdXh80g0ve5+HA==", - "dev": true, - "dependencies": { - "path-exists": "^2.0.0", - "pinkie-promise": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/conventional-github-releaser/node_modules/get-pkg-repo/node_modules/load-json-file": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", - "integrity": "sha512-cy7ZdNRXdablkXYNI049pthVeXFurRyb9+hA/dZzerZ0pGTx42z+y+ssxBaVV2l70t1muq5IdKhn4UtcoGUY9A==", - "dev": true, - "dependencies": { - "graceful-fs": "^4.1.2", - "parse-json": "^2.2.0", - "pify": "^2.0.0", - "pinkie-promise": "^2.0.0", - "strip-bom": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/conventional-github-releaser/node_modules/get-pkg-repo/node_modules/meow": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/meow/-/meow-3.7.0.tgz", - "integrity": "sha512-TNdwZs0skRlpPpCUK25StC4VH+tP5GgeY1HQOOGP+lQ2xtdkN2VtT/5tiX9k3IWpkBPV9b3LsAWXn4GGi/PrSA==", - "dev": true, - "dependencies": { - "camelcase-keys": "^2.0.0", - "decamelize": "^1.1.2", - "loud-rejection": "^1.0.0", - "map-obj": "^1.0.1", - "minimist": "^1.1.3", - "normalize-package-data": "^2.3.4", - "object-assign": "^4.0.1", - "read-pkg-up": "^1.0.1", - "redent": "^1.0.0", - "trim-newlines": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/conventional-github-releaser/node_modules/get-pkg-repo/node_modules/path-exists": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", - "integrity": "sha512-yTltuKuhtNeFJKa1PiRzfLAU5182q1y4Eb4XCJ3PBqyzEDkAZRzBrKKBct682ls9reBVHf9udYLN5Nd+K1B9BQ==", - "dev": true, - "dependencies": { - "pinkie-promise": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/conventional-github-releaser/node_modules/get-pkg-repo/node_modules/path-type": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz", - "integrity": "sha512-S4eENJz1pkiQn9Znv33Q+deTOKmbl+jj1Fl+qiP/vYezj+S8x+J3Uo0ISrx/QoEvIlOaDWJhPaRd1flJ9HXZqg==", - "dev": true, - "dependencies": { - "graceful-fs": "^4.1.2", - "pify": "^2.0.0", - "pinkie-promise": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/conventional-github-releaser/node_modules/get-pkg-repo/node_modules/pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/conventional-github-releaser/node_modules/get-pkg-repo/node_modules/read-pkg": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz", - "integrity": "sha512-7BGwRHqt4s/uVbuyoeejRn4YmFnYZiFl4AuaeXHlgZf3sONF0SOGlxs2Pw8g6hCKupo08RafIO5YXFNOKTfwsQ==", - "dev": true, - "dependencies": { - "load-json-file": "^1.0.0", - "normalize-package-data": "^2.3.2", - "path-type": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/conventional-github-releaser/node_modules/get-pkg-repo/node_modules/read-pkg-up": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz", - "integrity": "sha512-WD9MTlNtI55IwYUS27iHh9tK3YoIVhxis8yKhLpTqWtml739uXc9NWTpxoHkfZf3+DkCCsXox94/VWZniuZm6A==", - "dev": true, - "dependencies": { - "find-up": "^1.0.0", - "read-pkg": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/conventional-github-releaser/node_modules/get-pkg-repo/node_modules/redent": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/redent/-/redent-1.0.0.tgz", - "integrity": "sha512-qtW5hKzGQZqKoh6JNSD+4lfitfPKGz42e6QwiRmPM5mmKtR0N41AbJRYu0xJi7nhOJ4WDgRkKvAk6tw4WIwR4g==", - "dev": true, - "dependencies": { - "indent-string": "^2.1.0", - "strip-indent": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/conventional-github-releaser/node_modules/git-raw-commits": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/git-raw-commits/-/git-raw-commits-2.0.0.tgz", - "integrity": "sha512-w4jFEJFgKXMQJ0H0ikBk2S+4KP2VEjhCvLCNqbNRQC8BgGWgLKNCO7a9K9LI+TVT7Gfoloje502sEnctibffgg==", - "dev": true, - "dependencies": { - "dargs": "^4.0.1", - "lodash.template": "^4.0.2", - "meow": "^4.0.0", - "split2": "^2.0.0", - "through2": "^2.0.0" - }, - "bin": { - "git-raw-commits": "cli.js" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/conventional-github-releaser/node_modules/git-raw-commits/node_modules/camelcase": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz", - "integrity": "sha512-FxAv7HpHrXbh3aPo4o2qxHay2lkLY3x5Mw3KeE4KQE8ysVfziWeRZDwcjauvwBSGEC/nXUPzZy8zeh4HokqOnw==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/conventional-github-releaser/node_modules/git-raw-commits/node_modules/camelcase-keys": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-4.2.0.tgz", - "integrity": "sha512-Ej37YKYbFUI8QiYlvj9YHb6/Z60dZyPJW0Cs8sFilMbd2lP0bw3ylAq9yJkK4lcTA2dID5fG8LjmJYbO7kWb7Q==", - "dev": true, - "dependencies": { - "camelcase": "^4.1.0", - "map-obj": "^2.0.0", - "quick-lru": "^1.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/conventional-github-releaser/node_modules/git-raw-commits/node_modules/indent-string": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-3.2.0.tgz", - "integrity": "sha512-BYqTHXTGUIvg7t1r4sJNKcbDZkL92nkXA8YtRpbjFHRHGDL/NtUeiBJMeE60kIFN/Mg8ESaWQvftaYMGJzQZCQ==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/conventional-github-releaser/node_modules/git-raw-commits/node_modules/map-obj": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-2.0.0.tgz", - "integrity": "sha512-TzQSV2DiMYgoF5RycneKVUzIa9bQsj/B3tTgsE3dOGqlzHnGIDaC7XBE7grnA+8kZPnfqSGFe95VHc2oc0VFUQ==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/conventional-github-releaser/node_modules/git-raw-commits/node_modules/meow": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/meow/-/meow-4.0.1.tgz", - "integrity": "sha512-xcSBHD5Z86zaOc+781KrupuHAzeGXSLtiAOmBsiLDiPSaYSB6hdew2ng9EBAnZ62jagG9MHAOdxpDi/lWBFJ/A==", - "dev": true, - "dependencies": { - "camelcase-keys": "^4.0.0", - "decamelize-keys": "^1.0.0", - "loud-rejection": "^1.0.0", - "minimist": "^1.1.3", - "minimist-options": "^3.0.1", - "normalize-package-data": "^2.3.4", - "read-pkg-up": "^3.0.0", - "redent": "^2.0.0", - "trim-newlines": "^2.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/conventional-github-releaser/node_modules/git-raw-commits/node_modules/minimist-options": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/minimist-options/-/minimist-options-3.0.2.tgz", - "integrity": "sha512-FyBrT/d0d4+uiZRbqznPXqw3IpZZG3gl3wKWiX784FycUKVwBt0uLBFkQrtE4tZOrgo78nZp2jnKz3L65T5LdQ==", - "dev": true, - "dependencies": { - "arrify": "^1.0.1", - "is-plain-obj": "^1.1.0" - }, - "engines": { - "node": ">= 4" - } - }, - "node_modules/conventional-github-releaser/node_modules/git-raw-commits/node_modules/read-pkg-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-3.0.0.tgz", - "integrity": "sha512-YFzFrVvpC6frF1sz8psoHDBGF7fLPc+llq/8NB43oagqWkx8ar5zYtsTORtOjw9W2RHLpWP+zTWwBvf1bCmcSw==", - "dev": true, - "dependencies": { - "find-up": "^2.0.0", - "read-pkg": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/conventional-github-releaser/node_modules/git-raw-commits/node_modules/redent": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/redent/-/redent-2.0.0.tgz", - "integrity": "sha512-XNwrTx77JQCEMXTeb8movBKuK75MgH0RZkujNuDKCezemx/voapl9i2gCSi8WWm8+ox5ycJi1gxF22fR7c0Ciw==", - "dev": true, - "dependencies": { - "indent-string": "^3.0.0", - "strip-indent": "^2.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/conventional-github-releaser/node_modules/git-raw-commits/node_modules/strip-indent": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-2.0.0.tgz", - "integrity": "sha512-RsSNPLpq6YUL7QYy44RnPVTn/lcVZtb48Uof3X5JLbF4zD/Gs7ZFDv2HWol+leoQN2mT86LAzSshGfkTlSOpsA==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/conventional-github-releaser/node_modules/git-semver-tags": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/git-semver-tags/-/git-semver-tags-2.0.3.tgz", - "integrity": "sha512-tj4FD4ww2RX2ae//jSrXZzrocla9db5h0V7ikPl1P/WwoZar9epdUhwR7XHXSgc+ZkNq72BEEerqQuicoEQfzA==", - "dev": true, - "dependencies": { - "meow": "^4.0.0", - "semver": "^6.0.0" - }, - "bin": { - "git-semver-tags": "cli.js" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/conventional-github-releaser/node_modules/git-semver-tags/node_modules/camelcase": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz", - "integrity": "sha512-FxAv7HpHrXbh3aPo4o2qxHay2lkLY3x5Mw3KeE4KQE8ysVfziWeRZDwcjauvwBSGEC/nXUPzZy8zeh4HokqOnw==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/conventional-github-releaser/node_modules/git-semver-tags/node_modules/camelcase-keys": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-4.2.0.tgz", - "integrity": "sha512-Ej37YKYbFUI8QiYlvj9YHb6/Z60dZyPJW0Cs8sFilMbd2lP0bw3ylAq9yJkK4lcTA2dID5fG8LjmJYbO7kWb7Q==", - "dev": true, - "dependencies": { - "camelcase": "^4.1.0", - "map-obj": "^2.0.0", - "quick-lru": "^1.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/conventional-github-releaser/node_modules/git-semver-tags/node_modules/indent-string": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-3.2.0.tgz", - "integrity": "sha512-BYqTHXTGUIvg7t1r4sJNKcbDZkL92nkXA8YtRpbjFHRHGDL/NtUeiBJMeE60kIFN/Mg8ESaWQvftaYMGJzQZCQ==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/conventional-github-releaser/node_modules/git-semver-tags/node_modules/map-obj": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-2.0.0.tgz", - "integrity": "sha512-TzQSV2DiMYgoF5RycneKVUzIa9bQsj/B3tTgsE3dOGqlzHnGIDaC7XBE7grnA+8kZPnfqSGFe95VHc2oc0VFUQ==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/conventional-github-releaser/node_modules/git-semver-tags/node_modules/meow": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/meow/-/meow-4.0.1.tgz", - "integrity": "sha512-xcSBHD5Z86zaOc+781KrupuHAzeGXSLtiAOmBsiLDiPSaYSB6hdew2ng9EBAnZ62jagG9MHAOdxpDi/lWBFJ/A==", - "dev": true, - "dependencies": { - "camelcase-keys": "^4.0.0", - "decamelize-keys": "^1.0.0", - "loud-rejection": "^1.0.0", - "minimist": "^1.1.3", - "minimist-options": "^3.0.1", - "normalize-package-data": "^2.3.4", - "read-pkg-up": "^3.0.0", - "redent": "^2.0.0", - "trim-newlines": "^2.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/conventional-github-releaser/node_modules/git-semver-tags/node_modules/minimist-options": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/minimist-options/-/minimist-options-3.0.2.tgz", - "integrity": "sha512-FyBrT/d0d4+uiZRbqznPXqw3IpZZG3gl3wKWiX784FycUKVwBt0uLBFkQrtE4tZOrgo78nZp2jnKz3L65T5LdQ==", - "dev": true, - "dependencies": { - "arrify": "^1.0.1", - "is-plain-obj": "^1.1.0" - }, - "engines": { - "node": ">= 4" - } - }, - "node_modules/conventional-github-releaser/node_modules/git-semver-tags/node_modules/read-pkg-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-3.0.0.tgz", - "integrity": "sha512-YFzFrVvpC6frF1sz8psoHDBGF7fLPc+llq/8NB43oagqWkx8ar5zYtsTORtOjw9W2RHLpWP+zTWwBvf1bCmcSw==", - "dev": true, - "dependencies": { - "find-up": "^2.0.0", - "read-pkg": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/conventional-github-releaser/node_modules/git-semver-tags/node_modules/redent": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/redent/-/redent-2.0.0.tgz", - "integrity": "sha512-XNwrTx77JQCEMXTeb8movBKuK75MgH0RZkujNuDKCezemx/voapl9i2gCSi8WWm8+ox5ycJi1gxF22fR7c0Ciw==", - "dev": true, - "dependencies": { - "indent-string": "^3.0.0", - "strip-indent": "^2.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/conventional-github-releaser/node_modules/git-semver-tags/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/conventional-github-releaser/node_modules/git-semver-tags/node_modules/strip-indent": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-2.0.0.tgz", - "integrity": "sha512-RsSNPLpq6YUL7QYy44RnPVTn/lcVZtb48Uof3X5JLbF4zD/Gs7ZFDv2HWol+leoQN2mT86LAzSshGfkTlSOpsA==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/conventional-github-releaser/node_modules/hosted-git-info": { - "version": "2.8.9", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", - "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", - "dev": true - }, - "node_modules/conventional-github-releaser/node_modules/indent-string": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-2.1.0.tgz", - "integrity": "sha512-aqwDFWSgSgfRaEwao5lg5KEcVd/2a+D1rvoG7NdilmYz0NwRk6StWpWdz/Hpk34MKPpx7s8XxUqimfcQK6gGlg==", - "dev": true, - "dependencies": { - "repeating": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/conventional-github-releaser/node_modules/is-obj": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz", - "integrity": "sha512-l4RyHgRqGN4Y3+9JHVrNqO+tN0rV5My76uW5/nuO4K1b6vw5G8d/cmFjP9tRfEsdhZNt0IFdZuK/c2Vr4Nb+Qg==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/conventional-github-releaser/node_modules/locate-path": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", - "integrity": "sha512-NCI2kiDkyR7VeEKm27Kda/iQHyKJe1Bu0FlTbYp3CqJu+9IFe9bLyAjMxf5ZDDbEg+iMPzB5zYyUTSm8wVTKmA==", - "dev": true, - "dependencies": { - "p-locate": "^2.0.0", - "path-exists": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/conventional-github-releaser/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/conventional-github-releaser/node_modules/map-obj": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", - "integrity": "sha512-7N/q3lyZ+LVCp7PzuxrJr4KMbBE2hW7BT7YNia330OFxIf4d3r5zVpicP2650l7CPN6RM9zOJRl3NGpqSiw3Eg==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/conventional-github-releaser/node_modules/meow": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/meow/-/meow-7.1.1.tgz", - "integrity": "sha512-GWHvA5QOcS412WCo8vwKDlTelGLsCGBVevQB5Kva961rmNfun0PCbv5+xta2kUMFJyR8/oWnn7ddeKdosbAPbA==", - "dev": true, - "dependencies": { - "@types/minimist": "^1.2.0", - "camelcase-keys": "^6.2.2", - "decamelize-keys": "^1.1.0", - "hard-rejection": "^2.1.0", - "minimist-options": "4.1.0", - "normalize-package-data": "^2.5.0", - "read-pkg-up": "^7.0.1", - "redent": "^3.0.0", - "trim-newlines": "^3.0.0", - "type-fest": "^0.13.1", - "yargs-parser": "^18.1.3" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/conventional-github-releaser/node_modules/meow/node_modules/yargs-parser": { - "version": "18.1.3", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", - "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", - "dev": true, - "dependencies": { - "camelcase": "^5.0.0", - "decamelize": "^1.2.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/conventional-github-releaser/node_modules/normalize-package-data": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", - "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", - "dev": true, - "dependencies": { - "hosted-git-info": "^2.1.4", - "resolve": "^1.10.0", - "semver": "2 || 3 || 4 || 5", - "validate-npm-package-license": "^3.0.1" - } - }, - "node_modules/conventional-github-releaser/node_modules/p-limit": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", - "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", - "dev": true, - "dependencies": { - "p-try": "^1.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/conventional-github-releaser/node_modules/p-locate": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", - "integrity": "sha512-nQja7m7gSKuewoVRen45CtVfODR3crN3goVQ0DDZ9N3yHxgpkuBhZqsaiotSQRrADUrne346peY7kT3TSACykg==", - "dev": true, - "dependencies": { - "p-limit": "^1.1.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/conventional-github-releaser/node_modules/p-try": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", - "integrity": "sha512-U1etNYuMJoIz3ZXSrrySFjsXQTWOx2/jdi86L+2pRvph/qMKL6sbcCYdH23fqsbm8TH2Gn0OybpT4eSFlCVHww==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/conventional-github-releaser/node_modules/parse-json": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", - "integrity": "sha512-QR/GGaKCkhwk1ePQNYDRKYZ3mwU9ypsKhB0XyFnLQdomyEqk3e8wpW3V5Jp88zbxK4n5ST1nqo+g9juTpownhQ==", - "dev": true, - "dependencies": { - "error-ex": "^1.2.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/conventional-github-releaser/node_modules/path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/conventional-github-releaser/node_modules/path-type": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz", - "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==", - "dev": true, - "dependencies": { - "pify": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/conventional-github-releaser/node_modules/pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/conventional-github-releaser/node_modules/quick-lru": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-1.1.0.tgz", - "integrity": "sha512-tRS7sTgyxMXtLum8L65daJnHUhfDUgboRdcWW2bR9vBfrj2+O5HSMbQOJfJJjIVSPFqbBCF37FpwWXGitDc5tA==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/conventional-github-releaser/node_modules/read-pkg": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz", - "integrity": "sha512-BLq/cCO9two+lBgiTYNqD6GdtK8s4NpaWrl6/rCO9w0TUS8oJl7cmToOZfRYllKTISY6nt1U7jQ53brmKqY6BA==", - "dev": true, - "dependencies": { - "load-json-file": "^4.0.0", - "normalize-package-data": "^2.3.2", - "path-type": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/conventional-github-releaser/node_modules/semver": { - "version": "5.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", - "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", - "dev": true, - "bin": { - "semver": "bin/semver" - } - }, - "node_modules/conventional-github-releaser/node_modules/split2": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/split2/-/split2-2.2.0.tgz", - "integrity": "sha512-RAb22TG39LhI31MbreBgIuKiIKhVsawfTgEGqKHTK87aG+ul/PB8Sqoi3I7kVdRWiCfrKxK3uo4/YUkpNvhPbw==", - "dev": true, - "dependencies": { - "through2": "^2.0.2" - } - }, - "node_modules/conventional-github-releaser/node_modules/strip-bom": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", - "integrity": "sha512-kwrX1y7czp1E69n2ajbG65mIo9dqvJ+8aBQXOGVxqwvNbsXdFM6Lq37dLAY3mknUwru8CfcCbfOLL/gMo+fi3g==", - "dev": true, - "dependencies": { - "is-utf8": "^0.2.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/conventional-github-releaser/node_modules/strip-indent": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-1.0.1.tgz", - "integrity": "sha512-I5iQq6aFMM62fBEAIB/hXzwJD6EEZ0xEGCX2t7oXqaKPIRgt4WruAQ285BISgdkP+HLGWyeGmNJcpIwFeRYRUA==", - "dev": true, - "dependencies": { - "get-stdin": "^4.0.1" - }, - "bin": { - "strip-indent": "cli.js" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/conventional-github-releaser/node_modules/through2": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", - "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", - "dev": true, - "dependencies": { - "readable-stream": "~2.3.6", - "xtend": "~4.0.1" - } - }, - "node_modules/conventional-github-releaser/node_modules/type-fest": { - "version": "0.13.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.13.1.tgz", - "integrity": "sha512-34R7HTnG0XIJcBSn5XhDd7nNFPRcXYRZrBB2O2jdKqYODldSzBAqzsWoZYYvduky73toYS/ESqxPvkDf/F0XMg==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/conventional-github-releaser/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - }, - "node_modules/conventional-recommended-bump": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/conventional-recommended-bump/-/conventional-recommended-bump-6.1.0.tgz", - "integrity": "sha512-uiApbSiNGM/kkdL9GTOLAqC4hbptObFo4wW2QRyHsKciGAfQuLU1ShZ1BIVI/+K2BE/W1AWYQMCXAsv4dyKPaw==", - "dev": true, - "dependencies": { - "concat-stream": "^2.0.0", - "conventional-changelog-preset-loader": "^2.3.4", - "conventional-commits-filter": "^2.0.7", - "conventional-commits-parser": "^3.2.0", - "git-raw-commits": "^2.0.8", - "git-semver-tags": "^4.1.1", - "meow": "^8.0.0", - "q": "^1.5.1" - }, - "bin": { - "conventional-recommended-bump": "cli.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/conventional-recommended-bump/node_modules/concat-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-2.0.0.tgz", - "integrity": "sha512-MWufYdFw53ccGjCA+Ol7XJYpAlW6/prSMzuPOTRnJGcGzuhLn4Scrz7qf6o8bROZ514ltazcIFJZevcfbo0x7A==", - "dev": true, - "engines": [ - "node >= 6.0" - ], - "dependencies": { - "buffer-from": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^3.0.2", - "typedarray": "^0.0.6" - } - }, - "node_modules/conventional-recommended-bump/node_modules/readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "dev": true, - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/convert-hex": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/convert-hex/-/convert-hex-0.1.0.tgz", - "integrity": "sha512-w20BOb1PiR/sEJdS6wNrUjF5CSfscZFUp7R9NSlXH8h2wynzXVEPFPJECAnkNylZ+cvf3p7TyRUHggDmrwXT9A==" - }, - "node_modules/convert-source-map": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", - "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", - "dev": true - }, - "node_modules/convert-string": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/convert-string/-/convert-string-0.1.0.tgz", - "integrity": "sha512-1KX9ESmtl8xpT2LN2tFnKSbV4NiarbVi8DVb39ZriijvtTklyrT+4dT1wsGMHKD3CJUjXgvJzstm9qL9ICojGA==" - }, - "node_modules/cookiejar": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/cookiejar/-/cookiejar-2.1.4.tgz", - "integrity": "sha512-LDx6oHrK+PhzLKJU9j5S7/Y3jM/mUHvD/DeI1WQmJn652iPC5Y4TBzC9l+5OMOXlyTTA+SmVUPm0HQUwpD5Jqw==", - "dev": true - }, - "node_modules/cookies": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/cookies/-/cookies-0.8.0.tgz", - "integrity": "sha512-8aPsApQfebXnuI+537McwYsDtjVxGm8gTIzQI3FDW6t5t/DAhERxtnbEPN/8RX+uZthoz4eCOgloXaE5cYyNow==", - "dependencies": { - "depd": "~2.0.0", - "keygrip": "~1.1.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/copy-to": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/copy-to/-/copy-to-2.0.1.tgz", - "integrity": "sha512-3DdaFaU/Zf1AnpLiFDeNCD4TOWe3Zl2RZaTzUvWiIk5ERzcCodOE20Vqq4fzCbNoHURFHT4/us/Lfq+S2zyY4w==" - }, - "node_modules/core-util-is": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", - "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", - "dev": true - }, - "node_modules/cosmiconfig": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-8.0.0.tgz", - "integrity": "sha512-da1EafcpH6b/TD8vDRaWV7xFINlHlF6zKsGwS1TsuVJTZRkquaS5HTMq7uq6h31619QjbsYl21gVDOm32KM1vQ==", - "dev": true, - "dependencies": { - "import-fresh": "^3.2.1", - "js-yaml": "^4.1.0", - "parse-json": "^5.0.0", - "path-type": "^4.0.0" - }, - "engines": { - "node": ">=14" - } - }, - "node_modules/cosmiconfig-typescript-loader": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/cosmiconfig-typescript-loader/-/cosmiconfig-typescript-loader-4.3.0.tgz", - "integrity": "sha512-NTxV1MFfZDLPiBMjxbHRwSh5LaLcPMwNdCutmnHJCKoVnlvldPWlllonKwrsRJ5pYZBIBGRWWU2tfvzxgeSW5Q==", - "dev": true, - "engines": { - "node": ">=12", - "npm": ">=6" - }, - "peerDependencies": { - "@types/node": "*", - "cosmiconfig": ">=7", - "ts-node": ">=10", - "typescript": ">=3" - } - }, - "node_modules/create-require": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", - "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", - "dev": true - }, - "node_modules/cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", - "dev": true, - "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/crypt": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/crypt/-/crypt-0.0.2.tgz", - "integrity": "sha512-mCxBlsHFYh9C+HVpiEacem8FEBnMXgU9gy4zmNC+SXAZNB/1idgp/aulFJ4FgCi7GPEVbfyng092GqL2k2rmow==", - "engines": { - "node": "*" - } - }, - "node_modules/crypto-js": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/crypto-js/-/crypto-js-4.1.1.tgz", - "integrity": "sha512-o2JlM7ydqd3Qk9CA0L4NL6mTzU2sdx96a+oOfPu8Mkl/PK51vSyoi8/rQ8NknZtk44vq15lmhAj9CIAGwgeWKw==" - }, - "node_modules/currently-unhandled": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/currently-unhandled/-/currently-unhandled-0.4.1.tgz", - "integrity": "sha512-/fITjgjGU50vjQ4FH6eUoYu+iUoUKIXws2hL15JJpIR+BbTxaXQsMuuyjtNh2WqsSBS5nsaZHFsFecyw5CCAng==", - "dev": true, - "dependencies": { - "array-find-index": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/cz-conventional-changelog": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/cz-conventional-changelog/-/cz-conventional-changelog-3.3.0.tgz", - "integrity": "sha512-U466fIzU5U22eES5lTNiNbZ+d8dfcHcssH4o7QsdWaCcRs/feIPCxKYSWkYBNs5mny7MvEfwpTLWjvbm94hecw==", - "dev": true, - "dependencies": { - "chalk": "^2.4.1", - "commitizen": "^4.0.3", - "conventional-commit-types": "^3.0.0", - "lodash.map": "^4.5.1", - "longest": "^2.0.1", - "word-wrap": "^1.0.3" - }, - "engines": { - "node": ">= 10" - }, - "optionalDependencies": { - "@commitlint/load": ">6.1.1" - } - }, - "node_modules/cz-conventional-changelog/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/cz-conventional-changelog/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/cz-conventional-changelog/node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/cz-conventional-changelog/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "dev": true - }, - "node_modules/cz-conventional-changelog/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/cz-conventional-changelog/node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/dargs": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/dargs/-/dargs-7.0.0.tgz", - "integrity": "sha512-2iy1EkLdlBzQGvbweYRFxmFath8+K7+AKB0TlhHWkNuH+TmovaMH/Wp7V7R4u7f4SnX3OgLsU9t1NI9ioDnUpg==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/dateformat": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-3.0.3.tgz", - "integrity": "sha512-jyCETtSl3VMZMWeRo7iY1FL19ges1t55hMo5yaam4Jrsm5EPL89UQkoQRyiI+Yf4k8r2ZpdngkV8hr1lIdjb3Q==", - "dev": true, - "engines": { - "node": "*" - } - }, - "node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/decamelize": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", - "integrity": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/decamelize-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/decamelize-keys/-/decamelize-keys-1.1.1.tgz", - "integrity": "sha512-WiPxgEirIV0/eIOMcnFBA3/IJZAZqKnwAwWyvvdi4lsr1WCN22nhdf/3db3DoZcUjTV2SqfzIwNyp6y2xs3nmg==", - "dev": true, - "dependencies": { - "decamelize": "^1.1.0", - "map-obj": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/decamelize-keys/node_modules/map-obj": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", - "integrity": "sha512-7N/q3lyZ+LVCp7PzuxrJr4KMbBE2hW7BT7YNia330OFxIf4d3r5zVpicP2650l7CPN6RM9zOJRl3NGpqSiw3Eg==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/decode-uri-component": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.2.tgz", - "integrity": "sha512-FqUYQ+8o158GyGTrMFJms9qh3CqTKvAqgqsTnkLI8sKu0028orqBhxNMFkFen0zGyg6epACD32pjVk58ngIErQ==", - "dev": true, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/decompress-response": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz", - "integrity": "sha512-BzRPQuY1ip+qDonAOz42gRm/pg9F768C+npV/4JOsxRC2sq+Rlk+Q4ZCAsOhnIaMrgarILY+RMUIvMmmX1qAEA==", - "dev": true, - "dependencies": { - "mimic-response": "^1.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/dedent": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/dedent/-/dedent-0.7.0.tgz", - "integrity": "sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA==", - "dev": true - }, - "node_modules/deep-extend": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", - "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", - "dev": true, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/deep-is": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", - "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", - "dev": true - }, - "node_modules/deepmerge": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz", - "integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/defaults": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.4.tgz", - "integrity": "sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==", - "dependencies": { - "clone": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/defaults/node_modules/clone": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", - "integrity": "sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==", - "engines": { - "node": ">=0.8" - } - }, - "node_modules/define-properties": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.4.tgz", - "integrity": "sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA==", - "dev": true, - "dependencies": { - "has-property-descriptors": "^1.0.0", - "object-keys": "^1.1.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/delay": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/delay/-/delay-5.0.0.tgz", - "integrity": "sha512-ReEBKkIfe4ya47wlPYf/gu5ib6yUG0/Aez0JQZQz94kiWtRQvZIQbTiehsnwHvLSWJnQdhVeqYue7Id1dKr0qw==", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/delegates": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", - "integrity": "sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==" - }, - "node_modules/denque": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/denque/-/denque-2.1.0.tgz", - "integrity": "sha512-HVQE3AAb/pxF8fQAoiqpvg9i3evqug3hoiwakOyZAwJm+6vZehbkYXZ0l4JxS+I3QxM97v5aaRNhj8v5oBhekw==", - "engines": { - "node": ">=0.10" - } - }, - "node_modules/depd": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", - "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/dependency-tree": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/dependency-tree/-/dependency-tree-9.0.0.tgz", - "integrity": "sha512-osYHZJ1fBSon3lNLw70amAXsQ+RGzXsPvk9HbBgTLbp/bQBmpH5mOmsUvqXU+YEWVU0ZLewsmzOET/8jWswjDQ==", - "dev": true, - "dependencies": { - "commander": "^2.20.3", - "debug": "^4.3.1", - "filing-cabinet": "^3.0.1", - "precinct": "^9.0.0", - "typescript": "^4.0.0" - }, - "bin": { - "dependency-tree": "bin/cli.js" - }, - "engines": { - "node": "^10.13 || ^12 || >=14" - } - }, - "node_modules/dependency-tree/node_modules/ast-module-types": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/ast-module-types/-/ast-module-types-4.0.0.tgz", - "integrity": "sha512-Kd0o8r6CDazJGCRzs8Ivpn0xj19oNKrULhoJFzhGjRsLpekF2zyZs9Ukz+JvZhWD6smszfepakTFhAaYpsI12g==", - "dev": true, - "engines": { - "node": ">=12.0" - } - }, - "node_modules/dependency-tree/node_modules/commander": { - "version": "2.20.3", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", - "dev": true - }, - "node_modules/dependency-tree/node_modules/detective-stylus": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/detective-stylus/-/detective-stylus-3.0.0.tgz", - "integrity": "sha512-1xYTzbrduExqMYmte7Qk99IRA3Aa6oV7PYzd+3yDcQXkmENvyGF/arripri6lxRDdNYEb4fZFuHtNRAXbz3iAA==", - "dev": true, - "engines": { - "node": ">=12" - } - }, - "node_modules/dependency-tree/node_modules/module-definition": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/module-definition/-/module-definition-4.1.0.tgz", - "integrity": "sha512-rHXi/DpMcD2qcKbPCTklDbX9lBKJrUSl971TW5l6nMpqKCIlzJqmQ8cfEF5M923h2OOLHPDVlh5pJxNyV+AJlw==", - "dev": true, - "dependencies": { - "ast-module-types": "^4.0.0", - "node-source-walk": "^5.0.1" - }, - "bin": { - "module-definition": "bin/cli.js" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/dependency-tree/node_modules/node-source-walk": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/node-source-walk/-/node-source-walk-5.0.1.tgz", - "integrity": "sha512-fe5rFjPqkWQb4CLfsOf10fZAJvImfLpcVx+Nqbozaj6PBoAEjyEK1HZGCGvQNyre2HdL1HnZG6mxBf2UHSzr/w==", - "dev": true, - "dependencies": { - "@babel/parser": "^7.0.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/dependency-tree/node_modules/precinct": { - "version": "9.2.1", - "resolved": "https://registry.npmjs.org/precinct/-/precinct-9.2.1.tgz", - "integrity": "sha512-uzKHaTyiVejWW7VJtHInb9KBUq9yl9ojxXGujhjhDmPon2wgZPBKQIKR+6csGqSlUeGXAA4MEFnU6DesxZib+A==", - "dev": true, - "dependencies": { - "@dependents/detective-less": "^3.0.1", - "commander": "^9.5.0", - "detective-amd": "^4.1.0", - "detective-cjs": "^4.1.0", - "detective-es6": "^3.0.1", - "detective-postcss": "^6.1.1", - "detective-sass": "^4.1.1", - "detective-scss": "^3.0.1", - "detective-stylus": "^3.0.0", - "detective-typescript": "^9.1.1", - "module-definition": "^4.1.0", - "node-source-walk": "^5.0.1" - }, - "bin": { - "precinct": "bin/cli.js" - }, - "engines": { - "node": "^12.20.0 || ^14.14.0 || >=16.0.0" - } - }, - "node_modules/dependency-tree/node_modules/precinct/node_modules/commander": { - "version": "9.5.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-9.5.0.tgz", - "integrity": "sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ==", - "dev": true, - "engines": { - "node": "^12.20.0 || >=14" - } - }, - "node_modules/dependency-tree/node_modules/typescript": { - "version": "4.9.5", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.5.tgz", - "integrity": "sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==", - "dev": true, - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - }, - "engines": { - "node": ">=4.2.0" - } - }, - "node_modules/destroy": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", - "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", - "engines": { - "node": ">= 0.8", - "npm": "1.2.8000 || >= 1.4.16" - } - }, - "node_modules/detect-file": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/detect-file/-/detect-file-1.0.0.tgz", - "integrity": "sha512-DtCOLG98P007x7wiiOmfI0fi3eIKyWiLTGJ2MDnVi/E04lWGbf+JzrRHMm0rgIIZJGtHpKpbVgLWHrv8xXpc3Q==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/detect-indent": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-6.1.0.tgz", - "integrity": "sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/detect-newline": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz", - "integrity": "sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/detective-amd": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/detective-amd/-/detective-amd-4.1.0.tgz", - "integrity": "sha512-XlQrGjGEnMFjKbep0/S/T7XICxf25LFMP6Ug+Iw/Ww/MHUBzfy8QETCzamO1JlAMYPmkChDh21/NS/csG0FwGg==", - "dev": true, - "dependencies": { - "ast-module-types": "^4.0.0", - "escodegen": "^2.0.0", - "get-amd-module-type": "^4.1.0", - "node-source-walk": "^5.0.1" - }, - "bin": { - "detective-amd": "bin/cli.js" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/detective-amd/node_modules/ast-module-types": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/ast-module-types/-/ast-module-types-4.0.0.tgz", - "integrity": "sha512-Kd0o8r6CDazJGCRzs8Ivpn0xj19oNKrULhoJFzhGjRsLpekF2zyZs9Ukz+JvZhWD6smszfepakTFhAaYpsI12g==", - "dev": true, - "engines": { - "node": ">=12.0" - } - }, - "node_modules/detective-amd/node_modules/node-source-walk": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/node-source-walk/-/node-source-walk-5.0.1.tgz", - "integrity": "sha512-fe5rFjPqkWQb4CLfsOf10fZAJvImfLpcVx+Nqbozaj6PBoAEjyEK1HZGCGvQNyre2HdL1HnZG6mxBf2UHSzr/w==", - "dev": true, - "dependencies": { - "@babel/parser": "^7.0.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/detective-cjs": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/detective-cjs/-/detective-cjs-4.1.0.tgz", - "integrity": "sha512-QxzMwt5MfPLwS7mG30zvnmOvHLx5vyVvjsAV6gQOyuMoBR5G1DhS1eJZ4P10AlH+HSnk93mTcrg3l39+24XCtg==", - "dev": true, - "dependencies": { - "ast-module-types": "^4.0.0", - "node-source-walk": "^5.0.1" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/detective-cjs/node_modules/ast-module-types": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/ast-module-types/-/ast-module-types-4.0.0.tgz", - "integrity": "sha512-Kd0o8r6CDazJGCRzs8Ivpn0xj19oNKrULhoJFzhGjRsLpekF2zyZs9Ukz+JvZhWD6smszfepakTFhAaYpsI12g==", - "dev": true, - "engines": { - "node": ">=12.0" - } - }, - "node_modules/detective-cjs/node_modules/node-source-walk": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/node-source-walk/-/node-source-walk-5.0.1.tgz", - "integrity": "sha512-fe5rFjPqkWQb4CLfsOf10fZAJvImfLpcVx+Nqbozaj6PBoAEjyEK1HZGCGvQNyre2HdL1HnZG6mxBf2UHSzr/w==", - "dev": true, - "dependencies": { - "@babel/parser": "^7.0.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/detective-es6": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/detective-es6/-/detective-es6-3.0.1.tgz", - "integrity": "sha512-evPeYIEdK1jK3Oji5p0hX4sPV/1vK+o4ihcWZkMQE6voypSW/cIBiynOLxQk5KOOQbdP8oOAsYqouMTYO5l1sw==", - "dev": true, - "dependencies": { - "node-source-walk": "^5.0.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/detective-es6/node_modules/node-source-walk": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/node-source-walk/-/node-source-walk-5.0.1.tgz", - "integrity": "sha512-fe5rFjPqkWQb4CLfsOf10fZAJvImfLpcVx+Nqbozaj6PBoAEjyEK1HZGCGvQNyre2HdL1HnZG6mxBf2UHSzr/w==", - "dev": true, - "dependencies": { - "@babel/parser": "^7.0.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/detective-less": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/detective-less/-/detective-less-1.0.2.tgz", - "integrity": "sha512-Rps1xDkEEBSq3kLdsdnHZL1x2S4NGDcbrjmd4q+PykK5aJwDdP5MBgrJw1Xo+kyUHuv3JEzPqxr+Dj9ryeDRTA==", - "dev": true, - "dependencies": { - "debug": "^4.0.0", - "gonzales-pe": "^4.2.3", - "node-source-walk": "^4.0.0" - }, - "engines": { - "node": ">= 6.0" - } - }, - "node_modules/detective-postcss": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/detective-postcss/-/detective-postcss-6.1.1.tgz", - "integrity": "sha512-mX62A6chiafyFW9AwGF6B/uVU+F3hGMZwXDqCHe+NjmU/M5jlDBazdXb1sMoDE+InTDsoPaX3bUUOH33Yxn5Sw==", - "dev": true, - "dependencies": { - "is-url": "^1.2.4", - "postcss": "^8.4.21", - "postcss-values-parser": "^6.0.2" - }, - "engines": { - "node": "^12.0.0 || ^14.0.0 || >=16.0.0" - } - }, - "node_modules/detective-sass": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/detective-sass/-/detective-sass-4.1.1.tgz", - "integrity": "sha512-KSUoOdrLXxSZFnHpGyXufWUP6VkfSdSNC/uezbJkKIwy2i3px5NQPY5hWOR0k9OFlrBakucymD3Ap4d87zobUQ==", - "dev": true, - "dependencies": { - "gonzales-pe": "^4.3.0", - "node-source-walk": "^5.0.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/detective-sass/node_modules/node-source-walk": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/node-source-walk/-/node-source-walk-5.0.1.tgz", - "integrity": "sha512-fe5rFjPqkWQb4CLfsOf10fZAJvImfLpcVx+Nqbozaj6PBoAEjyEK1HZGCGvQNyre2HdL1HnZG6mxBf2UHSzr/w==", - "dev": true, - "dependencies": { - "@babel/parser": "^7.0.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/detective-scss": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/detective-scss/-/detective-scss-3.0.1.tgz", - "integrity": "sha512-Bv/t1dEKHCPJ9+byha7wKg4zda8IFk7KZpEX+ZJs2k1HsWIE3+FBeVFLtD3y9GYGfi8l7Sim3pULPz4+yLwW9A==", - "dev": true, - "dependencies": { - "gonzales-pe": "^4.3.0", - "node-source-walk": "^5.0.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/detective-scss/node_modules/node-source-walk": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/node-source-walk/-/node-source-walk-5.0.1.tgz", - "integrity": "sha512-fe5rFjPqkWQb4CLfsOf10fZAJvImfLpcVx+Nqbozaj6PBoAEjyEK1HZGCGvQNyre2HdL1HnZG6mxBf2UHSzr/w==", - "dev": true, - "dependencies": { - "@babel/parser": "^7.0.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/detective-stylus": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/detective-stylus/-/detective-stylus-2.0.1.tgz", - "integrity": "sha512-/Tvs1pWLg8eYwwV6kZQY5IslGaYqc/GACxjcaGudiNtN5nKCH6o2WnJK3j0gA3huCnoQcbv8X7oz/c1lnvE3zQ==", - "dev": true, - "engines": { - "node": ">=6.0" - } - }, - "node_modules/detective-typescript": { - "version": "9.1.1", - "resolved": "https://registry.npmjs.org/detective-typescript/-/detective-typescript-9.1.1.tgz", - "integrity": "sha512-Uc1yVutTF0RRm1YJ3g//i1Cn2vx1kwHj15cnzQP6ff5koNzQ0idc1zAC73ryaWEulA0ElRXFTq6wOqe8vUQ3MA==", - "dev": true, - "dependencies": { - "@typescript-eslint/typescript-estree": "^5.55.0", - "ast-module-types": "^4.0.0", - "node-source-walk": "^5.0.1", - "typescript": "^4.9.5" - }, - "engines": { - "node": "^12.20.0 || ^14.14.0 || >=16.0.0" - } - }, - "node_modules/detective-typescript/node_modules/ast-module-types": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/ast-module-types/-/ast-module-types-4.0.0.tgz", - "integrity": "sha512-Kd0o8r6CDazJGCRzs8Ivpn0xj19oNKrULhoJFzhGjRsLpekF2zyZs9Ukz+JvZhWD6smszfepakTFhAaYpsI12g==", - "dev": true, - "engines": { - "node": ">=12.0" - } - }, - "node_modules/detective-typescript/node_modules/node-source-walk": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/node-source-walk/-/node-source-walk-5.0.1.tgz", - "integrity": "sha512-fe5rFjPqkWQb4CLfsOf10fZAJvImfLpcVx+Nqbozaj6PBoAEjyEK1HZGCGvQNyre2HdL1HnZG6mxBf2UHSzr/w==", - "dev": true, - "dependencies": { - "@babel/parser": "^7.0.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/detective-typescript/node_modules/typescript": { - "version": "4.9.5", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.5.tgz", - "integrity": "sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==", - "dev": true, - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - }, - "engines": { - "node": ">=4.2.0" - } - }, - "node_modules/dezalgo": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/dezalgo/-/dezalgo-1.0.4.tgz", - "integrity": "sha512-rXSP0bf+5n0Qonsb+SVVfNfIsimO4HEtmnIpPHY8Q1UCzKlQrDMfdobr8nJOOsRgWCyMRqeSBQzmWUMq7zvVig==", - "dev": true, - "dependencies": { - "asap": "^2.0.0", - "wrappy": "1" - } - }, - "node_modules/diff": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", - "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", - "dev": true, - "engines": { - "node": ">=0.3.1" - } - }, - "node_modules/diff-sequences": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.4.3.tgz", - "integrity": "sha512-ofrBgwpPhCD85kMKtE9RYFFq6OC1A89oW2vvgWZNCwxrUpRUILopY7lsYyMDSjc8g6U6aiO0Qubg6r4Wgt5ZnA==", - "dev": true, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/dir-glob": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", - "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", - "dev": true, - "dependencies": { - "path-type": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/doctrine": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", - "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", - "dev": true, - "dependencies": { - "esutils": "^2.0.2" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/dotenv": { - "version": "16.0.3", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.0.3.tgz", - "integrity": "sha512-7GO6HghkA5fYG9TYnNxi14/7K9f5occMlp3zXAuSxn7CKCxt9xbNWG7yF8hTCSUchlfWSe3uLmlPfigevRItzQ==", - "engines": { - "node": ">=12" - } - }, - "node_modules/dotgitignore": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/dotgitignore/-/dotgitignore-2.1.0.tgz", - "integrity": "sha512-sCm11ak2oY6DglEPpCB8TixLjWAxd3kJTs6UIcSasNYxXdFPV+YKlye92c8H4kKFqV5qYMIh7d+cYecEg0dIkA==", - "dev": true, - "dependencies": { - "find-up": "^3.0.0", - "minimatch": "^3.0.4" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/dotgitignore/node_modules/find-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", - "dev": true, - "dependencies": { - "locate-path": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/dotgitignore/node_modules/locate-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", - "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", - "dev": true, - "dependencies": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/dotgitignore/node_modules/p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dev": true, - "dependencies": { - "p-try": "^2.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/dotgitignore/node_modules/p-locate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", - "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", - "dev": true, - "dependencies": { - "p-limit": "^2.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/dotgitignore/node_modules/path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/dreamopt": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/dreamopt/-/dreamopt-0.8.0.tgz", - "integrity": "sha512-vyJTp8+mC+G+5dfgsY+r3ckxlz+QMX40VjPQsZc5gxVAxLmi64TBoVkP54A/pRAXMXsbu2GMMBrZPxNv23waMg==", - "dependencies": { - "wordwrap": ">=0.0.2" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/duplexer3": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.5.tgz", - "integrity": "sha512-1A8za6ws41LQgv9HrE/66jyC5yuSjQ3L/KOpFtoBilsAK2iA2wuS5rTt1OCzIvtS2V7nVmedsUU+DGRcjBmOYA==", - "dev": true - }, - "node_modules/eastasianwidth": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", - "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", - "dev": true - }, - "node_modules/ee-first": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", - "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==" - }, - "node_modules/electron-to-chromium": { - "version": "1.4.450", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.450.tgz", - "integrity": "sha512-BLG5HxSELlrMx7dJ2s+8SFlsCtJp37Zpk2VAxyC6CZtbc+9AJeZHfYHbrlSgdXp6saQ8StMqOTEDaBKgA7u1sw==", - "dev": true - }, - "node_modules/emittery": { - "version": "0.13.1", - "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.13.1.tgz", - "integrity": "sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ==", - "dev": true, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sindresorhus/emittery?sponsor=1" - } - }, - "node_modules/emoji-regex": { - "version": "9.2.2", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", - "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", - "dev": true - }, - "node_modules/empty-dir": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/empty-dir/-/empty-dir-1.0.0.tgz", - "integrity": "sha512-97qcDM6mUA1jAeX6cktw7akc5awIGA+VIkA5MygKOKA+c2Vseo/xwKN0JNJTUhZUtPwZboKVD2p1xu+sV/F4xA==", - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/enabled": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/enabled/-/enabled-2.0.0.tgz", - "integrity": "sha512-AKrN98kuwOzMIdAizXGI86UFBoo26CL21UM763y1h/GMSJ4/OHU9k2YlsmBpyScFo/wbLzWQJBMCW4+IO3/+OQ==" - }, - "node_modules/encodeurl": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", - "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/end-of-stream": { - "version": "1.4.4", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", - "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", - "dependencies": { - "once": "^1.4.0" - } - }, - "node_modules/enhanced-resolve": { - "version": "5.12.0", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.12.0.tgz", - "integrity": "sha512-QHTXI/sZQmko1cbDoNAa3mJ5qhWUUNAq3vR0/YiD379fWQrcfuoX1+HW2S0MTt7XmoPLapdaDKUtelUSPic7hQ==", - "dev": true, - "dependencies": { - "graceful-fs": "^4.2.4", - "tapable": "^2.2.0" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/entities": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-4.3.0.tgz", - "integrity": "sha512-/iP1rZrSEJ0DTlPiX+jbzlA3eVkY/e8L8SozroF395fIqE3TYF/Nz7YOMAawta+vLmyJ/hkGNNPcSbMADCCXbg==", - "dev": true, - "engines": { - "node": ">=0.12" - }, - "funding": { - "url": "https://github.com/fb55/entities?sponsor=1" - } - }, - "node_modules/error-ex": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", - "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", - "dependencies": { - "is-arrayish": "^0.2.1" - } - }, - "node_modules/error-stack-parser": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/error-stack-parser/-/error-stack-parser-2.1.4.tgz", - "integrity": "sha512-Sk5V6wVazPhq5MhpO+AUxJn5x7XSXGl1R93Vn7i+zS15KDVxQijejNCrz8340/2bgLBjR9GtEG8ZVKONDjcqGQ==", - "dependencies": { - "stackframe": "^1.3.4" - } - }, - "node_modules/es-abstract": { - "version": "1.21.0", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.21.0.tgz", - "integrity": "sha512-GUGtW7eXQay0c+PRq0sGIKSdaBorfVqsCMhGHo4elP7YVqZu9nCZS4UkK4gv71gOWNMra/PaSKD3ao1oWExO0g==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "es-set-tostringtag": "^2.0.0", - "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", - "function.prototype.name": "^1.1.5", - "get-intrinsic": "^1.1.3", - "get-symbol-description": "^1.0.0", - "globalthis": "^1.0.3", - "gopd": "^1.0.1", - "has": "^1.0.3", - "has-property-descriptors": "^1.0.0", - "has-proto": "^1.0.1", - "has-symbols": "^1.0.3", - "internal-slot": "^1.0.4", - "is-array-buffer": "^3.0.0", - "is-callable": "^1.2.7", - "is-negative-zero": "^2.0.2", - "is-regex": "^1.1.4", - "is-shared-array-buffer": "^1.0.2", - "is-string": "^1.0.7", - "is-typed-array": "^1.1.10", - "is-weakref": "^1.0.2", - "object-inspect": "^1.12.2", - "object-keys": "^1.1.1", - "object.assign": "^4.1.4", - "regexp.prototype.flags": "^1.4.3", - "safe-regex-test": "^1.0.0", - "string.prototype.trimend": "^1.0.6", - "string.prototype.trimstart": "^1.0.6", - "typed-array-length": "^1.0.4", - "unbox-primitive": "^1.0.2", - "which-typed-array": "^1.1.9" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/es-set-tostringtag": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.1.tgz", - "integrity": "sha512-g3OMbtlwY3QewlqAiMLI47KywjWZoEytKr8pf6iTC8uJq5bIAH52Z9pnQ8pVL6whrCto53JZDuUIsifGeLorTg==", - "dev": true, - "dependencies": { - "get-intrinsic": "^1.1.3", - "has": "^1.0.3", - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/es-shim-unscopables": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.0.tgz", - "integrity": "sha512-Jm6GPcCdC30eMLbZ2x8z2WuRwAws3zTBBKuusffYVUrNj/GVSUAZ+xKMaUpfNDR5IbyNA5LJbaecoUVbmUcB1w==", - "dev": true, - "dependencies": { - "has": "^1.0.3" - } - }, - "node_modules/es-to-primitive": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", - "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", - "dev": true, - "dependencies": { - "is-callable": "^1.1.4", - "is-date-object": "^1.0.1", - "is-symbol": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/es6-promise": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-3.3.1.tgz", - "integrity": "sha512-SOp9Phqvqn7jtEUxPWdWfWoLmyt2VaJ6MpvP9Comy1MceMXqE6bxvaTu4iaxpYYPzhny28Lc+M87/c2cPK6lDg==" - }, - "node_modules/escalade": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/escape-html": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", - "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==" - }, - "node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/escodegen": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.0.0.tgz", - "integrity": "sha512-mmHKys/C8BFUGI+MAWNcSYoORYLMdPzjrknd2Vc+bUsjN5bXcr8EhrNB+UTqfL1y3I9c4fw2ihgtMPQLBRiQxw==", - "dev": true, - "dependencies": { - "esprima": "^4.0.1", - "estraverse": "^5.2.0", - "esutils": "^2.0.2", - "optionator": "^0.8.1" - }, - "bin": { - "escodegen": "bin/escodegen.js", - "esgenerate": "bin/esgenerate.js" - }, - "engines": { - "node": ">=6.0" - }, - "optionalDependencies": { - "source-map": "~0.6.1" - } - }, - "node_modules/escodegen/node_modules/levn": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", - "integrity": "sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA==", - "dev": true, - "dependencies": { - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/escodegen/node_modules/optionator": { - "version": "0.8.3", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", - "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", - "dev": true, - "dependencies": { - "deep-is": "~0.1.3", - "fast-levenshtein": "~2.0.6", - "levn": "~0.3.0", - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2", - "word-wrap": "~1.2.3" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/escodegen/node_modules/prelude-ls": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", - "integrity": "sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w==", - "dev": true, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/escodegen/node_modules/type-check": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", - "integrity": "sha512-ZCmOJdvOWDBYJlzAoFkC+Q0+bUyEOS1ltgp1MGU03fqHG+dbi9tBFU2Rd9QKiDZFAYrhPh2JUf7rZRIuHRKtOg==", - "dev": true, - "dependencies": { - "prelude-ls": "~1.1.2" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/eslint": { - "version": "8.41.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.41.0.tgz", - "integrity": "sha512-WQDQpzGBOP5IrXPo4Hc0814r4/v2rrIsB0rhT7jtunIalgg6gYXWhRMOejVO8yH21T/FGaxjmFjBMNqcIlmH1Q==", - "dev": true, - "dependencies": { - "@eslint-community/eslint-utils": "^4.2.0", - "@eslint-community/regexpp": "^4.4.0", - "@eslint/eslintrc": "^2.0.3", - "@eslint/js": "8.41.0", - "@humanwhocodes/config-array": "^0.11.8", - "@humanwhocodes/module-importer": "^1.0.1", - "@nodelib/fs.walk": "^1.2.8", - "ajv": "^6.10.0", - "chalk": "^4.0.0", - "cross-spawn": "^7.0.2", - "debug": "^4.3.2", - "doctrine": "^3.0.0", - "escape-string-regexp": "^4.0.0", - "eslint-scope": "^7.2.0", - "eslint-visitor-keys": "^3.4.1", - "espree": "^9.5.2", - "esquery": "^1.4.2", - "esutils": "^2.0.2", - "fast-deep-equal": "^3.1.3", - "file-entry-cache": "^6.0.1", - "find-up": "^5.0.0", - "glob-parent": "^6.0.2", - "globals": "^13.19.0", - "graphemer": "^1.4.0", - "ignore": "^5.2.0", - "import-fresh": "^3.0.0", - "imurmurhash": "^0.1.4", - "is-glob": "^4.0.0", - "is-path-inside": "^3.0.3", - "js-yaml": "^4.1.0", - "json-stable-stringify-without-jsonify": "^1.0.1", - "levn": "^0.4.1", - "lodash.merge": "^4.6.2", - "minimatch": "^3.1.2", - "natural-compare": "^1.4.0", - "optionator": "^0.9.1", - "strip-ansi": "^6.0.1", - "strip-json-comments": "^3.1.0", - "text-table": "^0.2.0" - }, - "bin": { - "eslint": "bin/eslint.js" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/eslint-config-airbnb-base": { - "version": "15.0.0", - "resolved": "https://registry.npmjs.org/eslint-config-airbnb-base/-/eslint-config-airbnb-base-15.0.0.tgz", - "integrity": "sha512-xaX3z4ZZIcFLvh2oUNvcX5oEofXda7giYmuplVxoOg5A7EXJMrUyqRgR+mhDhPK8LZ4PttFOBvCYDbX3sUoUig==", - "dev": true, - "dependencies": { - "confusing-browser-globals": "^1.0.10", - "object.assign": "^4.1.2", - "object.entries": "^1.1.5", - "semver": "^6.3.0" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - }, - "peerDependencies": { - "eslint": "^7.32.0 || ^8.2.0", - "eslint-plugin-import": "^2.25.2" - } - }, - "node_modules/eslint-config-airbnb-base/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/eslint-config-airbnb-typescript": { - "version": "17.0.0", - "resolved": "https://registry.npmjs.org/eslint-config-airbnb-typescript/-/eslint-config-airbnb-typescript-17.0.0.tgz", - "integrity": "sha512-elNiuzD0kPAPTXjFWg+lE24nMdHMtuxgYoD30OyMD6yrW1AhFZPAg27VX7d3tzOErw+dgJTNWfRSDqEcXb4V0g==", - "dev": true, - "dependencies": { - "eslint-config-airbnb-base": "^15.0.0" - }, - "peerDependencies": { - "@typescript-eslint/eslint-plugin": "^5.13.0", - "@typescript-eslint/parser": "^5.0.0", - "eslint": "^7.32.0 || ^8.2.0", - "eslint-plugin-import": "^2.25.3" - } - }, - "node_modules/eslint-config-prettier": { - "version": "8.8.0", - "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.8.0.tgz", - "integrity": "sha512-wLbQiFre3tdGgpDv67NQKnJuTlcUVYHas3k+DZCc2U2BadthoEY4B7hLPvAxaqdyOGCzuLfii2fqGph10va7oA==", - "dev": true, - "bin": { - "eslint-config-prettier": "bin/cli.js" - }, - "peerDependencies": { - "eslint": ">=7.0.0" - } - }, - "node_modules/eslint-import-resolver-node": { - "version": "0.3.7", - "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.7.tgz", - "integrity": "sha512-gozW2blMLJCeFpBwugLTGyvVjNoeo1knonXAcatC6bjPBZitotxdWf7Gimr25N4c0AAOo4eOUfaG82IJPDpqCA==", - "dev": true, - "dependencies": { - "debug": "^3.2.7", - "is-core-module": "^2.11.0", - "resolve": "^1.22.1" - } - }, - "node_modules/eslint-import-resolver-node/node_modules/debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dev": true, - "dependencies": { - "ms": "^2.1.1" - } - }, - "node_modules/eslint-module-utils": { - "version": "2.7.4", - "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.7.4.tgz", - "integrity": "sha512-j4GT+rqzCoRKHwURX7pddtIPGySnX9Si/cgMI5ztrcqOPtk5dDEeZ34CQVPphnqkJytlc97Vuk05Um2mJ3gEQA==", - "dev": true, - "dependencies": { - "debug": "^3.2.7" - }, - "engines": { - "node": ">=4" - }, - "peerDependenciesMeta": { - "eslint": { - "optional": true - } - } - }, - "node_modules/eslint-module-utils/node_modules/debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dev": true, - "dependencies": { - "ms": "^2.1.1" - } - }, - "node_modules/eslint-plugin-import": { - "version": "2.27.5", - "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.27.5.tgz", - "integrity": "sha512-LmEt3GVofgiGuiE+ORpnvP+kAm3h6MLZJ4Q5HCyHADofsb4VzXFsRiWj3c0OFiV+3DWFh0qg3v9gcPlfc3zRow==", - "dev": true, - "dependencies": { - "array-includes": "^3.1.6", - "array.prototype.flat": "^1.3.1", - "array.prototype.flatmap": "^1.3.1", - "debug": "^3.2.7", - "doctrine": "^2.1.0", - "eslint-import-resolver-node": "^0.3.7", - "eslint-module-utils": "^2.7.4", - "has": "^1.0.3", - "is-core-module": "^2.11.0", - "is-glob": "^4.0.3", - "minimatch": "^3.1.2", - "object.values": "^1.1.6", - "resolve": "^1.22.1", - "semver": "^6.3.0", - "tsconfig-paths": "^3.14.1" - }, - "engines": { - "node": ">=4" - }, - "peerDependencies": { - "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8" - } - }, - "node_modules/eslint-plugin-import/node_modules/debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dev": true, - "dependencies": { - "ms": "^2.1.1" - } - }, - "node_modules/eslint-plugin-import/node_modules/doctrine": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", - "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", - "dev": true, - "dependencies": { - "esutils": "^2.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/eslint-plugin-import/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/eslint-plugin-json": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-json/-/eslint-plugin-json-3.1.0.tgz", - "integrity": "sha512-MrlG2ynFEHe7wDGwbUuFPsaT2b1uhuEFhJ+W1f1u+1C2EkXmTYJp4B1aAdQQ8M+CC3t//N/oRKiIVw14L2HR1g==", - "dev": true, - "dependencies": { - "lodash": "^4.17.21", - "vscode-json-languageservice": "^4.1.6" - }, - "engines": { - "node": ">=12.0" - } - }, - "node_modules/eslint-plugin-sonarjs": { - "version": "0.19.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-sonarjs/-/eslint-plugin-sonarjs-0.19.0.tgz", - "integrity": "sha512-6+s5oNk5TFtVlbRxqZN7FIGmjdPCYQKaTzFPmqieCmsU1kBYDzndTeQav0xtQNwZJWu5awWfTGe8Srq9xFOGnw==", - "dev": true, - "engines": { - "node": ">=14" - }, - "peerDependencies": { - "eslint": "^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0" - } - }, - "node_modules/eslint-plugin-unicorn": { - "version": "46.0.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-unicorn/-/eslint-plugin-unicorn-46.0.1.tgz", - "integrity": "sha512-setGhMTiLAddg1asdwjZ3hekIN5zLznNa5zll7pBPwFOka6greCKDQydfqy4fqyUhndi74wpDzClSQMEcmOaew==", - "dev": true, - "dependencies": { - "@babel/helper-validator-identifier": "^7.19.1", - "@eslint-community/eslint-utils": "^4.1.2", - "ci-info": "^3.6.1", - "clean-regexp": "^1.0.0", - "esquery": "^1.4.0", - "indent-string": "^4.0.0", - "is-builtin-module": "^3.2.0", - "jsesc": "^3.0.2", - "lodash": "^4.17.21", - "pluralize": "^8.0.0", - "read-pkg-up": "^7.0.1", - "regexp-tree": "^0.1.24", - "regjsparser": "^0.9.1", - "safe-regex": "^2.1.1", - "semver": "^7.3.8", - "strip-indent": "^3.0.0" - }, - "engines": { - "node": ">=14.18" - }, - "funding": { - "url": "https://github.com/sindresorhus/eslint-plugin-unicorn?sponsor=1" - }, - "peerDependencies": { - "eslint": ">=8.28.0" - } - }, - "node_modules/eslint-plugin-unicorn/node_modules/jsesc": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.0.2.tgz", - "integrity": "sha512-xKqzzWXDttJuOcawBt4KnKHHIf5oQ/Cxax+0PWFG+DFDgHNAdi+TXECADI+RYiFUMmx8792xsMbbgXj4CwnP4g==", - "dev": true, - "bin": { - "jsesc": "bin/jsesc" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/eslint-scope": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.0.tgz", - "integrity": "sha512-DYj5deGlHBfMt15J7rdtyKNq/Nqlv5KfU4iodrQ019XESsRnwXH9KAE0y3cwtUHDo2ob7CypAnCqefh6vioWRw==", - "dev": true, - "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^5.2.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/eslint-visitor-keys": { - "version": "3.4.1", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.1.tgz", - "integrity": "sha512-pZnmmLwYzf+kWaM/Qgrvpen51upAktaaiI01nsJD/Yr3lMOdNtq0cxkrrg16w64VtisN6okbs7Q8AfGqj4c9fA==", - "dev": true, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/eslint/node_modules/ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "dev": true, - "dependencies": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/eslint/node_modules/escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/eslint/node_modules/json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true - }, - "node_modules/espree": { - "version": "9.5.2", - "resolved": "https://registry.npmjs.org/espree/-/espree-9.5.2.tgz", - "integrity": "sha512-7OASN1Wma5fum5SrNhFMAMJxOUAbhyfQ8dQ//PJaJbNw0URTPWqIghHWt1MmAANKhHZIYOHruW4Kw4ruUWOdGw==", - "dev": true, - "dependencies": { - "acorn": "^8.8.0", - "acorn-jsx": "^5.3.2", - "eslint-visitor-keys": "^3.4.1" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", - "dev": true, - "bin": { - "esparse": "bin/esparse.js", - "esvalidate": "bin/esvalidate.js" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/esquery": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz", - "integrity": "sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==", - "dev": true, - "dependencies": { - "estraverse": "^5.1.0" - }, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/esrecurse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", - "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", - "dev": true, - "dependencies": { - "estraverse": "^5.2.0" - }, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/esutils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/eventemitter3": { - "version": "4.0.7", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", - "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==", - "dev": true - }, - "node_modules/events": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", - "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", - "engines": { - "node": ">=0.8.x" - } - }, - "node_modules/execa": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", - "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", - "dev": true, - "dependencies": { - "cross-spawn": "^7.0.3", - "get-stream": "^6.0.0", - "human-signals": "^2.1.0", - "is-stream": "^2.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^4.0.1", - "onetime": "^5.1.2", - "signal-exit": "^3.0.3", - "strip-final-newline": "^2.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sindresorhus/execa?sponsor=1" - } - }, - "node_modules/exit": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", - "integrity": "sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==", - "dev": true, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/expand-tilde": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/expand-tilde/-/expand-tilde-2.0.2.tgz", - "integrity": "sha512-A5EmesHW6rfnZ9ysHQjPdJRni0SRar0tjtG5MNtm9n5TUvsYU8oozprtRD4AqHxcZWWlVuAmQo2nWKfN9oyjTw==", - "dev": true, - "dependencies": { - "homedir-polyfill": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/expect": { - "version": "29.6.0", - "resolved": "https://registry.npmjs.org/expect/-/expect-29.6.0.tgz", - "integrity": "sha512-AV+HaBtnDJ2YEUhPPo25HyUHBLaetM+y/Dq6pEC8VPQyt1dK+k8MfGkMy46djy2bddcqESc1kl4/K1uLWSfk9g==", - "dev": true, - "dependencies": { - "@jest/expect-utils": "^29.6.0", - "@types/node": "*", - "jest-get-type": "^29.4.3", - "jest-matcher-utils": "^29.6.0", - "jest-message-util": "^29.6.0", - "jest-util": "^29.6.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/expose-gc": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/expose-gc/-/expose-gc-1.0.0.tgz", - "integrity": "sha512-ecOHrdm+zyOCGIwX18/1RHkUWgxDqGGRiGhaNC+42jReTtudbm2ID/DMa/wpaHwqy5YQHPZvsDqRM2F2iZ0uVA==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/external-editor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", - "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==", - "dev": true, - "dependencies": { - "chardet": "^0.7.0", - "iconv-lite": "^0.4.24", - "tmp": "^0.0.33" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/fast-deep-equal": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" - }, - "node_modules/fast-glob": { - "version": "3.2.12", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.12.tgz", - "integrity": "sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==", - "dev": true, - "dependencies": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.2", - "merge2": "^1.3.0", - "micromatch": "^4.0.4" - }, - "engines": { - "node": ">=8.6.0" - } - }, - "node_modules/fast-glob/node_modules/glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, - "dependencies": { - "is-glob": "^4.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/fast-json-stable-stringify": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", - "dev": true - }, - "node_modules/fast-json-stringify": { - "version": "2.7.13", - "resolved": "https://registry.npmjs.org/fast-json-stringify/-/fast-json-stringify-2.7.13.tgz", - "integrity": "sha512-ar+hQ4+OIurUGjSJD1anvYSDcUflywhKjfxnsW4TBTD7+u0tJufv6DKRWoQk3vI6YBOWMoz0TQtfbe7dxbQmvA==", - "dev": true, - "dependencies": { - "ajv": "^6.11.0", - "deepmerge": "^4.2.2", - "rfdc": "^1.2.0", - "string-similarity": "^4.0.1" - }, - "engines": { - "node": ">= 10.0.0" - } - }, - "node_modules/fast-json-stringify/node_modules/ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "dev": true, - "dependencies": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/fast-json-stringify/node_modules/json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true - }, - "node_modules/fast-levenshtein": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", - "dev": true - }, - "node_modules/fast-printf": { - "version": "1.6.9", - "resolved": "https://registry.npmjs.org/fast-printf/-/fast-printf-1.6.9.tgz", - "integrity": "sha512-FChq8hbz65WMj4rstcQsFB0O7Cy++nmbNfLYnD9cYv2cRn8EG6k/MGn9kO/tjO66t09DLDugj3yL+V2o6Qftrg==", - "dev": true, - "dependencies": { - "boolean": "^3.1.4" - }, - "engines": { - "node": ">=10.0" - } - }, - "node_modules/fast-safe-stringify": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-2.1.1.tgz", - "integrity": "sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==", - "dev": true - }, - "node_modules/fast-xml-parser": { - "version": "4.2.5", - "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-4.2.5.tgz", - "integrity": "sha512-B9/wizE4WngqQftFPmdaMYlXoJlJOYxGQOanC77fq9k8+Z0v5dDSVh+3glErdIROP//s/jgb7ZuxKfB8nVyo0g==", - "funding": [ - { - "type": "paypal", - "url": "https://paypal.me/naturalintelligence" - }, - { - "type": "github", - "url": "https://github.com/sponsors/NaturalIntelligence" - } - ], - "dependencies": { - "strnum": "^1.0.5" - }, - "bin": { - "fxparser": "src/cli/cli.js" - } - }, - "node_modules/fastq": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz", - "integrity": "sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==", - "dev": true, - "dependencies": { - "reusify": "^1.0.4" - } - }, - "node_modules/fb-watchman": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.2.tgz", - "integrity": "sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==", - "dev": true, - "dependencies": { - "bser": "2.1.1" - } - }, - "node_modules/fecha": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/fecha/-/fecha-4.2.3.tgz", - "integrity": "sha512-OP2IUU6HeYKJi3i0z4A19kHMQoLVs4Hc+DPqqxI2h/DPZHTm/vjsfC6P0b4jCMy14XizLBqvndQ+UilD7707Jw==" - }, - "node_modules/figures": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", - "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", - "dev": true, - "dependencies": { - "escape-string-regexp": "^1.0.5" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/file-entry-cache": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", - "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", - "dev": true, - "dependencies": { - "flat-cache": "^3.0.4" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - } - }, - "node_modules/filing-cabinet": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/filing-cabinet/-/filing-cabinet-3.3.1.tgz", - "integrity": "sha512-renEK4Hh6DUl9Vl22Y3cxBq1yh8oNvbAdXnhih0wVpmea+uyKjC9K4QeRjUaybIiIewdzfum+Fg15ZqJ/GyCaA==", - "dev": true, - "dependencies": { - "app-module-path": "^2.2.0", - "commander": "^2.20.3", - "debug": "^4.3.3", - "enhanced-resolve": "^5.8.3", - "is-relative-path": "^1.0.2", - "module-definition": "^3.3.1", - "module-lookup-amd": "^7.0.1", - "resolve": "^1.21.0", - "resolve-dependency-path": "^2.0.0", - "sass-lookup": "^3.0.0", - "stylus-lookup": "^3.0.1", - "tsconfig-paths": "^3.10.1", - "typescript": "^3.9.7" - }, - "bin": { - "filing-cabinet": "bin/cli.js" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/filing-cabinet/node_modules/commander": { - "version": "2.20.3", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", - "dev": true - }, - "node_modules/filing-cabinet/node_modules/typescript": { - "version": "3.9.10", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.9.10.tgz", - "integrity": "sha512-w6fIxVE/H1PkLKcCPsFqKE7Kv7QUwhU8qQY2MueZXWx5cPZdwFupLgKK3vntcK98BtNHZtAF4LA/yl2a7k8R6Q==", - "dev": true, - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - }, - "engines": { - "node": ">=4.2.0" - } - }, - "node_modules/fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", - "dev": true, - "dependencies": { - "to-regex-range": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/find-node-modules": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/find-node-modules/-/find-node-modules-2.1.3.tgz", - "integrity": "sha512-UC2I2+nx1ZuOBclWVNdcnbDR5dlrOdVb7xNjmT/lHE+LsgztWks3dG7boJ37yTS/venXw84B/mAW9uHVoC5QRg==", - "dev": true, - "dependencies": { - "findup-sync": "^4.0.0", - "merge": "^2.1.1" - } - }, - "node_modules/find-root": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/find-root/-/find-root-1.1.0.tgz", - "integrity": "sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng==", - "dev": true - }, - "node_modules/find-up": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", - "dev": true, - "dependencies": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/findup-sync": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-4.0.0.tgz", - "integrity": "sha512-6jvvn/12IC4quLBL1KNokxC7wWTvYncaVUYSoxWw7YykPLuRrnv4qdHcSOywOI5RpkOVGeQRtWM8/q+G6W6qfQ==", - "dev": true, - "dependencies": { - "detect-file": "^1.0.0", - "is-glob": "^4.0.0", - "micromatch": "^4.0.2", - "resolve-dir": "^1.0.1" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/flat": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", - "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", - "bin": { - "flat": "cli.js" - } - }, - "node_modules/flat-cache": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", - "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", - "dev": true, - "dependencies": { - "flatted": "^3.1.0", - "rimraf": "^3.0.2" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - } - }, - "node_modules/flatted": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.7.tgz", - "integrity": "sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==", - "dev": true - }, - "node_modules/flatten": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/flatten/-/flatten-1.0.3.tgz", - "integrity": "sha512-dVsPA/UwQ8+2uoFe5GHtiBMu48dWLTdsuEd7CKGlZlD78r1TTWBvDuFaFGKCo/ZfEr95Uk56vZoX86OsHkUeIg==", - "deprecated": "flatten is deprecated in favor of utility frameworks such as lodash.", - "dev": true - }, - "node_modules/fn.name": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/fn.name/-/fn.name-1.1.0.tgz", - "integrity": "sha512-GRnmB5gPyJpAhTQdSZTSp9uaPSvl09KoYcMQtsB9rQoOmzs9dH6ffeccH+Z+cv6P68Hu5bC6JjRh4Ah/mHSNRw==" - }, - "node_modules/follow-redirects": { - "version": "1.15.2", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.2.tgz", - "integrity": "sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==", - "funding": [ - { - "type": "individual", - "url": "https://github.com/sponsors/RubenVerborgh" - } - ], - "engines": { - "node": ">=4.0" - }, - "peerDependenciesMeta": { - "debug": { - "optional": true - } - } - }, - "node_modules/for-each": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", - "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", - "dev": true, - "dependencies": { - "is-callable": "^1.1.3" - } - }, - "node_modules/foreground-child": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.1.1.tgz", - "integrity": "sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==", - "dev": true, - "dependencies": { - "cross-spawn": "^7.0.0", - "signal-exit": "^4.0.1" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/foreground-child/node_modules/signal-exit": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", - "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", - "dev": true, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/form-data": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", - "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", - "dependencies": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "mime-types": "^2.1.12" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/formidable": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/formidable/-/formidable-2.1.2.tgz", - "integrity": "sha512-CM3GuJ57US06mlpQ47YcunuUZ9jpm8Vx+P2CGt2j7HpgkKZO/DJYQ0Bobim8G6PFQmK5lOqOOdUXboU+h73A4g==", - "dev": true, - "dependencies": { - "dezalgo": "^1.0.4", - "hexoid": "^1.0.0", - "once": "^1.4.0", - "qs": "^6.11.0" - }, - "funding": { - "url": "https://ko-fi.com/tunnckoCore/commissions" - } - }, - "node_modules/fresh": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", - "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/from2": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/from2/-/from2-2.3.0.tgz", - "integrity": "sha512-OMcX/4IC/uqEPVgGeyfN22LJk6AZrMkRZHxcHBMBvHScDGgwTm2GT2Wkgtocyd3JfZffjj2kYUDXXII0Fk9W0g==", - "dev": true, - "dependencies": { - "inherits": "^2.0.1", - "readable-stream": "^2.0.0" - } - }, - "node_modules/fs-extra": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", - "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", - "dev": true, - "dependencies": { - "at-least-node": "^1.0.0", - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==" - }, - "node_modules/fsevents": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", - "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", - "dev": true, - "hasInstallScript": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" - } - }, - "node_modules/function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" - }, - "node_modules/function.prototype.name": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.5.tgz", - "integrity": "sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.0", - "functions-have-names": "^1.2.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/functions-have-names": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", - "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", - "dev": true, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/gensync": { - "version": "1.0.0-beta.2", - "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", - "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/get-amd-module-type": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/get-amd-module-type/-/get-amd-module-type-4.1.0.tgz", - "integrity": "sha512-0e/eK6vTGCnSfQ6eYs3wtH05KotJYIP7ZIZEueP/KlA+0dIAEs8bYFvOd/U56w1vfjhJqBagUxVMyy9Tr/cViQ==", - "dev": true, - "dependencies": { - "ast-module-types": "^4.0.0", - "node-source-walk": "^5.0.1" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/get-amd-module-type/node_modules/ast-module-types": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/ast-module-types/-/ast-module-types-4.0.0.tgz", - "integrity": "sha512-Kd0o8r6CDazJGCRzs8Ivpn0xj19oNKrULhoJFzhGjRsLpekF2zyZs9Ukz+JvZhWD6smszfepakTFhAaYpsI12g==", - "dev": true, - "engines": { - "node": ">=12.0" - } - }, - "node_modules/get-amd-module-type/node_modules/node-source-walk": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/node-source-walk/-/node-source-walk-5.0.1.tgz", - "integrity": "sha512-fe5rFjPqkWQb4CLfsOf10fZAJvImfLpcVx+Nqbozaj6PBoAEjyEK1HZGCGvQNyre2HdL1HnZG6mxBf2UHSzr/w==", - "dev": true, - "dependencies": { - "@babel/parser": "^7.0.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/get-caller-file": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", - "dev": true, - "engines": { - "node": "6.* || 8.* || >= 10.*" - } - }, - "node_modules/get-intrinsic": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.3.tgz", - "integrity": "sha512-QJVz1Tj7MS099PevUG5jvnt9tSkXN8K14dxQlikJuPt4uD9hHAHjLyLBiLR5zELelBdD9QNRAXZzsJx0WaDL9A==", - "dependencies": { - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/get-own-enumerable-property-symbols": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.2.tgz", - "integrity": "sha512-I0UBV/XOz1XkIJHEUDMZAbzCThU/H8DxmSfmdGcKPnVhu2VfFqr34jr9777IyaTYvxjedWhqVIilEDsCdP5G6g==", - "dev": true - }, - "node_modules/get-package-type": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", - "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==", - "dev": true, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/get-pkg-repo": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/get-pkg-repo/-/get-pkg-repo-4.2.1.tgz", - "integrity": "sha512-2+QbHjFRfGB74v/pYWjd5OhU3TDIC2Gv/YKUTk/tCvAz0pkn/Mz6P3uByuBimLOcPvN2jYdScl3xGFSrx0jEcA==", - "dev": true, - "dependencies": { - "@hutson/parse-repository-url": "^3.0.0", - "hosted-git-info": "^4.0.0", - "through2": "^2.0.0", - "yargs": "^16.2.0" - }, - "bin": { - "get-pkg-repo": "src/cli.js" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/get-pkg-repo/node_modules/cliui": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", - "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", - "dev": true, - "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^7.0.0" - } - }, - "node_modules/get-pkg-repo/node_modules/through2": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", - "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", - "dev": true, - "dependencies": { - "readable-stream": "~2.3.6", - "xtend": "~4.0.1" - } - }, - "node_modules/get-pkg-repo/node_modules/yargs": { - "version": "16.2.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", - "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", - "dev": true, - "dependencies": { - "cliui": "^7.0.2", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.0", - "y18n": "^5.0.5", - "yargs-parser": "^20.2.2" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/get-stdin": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-4.0.1.tgz", - "integrity": "sha512-F5aQMywwJ2n85s4hJPTT9RPxGmubonuB10MNYo17/xph174n2MIR33HRguhzVag10O/npM7SPk73LMZNP+FaWw==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/get-stream": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", - "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/get-symbol-description": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz", - "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/get-value": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/get-value/-/get-value-3.0.1.tgz", - "integrity": "sha512-mKZj9JLQrwMBtj5wxi6MH8Z5eSKaERpAwjg43dPtlGI1ZVEgH/qC7T8/6R2OBSUA+zzHBZgICsVJaEIV2tKTDA==", - "dependencies": { - "isobject": "^3.0.1" - }, - "engines": { - "node": ">=6.0" - } - }, - "node_modules/gh-got": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/gh-got/-/gh-got-7.1.0.tgz", - "integrity": "sha512-KeWkkhresa7sbpzQLYzITMgez5rMigUsijhmSAHcLDORIMUbdlkdoZyaN1wQvIjmUZnyb/wkAPaXb4MQKX0mdQ==", - "dev": true, - "dependencies": { - "got": "^8.0.0", - "is-plain-obj": "^1.1.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/git-raw-commits": { - "version": "2.0.11", - "resolved": "https://registry.npmjs.org/git-raw-commits/-/git-raw-commits-2.0.11.tgz", - "integrity": "sha512-VnctFhw+xfj8Va1xtfEqCUD2XDrbAPSJx+hSrE5K7fGdjZruW7XV+QOrN7LF/RJyvspRiD2I0asWsxFp0ya26A==", - "dev": true, - "dependencies": { - "dargs": "^7.0.0", - "lodash": "^4.17.15", - "meow": "^8.0.0", - "split2": "^3.0.0", - "through2": "^4.0.0" - }, - "bin": { - "git-raw-commits": "cli.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/git-remote-origin-url": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/git-remote-origin-url/-/git-remote-origin-url-2.0.0.tgz", - "integrity": "sha512-eU+GGrZgccNJcsDH5LkXR3PB9M958hxc7sbA8DFJjrv9j4L2P/eZfKhM+QD6wyzpiv+b1BpK0XrYCxkovtjSLw==", - "dev": true, - "dependencies": { - "gitconfiglocal": "^1.0.0", - "pify": "^2.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/git-remote-origin-url/node_modules/pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/git-semver-tags": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/git-semver-tags/-/git-semver-tags-4.1.1.tgz", - "integrity": "sha512-OWyMt5zBe7xFs8vglMmhM9lRQzCWL3WjHtxNNfJTMngGym7pC1kh8sP6jevfydJ6LP3ZvGxfb6ABYgPUM0mtsA==", - "dev": true, - "dependencies": { - "meow": "^8.0.0", - "semver": "^6.0.0" - }, - "bin": { - "git-semver-tags": "cli.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/git-semver-tags/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/gitconfiglocal": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/gitconfiglocal/-/gitconfiglocal-1.0.0.tgz", - "integrity": "sha512-spLUXeTAVHxDtKsJc8FkFVgFtMdEN9qPGpL23VfSHx4fP4+Ds097IXLvymbnDH8FnmxX5Nr9bPw3A+AQ6mWEaQ==", - "dev": true, - "dependencies": { - "ini": "^1.3.2" - } - }, - "node_modules/glob": { - "version": "10.3.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.3.tgz", - "integrity": "sha512-92vPiMb/iqpmEgsOoIDvTjc50wf9CCCvMzsi6W0JLPeUKE8TWP1a73PgqSrqy7iAZxaSD1YdzU7QZR5LF51MJw==", - "dev": true, - "dependencies": { - "foreground-child": "^3.1.0", - "jackspeak": "^2.0.3", - "minimatch": "^9.0.1", - "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0", - "path-scurry": "^1.10.1" - }, - "bin": { - "glob": "dist/cjs/src/bin.js" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/glob-parent": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", - "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", - "dev": true, - "dependencies": { - "is-glob": "^4.0.3" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/glob/node_modules/brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "dev": true, - "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "node_modules/glob/node_modules/minimatch": { - "version": "9.0.3", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", - "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", - "dev": true, - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/global-dirs": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-0.1.1.tgz", - "integrity": "sha512-NknMLn7F2J7aflwFOlGdNIuCDpN3VGoSoB+aap3KABFWbHVn1TCgFC+np23J8W2BiZbjfEw3BFBycSMv1AFblg==", - "dev": true, - "dependencies": { - "ini": "^1.3.4" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/global-modules": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-1.0.0.tgz", - "integrity": "sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg==", - "dev": true, - "dependencies": { - "global-prefix": "^1.0.1", - "is-windows": "^1.0.1", - "resolve-dir": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/global-prefix": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-1.0.2.tgz", - "integrity": "sha512-5lsx1NUDHtSjfg0eHlmYvZKv8/nVqX4ckFbM+FrGcQ+04KWcWFo9P5MxPZYSzUvyzmdTbI7Eix8Q4IbELDqzKg==", - "dev": true, - "dependencies": { - "expand-tilde": "^2.0.2", - "homedir-polyfill": "^1.0.1", - "ini": "^1.3.4", - "is-windows": "^1.0.1", - "which": "^1.2.14" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/global-prefix/node_modules/which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", - "dev": true, - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "which": "bin/which" - } - }, - "node_modules/globals": { - "version": "13.20.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.20.0.tgz", - "integrity": "sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ==", - "dev": true, - "dependencies": { - "type-fest": "^0.20.2" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/globals/node_modules/type-fest": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/globalthis": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.3.tgz", - "integrity": "sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==", - "dev": true, - "dependencies": { - "define-properties": "^1.1.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/globby": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", - "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", - "dev": true, - "dependencies": { - "array-union": "^2.1.0", - "dir-glob": "^3.0.1", - "fast-glob": "^3.2.9", - "ignore": "^5.2.0", - "merge2": "^1.4.1", - "slash": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/gonzales-pe": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/gonzales-pe/-/gonzales-pe-4.3.0.tgz", - "integrity": "sha512-otgSPpUmdWJ43VXyiNgEYE4luzHCL2pz4wQ0OnDluC6Eg4Ko3Vexy/SrSynglw/eR+OhkzmqFCZa/OFa/RgAOQ==", - "dev": true, - "dependencies": { - "minimist": "^1.2.5" - }, - "bin": { - "gonzales": "bin/gonzales.js" - }, - "engines": { - "node": ">=0.6.0" - } - }, - "node_modules/gopd": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", - "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", - "dev": true, - "dependencies": { - "get-intrinsic": "^1.1.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/got": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/got/-/got-8.3.2.tgz", - "integrity": "sha512-qjUJ5U/hawxosMryILofZCkm3C84PLJS/0grRIpjAwu+Lkxxj5cxeCU25BG0/3mDSpXKTyZr8oh8wIgLaH0QCw==", - "dev": true, - "dependencies": { - "@sindresorhus/is": "^0.7.0", - "cacheable-request": "^2.1.1", - "decompress-response": "^3.3.0", - "duplexer3": "^0.1.4", - "get-stream": "^3.0.0", - "into-stream": "^3.1.0", - "is-retry-allowed": "^1.1.0", - "isurl": "^1.0.0-alpha5", - "lowercase-keys": "^1.0.0", - "mimic-response": "^1.0.0", - "p-cancelable": "^0.4.0", - "p-timeout": "^2.0.1", - "pify": "^3.0.0", - "safe-buffer": "^5.1.1", - "timed-out": "^4.0.1", - "url-parse-lax": "^3.0.0", - "url-to-options": "^1.0.1" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/got/node_modules/get-stream": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", - "integrity": "sha512-GlhdIUuVakc8SJ6kK0zAFbiGzRFzNnY4jUuEbV9UROo4Y+0Ny4fjvcZFVTeDA4odpFyOQzaw6hXukJSq/f28sQ==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/got/node_modules/pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/graceful-fs": { - "version": "4.2.10", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", - "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==", - "dev": true - }, - "node_modules/graphemer": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", - "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", - "dev": true - }, - "node_modules/growly": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/growly/-/growly-1.3.0.tgz", - "integrity": "sha512-+xGQY0YyAWCnqy7Cd++hc2JqMYzlm0dG30Jd0beaA64sROr8C4nt8Yc9V5Ro3avlSUDTN0ulqP/VBKi1/lLygw==", - "dev": true - }, - "node_modules/handlebars": { - "version": "4.7.7", - "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.7.tgz", - "integrity": "sha512-aAcXm5OAfE/8IXkcZvCepKU3VzW1/39Fb5ZuqMtgI/hT8X2YgoMvBY5dLhq/cpOvw7Lk1nK/UF71aLG/ZnVYRA==", - "dependencies": { - "minimist": "^1.2.5", - "neo-async": "^2.6.0", - "source-map": "^0.6.1", - "wordwrap": "^1.0.0" - }, - "bin": { - "handlebars": "bin/handlebars" - }, - "engines": { - "node": ">=0.4.7" - }, - "optionalDependencies": { - "uglify-js": "^3.1.4" - } - }, - "node_modules/hard-rejection": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/hard-rejection/-/hard-rejection-2.1.0.tgz", - "integrity": "sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "dependencies": { - "function-bind": "^1.1.1" - }, - "engines": { - "node": ">= 0.4.0" - } - }, - "node_modules/has-bigints": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", - "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==", - "dev": true, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/has-property-descriptors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz", - "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==", - "dev": true, - "dependencies": { - "get-intrinsic": "^1.1.1" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-proto": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz", - "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==", - "dev": true, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-symbol-support-x": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/has-symbol-support-x/-/has-symbol-support-x-1.4.2.tgz", - "integrity": "sha512-3ToOva++HaW+eCpgqZrCfN51IPB+7bJNVT6CUATzueB5Heb8o6Nam0V3HG5dlDvZU1Gn5QLcbahiKw/XVk5JJw==", - "dev": true, - "engines": { - "node": "*" - } - }, - "node_modules/has-symbols": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", - "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-to-string-tag-x": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/has-to-string-tag-x/-/has-to-string-tag-x-1.4.1.tgz", - "integrity": "sha512-vdbKfmw+3LoOYVr+mtxHaX5a96+0f3DljYd8JOqvOLsf5mw2Otda2qCDT9qRqLAhrjyQ0h7ual5nOiASpsGNFw==", - "dev": true, - "dependencies": { - "has-symbol-support-x": "^1.4.1" - }, - "engines": { - "node": "*" - } - }, - "node_modules/has-tostringtag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", - "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", - "dependencies": { - "has-symbols": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-value": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/has-value/-/has-value-2.0.2.tgz", - "integrity": "sha512-ybKOlcRsK2MqrM3Hmz/lQxXHZ6ejzSPzpNabKB45jb5qDgJvKPa3SdapTsTLwEb9WltgWpOmNax7i+DzNOk4TA==", - "dependencies": { - "get-value": "^3.0.0", - "has-values": "^2.0.1" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/has-values": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/has-values/-/has-values-2.0.1.tgz", - "integrity": "sha512-+QdH3jOmq9P8GfdjFg0eJudqx1FqU62NQJ4P16rOEHeRdl7ckgwn6uqQjzYE0ZoHVV/e5E2esuJ5Gl5+HUW19w==", - "dependencies": { - "kind-of": "^6.0.2" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/heap": { - "version": "0.2.7", - "resolved": "https://registry.npmjs.org/heap/-/heap-0.2.7.tgz", - "integrity": "sha512-2bsegYkkHO+h/9MGbn6KWcE45cHZgPANo5LXF7EvWdT0yT2EguSVO1nDgU5c8+ZOPwp2vMNa7YFsJhVcDR9Sdg==" - }, - "node_modules/hexoid": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/hexoid/-/hexoid-1.0.0.tgz", - "integrity": "sha512-QFLV0taWQOZtvIRIAdBChesmogZrtuXvVWsFHZTk2SU+anspqZ2vMnoLg7IE1+Uk16N19APic1BuF8bC8c2m5g==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/homedir-polyfill": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz", - "integrity": "sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA==", - "dev": true, - "dependencies": { - "parse-passwd": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/hosted-git-info": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz", - "integrity": "sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==", - "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/hosted-git-info/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/hosted-git-info/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - }, - "node_modules/html-escaper": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", - "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", - "dev": true - }, - "node_modules/http-assert": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/http-assert/-/http-assert-1.5.0.tgz", - "integrity": "sha512-uPpH7OKX4H25hBmU6G1jWNaqJGpTXxey+YOUizJUAgu0AjLUeC8D73hTrhvDS5D+GJN1DN1+hhc/eF/wpxtp0w==", - "dependencies": { - "deep-equal": "~1.0.1", - "http-errors": "~1.8.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/http-assert/node_modules/deep-equal": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.0.1.tgz", - "integrity": "sha512-bHtC0iYvWhyaTzvV3CZgPeZQqCOBGyGsVV7v4eevpdkLHfiSrXUdBG+qAuSz4RI70sszvjQ1QSZ98An1yNwpSw==" - }, - "node_modules/http-cache-semantics": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz", - "integrity": "sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==", - "dev": true - }, - "node_modules/http-errors": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.8.1.tgz", - "integrity": "sha512-Kpk9Sm7NmI+RHhnj6OIWDI1d6fIoFAtFt9RLaTMRlg/8w49juAStsrBgp0Dp4OdxdVbRIeKhtCUvoi/RuAhO4g==", - "dependencies": { - "depd": "~1.1.2", - "inherits": "2.0.4", - "setprototypeof": "1.2.0", - "statuses": ">= 1.5.0 < 2", - "toidentifier": "1.0.1" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/http-errors/node_modules/depd": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", - "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/http-graceful-shutdown": { - "version": "3.1.13", - "resolved": "https://registry.npmjs.org/http-graceful-shutdown/-/http-graceful-shutdown-3.1.13.tgz", - "integrity": "sha512-Ci5LRufQ8AtrQ1U26AevS8QoMXDOhnAHCJI3eZu1com7mZGHxREmw3dNj85ftpQokQCvak8nI2pnFS8zyM1M+Q==", - "dependencies": { - "debug": "^4.3.4" - }, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/http-terminator": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/http-terminator/-/http-terminator-3.2.0.tgz", - "integrity": "sha512-JLjck1EzPaWjsmIf8bziM3p9fgR1Y3JoUKAkyYEbZmFrIvJM6I8vVJfBGWlEtV9IWOvzNnaTtjuwZeBY2kwB4g==", - "dev": true, - "dependencies": { - "delay": "^5.0.0", - "p-wait-for": "^3.2.0", - "roarr": "^7.0.4", - "type-fest": "^2.3.3" - }, - "engines": { - "node": ">=14" - } - }, - "node_modules/http-terminator/node_modules/type-fest": { - "version": "2.19.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-2.19.0.tgz", - "integrity": "sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==", - "dev": true, - "engines": { - "node": ">=12.20" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/https-proxy-agent": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", - "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", - "dependencies": { - "agent-base": "6", - "debug": "4" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/human-format": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/human-format/-/human-format-1.0.0.tgz", - "integrity": "sha512-ZfSxF/LHVDb5Un52AguYkZArbiuMbJQwpOpZ0MBuj3pYDmLt7pkCEws9L8xKbgnaKrfMgGd6qc+PHBbKO97AaA==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/human-signals": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", - "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", - "dev": true, - "engines": { - "node": ">=10.17.0" - } - }, - "node_modules/husky": { - "version": "8.0.3", - "resolved": "https://registry.npmjs.org/husky/-/husky-8.0.3.tgz", - "integrity": "sha512-+dQSyqPh4x1hlO1swXBiNb2HzTDN1I2IGLQx1GrBuiqFJfoMrnZWwVmatvSiO+Iz8fBUnf+lekwNo4c2LlXItg==", - "dev": true, - "bin": { - "husky": "lib/bin.js" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/typicode" - } - }, - "node_modules/iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ieee754": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", - "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/ignore": { - "version": "5.2.4", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz", - "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==", - "dev": true, - "engines": { - "node": ">= 4" - } - }, - "node_modules/import-fresh": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", - "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", - "dev": true, - "dependencies": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/import-fresh/node_modules/resolve-from": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/import-local": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.1.0.tgz", - "integrity": "sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==", - "dev": true, - "dependencies": { - "pkg-dir": "^4.2.0", - "resolve-cwd": "^3.0.0" - }, - "bin": { - "import-local-fixture": "fixtures/cli.js" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", - "dev": true, - "engines": { - "node": ">=0.8.19" - } - }, - "node_modules/indent-string": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", - "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/indexes-of": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/indexes-of/-/indexes-of-1.0.1.tgz", - "integrity": "sha512-bup+4tap3Hympa+JBJUG7XuOsdNQ6fxt0MHyXMKuLBKn0OqsTfvUxkUrroEX1+B2VsSHvCjiIcZVxRtYa4nllA==", - "dev": true - }, - "node_modules/inflation": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/inflation/-/inflation-2.0.0.tgz", - "integrity": "sha512-m3xv4hJYR2oXw4o4Y5l6P5P16WYmazYof+el6Al3f+YlggGj6qT9kImBAnzDelRALnP5d3h4jGBPKzYCizjZZw==", - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", - "dependencies": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "node_modules/inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" - }, - "node_modules/ini": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", - "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", - "dev": true - }, - "node_modules/inquirer": { - "version": "8.2.4", - "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-8.2.4.tgz", - "integrity": "sha512-nn4F01dxU8VeKfq192IjLsxu0/OmMZ4Lg3xKAns148rCaXP6ntAoEkVYZThWjwON8AlzdZZi6oqnhNbxUG9hVg==", - "dev": true, - "dependencies": { - "ansi-escapes": "^4.2.1", - "chalk": "^4.1.1", - "cli-cursor": "^3.1.0", - "cli-width": "^3.0.0", - "external-editor": "^3.0.3", - "figures": "^3.0.0", - "lodash": "^4.17.21", - "mute-stream": "0.0.8", - "ora": "^5.4.1", - "run-async": "^2.4.0", - "rxjs": "^7.5.5", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0", - "through": "^2.3.6", - "wrap-ansi": "^7.0.0" - }, - "engines": { - "node": ">=12.0.0" - } - }, - "node_modules/internal-slot": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.4.tgz", - "integrity": "sha512-tA8URYccNzMo94s5MQZgH8NB/XTa6HsOo0MLfXTKKEnHVVdegzaQoFZ7Jp44bdvLvY2waT5dc+j5ICEswhi7UQ==", - "dev": true, - "dependencies": { - "get-intrinsic": "^1.1.3", - "has": "^1.0.3", - "side-channel": "^1.0.4" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/into-stream": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/into-stream/-/into-stream-3.1.0.tgz", - "integrity": "sha512-TcdjPibTksa1NQximqep2r17ISRiNE9fwlfbg3F8ANdvP5/yrFTew86VcO//jk4QTaMlbjypPBq76HN2zaKfZQ==", - "dev": true, - "dependencies": { - "from2": "^2.1.1", - "p-is-promise": "^1.1.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/ioredis": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/ioredis/-/ioredis-5.3.2.tgz", - "integrity": "sha512-1DKMMzlIHM02eBBVOFQ1+AolGjs6+xEcM4PDL7NqOS6szq7H9jSaEkIUH6/a5Hl241LzW6JLSiAbNvTQjUupUA==", - "dependencies": { - "@ioredis/commands": "^1.1.1", - "cluster-key-slot": "^1.1.0", - "debug": "^4.3.4", - "denque": "^2.1.0", - "lodash.defaults": "^4.2.0", - "lodash.isarguments": "^3.1.0", - "redis-errors": "^1.2.0", - "redis-parser": "^3.0.0", - "standard-as-callback": "^2.1.0" - }, - "engines": { - "node": ">=12.22.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/ioredis" - } - }, - "node_modules/ip-regex": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ip-regex/-/ip-regex-4.3.0.tgz", - "integrity": "sha512-B9ZWJxHHOHUhUjCPrMpLD4xEq35bUTClHM1S6CBU5ixQnkZmwipwgc96vAd7AAGM9TGHvJR+Uss+/Ak6UphK+Q==", - "engines": { - "node": ">=8" - } - }, - "node_modules/is": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/is/-/is-3.3.0.tgz", - "integrity": "sha512-nW24QBoPcFGGHJGUwnfpI7Yc5CdqWNdsyHQszVE/z2pKHXzh7FZ5GWhJqSyaQ9wMkQnsTx+kAI8bHlCX4tKdbg==", - "engines": { - "node": "*" - } - }, - "node_modules/is-array-buffer": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.1.tgz", - "integrity": "sha512-ASfLknmY8Xa2XtB4wmbz13Wu202baeA18cJBCeCy0wXUHZF0IPyVEXqKEcd+t2fNSLLL1vC6k7lxZEojNbISXQ==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.3", - "is-typed-array": "^1.1.10" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-arrayish": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==" - }, - "node_modules/is-bigint": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", - "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", - "dev": true, - "dependencies": { - "has-bigints": "^1.0.1" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-boolean-object": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", - "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-buffer": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", - "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" - }, - "node_modules/is-builtin-module": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-3.2.1.tgz", - "integrity": "sha512-BSLE3HnV2syZ0FK0iMA/yUGplUeMmNz4AW5fnTunbCIqZi4vG3WjJT9FHMy5D69xmAYBHXQhJdALdpwVxV501A==", - "dev": true, - "dependencies": { - "builtin-modules": "^3.3.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-callable": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", - "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", - "dev": true, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-core-module": { - "version": "2.11.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.11.0.tgz", - "integrity": "sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw==", - "dependencies": { - "has": "^1.0.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-date-object": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", - "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", - "dev": true, - "dependencies": { - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-docker": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", - "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", - "dev": true, - "bin": { - "is-docker": "cli.js" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-finite": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.1.0.tgz", - "integrity": "sha512-cdyMtqX/BOqqNBBiKlIVkytNHm49MtMlYyn1zxzvJKWmFMlGzm+ry5BBfYyeY9YmNKbRSo/o7OX9w9ale0wg3w==", - "dev": true, - "engines": { - "node": ">=0.10.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-fullwidth-code-point": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-4.0.0.tgz", - "integrity": "sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ==", - "dev": true, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-generator-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-2.1.0.tgz", - "integrity": "sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/is-generator-function": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.10.tgz", - "integrity": "sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==", - "dependencies": { - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-glob": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", - "dev": true, - "dependencies": { - "is-extglob": "^2.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-interactive": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz", - "integrity": "sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/is-ip": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/is-ip/-/is-ip-3.1.0.tgz", - "integrity": "sha512-35vd5necO7IitFPjd/YBeqwWnyDWbuLH9ZXQdMfDA8TEo7pv5X8yfrvVO3xbJbLUlERCMvf6X0hTUamQxCYJ9Q==", - "dependencies": { - "ip-regex": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/is-negative-zero": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz", - "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==", - "dev": true, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "dev": true, - "engines": { - "node": ">=0.12.0" - } - }, - "node_modules/is-number-object": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", - "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", - "dev": true, - "dependencies": { - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-object": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-object/-/is-object-1.0.2.tgz", - "integrity": "sha512-2rRIahhZr2UWb45fIOuvZGpFtz0TyOZLf32KxBbSoUCeZR495zCKlWUKKUByk3geS2eAs7ZAABt0Y/Rx0GiQGA==", - "dev": true, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-path-inside": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", - "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/is-plain-obj": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", - "integrity": "sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-plain-object": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", - "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", - "dependencies": { - "isobject": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-primitive": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/is-primitive/-/is-primitive-3.0.1.tgz", - "integrity": "sha512-GljRxhWvlCNRfZyORiH77FwdFwGcMO620o37EOYC0ORWdq+WYNVqW0w2Juzew4M+L81l6/QS3t5gkkihyRqv9w==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-regex": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", - "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-regexp": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-regexp/-/is-regexp-1.0.0.tgz", - "integrity": "sha512-7zjFAPO4/gwyQAAgRRmqeEeyIICSdmCqa3tsVHMdBzaXXRiqopZL4Cyghg/XulGWrtABTpbnYYzzIRffLkP4oA==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-relative-path": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-relative-path/-/is-relative-path-1.0.2.tgz", - "integrity": "sha512-i1h+y50g+0hRbBD+dbnInl3JlJ702aar58snAeX+MxBAPvzXGej7sYoPMhlnykabt0ZzCJNBEyzMlekuQZN7fA==", - "dev": true - }, - "node_modules/is-retry-allowed": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/is-retry-allowed/-/is-retry-allowed-1.2.0.tgz", - "integrity": "sha512-RUbUeKwvm3XG2VYamhJL1xFktgjvPzL0Hq8C+6yrWIswDy3BIXGqCxhxkc30N9jqK311gVU137K8Ei55/zVJRg==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-shared-array-buffer": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz", - "integrity": "sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-stream": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", - "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-string": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", - "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", - "dev": true, - "dependencies": { - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-symbol": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", - "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", - "dev": true, - "dependencies": { - "has-symbols": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-text-path": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-text-path/-/is-text-path-1.0.1.tgz", - "integrity": "sha512-xFuJpne9oFz5qDaodwmmG08e3CawH/2ZV8Qqza1Ko7Sk8POWbkRdwIoAWVhqvq0XeUzANEhKo2n0IXUGBm7A/w==", - "dev": true, - "dependencies": { - "text-extensions": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-typed-array": { - "version": "1.1.10", - "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.10.tgz", - "integrity": "sha512-PJqgEHiWZvMpaFZ3uTc8kHPM4+4ADTlDniuQL7cU/UDA0Ql7F70yGfHph3cLNe+c9toaigv+DFzTJKhc2CtO6A==", - "dev": true, - "dependencies": { - "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.2", - "for-each": "^0.3.3", - "gopd": "^1.0.1", - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-unicode-supported": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", - "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-url": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/is-url/-/is-url-1.2.4.tgz", - "integrity": "sha512-ITvGim8FhRiYe4IQ5uHSkj7pVaPDrCTkNd3yq3cV7iZAcJdHTUMPMEHcqSOy9xZ9qFenQCvi+2wjH9a1nXqHww==", - "dev": true - }, - "node_modules/is-url-superb": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-url-superb/-/is-url-superb-4.0.0.tgz", - "integrity": "sha512-GI+WjezhPPcbM+tqE9LnmsY5qqjwHzTvjJ36wxYX5ujNXefSUJ/T17r5bqDV8yLhcgB59KTPNOc9O9cmHTPWsA==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-utf8": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz", - "integrity": "sha512-rMYPYvCzsXywIsldgLaSoPlw5PfoB/ssr7hY4pLfcodrA5M/eArza1a9VmTiNIBNMjOGr1Ow9mTyU2o69U6U9Q==", - "dev": true - }, - "node_modules/is-weakref": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", - "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-windows": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", - "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-wsl": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", - "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", - "dev": true, - "dependencies": { - "is-docker": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", - "dev": true - }, - "node_modules/iserror": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/iserror/-/iserror-0.0.2.tgz", - "integrity": "sha512-oKGGrFVaWwETimP3SiWwjDeY27ovZoyZPHtxblC4hCq9fXxed/jasx+ATWFFjCVSRZng8VTMsN1nDnGo6zMBSw==" - }, - "node_modules/isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", - "dev": true - }, - "node_modules/isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/isolated-vm": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/isolated-vm/-/isolated-vm-4.5.0.tgz", - "integrity": "sha512-Kse0m5t+B9wZQVeTDqzPoX1SIFNTNfyaUxhnCuFgpXL1+5GYJ9GUAN3mpD+ainixGmUXgeYaVBX+QPDjEBBu0w==", - "hasInstallScript": true, - "engines": { - "node": ">=10.4.0" - } - }, - "node_modules/istanbul-lib-coverage": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz", - "integrity": "sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/istanbul-lib-instrument": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz", - "integrity": "sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==", - "dev": true, - "dependencies": { - "@babel/core": "^7.12.3", - "@babel/parser": "^7.14.7", - "@istanbuljs/schema": "^0.1.2", - "istanbul-lib-coverage": "^3.2.0", - "semver": "^6.3.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/istanbul-lib-instrument/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/istanbul-lib-report": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", - "integrity": "sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw==", - "dev": true, - "dependencies": { - "istanbul-lib-coverage": "^3.0.0", - "make-dir": "^3.0.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/istanbul-lib-source-maps": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz", - "integrity": "sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==", - "dev": true, - "dependencies": { - "debug": "^4.1.1", - "istanbul-lib-coverage": "^3.0.0", - "source-map": "^0.6.1" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/istanbul-reports": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.5.tgz", - "integrity": "sha512-nUsEMa9pBt/NOHqbcbeJEgqIlY/K7rVWUX6Lql2orY5e9roQOthbR3vtY4zzf2orPELg80fnxxk9zUyPlgwD1w==", - "dev": true, - "dependencies": { - "html-escaper": "^2.0.0", - "istanbul-lib-report": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/isurl": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isurl/-/isurl-1.0.0.tgz", - "integrity": "sha512-1P/yWsxPlDtn7QeRD+ULKQPaIaN6yF368GZ2vDfv0AL0NwpStafjWCDDdn0k8wgFMWpVAqG7oJhxHnlud42i9w==", - "dev": true, - "dependencies": { - "has-to-string-tag-x": "^1.2.0", - "is-object": "^1.0.1" - }, - "engines": { - "node": ">= 4" - } - }, - "node_modules/jackspeak": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-2.2.2.tgz", - "integrity": "sha512-mgNtVv4vUuaKA97yxUHoA3+FkuhtxkjdXEWOyB/N76fjy0FjezEt34oy3epBtvCvS+7DyKwqCFWx/oJLV5+kCg==", - "dev": true, - "dependencies": { - "@isaacs/cliui": "^8.0.2" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - }, - "optionalDependencies": { - "@pkgjs/parseargs": "^0.11.0" - } - }, - "node_modules/jest": { - "version": "29.6.0", - "resolved": "https://registry.npmjs.org/jest/-/jest-29.6.0.tgz", - "integrity": "sha512-do1J9gGrQ68E4UfMz/4OM71p9qCqQxu32N/9ZfeYFSSlx0uUOuxeyZxtJZNaUTW12ZA11ERhmBjBhy1Ho96R4g==", - "dev": true, - "dependencies": { - "@jest/core": "^29.6.0", - "@jest/types": "^29.6.0", - "import-local": "^3.0.2", - "jest-cli": "^29.6.0" - }, - "bin": { - "jest": "bin/jest.js" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - }, - "peerDependencies": { - "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" - }, - "peerDependenciesMeta": { - "node-notifier": { - "optional": true - } - } - }, - "node_modules/jest-changed-files": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-29.5.0.tgz", - "integrity": "sha512-IFG34IUMUaNBIxjQXF/iu7g6EcdMrGRRxaUSw92I/2g2YC6vCdTltl4nHvt7Ci5nSJwXIkCu8Ka1DKF+X7Z1Ag==", - "dev": true, - "dependencies": { - "execa": "^5.0.0", - "p-limit": "^3.1.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-circus": { - "version": "29.6.0", - "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-29.6.0.tgz", - "integrity": "sha512-LtG45qEKhse2Ws5zNR4DnZATReLGQXzBZGZnJ0DU37p6d4wDhu41vvczCQ3Ou+llR6CRYDBshsubV7H4jZvIkw==", - "dev": true, - "dependencies": { - "@jest/environment": "^29.6.0", - "@jest/expect": "^29.6.0", - "@jest/test-result": "^29.6.0", - "@jest/types": "^29.6.0", - "@types/node": "*", - "chalk": "^4.0.0", - "co": "^4.6.0", - "dedent": "^0.7.0", - "is-generator-fn": "^2.0.0", - "jest-each": "^29.6.0", - "jest-matcher-utils": "^29.6.0", - "jest-message-util": "^29.6.0", - "jest-runtime": "^29.6.0", - "jest-snapshot": "^29.6.0", - "jest-util": "^29.6.0", - "p-limit": "^3.1.0", - "pretty-format": "^29.6.0", - "pure-rand": "^6.0.0", - "slash": "^3.0.0", - "stack-utils": "^2.0.3" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-cli": { - "version": "29.6.0", - "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-29.6.0.tgz", - "integrity": "sha512-WvZIaanK/abkw6s01924DQ2QLwM5Q4Y4iPbSDb9Zg6smyXGqqcPQ7ft9X8D7B0jICz312eSzM6UlQNxuZJBrMw==", - "dev": true, - "dependencies": { - "@jest/core": "^29.6.0", - "@jest/test-result": "^29.6.0", - "@jest/types": "^29.6.0", - "chalk": "^4.0.0", - "exit": "^0.1.2", - "graceful-fs": "^4.2.9", - "import-local": "^3.0.2", - "jest-config": "^29.6.0", - "jest-util": "^29.6.0", - "jest-validate": "^29.6.0", - "prompts": "^2.0.1", - "yargs": "^17.3.1" - }, - "bin": { - "jest": "bin/jest.js" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - }, - "peerDependencies": { - "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" - }, - "peerDependenciesMeta": { - "node-notifier": { - "optional": true - } - } - }, - "node_modules/jest-config": { - "version": "29.6.0", - "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-29.6.0.tgz", - "integrity": "sha512-fKA4jM91PDqWVkMpb1FVKxIuhg3hC6hgaen57cr1rRZkR96dCatvJZsk3ik7/GNu9ERj9wgAspOmyvkFoGsZhA==", - "dev": true, - "dependencies": { - "@babel/core": "^7.11.6", - "@jest/test-sequencer": "^29.6.0", - "@jest/types": "^29.6.0", - "babel-jest": "^29.6.0", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "deepmerge": "^4.2.2", - "glob": "^7.1.3", - "graceful-fs": "^4.2.9", - "jest-circus": "^29.6.0", - "jest-environment-node": "^29.6.0", - "jest-get-type": "^29.4.3", - "jest-regex-util": "^29.4.3", - "jest-resolve": "^29.6.0", - "jest-runner": "^29.6.0", - "jest-util": "^29.6.0", - "jest-validate": "^29.6.0", - "micromatch": "^4.0.4", - "parse-json": "^5.2.0", - "pretty-format": "^29.6.0", - "slash": "^3.0.0", - "strip-json-comments": "^3.1.1" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - }, - "peerDependencies": { - "@types/node": "*", - "ts-node": ">=9.0.0" - }, - "peerDependenciesMeta": { - "@types/node": { - "optional": true - }, - "ts-node": { - "optional": true - } - } - }, - "node_modules/jest-config/node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "dev": true, - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/jest-diff": { - "version": "29.6.0", - "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-29.6.0.tgz", - "integrity": "sha512-ZRm7cd2m9YyZ0N3iMyuo1iUiprxQ/MFpYWXzEEj7hjzL3WnDffKW8192XBDcrAI8j7hnrM1wed3bL/oEnYF/8w==", - "dev": true, - "dependencies": { - "chalk": "^4.0.0", - "diff-sequences": "^29.4.3", - "jest-get-type": "^29.4.3", - "pretty-format": "^29.6.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-docblock": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-29.4.3.tgz", - "integrity": "sha512-fzdTftThczeSD9nZ3fzA/4KkHtnmllawWrXO69vtI+L9WjEIuXWs4AmyME7lN5hU7dB0sHhuPfcKofRsUb/2Fg==", - "dev": true, - "dependencies": { - "detect-newline": "^3.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-each": { - "version": "29.6.0", - "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-29.6.0.tgz", - "integrity": "sha512-d0Jem4RBAlFUyV6JSXPSHVUpNo5RleSj+iJEy1G3+ZCrzHDjWs/1jUfrbnJKHdJdAx5BCEce/Ju379WqHhQk4w==", - "dev": true, - "dependencies": { - "@jest/types": "^29.6.0", - "chalk": "^4.0.0", - "jest-get-type": "^29.4.3", - "jest-util": "^29.6.0", - "pretty-format": "^29.6.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-environment-node": { - "version": "29.6.0", - "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-29.6.0.tgz", - "integrity": "sha512-BOf5Q2/nFCdBOnyBM5c5/6DbdQYgc+0gyUQ8l8qhUAB8O7pM+4QJXIXJsRZJaxd5SHV6y5VArTVhOfogoqcP8Q==", - "dev": true, - "dependencies": { - "@jest/environment": "^29.6.0", - "@jest/fake-timers": "^29.6.0", - "@jest/types": "^29.6.0", - "@types/node": "*", - "jest-mock": "^29.6.0", - "jest-util": "^29.6.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-get-type": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.4.3.tgz", - "integrity": "sha512-J5Xez4nRRMjk8emnTpWrlkyb9pfRQQanDrvWHhsR1+VUfbwxi30eVcZFlcdGInRibU4G5LwHXpI7IRHU0CY+gg==", - "dev": true, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-haste-map": { - "version": "29.6.0", - "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-29.6.0.tgz", - "integrity": "sha512-dY1DKufptj7hcJSuhpqlYPGcnN3XjlOy/g0jinpRTMsbb40ivZHiuIPzeminOZkrek8C+oDxC54ILGO3vMLojg==", - "dev": true, - "dependencies": { - "@jest/types": "^29.6.0", - "@types/graceful-fs": "^4.1.3", - "@types/node": "*", - "anymatch": "^3.0.3", - "fb-watchman": "^2.0.0", - "graceful-fs": "^4.2.9", - "jest-regex-util": "^29.4.3", - "jest-util": "^29.6.0", - "jest-worker": "^29.6.0", - "micromatch": "^4.0.4", - "walker": "^1.0.8" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - }, - "optionalDependencies": { - "fsevents": "^2.3.2" - } - }, - "node_modules/jest-leak-detector": { - "version": "29.6.0", - "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-29.6.0.tgz", - "integrity": "sha512-JdV6EZOPxHR1gd6ccxjNowuROkT2jtGU5G/g58RcJX1xe5mrtLj0g6/ZkyMoXF4cs+tTkHMFX6pcIrB1QPQwCw==", - "dev": true, - "dependencies": { - "jest-get-type": "^29.4.3", - "pretty-format": "^29.6.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-matcher-utils": { - "version": "29.6.0", - "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-29.6.0.tgz", - "integrity": "sha512-oSlqfGN+sbkB2Q5um/zL7z80w84FEAcLKzXBZIPyRk2F2Srg1ubhrHVKW68JCvb2+xKzAeGw35b+6gciS24PHw==", - "dev": true, - "dependencies": { - "chalk": "^4.0.0", - "jest-diff": "^29.6.0", - "jest-get-type": "^29.4.3", - "pretty-format": "^29.6.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-message-util": { - "version": "29.6.0", - "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-29.6.0.tgz", - "integrity": "sha512-mkCp56cETbpoNtsaeWVy6SKzk228mMi9FPHSObaRIhbR2Ujw9PqjW/yqVHD2tN1bHbC8ol6h3UEo7dOPmIYwIA==", - "dev": true, - "dependencies": { - "@babel/code-frame": "^7.12.13", - "@jest/types": "^29.6.0", - "@types/stack-utils": "^2.0.0", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.9", - "micromatch": "^4.0.4", - "pretty-format": "^29.6.0", - "slash": "^3.0.0", - "stack-utils": "^2.0.3" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-mock": { - "version": "29.6.0", - "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-29.6.0.tgz", - "integrity": "sha512-2Pb7R2w24Q0aUVn+2/vdRDL6CqGqpheDZy7zrXav8FotOpSGw/4bS2hyVoKHMEx4xzOn6EyCAGwc5czWxXeN7w==", - "dev": true, - "dependencies": { - "@jest/types": "^29.6.0", - "@types/node": "*", - "jest-util": "^29.6.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-pnp-resolver": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.3.tgz", - "integrity": "sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==", - "dev": true, - "engines": { - "node": ">=6" - }, - "peerDependencies": { - "jest-resolve": "*" - }, - "peerDependenciesMeta": { - "jest-resolve": { - "optional": true - } - } - }, - "node_modules/jest-regex-util": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-29.4.3.tgz", - "integrity": "sha512-O4FglZaMmWXbGHSQInfXewIsd1LMn9p3ZXB/6r4FOkyhX2/iP/soMG98jGvk/A3HAN78+5VWcBGO0BJAPRh4kg==", - "dev": true, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-resolve": { - "version": "29.6.0", - "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-29.6.0.tgz", - "integrity": "sha512-+hrpY4LzAONoZA/rvB6rnZLkOSA6UgJLpdCWrOZNSgGxWMumzRLu7dLUSCabAHzoHIDQ9qXfr3th1zYNJ0E8sQ==", - "dev": true, - "dependencies": { - "chalk": "^4.0.0", - "graceful-fs": "^4.2.9", - "jest-haste-map": "^29.6.0", - "jest-pnp-resolver": "^1.2.2", - "jest-util": "^29.6.0", - "jest-validate": "^29.6.0", - "resolve": "^1.20.0", - "resolve.exports": "^2.0.0", - "slash": "^3.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-resolve-dependencies": { - "version": "29.6.0", - "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-29.6.0.tgz", - "integrity": "sha512-eOfPog9K3hJdJk/3i6O6bQhXS+3uXhMDkLJGX+xmMPp7T1d/zdcFofbDnHgNoEkhD/mSimC5IagLEP7lpLLu/A==", - "dev": true, - "dependencies": { - "jest-regex-util": "^29.4.3", - "jest-snapshot": "^29.6.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-runner": { - "version": "29.6.0", - "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-29.6.0.tgz", - "integrity": "sha512-4fZuGV2lOxS2BiqEG9/AI8E6O+jo+QZjMVcgi1x5E6aDql0Gd/EFIbUQ0pSS09y8cya1vJB/qC2xsE468jqtSg==", - "dev": true, - "dependencies": { - "@jest/console": "^29.6.0", - "@jest/environment": "^29.6.0", - "@jest/test-result": "^29.6.0", - "@jest/transform": "^29.6.0", - "@jest/types": "^29.6.0", - "@types/node": "*", - "chalk": "^4.0.0", - "emittery": "^0.13.1", - "graceful-fs": "^4.2.9", - "jest-docblock": "^29.4.3", - "jest-environment-node": "^29.6.0", - "jest-haste-map": "^29.6.0", - "jest-leak-detector": "^29.6.0", - "jest-message-util": "^29.6.0", - "jest-resolve": "^29.6.0", - "jest-runtime": "^29.6.0", - "jest-util": "^29.6.0", - "jest-watcher": "^29.6.0", - "jest-worker": "^29.6.0", - "p-limit": "^3.1.0", - "source-map-support": "0.5.13" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-runtime": { - "version": "29.6.0", - "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-29.6.0.tgz", - "integrity": "sha512-5FavYo3EeXLHIvnJf+r7Cj0buePAbe4mzRB9oeVxDS0uVmouSBjWeGgyRjZkw7ArxOoZI8gO6f8SGMJ2HFlwwg==", - "dev": true, - "dependencies": { - "@jest/environment": "^29.6.0", - "@jest/fake-timers": "^29.6.0", - "@jest/globals": "^29.6.0", - "@jest/source-map": "^29.6.0", - "@jest/test-result": "^29.6.0", - "@jest/transform": "^29.6.0", - "@jest/types": "^29.6.0", - "@types/node": "*", - "chalk": "^4.0.0", - "cjs-module-lexer": "^1.0.0", - "collect-v8-coverage": "^1.0.0", - "glob": "^7.1.3", - "graceful-fs": "^4.2.9", - "jest-haste-map": "^29.6.0", - "jest-message-util": "^29.6.0", - "jest-mock": "^29.6.0", - "jest-regex-util": "^29.4.3", - "jest-resolve": "^29.6.0", - "jest-snapshot": "^29.6.0", - "jest-util": "^29.6.0", - "slash": "^3.0.0", - "strip-bom": "^4.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-runtime/node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "dev": true, - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/jest-snapshot": { - "version": "29.6.0", - "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-29.6.0.tgz", - "integrity": "sha512-H3kUE9NwWDEDoutcOSS921IqdlkdjgnMdj1oMyxAHNflscdLc9dB8OudZHV6kj4OHJxbMxL8CdI5DlwYrs4wQg==", - "dev": true, - "dependencies": { - "@babel/core": "^7.11.6", - "@babel/generator": "^7.7.2", - "@babel/plugin-syntax-jsx": "^7.7.2", - "@babel/plugin-syntax-typescript": "^7.7.2", - "@babel/types": "^7.3.3", - "@jest/expect-utils": "^29.6.0", - "@jest/transform": "^29.6.0", - "@jest/types": "^29.6.0", - "@types/prettier": "^2.1.5", - "babel-preset-current-node-syntax": "^1.0.0", - "chalk": "^4.0.0", - "expect": "^29.6.0", - "graceful-fs": "^4.2.9", - "jest-diff": "^29.6.0", - "jest-get-type": "^29.4.3", - "jest-matcher-utils": "^29.6.0", - "jest-message-util": "^29.6.0", - "jest-util": "^29.6.0", - "natural-compare": "^1.4.0", - "pretty-format": "^29.6.0", - "semver": "^7.5.3" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-sonar": { - "version": "0.2.16", - "resolved": "https://registry.npmjs.org/jest-sonar/-/jest-sonar-0.2.16.tgz", - "integrity": "sha512-ES6Z9BbIVDELtbz+/b6pv41B2qOfp38cQpoCLqei21FtlkG/GzhyQ0M3egEIM+erpJOkpRKM8Tc8/YQtHdiTXA==", - "dev": true, - "dependencies": { - "entities": "4.3.0", - "strip-ansi": "6.0.1" - } - }, - "node_modules/jest-util": { - "version": "29.6.0", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.6.0.tgz", - "integrity": "sha512-S0USx9YwcvEm4pQ5suisVm/RVxBmi0GFR7ocJhIeaCuW5AXnAnffXbaVKvIFodyZNOc9ygzVtTxmBf40HsHXaA==", - "dev": true, - "dependencies": { - "@jest/types": "^29.6.0", - "@types/node": "*", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "graceful-fs": "^4.2.9", - "picomatch": "^2.2.3" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-validate": { - "version": "29.6.0", - "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-29.6.0.tgz", - "integrity": "sha512-MLTrAJsb1+W7svbeZ+A7pAnyXMaQrjvPDKCy7OlfsfB6TMVc69v7WjUWfiR6r3snULFWZASiKgvNVDuATta1dg==", - "dev": true, - "dependencies": { - "@jest/types": "^29.6.0", - "camelcase": "^6.2.0", - "chalk": "^4.0.0", - "jest-get-type": "^29.4.3", - "leven": "^3.1.0", - "pretty-format": "^29.6.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-validate/node_modules/camelcase": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", - "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/jest-watcher": { - "version": "29.6.0", - "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-29.6.0.tgz", - "integrity": "sha512-LdsQqFNX60mRdRRe+zsELnYRH1yX6KL+ukbh+u6WSQeTheZZe1TlLJNKRQiZ7e0VbvMkywmMWL/KV35noOJCcw==", - "dev": true, - "dependencies": { - "@jest/test-result": "^29.6.0", - "@jest/types": "^29.6.0", - "@types/node": "*", - "ansi-escapes": "^4.2.1", - "chalk": "^4.0.0", - "emittery": "^0.13.1", - "jest-util": "^29.6.0", - "string-length": "^4.0.1" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-when": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/jest-when/-/jest-when-3.5.2.tgz", - "integrity": "sha512-4rDvnhaWh08RcPsoEVXgxRnUIE9wVIbZtGqZ5x2Wm9Ziz9aQs89PipQFmOK0ycbEhVAgiV3MUeTXp3Ar4s2FcQ==", - "dev": true, - "peerDependencies": { - "jest": ">= 25" - } - }, - "node_modules/jest-worker": { - "version": "29.6.0", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.6.0.tgz", - "integrity": "sha512-oiQHH1SnKmZIwwPnpOrXTq4kHBk3lKGY/07DpnH0sAu+x7J8rXlbLDROZsU6vy9GwB0hPiZeZpu6YlJ48QoKcA==", - "dev": true, - "dependencies": { - "@types/node": "*", - "jest-util": "^29.6.0", - "merge-stream": "^2.0.0", - "supports-color": "^8.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-worker/node_modules/supports-color": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/supports-color?sponsor=1" - } - }, - "node_modules/joi": { - "version": "17.9.2", - "resolved": "https://registry.npmjs.org/joi/-/joi-17.9.2.tgz", - "integrity": "sha512-Itk/r+V4Dx0V3c7RLFdRh12IOjySm2/WGPMubBT92cQvRfYZhPM2W0hZlctjj72iES8jsRCwp7S/cRmWBnJ4nw==", - "dependencies": { - "@hapi/hoek": "^9.0.0", - "@hapi/topo": "^5.0.0", - "@sideway/address": "^4.1.3", - "@sideway/formula": "^3.0.1", - "@sideway/pinpoint": "^2.0.0" - } - }, - "node_modules/js-sha1": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/js-sha1/-/js-sha1-0.6.0.tgz", - "integrity": "sha512-01gwBFreYydzmU9BmZxpVk6svJJHrVxEN3IOiGl6VO93bVKYETJ0sIth6DASI6mIFdt7NmfX9UiByRzsYHGU9w==" - }, - "node_modules/js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" - }, - "node_modules/js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "dependencies": { - "argparse": "^2.0.1" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/jsesc": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", - "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", - "dev": true, - "bin": { - "jsesc": "bin/jsesc" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/json-buffer": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.0.tgz", - "integrity": "sha512-CuUqjv0FUZIdXkHPI8MezCnFCdaTAacej1TZYulLoAg1h/PhwkdXFN4V/gzY4g+fMBCOV2xF+rp7t2XD2ns/NQ==", - "dev": true - }, - "node_modules/json-diff": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/json-diff/-/json-diff-1.0.3.tgz", - "integrity": "sha512-W0yk/xzjz7bag9v9eS4qthvPG4O07uxNeXwirhvcOqmX4w8HLtB/Pw76o5Z7Pblwvf4vpCi4+iHOlHDnmav/rA==", - "dependencies": { - "@ewoudenberg/difflib": "0.1.0", - "colors": "^1.4.0", - "dreamopt": "~0.8.0" - }, - "bin": { - "json-diff": "bin/json-diff.js" - }, - "engines": { - "node": "*" - } - }, - "node_modules/json-parse-better-errors": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", - "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", - "dev": true - }, - "node_modules/json-parse-even-better-errors": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", - "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==" - }, - "node_modules/json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" - }, - "node_modules/json-size": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-size/-/json-size-1.0.0.tgz", - "integrity": "sha512-sh8Ff4sNVI3FU1LjFXiNpcG9Er9bsn8WbeR79mGj4Ljd+/NBmxqYCV1sPzndUTGsWXa3LVUx3aLlZxpq1DzCBA==", - "dependencies": { - "utf8-length": "0.0.1" - } - }, - "node_modules/json-stable-stringify-without-jsonify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", - "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", - "dev": true - }, - "node_modules/json-stringify-safe": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", - "integrity": "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==", - "dev": true - }, - "node_modules/json5": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", - "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", - "dev": true, - "bin": { - "json5": "lib/cli.js" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/jsonata": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/jsonata/-/jsonata-2.0.3.tgz", - "integrity": "sha512-Up2H81MUtjqI/dWwWX7p4+bUMfMrQJVMN/jW6clFMTiYP528fBOBNtRu944QhKTs3+IsVWbgMeUTny5fw2VMUA==", - "engines": { - "node": ">= 8" - } - }, - "node_modules/jsonc-parser": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.2.0.tgz", - "integrity": "sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w==", - "dev": true - }, - "node_modules/jsonfile": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", - "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", - "dev": true, - "dependencies": { - "universalify": "^2.0.0" - }, - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } - }, - "node_modules/jsonparse": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz", - "integrity": "sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==", - "dev": true, - "engines": [ - "node >= 0.2.0" - ] - }, - "node_modules/JSONStream": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.5.tgz", - "integrity": "sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==", - "dev": true, - "dependencies": { - "jsonparse": "^1.2.0", - "through": ">=2.2.7 <3" - }, - "bin": { - "JSONStream": "bin.js" - }, - "engines": { - "node": "*" - } - }, - "node_modules/jsontoxml": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/jsontoxml/-/jsontoxml-1.0.1.tgz", - "integrity": "sha512-dtKGq0K8EWQBRqcAaePSgKR4Hyjfsz/LkurHSV3Cxk4H+h2fWDeaN2jzABz+ZmOJylgXS7FGeWmbZ6jgYUMdJQ==", - "engines": { - "node": ">=0.2.0" - } - }, - "node_modules/keygrip": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/keygrip/-/keygrip-1.1.0.tgz", - "integrity": "sha512-iYSchDJ+liQ8iwbSI2QqsQOvqv58eJCEanyJPJi+Khyu8smkcKSFUCbPwzFcL7YVtZ6eONjqRX/38caJ7QjRAQ==", - "dependencies": { - "tsscmp": "1.0.6" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/keyv": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/keyv/-/keyv-3.0.0.tgz", - "integrity": "sha512-eguHnq22OE3uVoSYG0LVWNP+4ppamWr9+zWBe1bsNcovIMy6huUJFPgy4mGwCd/rnl3vOLGW1MTlu4c57CT1xA==", - "dev": true, - "dependencies": { - "json-buffer": "3.0.0" - } - }, - "node_modules/kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/kleur": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", - "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/koa": { - "version": "2.14.1", - "resolved": "https://registry.npmjs.org/koa/-/koa-2.14.1.tgz", - "integrity": "sha512-USJFyZgi2l0wDgqkfD27gL4YGno7TfUkcmOe6UOLFOVuN+J7FwnNu4Dydl4CUQzraM1lBAiGed0M9OVJoT0Kqw==", - "dependencies": { - "accepts": "^1.3.5", - "cache-content-type": "^1.0.0", - "content-disposition": "~0.5.2", - "content-type": "^1.0.4", - "cookies": "~0.8.0", - "debug": "^4.3.2", - "delegates": "^1.0.0", - "depd": "^2.0.0", - "destroy": "^1.0.4", - "encodeurl": "^1.0.2", - "escape-html": "^1.0.3", - "fresh": "~0.5.2", - "http-assert": "^1.3.0", - "http-errors": "^1.6.3", - "is-generator-function": "^1.0.7", - "koa-compose": "^4.1.0", - "koa-convert": "^2.0.0", - "on-finished": "^2.3.0", - "only": "~0.0.2", - "parseurl": "^1.3.2", - "statuses": "^1.5.0", - "type-is": "^1.6.16", - "vary": "^1.1.2" - }, - "engines": { - "node": "^4.8.4 || ^6.10.1 || ^7.10.1 || >= 8.1.4" - } - }, - "node_modules/koa-bodyparser": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/koa-bodyparser/-/koa-bodyparser-4.4.0.tgz", - "integrity": "sha512-AXPY7wwKZUmbgb8VkTEUFoRNOlx6aWRJwEnQD+zfNf33/7KSAkN4Oo9BqlIk80D+5TvuqlhpQT5dPVcyxl5Zsw==", - "dependencies": { - "co-body": "^6.0.0", - "copy-to": "^2.0.1" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/koa-compose": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/koa-compose/-/koa-compose-4.1.0.tgz", - "integrity": "sha512-8ODW8TrDuMYvXRwra/Kh7/rJo9BtOfPc6qO8eAfC80CnCvSjSl0bkRM24X6/XBBEyj0v1nRUQ1LyOy3dbqOWXw==" - }, - "node_modules/koa-convert": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/koa-convert/-/koa-convert-2.0.0.tgz", - "integrity": "sha512-asOvN6bFlSnxewce2e/DK3p4tltyfC4VM7ZwuTuepI7dEQVcvpyFuBcEARu1+Hxg8DIwytce2n7jrZtRlPrARA==", - "dependencies": { - "co": "^4.6.0", - "koa-compose": "^4.1.0" - }, - "engines": { - "node": ">= 10" - } - }, - "node_modules/koa2-swagger-ui": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/koa2-swagger-ui/-/koa2-swagger-ui-5.8.0.tgz", - "integrity": "sha512-uVHh2hajX5Q/6+BkRrK0Rrf84Duc6dB73WIU1mb3cLfellMR1klAIYEX1p1bOsNjB97uqCwyn/cz3Sfi1/IxcQ==", - "dependencies": { - "@types/koa": "^2.13.6", - "handlebars": "^4.7.7", - "lodash": "^4.17.21", - "read-pkg-up": "^7.0.1" - } - }, - "node_modules/kuler": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/kuler/-/kuler-2.0.0.tgz", - "integrity": "sha512-Xq9nH7KlWZmXAtodXDDRE7vs6DU1gTU8zYDHDiWLSip45Egwq3plLHzPn27NgvzL2r1LMPC1vdqh98sQxtqj4A==" - }, - "node_modules/lazy-ass": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/lazy-ass/-/lazy-ass-1.6.0.tgz", - "integrity": "sha512-cc8oEVoctTvsFZ/Oje/kGnHbpWHYBe8IAJe4C0QNc3t8uM/0Y8+erSz/7Y1ALuXTEZTMvxXwO6YbX1ey3ujiZw==", - "dev": true, - "engines": { - "node": "> 0.8" - } - }, - "node_modules/leven": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", - "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/levn": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", - "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", - "dev": true, - "dependencies": { - "prelude-ls": "^1.2.1", - "type-check": "~0.4.0" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/lilconfig": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.1.0.tgz", - "integrity": "sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==", - "dev": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/lines-and-columns": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", - "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==" - }, - "node_modules/lint-staged": { - "version": "13.2.2", - "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-13.2.2.tgz", - "integrity": "sha512-71gSwXKy649VrSU09s10uAT0rWCcY3aewhMaHyl2N84oBk4Xs9HgxvUp3AYu+bNsK4NrOYYxvSgg7FyGJ+jGcA==", - "dev": true, - "dependencies": { - "chalk": "5.2.0", - "cli-truncate": "^3.1.0", - "commander": "^10.0.0", - "debug": "^4.3.4", - "execa": "^7.0.0", - "lilconfig": "2.1.0", - "listr2": "^5.0.7", - "micromatch": "^4.0.5", - "normalize-path": "^3.0.0", - "object-inspect": "^1.12.3", - "pidtree": "^0.6.0", - "string-argv": "^0.3.1", - "yaml": "^2.2.2" - }, - "bin": { - "lint-staged": "bin/lint-staged.js" - }, - "engines": { - "node": "^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/lint-staged" - } - }, - "node_modules/lint-staged/node_modules/chalk": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.2.0.tgz", - "integrity": "sha512-ree3Gqw/nazQAPuJJEy+avdl7QfZMcUvmHIKgEZkGL+xOBzRvup5Hxo6LHuMceSxOabuJLJm5Yp/92R9eMmMvA==", - "dev": true, - "engines": { - "node": "^12.17.0 || ^14.13 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/lint-staged/node_modules/execa": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/execa/-/execa-7.1.1.tgz", - "integrity": "sha512-wH0eMf/UXckdUYnO21+HDztteVv05rq2GXksxT4fCGeHkBhw1DROXh40wcjMcRqDOWE7iPJ4n3M7e2+YFP+76Q==", - "dev": true, - "dependencies": { - "cross-spawn": "^7.0.3", - "get-stream": "^6.0.1", - "human-signals": "^4.3.0", - "is-stream": "^3.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^5.1.0", - "onetime": "^6.0.0", - "signal-exit": "^3.0.7", - "strip-final-newline": "^3.0.0" - }, - "engines": { - "node": "^14.18.0 || ^16.14.0 || >=18.0.0" - }, - "funding": { - "url": "https://github.com/sindresorhus/execa?sponsor=1" - } - }, - "node_modules/lint-staged/node_modules/human-signals": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-4.3.1.tgz", - "integrity": "sha512-nZXjEF2nbo7lIw3mgYjItAfgQXog3OjJogSbKa2CQIIvSGWcKgeJnQlNXip6NglNzYH45nSRiEVimMvYL8DDqQ==", - "dev": true, - "engines": { - "node": ">=14.18.0" - } - }, - "node_modules/lint-staged/node_modules/is-stream": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz", - "integrity": "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==", - "dev": true, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/lint-staged/node_modules/mimic-fn": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-4.0.0.tgz", - "integrity": "sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==", - "dev": true, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/lint-staged/node_modules/npm-run-path": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.1.0.tgz", - "integrity": "sha512-sJOdmRGrY2sjNTRMbSvluQqg+8X7ZK61yvzBEIDhz4f8z1TZFYABsqjjCBd/0PUNE9M6QDgHJXQkGUEm7Q+l9Q==", - "dev": true, - "dependencies": { - "path-key": "^4.0.0" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/lint-staged/node_modules/object-inspect": { - "version": "1.12.3", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.3.tgz", - "integrity": "sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==", - "dev": true, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/lint-staged/node_modules/onetime": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-6.0.0.tgz", - "integrity": "sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==", - "dev": true, - "dependencies": { - "mimic-fn": "^4.0.0" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/lint-staged/node_modules/path-key": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-4.0.0.tgz", - "integrity": "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==", - "dev": true, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/lint-staged/node_modules/strip-final-newline": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-3.0.0.tgz", - "integrity": "sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==", - "dev": true, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/listr2": { - "version": "5.0.8", - "resolved": "https://registry.npmjs.org/listr2/-/listr2-5.0.8.tgz", - "integrity": "sha512-mC73LitKHj9w6v30nLNGPetZIlfpUniNSsxxrbaPcWOjDb92SHPzJPi/t+v1YC/lxKz/AJ9egOjww0qUuFxBpA==", - "dev": true, - "dependencies": { - "cli-truncate": "^2.1.0", - "colorette": "^2.0.19", - "log-update": "^4.0.0", - "p-map": "^4.0.0", - "rfdc": "^1.3.0", - "rxjs": "^7.8.0", - "through": "^2.3.8", - "wrap-ansi": "^7.0.0" - }, - "engines": { - "node": "^14.13.1 || >=16.0.0" - }, - "peerDependencies": { - "enquirer": ">= 2.3.0 < 3" - }, - "peerDependenciesMeta": { - "enquirer": { - "optional": true - } - } - }, - "node_modules/listr2/node_modules/cli-truncate": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-2.1.0.tgz", - "integrity": "sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg==", - "dev": true, - "dependencies": { - "slice-ansi": "^3.0.0", - "string-width": "^4.2.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/listr2/node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/listr2/node_modules/slice-ansi": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-3.0.0.tgz", - "integrity": "sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.0.0", - "astral-regex": "^2.0.0", - "is-fullwidth-code-point": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/load-json-file": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz", - "integrity": "sha512-Kx8hMakjX03tiGTLAIdJ+lL0htKnXjEZN6hk/tozf/WOuYGdZBJrZ+rCJRbVCugsjB3jMLn9746NsQIf5VjBMw==", - "dev": true, - "dependencies": { - "graceful-fs": "^4.1.2", - "parse-json": "^4.0.0", - "pify": "^3.0.0", - "strip-bom": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/load-json-file/node_modules/parse-json": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", - "integrity": "sha512-aOIos8bujGN93/8Ox/jPLh7RwVnPEysynVFE+fQZyg6jKELEHwzgKdLRFHUgXJL6kylijVSBC4BvN9OmsB48Rw==", - "dev": true, - "dependencies": { - "error-ex": "^1.3.1", - "json-parse-better-errors": "^1.0.1" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/load-json-file/node_modules/pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/load-json-file/node_modules/strip-bom": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/locate-path": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", - "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", - "dev": true, - "dependencies": { - "p-locate": "^5.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" - }, - "node_modules/lodash._reinterpolate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz", - "integrity": "sha512-xYHt68QRoYGjeeM/XOE1uJtvXQAgvszfBhjV4yvsQH0u2i9I6cI6c6/eG4Hh3UAOVn0y/xAXwmTzEay49Q//HA==", - "dev": true - }, - "node_modules/lodash.camelcase": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz", - "integrity": "sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==", - "dev": true - }, - "node_modules/lodash.defaults": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/lodash.defaults/-/lodash.defaults-4.2.0.tgz", - "integrity": "sha512-qjxPLHd3r5DnsdGacqOMU6pb/avJzdh9tFX2ymgoZE27BmjXrNy/y4LoaiTeAb+O3gL8AfpJGtqfX/ae2leYYQ==" - }, - "node_modules/lodash.isarguments": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz", - "integrity": "sha512-chi4NHZlZqZD18a0imDHnZPrDeBbTtVN7GXMwuGdRH9qotxAjYs3aVLKc7zNOG9eddR5Ksd8rvFEBc9SsggPpg==" - }, - "node_modules/lodash.isfunction": { - "version": "3.0.9", - "resolved": "https://registry.npmjs.org/lodash.isfunction/-/lodash.isfunction-3.0.9.tgz", - "integrity": "sha512-AirXNj15uRIMMPihnkInB4i3NHeb4iBtNg9WRWuK2o31S+ePwwNmDPaTL3o7dTJ+VXNZim7rFs4rxN4YU1oUJw==", - "dev": true - }, - "node_modules/lodash.ismatch": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/lodash.ismatch/-/lodash.ismatch-4.4.0.tgz", - "integrity": "sha512-fPMfXjGQEV9Xsq/8MTSgUf255gawYRbjwMyDbcvDhXgV7enSZA0hynz6vMPnpAb5iONEzBHBPsT+0zes5Z301g==", - "dev": true - }, - "node_modules/lodash.isplainobject": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", - "integrity": "sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==", - "dev": true - }, - "node_modules/lodash.kebabcase": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/lodash.kebabcase/-/lodash.kebabcase-4.1.1.tgz", - "integrity": "sha512-N8XRTIMMqqDgSy4VLKPnJ/+hpGZN+PHQiJnSenYqPaVV/NCqEogTnAdZLQiGKhxX+JCs8waWq2t1XHWKOmlY8g==", - "dev": true - }, - "node_modules/lodash.map": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/lodash.map/-/lodash.map-4.6.0.tgz", - "integrity": "sha512-worNHGKLDetmcEYDvh2stPCrrQRkP20E4l0iIS7F8EvzMqBBi7ltvFN5m1HvTf1P7Jk1txKhvFcmYsCr8O2F1Q==", - "dev": true - }, - "node_modules/lodash.memoize": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", - "integrity": "sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==", - "dev": true - }, - "node_modules/lodash.merge": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", - "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", - "dev": true - }, - "node_modules/lodash.mergewith": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/lodash.mergewith/-/lodash.mergewith-4.6.2.tgz", - "integrity": "sha512-GK3g5RPZWTRSeLSpgP8Xhra+pnjBC56q9FZYe1d5RN3TJ35dbkGy3YqBSMbyCrlbi+CM9Z3Jk5yTL7RCsqboyQ==", - "dev": true - }, - "node_modules/lodash.snakecase": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/lodash.snakecase/-/lodash.snakecase-4.1.1.tgz", - "integrity": "sha512-QZ1d4xoBHYUeuouhEq3lk3Uq7ldgyFXGBhg04+oRLnIz8o9T65Eh+8YdroUwn846zchkA9yDsDl5CVVaV2nqYw==", - "dev": true - }, - "node_modules/lodash.startcase": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/lodash.startcase/-/lodash.startcase-4.4.0.tgz", - "integrity": "sha512-+WKqsK294HMSc2jEbNgpHpd0JfIBhp7rEV4aqXWqFr6AlXov+SlcgB1Fv01y2kGe3Gc8nMW7VA0SrGuSkRfIEg==", - "dev": true - }, - "node_modules/lodash.template": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.template/-/lodash.template-4.5.0.tgz", - "integrity": "sha512-84vYFxIkmidUiFxidA/KjjH9pAycqW+h980j7Fuz5qxRtO9pgB7MDFTdys1N7A5mcucRiDyEq4fusljItR1T/A==", - "dev": true, - "dependencies": { - "lodash._reinterpolate": "^3.0.0", - "lodash.templatesettings": "^4.0.0" - } - }, - "node_modules/lodash.templatesettings": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/lodash.templatesettings/-/lodash.templatesettings-4.2.0.tgz", - "integrity": "sha512-stgLz+i3Aa9mZgnjr/O+v9ruKZsPsndy7qPZOchbqk2cnTU1ZaldKK+v7m54WoKIyxiuMZTKT2H81F8BeAc3ZQ==", - "dev": true, - "dependencies": { - "lodash._reinterpolate": "^3.0.0" - } - }, - "node_modules/lodash.uniq": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz", - "integrity": "sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==" - }, - "node_modules/lodash.upperfirst": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/lodash.upperfirst/-/lodash.upperfirst-4.3.1.tgz", - "integrity": "sha512-sReKOYJIJf74dhJONhU4e0/shzi1trVbSWDOhKYE5XV2O+H7Sb2Dihwuc7xWxVl+DgFPyTqIN3zMfT9cq5iWDg==", - "dev": true - }, - "node_modules/log-symbols": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", - "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", - "dev": true, - "dependencies": { - "chalk": "^4.1.0", - "is-unicode-supported": "^0.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/log-update": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/log-update/-/log-update-4.0.0.tgz", - "integrity": "sha512-9fkkDevMefjg0mmzWFBW8YkFP91OrizzkW3diF7CpG+S2EYdy4+TVfGwz1zeF8x7hCx1ovSPTOE9Ngib74qqUg==", - "dev": true, - "dependencies": { - "ansi-escapes": "^4.3.0", - "cli-cursor": "^3.1.0", - "slice-ansi": "^4.0.0", - "wrap-ansi": "^6.2.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/log-update/node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/log-update/node_modules/slice-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", - "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.0.0", - "astral-regex": "^2.0.0", - "is-fullwidth-code-point": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/slice-ansi?sponsor=1" - } - }, - "node_modules/log-update/node_modules/wrap-ansi": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", - "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/logform": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/logform/-/logform-2.4.2.tgz", - "integrity": "sha512-W4c9himeAwXEdZ05dQNerhFz2XG80P9Oj0loPUMV23VC2it0orMHQhJm4hdnnor3rd1HsGf6a2lPwBM1zeXHGw==", - "dependencies": { - "@colors/colors": "1.5.0", - "fecha": "^4.2.0", - "ms": "^2.1.1", - "safe-stable-stringify": "^2.3.1", - "triple-beam": "^1.3.0" - } - }, - "node_modules/longest": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/longest/-/longest-2.0.1.tgz", - "integrity": "sha512-Ajzxb8CM6WAnFjgiloPsI3bF+WCxcvhdIG3KNA2KN962+tdBsHcuQ4k4qX/EcS/2CRkcc0iAkR956Nib6aXU/Q==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/loud-rejection": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/loud-rejection/-/loud-rejection-1.6.0.tgz", - "integrity": "sha512-RPNliZOFkqFumDhvYqOaNY4Uz9oJM2K9tC6JWsJJsNdhuONW4LQHRBpb0qf4pJApVffI5N39SwzWZJuEhfd7eQ==", - "dev": true, - "dependencies": { - "currently-unhandled": "^0.4.1", - "signal-exit": "^3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/lowercase-keys": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz", - "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/lru-cache": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", - "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", - "dev": true, - "dependencies": { - "yallist": "^3.0.2" - } - }, - "node_modules/madge": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/madge/-/madge-6.1.0.tgz", - "integrity": "sha512-irWhT5RpFOc6lkzGHKLihonCVgM0YtfNUh4IrFeW3EqHpnt/JHUG3z26j8PeJEktCGB4tmGOOOJi1Rl/ACWucQ==", - "dev": true, - "dependencies": { - "chalk": "^4.1.1", - "commander": "^7.2.0", - "commondir": "^1.0.1", - "debug": "^4.3.1", - "dependency-tree": "^9.0.0", - "detective-amd": "^4.0.1", - "detective-cjs": "^4.0.0", - "detective-es6": "^3.0.0", - "detective-less": "^1.0.2", - "detective-postcss": "^6.1.0", - "detective-sass": "^4.0.1", - "detective-scss": "^3.0.0", - "detective-stylus": "^2.0.1", - "detective-typescript": "^9.0.0", - "ora": "^5.4.1", - "pluralize": "^8.0.0", - "precinct": "^8.1.0", - "pretty-ms": "^7.0.1", - "rc": "^1.2.7", - "stream-to-array": "^2.3.0", - "ts-graphviz": "^1.5.0", - "walkdir": "^0.4.1" - }, - "bin": { - "madge": "bin/cli.js" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "type": "individual", - "url": "https://www.paypal.me/pahen" - }, - "peerDependencies": { - "typescript": "^3.9.5 || ^4.9.5 || ^5" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/madge/node_modules/commander": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", - "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", - "dev": true, - "engines": { - "node": ">= 10" - } - }, - "node_modules/make-dir": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", - "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", - "dev": true, - "dependencies": { - "semver": "^6.0.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/make-dir/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/make-error": { - "version": "1.3.6", - "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", - "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", - "dev": true - }, - "node_modules/makeerror": { - "version": "1.0.12", - "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.12.tgz", - "integrity": "sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==", - "dev": true, - "dependencies": { - "tmpl": "1.0.5" - } - }, - "node_modules/map-obj": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-4.3.0.tgz", - "integrity": "sha512-hdN1wVrZbb29eBGiGjJbeP8JbKjq1urkHJ/LIP/NY48MZ1QVXUsQBV1G1zvYFHn1XE06cwjBsOI2K3Ulnj1YXQ==", - "dev": true, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/match-json": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/match-json/-/match-json-1.3.5.tgz", - "integrity": "sha512-V5Jw1rIdjt37vfQRqvKtXW4dKbSTpvgwyEPKOBikY90xQ5Wr5yOmfpjcTm12d0Kqq+TfMqlXJkETf4yOF9JhUw==" - }, - "node_modules/md5": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/md5/-/md5-2.3.0.tgz", - "integrity": "sha512-T1GITYmFaKuO91vxyoQMFETst+O71VUPEU3ze5GNzDm0OWdP8v1ziTaAEPUr/3kLsY3Sftgz242A1SetQiDL7g==", - "dependencies": { - "charenc": "0.0.2", - "crypt": "0.0.2", - "is-buffer": "~1.1.6" - } - }, - "node_modules/media-typer": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", - "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/meow": { - "version": "8.1.2", - "resolved": "https://registry.npmjs.org/meow/-/meow-8.1.2.tgz", - "integrity": "sha512-r85E3NdZ+mpYk1C6RjPFEMSE+s1iZMuHtsHAqY0DT3jZczl0diWUZ8g6oU7h0M9cD2EL+PzaYghhCLzR0ZNn5Q==", - "dev": true, - "dependencies": { - "@types/minimist": "^1.2.0", - "camelcase-keys": "^6.2.2", - "decamelize-keys": "^1.1.0", - "hard-rejection": "^2.1.0", - "minimist-options": "4.1.0", - "normalize-package-data": "^3.0.0", - "read-pkg-up": "^7.0.1", - "redent": "^3.0.0", - "trim-newlines": "^3.0.0", - "type-fest": "^0.18.0", - "yargs-parser": "^20.2.3" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/meow/node_modules/type-fest": { - "version": "0.18.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.18.1.tgz", - "integrity": "sha512-OIAYXk8+ISY+qTOwkHtKqzAuxchoMiD9Udx+FSGQDuiRR+PJKJHc2NJAXlbhkGwTt/4/nKZxELY1w3ReWOL8mw==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/merge": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/merge/-/merge-2.1.1.tgz", - "integrity": "sha512-jz+Cfrg9GWOZbQAnDQ4hlVnQky+341Yk5ru8bZSe6sIDTCIg8n9i/u7hSQGSVOF3C7lH6mGtqjkiT9G4wFLL0w==", - "dev": true - }, - "node_modules/merge-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", - "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", - "dev": true - }, - "node_modules/merge2": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", - "dev": true, - "engines": { - "node": ">= 8" - } - }, - "node_modules/methods": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", - "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/micromatch": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", - "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", - "dev": true, - "dependencies": { - "braces": "^3.0.2", - "picomatch": "^2.3.1" - }, - "engines": { - "node": ">=8.6" - } - }, - "node_modules/mime": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-2.6.0.tgz", - "integrity": "sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==", - "dev": true, - "bin": { - "mime": "cli.js" - }, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/mime-db": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mime-types": { - "version": "2.1.35", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", - "dependencies": { - "mime-db": "1.52.0" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mimic-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/mimic-response": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", - "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/min-indent": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz", - "integrity": "sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/minimist": { - "version": "1.2.6", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz", - "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==" - }, - "node_modules/minimist-options": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/minimist-options/-/minimist-options-4.1.0.tgz", - "integrity": "sha512-Q4r8ghd80yhO/0j1O3B2BjweX3fiHg9cdOwjJd2J76Q135c+NDxGCqdYKQ1SKBuFfgWbAUzBfvYjPUEeNgqN1A==", - "dev": true, - "dependencies": { - "arrify": "^1.0.1", - "is-plain-obj": "^1.1.0", - "kind-of": "^6.0.3" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/minipass": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.2.tgz", - "integrity": "sha512-eL79dXrE1q9dBbDCLg7xfn/vl7MS4F1gvJAgjJrQli/jbQWdUttuVawphqpffoIYfRdq78LHx6GP4bU/EQ2ATA==", - "dev": true, - "engines": { - "node": ">=16 || 14 >=14.17" - } - }, - "node_modules/mocked-env": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/mocked-env/-/mocked-env-1.3.5.tgz", - "integrity": "sha512-GyYY6ynVOdEoRlaGpaq8UYwdWkvrsU2xRme9B+WPSuJcNjh17+3QIxSYU6zwee0SbehhV6f06VZ4ahjG+9zdrA==", - "dev": true, - "dependencies": { - "check-more-types": "2.24.0", - "debug": "4.3.2", - "lazy-ass": "1.6.0", - "ramda": "0.27.1" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/mocked-env/node_modules/debug": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", - "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", - "dev": true, - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/modclean": { - "version": "3.0.0-beta.1", - "resolved": "https://registry.npmjs.org/modclean/-/modclean-3.0.0-beta.1.tgz", - "integrity": "sha512-NyJpuqXMUI190sZePU+dBcwlGaqhfFC+UL5WyNSxmNLOHATg9cVSgRpbY+mUbwUj7t5trb4vYscgXArKevYsdA==", - "dependencies": { - "await-handler": "^1.1.0", - "chalk": "^2.4.1", - "commander": "^2.9.0", - "empty-dir": "^1.0.0", - "glob": "^7.1.2", - "lodash.uniq": "^4.5.0", - "modclean-patterns-default": "latest", - "ora": "^2.1.0", - "progress": "^2.0.0", - "rimraf": "^2.5.4", - "subdirs": "^1.0.1" - }, - "bin": { - "modclean": "bin/modclean.js" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/modclean-patterns-default": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/modclean-patterns-default/-/modclean-patterns-default-1.1.2.tgz", - "integrity": "sha512-h2+ES3SKl+JOtfptJjwJz5fdogFI0byYssw3lXoESNkOcXCnjCvvW6IbMagAKFmfWOx+n9esyomxWP1w4edZjg==" - }, - "node_modules/modclean/node_modules/ansi-regex": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.1.tgz", - "integrity": "sha512-+O9Jct8wf++lXxxFc4hc8LsjaSq0HFzzL7cVsw8pRDIPdjKD2mT4ytDZlLuSBZ4cLKZFXIrMGO7DbQCtMJJMKw==", - "engines": { - "node": ">=4" - } - }, - "node_modules/modclean/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/modclean/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/modclean/node_modules/cli-cursor": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz", - "integrity": "sha512-8lgKz8LmCRYZZQDpRyT2m5rKJ08TnU4tR9FFFW2rxpxR1FzWi4PQ/NfyODchAatHaUgnSPVcx/R5w6NuTBzFiw==", - "dependencies": { - "restore-cursor": "^2.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/modclean/node_modules/cli-spinners": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-1.3.1.tgz", - "integrity": "sha512-1QL4544moEsDVH9T/l6Cemov/37iv1RtoKf7NJ04A60+4MREXNfx/QvavbH6QoGdsD4N4Mwy49cmaINR/o2mdg==", - "engines": { - "node": ">=4" - } - }, - "node_modules/modclean/node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/modclean/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" - }, - "node_modules/modclean/node_modules/commander": { - "version": "2.20.3", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==" - }, - "node_modules/modclean/node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/modclean/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "engines": { - "node": ">=4" - } - }, - "node_modules/modclean/node_modules/log-symbols": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-2.2.0.tgz", - "integrity": "sha512-VeIAFslyIerEJLXHziedo2basKbMKtTw3vfn5IzG0XTjhAVEJyNHnL2p7vc+wBDSdQuUpNw3M2u6xb9QsAY5Eg==", - "dependencies": { - "chalk": "^2.0.1" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/modclean/node_modules/mimic-fn": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz", - "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==", - "engines": { - "node": ">=4" - } - }, - "node_modules/modclean/node_modules/onetime": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz", - "integrity": "sha512-oyyPpiMaKARvvcgip+JV+7zci5L8D1W9RZIz2l1o08AM3pfspitVWnPt3mzHcBPp12oYMTy0pqrFs/C+m3EwsQ==", - "dependencies": { - "mimic-fn": "^1.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/modclean/node_modules/ora": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/ora/-/ora-2.1.0.tgz", - "integrity": "sha512-hNNlAd3gfv/iPmsNxYoAPLvxg7HuPozww7fFonMZvL84tP6Ox5igfk5j/+a9rtJJwqMgKK+JgWsAQik5o0HTLA==", - "dependencies": { - "chalk": "^2.3.1", - "cli-cursor": "^2.1.0", - "cli-spinners": "^1.1.0", - "log-symbols": "^2.2.0", - "strip-ansi": "^4.0.0", - "wcwidth": "^1.0.1" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/modclean/node_modules/restore-cursor": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz", - "integrity": "sha512-6IzJLuGi4+R14vwagDHX+JrXmPVtPpn4mffDJ1UdR7/Edm87fl6yi8mMBIVvFtJaNTUvjughmW4hwLhRG7gC1Q==", - "dependencies": { - "onetime": "^2.0.0", - "signal-exit": "^3.0.2" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/modclean/node_modules/rimraf": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", - "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - } - }, - "node_modules/modclean/node_modules/strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha512-4XaJ2zQdCzROZDivEVIDPkcQn8LMFSa8kj8Gxb/Lnwzv9A8VctNZ+lfivC/sV3ivW8ElJTERXZoPBRrZKkNKow==", - "dependencies": { - "ansi-regex": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/modclean/node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/modify-values": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/modify-values/-/modify-values-1.0.1.tgz", - "integrity": "sha512-xV2bxeN6F7oYjZWTe/YPAy6MN2M+sL4u/Rlm2AHCIVGfo2p1yGmBHQ6vHehl4bRTZBdHu3TSkWdYgkwpYzAGSw==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/module-definition": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/module-definition/-/module-definition-3.4.0.tgz", - "integrity": "sha512-XxJ88R1v458pifaSkPNLUTdSPNVGMP2SXVncVmApGO+gAfrLANiYe6JofymCzVceGOMwQE2xogxBSc8uB7XegA==", - "dev": true, - "dependencies": { - "ast-module-types": "^3.0.0", - "node-source-walk": "^4.0.0" - }, - "bin": { - "module-definition": "bin/cli.js" - }, - "engines": { - "node": ">=6.0" - } - }, - "node_modules/module-lookup-amd": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/module-lookup-amd/-/module-lookup-amd-7.0.1.tgz", - "integrity": "sha512-w9mCNlj0S8qviuHzpakaLVc+/7q50jl9a/kmJ/n8bmXQZgDPkQHnPBb8MUOYh3WpAYkXuNc2c+khsozhIp/amQ==", - "dev": true, - "dependencies": { - "commander": "^2.8.1", - "debug": "^4.1.0", - "glob": "^7.1.6", - "requirejs": "^2.3.5", - "requirejs-config-file": "^4.0.0" - }, - "bin": { - "lookup-amd": "bin/cli.js" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/module-lookup-amd/node_modules/commander": { - "version": "2.20.3", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", - "dev": true - }, - "node_modules/module-lookup-amd/node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "dev": true, - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/moment": { - "version": "2.29.4", - "resolved": "https://registry.npmjs.org/moment/-/moment-2.29.4.tgz", - "integrity": "sha512-5LC9SOxjSc2HF6vO2CyuTDNivEdoz2IvyJJGj6X8DJ0eFyfszE0QiEd+iXmBvUP3WHxSjFH/vIsA0EN00cgr8w==", - "engines": { - "node": "*" - } - }, - "node_modules/moment-timezone": { - "version": "0.5.43", - "resolved": "https://registry.npmjs.org/moment-timezone/-/moment-timezone-0.5.43.tgz", - "integrity": "sha512-72j3aNyuIsDxdF1i7CEgV2FfxM1r6aaqJyLB2vwb33mXYyoyLly+F1zbWqhA3/bVIoJ4szlUoMbUnVdid32NUQ==", - "dependencies": { - "moment": "^2.29.4" - }, - "engines": { - "node": "*" - } - }, - "node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - }, - "node_modules/mute-stream": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz", - "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==", - "dev": true - }, - "node_modules/nanoid": { - "version": "3.3.4", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.4.tgz", - "integrity": "sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==", - "dev": true, - "bin": { - "nanoid": "bin/nanoid.cjs" - }, - "engines": { - "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" - } - }, - "node_modules/natural-compare": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", - "dev": true - }, - "node_modules/natural-compare-lite": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare-lite/-/natural-compare-lite-1.4.0.tgz", - "integrity": "sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==", - "dev": true - }, - "node_modules/negotiator": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", - "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/neo-async": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", - "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==" - }, - "node_modules/node-cache": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/node-cache/-/node-cache-5.1.2.tgz", - "integrity": "sha512-t1QzWwnk4sjLWaQAS8CHgOJ+RAfmHpxFWmc36IWTiWHQfs0w5JDMBS1b1ZxQteo0vVVuWJvIUKHDkkeK7vIGCg==", - "dependencies": { - "clone": "2.x" - }, - "engines": { - "node": ">= 8.0.0" - } - }, - "node_modules/node-fetch": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.9.tgz", - "integrity": "sha512-DJm/CJkZkRjKKj4Zi4BsKVZh3ValV5IR5s7LVZnW+6YMh0W1BfNA8XSs6DLMGYlId5F3KnA70uu2qepcR08Qqg==", - "dependencies": { - "whatwg-url": "^5.0.0" - }, - "engines": { - "node": "4.x || >=6.0.0" - }, - "peerDependencies": { - "encoding": "^0.1.0" - }, - "peerDependenciesMeta": { - "encoding": { - "optional": true - } - } - }, - "node_modules/node-fetch/node_modules/tr46": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", - "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" - }, - "node_modules/node-fetch/node_modules/webidl-conversions": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", - "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" - }, - "node_modules/node-fetch/node_modules/whatwg-url": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", - "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", - "dependencies": { - "tr46": "~0.0.3", - "webidl-conversions": "^3.0.0" - } - }, - "node_modules/node-gyp-build": { - "version": "3.9.0", - "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-3.9.0.tgz", - "integrity": "sha512-zLcTg6P4AbcHPq465ZMFNXx7XpKKJh+7kkN699NiQWisR2uWYOWNWqRHAmbnmKiL4e9aLSlmy5U7rEMUXV59+A==", - "bin": { - "node-gyp-build": "bin.js", - "node-gyp-build-optional": "optional.js", - "node-gyp-build-test": "build-test.js" - } - }, - "node_modules/node-int64": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", - "integrity": "sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==", - "dev": true - }, - "node_modules/node-notifier": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/node-notifier/-/node-notifier-10.0.1.tgz", - "integrity": "sha512-YX7TSyDukOZ0g+gmzjB6abKu+hTGvO8+8+gIFDsRCU2t8fLV/P2unmt+LGFaIa4y64aX98Qksa97rgz4vMNeLQ==", - "dev": true, - "dependencies": { - "growly": "^1.3.0", - "is-wsl": "^2.2.0", - "semver": "^7.3.5", - "shellwords": "^0.1.1", - "uuid": "^8.3.2", - "which": "^2.0.2" - } - }, - "node_modules/node-notifier/node_modules/uuid": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", - "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", - "dev": true, - "bin": { - "uuid": "dist/bin/uuid" - } - }, - "node_modules/node-releases": { - "version": "2.0.12", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.12.tgz", - "integrity": "sha512-QzsYKWhXTWx8h1kIvqfnC++o0pEmpRQA/aenALsL2F4pqNVr7YzcdMlDij5WBnwftRbJCNJL/O7zdKaxKPHqgQ==", - "dev": true - }, - "node_modules/node-source-walk": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/node-source-walk/-/node-source-walk-4.3.0.tgz", - "integrity": "sha512-8Q1hXew6ETzqKRAs3jjLioSxNfT1cx74ooiF8RlAONwVMcfq+UdzLC2eB5qcPldUxaE5w3ytLkrmV1TGddhZTA==", - "dev": true, - "dependencies": { - "@babel/parser": "^7.0.0" - }, - "engines": { - "node": ">=6.0" - } - }, - "node_modules/normalize-package-data": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-3.0.3.tgz", - "integrity": "sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA==", - "dev": true, - "dependencies": { - "hosted-git-info": "^4.0.1", - "is-core-module": "^2.5.0", - "semver": "^7.3.4", - "validate-npm-package-license": "^3.0.1" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/normalize-url": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-2.0.1.tgz", - "integrity": "sha512-D6MUW4K/VzoJ4rJ01JFKxDrtY1v9wrgzCX5f2qj/lzH1m/lW6MhUZFKerVsnyjOhOsYzI9Kqqak+10l4LvLpMw==", - "dev": true, - "dependencies": { - "prepend-http": "^2.0.0", - "query-string": "^5.0.1", - "sort-keys": "^2.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/npm-run-path": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", - "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", - "dev": true, - "dependencies": { - "path-key": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/number-is-nan": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", - "integrity": "sha512-4jbtZXNAsfZbAHiiqjLPBiCl16dES1zI4Hpzzxw61Tk+loF+sBDBKx1ICKKKwIqQ7M0mFn1TmkN7euSncWgHiQ==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/oauth-1.0a": { - "version": "2.2.6", - "resolved": "https://registry.npmjs.org/oauth-1.0a/-/oauth-1.0a-2.2.6.tgz", - "integrity": "sha512-6bkxv3N4Gu5lty4viIcIAnq5GbxECviMBeKR3WX/q87SPQ8E8aursPZUtsXDnxCs787af09WPRBLqYrf/lwoYQ==" - }, - "node_modules/object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-hash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-3.0.0.tgz", - "integrity": "sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==", - "engines": { - "node": ">= 6" - } - }, - "node_modules/object-inspect": { - "version": "1.12.2", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.2.tgz", - "integrity": "sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ==", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/object-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", - "dev": true, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/object.assign": { - "version": "4.1.4", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.4.tgz", - "integrity": "sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "has-symbols": "^1.0.3", - "object-keys": "^1.1.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/object.entries": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.6.tgz", - "integrity": "sha512-leTPzo4Zvg3pmbQ3rDK69Rl8GQvIqMWubrkxONG9/ojtFE2rD9fjMKfSI5BxW3osRH1m6VdzmqK8oAY9aT4x5w==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/object.values": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.6.tgz", - "integrity": "sha512-FVVTkD1vENCsAcwNs9k6jea2uHC/X0+JcjG8YA60FN5CMaJmG95wT9jek/xX9nornqGRrBkKtzuAu2wuHpKqvw==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/on-finished": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", - "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", - "dependencies": { - "ee-first": "1.1.1" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", - "dependencies": { - "wrappy": "1" - } - }, - "node_modules/one-time": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/one-time/-/one-time-1.0.0.tgz", - "integrity": "sha512-5DXOiRKwuSEcQ/l0kGCF6Q3jcADFv5tSmRaJck/OqkVFcOzutB134KRSfF0xDrL39MNnqxbHBbUUcjZIhTgb2g==", - "dependencies": { - "fn.name": "1.x.x" - } - }, - "node_modules/onetime": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", - "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", - "dev": true, - "dependencies": { - "mimic-fn": "^2.1.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/only": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/only/-/only-0.0.2.tgz", - "integrity": "sha512-Fvw+Jemq5fjjyWz6CpKx6w9s7xxqo3+JCyM0WXWeCSOboZ8ABkyvP8ID4CZuChA/wxSx+XSJmdOm8rGVyJ1hdQ==" - }, - "node_modules/openapi-types": { - "version": "12.1.3", - "resolved": "https://registry.npmjs.org/openapi-types/-/openapi-types-12.1.3.tgz", - "integrity": "sha512-N4YtSYJqghVu4iek2ZUvcN/0aqH1kRDuNqzcycDxhOUpg7GdvLa2F3DgS6yBNhInhv2r/6I0Flkn7CqL8+nIcw==", - "dev": true, - "peer": true - }, - "node_modules/optionator": { - "version": "0.9.3", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.3.tgz", - "integrity": "sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==", - "dev": true, - "dependencies": { - "@aashutoshrathi/word-wrap": "^1.2.3", - "deep-is": "^0.1.3", - "fast-levenshtein": "^2.0.6", - "levn": "^0.4.1", - "prelude-ls": "^1.2.1", - "type-check": "^0.4.0" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/ora": { - "version": "5.4.1", - "resolved": "https://registry.npmjs.org/ora/-/ora-5.4.1.tgz", - "integrity": "sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==", - "dev": true, - "dependencies": { - "bl": "^4.1.0", - "chalk": "^4.1.0", - "cli-cursor": "^3.1.0", - "cli-spinners": "^2.5.0", - "is-interactive": "^1.0.0", - "is-unicode-supported": "^0.1.0", - "log-symbols": "^4.1.0", - "strip-ansi": "^6.0.0", - "wcwidth": "^1.0.1" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/os-tmpdir": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", - "integrity": "sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/p-cancelable": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-0.4.1.tgz", - "integrity": "sha512-HNa1A8LvB1kie7cERyy21VNeHb2CWJJYqyyC2o3klWFfMGlFmWv2Z7sFgZH8ZiaYL95ydToKTFVXgMV/Os0bBQ==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/p-finally": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", - "integrity": "sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/p-is-promise": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/p-is-promise/-/p-is-promise-1.1.0.tgz", - "integrity": "sha512-zL7VE4JVS2IFSkR2GQKDSPEVxkoH43/p7oEnwpdCndKYJO0HVeRB7fA8TJwuLOTBREtK0ea8eHaxdwcpob5dmg==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "dependencies": { - "yocto-queue": "^0.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-locate": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", - "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", - "dev": true, - "dependencies": { - "p-limit": "^3.0.2" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-map": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", - "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", - "dev": true, - "dependencies": { - "aggregate-error": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-timeout": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-2.0.1.tgz", - "integrity": "sha512-88em58dDVB/KzPEx1X0N3LwFfYZPyDc4B6eF38M1rk9VTZMbxXXgjugz8mmwpS9Ox4BDZ+t6t3QP5+/gazweIA==", - "dev": true, - "dependencies": { - "p-finally": "^1.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", - "engines": { - "node": ">=6" - } - }, - "node_modules/p-wait-for": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/p-wait-for/-/p-wait-for-3.2.0.tgz", - "integrity": "sha512-wpgERjNkLrBiFmkMEjuZJEWKKDrNfHCKA1OhyN1wg1FrLkULbviEy6py1AyJUgZ72YWFbZ38FIpnqvVqAlDUwA==", - "dev": true, - "dependencies": { - "p-timeout": "^3.0.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-wait-for/node_modules/p-timeout": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-3.2.0.tgz", - "integrity": "sha512-rhIwUycgwwKcP9yTOOFK/AKsAopjjCakVqLHePO3CC6Mir1Z99xT+R63jZxAT5lFZLa2inS5h+ZS2GvR99/FBg==", - "dev": true, - "dependencies": { - "p-finally": "^1.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/parent-module": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", - "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", - "dev": true, - "dependencies": { - "callsites": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/parse-github-repo-url": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/parse-github-repo-url/-/parse-github-repo-url-1.4.1.tgz", - "integrity": "sha512-bSWyzBKqcSL4RrncTpGsEKoJ7H8a4L3++ifTAbTFeMHyq2wRV+42DGmQcHIrJIvdcacjIOxEuKH/w4tthF17gg==", - "dev": true - }, - "node_modules/parse-json": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", - "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", - "dependencies": { - "@babel/code-frame": "^7.0.0", - "error-ex": "^1.3.1", - "json-parse-even-better-errors": "^2.3.0", - "lines-and-columns": "^1.1.6" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/parse-ms": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/parse-ms/-/parse-ms-2.1.0.tgz", - "integrity": "sha512-kHt7kzLoS9VBZfUsiKjv43mr91ea+U05EyKkEtqp7vNbHxmaVuEqN7XxeEVnGrMtYOAxGrDElSi96K7EgO1zCA==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/parse-passwd": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/parse-passwd/-/parse-passwd-1.0.0.tgz", - "integrity": "sha512-1Y1A//QUXEZK7YKz+rD9WydcE1+EuPr6ZBgKecAB8tmoW6UFv0NREVJe1p+jRxtThkcbbKkfwIbWJe/IeE6m2Q==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/parse-static-imports": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/parse-static-imports/-/parse-static-imports-1.1.0.tgz", - "integrity": "sha512-HlxrZcISCblEV0lzXmAHheH/8qEkKgmqkdxyHTPbSqsTUV8GzqmN1L+SSti+VbNPfbBO3bYLPHDiUs2avbAdbA==" - }, - "node_modules/parseurl": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", - "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "engines": { - "node": ">=8" - } - }, - "node_modules/path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/path-parse": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" - }, - "node_modules/path-scurry": { - "version": "1.10.1", - "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.10.1.tgz", - "integrity": "sha512-MkhCqzzBEpPvxxQ71Md0b1Kk51W01lrYvlMzSUaIzNsODdd7mqhiimSZlr+VegAz5Z6Vzt9Xg2ttE//XBhH3EQ==", - "dev": true, - "dependencies": { - "lru-cache": "^9.1.1 || ^10.0.0", - "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/path-scurry/node_modules/lru-cache": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.0.0.tgz", - "integrity": "sha512-svTf/fzsKHffP42sujkO/Rjs37BCIsQVRCeNYIm9WN8rgT7ffoUnRtZCqU+6BqcSBdv8gwJeTz8knJpgACeQMw==", - "dev": true, - "engines": { - "node": "14 || >=16.14" - } - }, - "node_modules/path-to-regexp": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-6.2.1.tgz", - "integrity": "sha512-JLyh7xT1kizaEvcaXOQwOc2/Yhw6KZOvPf1S8401UyLk86CU79LN3vl7ztXGm/pZ+YjoyAJ4rxmHwbkBXJX+yw==" - }, - "node_modules/path-type": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", - "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/picocolors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", - "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", - "dev": true - }, - "node_modules/picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "dev": true, - "engines": { - "node": ">=8.6" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/pidtree": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/pidtree/-/pidtree-0.6.0.tgz", - "integrity": "sha512-eG2dWTVw5bzqGRztnHExczNxt5VGsE6OwTeCG3fdUf9KBsZzO3R5OIIIzWR+iZA0NtZ+RDVdaoE2dK1cn6jH4g==", - "dev": true, - "bin": { - "pidtree": "bin/pidtree.js" - }, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/pinkie": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", - "integrity": "sha512-MnUuEycAemtSaeFSjXKW/aroV7akBbY+Sv+RkyqFjgAe73F+MR0TBWKBRDkmfWq/HiFmdavfZ1G7h4SPZXaCSg==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/pinkie-promise": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", - "integrity": "sha512-0Gni6D4UcLTbv9c57DfxDGdr41XfgUjqWZu492f0cIGr16zDU06BWP/RAEvOuo7CQ0CNjHaLlM59YJJFm3NWlw==", - "dev": true, - "dependencies": { - "pinkie": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/pirates": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.5.tgz", - "integrity": "sha512-8V9+HQPupnaXMA23c5hvl69zXvTwTzyAYasnkb0Tts4XvO4CliqONMOnvlq26rkhLC3nWDFBJf73LU1e1VZLaQ==", - "dev": true, - "engines": { - "node": ">= 6" - } - }, - "node_modules/pkg-dir": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", - "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", - "dev": true, - "dependencies": { - "find-up": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/pkg-dir/node_modules/find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dev": true, - "dependencies": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/pkg-dir/node_modules/locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dev": true, - "dependencies": { - "p-locate": "^4.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/pkg-dir/node_modules/p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dev": true, - "dependencies": { - "p-try": "^2.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/pkg-dir/node_modules/p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dev": true, - "dependencies": { - "p-limit": "^2.2.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/pluralize": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/pluralize/-/pluralize-8.0.0.tgz", - "integrity": "sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/postcss": { - "version": "8.4.21", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.21.tgz", - "integrity": "sha512-tP7u/Sn/dVxK2NnruI4H9BG+x+Wxz6oeZ1cJ8P6G/PZY0IKk4k/63TDsQf2kQq3+qoJeLm2kIBUNlZe3zgb4Zg==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/postcss" - } - ], - "dependencies": { - "nanoid": "^3.3.4", - "picocolors": "^1.0.0", - "source-map-js": "^1.0.2" - }, - "engines": { - "node": "^10 || ^12 || >=14" - } - }, - "node_modules/postcss-values-parser": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/postcss-values-parser/-/postcss-values-parser-6.0.2.tgz", - "integrity": "sha512-YLJpK0N1brcNJrs9WatuJFtHaV9q5aAOj+S4DI5S7jgHlRfm0PIbDCAFRYMQD5SHq7Fy6xsDhyutgS0QOAs0qw==", - "dev": true, - "dependencies": { - "color-name": "^1.1.4", - "is-url-superb": "^4.0.0", - "quote-unquote": "^1.0.0" - }, - "engines": { - "node": ">=10" - }, - "peerDependencies": { - "postcss": "^8.2.9" - } - }, - "node_modules/pprof-format": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/pprof-format/-/pprof-format-2.0.7.tgz", - "integrity": "sha512-1qWaGAzwMpaXJP9opRa23nPnt2Egi7RMNoNBptEE/XwHbcn4fC2b/4U4bKc5arkGkIh2ZabpF2bEb+c5GNHEKA==" - }, - "node_modules/precinct": { - "version": "8.3.1", - "resolved": "https://registry.npmjs.org/precinct/-/precinct-8.3.1.tgz", - "integrity": "sha512-pVppfMWLp2wF68rwHqBIpPBYY8Kd12lDhk8LVQzOwqllifVR15qNFyod43YLyFpurKRZQKnE7E4pofAagDOm2Q==", - "dev": true, - "dependencies": { - "commander": "^2.20.3", - "debug": "^4.3.3", - "detective-amd": "^3.1.0", - "detective-cjs": "^3.1.1", - "detective-es6": "^2.2.1", - "detective-less": "^1.0.2", - "detective-postcss": "^4.0.0", - "detective-sass": "^3.0.1", - "detective-scss": "^2.0.1", - "detective-stylus": "^1.0.0", - "detective-typescript": "^7.0.0", - "module-definition": "^3.3.1", - "node-source-walk": "^4.2.0" - }, - "bin": { - "precinct": "bin/cli.js" - }, - "engines": { - "node": "^10.13 || ^12 || >=14" - } - }, - "node_modules/precinct/node_modules/@typescript-eslint/types": { - "version": "4.33.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-4.33.0.tgz", - "integrity": "sha512-zKp7CjQzLQImXEpLt2BUw1tvOMPfNoTAfb8l51evhYbOEEzdWyQNmHWWGPR6hwKJDAi+1VXSBmnhL9kyVTTOuQ==", - "dev": true, - "engines": { - "node": "^8.10.0 || ^10.13.0 || >=11.10.1" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/precinct/node_modules/@typescript-eslint/typescript-estree": { - "version": "4.33.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-4.33.0.tgz", - "integrity": "sha512-rkWRY1MPFzjwnEVHsxGemDzqqddw2QbTJlICPD9p9I9LfsO8fdmfQPOX3uKfUaGRDFJbfrtm/sXhVXN4E+bzCA==", - "dev": true, - "dependencies": { - "@typescript-eslint/types": "4.33.0", - "@typescript-eslint/visitor-keys": "4.33.0", - "debug": "^4.3.1", - "globby": "^11.0.3", - "is-glob": "^4.0.1", - "semver": "^7.3.5", - "tsutils": "^3.21.0" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/precinct/node_modules/@typescript-eslint/visitor-keys": { - "version": "4.33.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-4.33.0.tgz", - "integrity": "sha512-uqi/2aSz9g2ftcHWf8uLPJA70rUv6yuMW5Bohw+bwcuzaxQIHaKFZCKGoGXIrc9vkTJ3+0txM73K0Hq3d5wgIg==", - "dev": true, - "dependencies": { - "@typescript-eslint/types": "4.33.0", - "eslint-visitor-keys": "^2.0.0" - }, - "engines": { - "node": "^8.10.0 || ^10.13.0 || >=11.10.1" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/precinct/node_modules/commander": { - "version": "2.20.3", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", - "dev": true - }, - "node_modules/precinct/node_modules/detective-amd": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/detective-amd/-/detective-amd-3.1.2.tgz", - "integrity": "sha512-jffU26dyqJ37JHR/o44La6CxtrDf3Rt9tvd2IbImJYxWKTMdBjctp37qoZ6ZcY80RHg+kzWz4bXn39e4P7cctQ==", - "dev": true, - "dependencies": { - "ast-module-types": "^3.0.0", - "escodegen": "^2.0.0", - "get-amd-module-type": "^3.0.0", - "node-source-walk": "^4.2.0" - }, - "bin": { - "detective-amd": "bin/cli.js" - }, - "engines": { - "node": ">=6.0" - } - }, - "node_modules/precinct/node_modules/detective-cjs": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/detective-cjs/-/detective-cjs-3.1.3.tgz", - "integrity": "sha512-ljs7P0Yj9MK64B7G0eNl0ThWSYjhAaSYy+fQcpzaKalYl/UoQBOzOeLCSFEY1qEBhziZ3w7l46KG/nH+s+L7BQ==", - "dev": true, - "dependencies": { - "ast-module-types": "^3.0.0", - "node-source-walk": "^4.0.0" - }, - "engines": { - "node": ">=6.0" - } - }, - "node_modules/precinct/node_modules/detective-es6": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/detective-es6/-/detective-es6-2.2.2.tgz", - "integrity": "sha512-eZUKCUsbHm8xoeoCM0z6JFwvDfJ5Ww5HANo+jPR7AzkFpW9Mun3t/TqIF2jjeWa2TFbAiGaWESykf2OQp3oeMw==", - "dev": true, - "dependencies": { - "node-source-walk": "^4.0.0" - }, - "engines": { - "node": ">=6.0" - } - }, - "node_modules/precinct/node_modules/detective-postcss": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/detective-postcss/-/detective-postcss-4.0.0.tgz", - "integrity": "sha512-Fwc/g9VcrowODIAeKRWZfVA/EufxYL7XfuqJQFroBKGikKX83d2G7NFw6kDlSYGG3LNQIyVa+eWv1mqre+v4+A==", - "dev": true, - "dependencies": { - "debug": "^4.1.1", - "is-url": "^1.2.4", - "postcss": "^8.1.7", - "postcss-values-parser": "^2.0.1" - }, - "engines": { - "node": "^10 || ^12 || >=14" - } - }, - "node_modules/precinct/node_modules/detective-sass": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/detective-sass/-/detective-sass-3.0.2.tgz", - "integrity": "sha512-DNVYbaSlmti/eztFGSfBw4nZvwsTaVXEQ4NsT/uFckxhJrNRFUh24d76KzoCC3aarvpZP9m8sC2L1XbLej4F7g==", - "dev": true, - "dependencies": { - "gonzales-pe": "^4.3.0", - "node-source-walk": "^4.0.0" - }, - "engines": { - "node": ">=6.0" - } - }, - "node_modules/precinct/node_modules/detective-scss": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/detective-scss/-/detective-scss-2.0.2.tgz", - "integrity": "sha512-hDWnWh/l0tht/7JQltumpVea/inmkBaanJUcXRB9kEEXVwVUMuZd6z7eusQ6GcBFrfifu3pX/XPyD7StjbAiBg==", - "dev": true, - "dependencies": { - "gonzales-pe": "^4.3.0", - "node-source-walk": "^4.0.0" - }, - "engines": { - "node": ">=6.0" - } - }, - "node_modules/precinct/node_modules/detective-stylus": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/detective-stylus/-/detective-stylus-1.0.3.tgz", - "integrity": "sha512-4/bfIU5kqjwugymoxLXXLltzQNeQfxGoLm2eIaqtnkWxqbhap9puDVpJPVDx96hnptdERzS5Cy6p9N8/08A69Q==", - "dev": true - }, - "node_modules/precinct/node_modules/detective-typescript": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/detective-typescript/-/detective-typescript-7.0.2.tgz", - "integrity": "sha512-unqovnhxzvkCz3m1/W4QW4qGsvXCU06aU2BAm8tkza+xLnp9SOFnob2QsTxUv5PdnQKfDvWcv9YeOeFckWejwA==", - "dev": true, - "dependencies": { - "@typescript-eslint/typescript-estree": "^4.33.0", - "ast-module-types": "^2.7.1", - "node-source-walk": "^4.2.0", - "typescript": "^3.9.10" - }, - "engines": { - "node": "^10.13 || >=12.0.0" - } - }, - "node_modules/precinct/node_modules/detective-typescript/node_modules/ast-module-types": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/ast-module-types/-/ast-module-types-2.7.1.tgz", - "integrity": "sha512-Rnnx/4Dus6fn7fTqdeLEAn5vUll5w7/vts0RN608yFa6si/rDOUonlIIiwugHBFWjylHjxm9owoSZn71KwG4gw==", - "dev": true - }, - "node_modules/precinct/node_modules/eslint-visitor-keys": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", - "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", - "dev": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/precinct/node_modules/get-amd-module-type": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/get-amd-module-type/-/get-amd-module-type-3.0.2.tgz", - "integrity": "sha512-PcuKwB8ouJnKuAPn6Hk3UtdfKoUV3zXRqVEvj8XGIXqjWfgd1j7QGdXy5Z9OdQfzVt1Sk29HVe/P+X74ccOuqw==", - "dev": true, - "dependencies": { - "ast-module-types": "^3.0.0", - "node-source-walk": "^4.2.2" - }, - "engines": { - "node": ">=6.0" - } - }, - "node_modules/precinct/node_modules/postcss-values-parser": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/postcss-values-parser/-/postcss-values-parser-2.0.1.tgz", - "integrity": "sha512-2tLuBsA6P4rYTNKCXYG/71C7j1pU6pK503suYOmn4xYrQIzW+opD+7FAFNuGSdZC/3Qfy334QbeMu7MEb8gOxg==", - "dev": true, - "dependencies": { - "flatten": "^1.0.2", - "indexes-of": "^1.0.1", - "uniq": "^1.0.1" - }, - "engines": { - "node": ">=6.14.4" - } - }, - "node_modules/precinct/node_modules/typescript": { - "version": "3.9.10", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.9.10.tgz", - "integrity": "sha512-w6fIxVE/H1PkLKcCPsFqKE7Kv7QUwhU8qQY2MueZXWx5cPZdwFupLgKK3vntcK98BtNHZtAF4LA/yl2a7k8R6Q==", - "dev": true, - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - }, - "engines": { - "node": ">=4.2.0" - } - }, - "node_modules/prelude-ls": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", - "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", - "dev": true, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/prepend-http": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz", - "integrity": "sha512-ravE6m9Atw9Z/jjttRUZ+clIXogdghyZAuWJ3qEzjT+jI/dL1ifAqhZeC5VHzQp1MSt1+jxKkFNemj/iO7tVUA==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/prettier": { - "version": "2.8.8", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.8.tgz", - "integrity": "sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==", - "dev": true, - "bin": { - "prettier": "bin-prettier.js" - }, - "engines": { - "node": ">=10.13.0" - }, - "funding": { - "url": "https://github.com/prettier/prettier?sponsor=1" - } - }, - "node_modules/pretty-bytes": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-5.6.0.tgz", - "integrity": "sha512-FFw039TmrBqFK8ma/7OL3sDz/VytdtJr044/QUJtH0wK9lb9jLq9tJyIxUwtQJHwar2BqtiA4iCWSwo9JLkzFg==", - "dev": true, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/pretty-format": { - "version": "29.6.0", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.6.0.tgz", - "integrity": "sha512-XH+D4n7Ey0iSR6PdAnBs99cWMZdGsdKrR33iUHQNr79w1szKTCIZDVdXuccAsHVwDBp0XeWPfNEoaxP9EZgRmQ==", - "dev": true, - "dependencies": { - "@jest/schemas": "^29.6.0", - "ansi-styles": "^5.0.0", - "react-is": "^18.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/pretty-format/node_modules/ansi-styles": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", - "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/pretty-format/node_modules/react-is": { - "version": "18.2.0", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", - "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==", - "dev": true - }, - "node_modules/pretty-ms": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/pretty-ms/-/pretty-ms-7.0.1.tgz", - "integrity": "sha512-973driJZvxiGOQ5ONsFhOF/DtzPMOMtgC11kCpUrPGMTgqp2q/1gwzCquocrN33is0VZ5GFHXZYMM9l6h67v2Q==", - "dev": true, - "dependencies": { - "parse-ms": "^2.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/process-nextick-args": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", - "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", - "dev": true - }, - "node_modules/progress": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", - "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/prom-client": { - "version": "14.2.0", - "resolved": "https://registry.npmjs.org/prom-client/-/prom-client-14.2.0.tgz", - "integrity": "sha512-sF308EhTenb/pDRPakm+WgiN+VdM/T1RaHj1x+MvAuT8UiQP8JmOEbxVqtkbfR4LrvOg5n7ic01kRBDGXjYikA==", - "dependencies": { - "tdigest": "^0.1.1" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/prompts": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", - "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==", - "dev": true, - "dependencies": { - "kleur": "^3.0.3", - "sisteransi": "^1.0.5" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/proxy-from-env": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", - "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==" - }, - "node_modules/pump": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", - "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", - "dependencies": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - }, - "node_modules/punycode": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", - "engines": { - "node": ">=6" - } - }, - "node_modules/pure-rand": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/pure-rand/-/pure-rand-6.0.2.tgz", - "integrity": "sha512-6Yg0ekpKICSjPswYOuC5sku/TSWaRYlA0qsXqJgM/d/4pLPHPuTxK7Nbf7jFKzAeedUhR8C7K9Uv63FBsSo8xQ==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://github.com/sponsors/dubzzz" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/fast-check" - } - ] - }, - "node_modules/q": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz", - "integrity": "sha512-kV/CThkXo6xyFEZUugw/+pIOywXcDbFYgSct5cT3gqlbkBE1SJdwy6UQoZvodiWF/ckQLZyDE/Bu1M6gVu5lVw==", - "dev": true, - "engines": { - "node": ">=0.6.0", - "teleport": ">=0.2.0" - } - }, - "node_modules/qs": { - "version": "6.11.1", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.1.tgz", - "integrity": "sha512-0wsrzgTz/kAVIeuxSjnpGC56rzYtr6JT/2BwEvMaPhFIoYa1aGO8LbzuU1R0uUYQkLpWBTOj0l/CLAJB64J6nQ==", - "dependencies": { - "side-channel": "^1.0.4" - }, - "engines": { - "node": ">=0.6" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/query-string": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/query-string/-/query-string-5.1.1.tgz", - "integrity": "sha512-gjWOsm2SoGlgLEdAGt7a6slVOk9mGiXmPFMqrEhLQ68rhQuBnpfs3+EmlvqKyxnCo9/PPlF+9MtY02S1aFg+Jw==", - "dev": true, - "dependencies": { - "decode-uri-component": "^0.2.0", - "object-assign": "^4.1.0", - "strict-uri-encode": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/queue-microtask": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", - "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/quick-lru": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-4.0.1.tgz", - "integrity": "sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/quote-unquote": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/quote-unquote/-/quote-unquote-1.0.0.tgz", - "integrity": "sha512-twwRO/ilhlG/FIgYeKGFqyHhoEhqgnKVkcmqMKi2r524gz3ZbDTcyFt38E9xjJI2vT+KbRNHVbnJ/e0I25Azwg==", - "dev": true - }, - "node_modules/ramda": { - "version": "0.27.1", - "resolved": "https://registry.npmjs.org/ramda/-/ramda-0.27.1.tgz", - "integrity": "sha512-PgIdVpn5y5Yns8vqb8FzBUEYn98V3xcPgawAkkgj0YJ0qDsnHCiNmZYfOGMgOvoB0eWFLpYbhxUR3mxfDIMvpw==", - "dev": true - }, - "node_modules/raw-body": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz", - "integrity": "sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==", - "dependencies": { - "bytes": "3.1.2", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "unpipe": "1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/raw-body/node_modules/http-errors": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", - "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", - "dependencies": { - "depd": "2.0.0", - "inherits": "2.0.4", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "toidentifier": "1.0.1" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/raw-body/node_modules/statuses": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", - "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/rc": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", - "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", - "dev": true, - "dependencies": { - "deep-extend": "^0.6.0", - "ini": "~1.3.0", - "minimist": "^1.2.0", - "strip-json-comments": "~2.0.1" - }, - "bin": { - "rc": "cli.js" - } - }, - "node_modules/rc/node_modules/strip-json-comments": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", - "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/read-pkg": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz", - "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==", - "dependencies": { - "@types/normalize-package-data": "^2.4.0", - "normalize-package-data": "^2.5.0", - "parse-json": "^5.0.0", - "type-fest": "^0.6.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/read-pkg-up": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz", - "integrity": "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==", - "dependencies": { - "find-up": "^4.1.0", - "read-pkg": "^5.2.0", - "type-fest": "^0.8.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/read-pkg-up/node_modules/find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dependencies": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/read-pkg-up/node_modules/locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dependencies": { - "p-locate": "^4.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/read-pkg-up/node_modules/p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dependencies": { - "p-try": "^2.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/read-pkg-up/node_modules/p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dependencies": { - "p-limit": "^2.2.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/read-pkg/node_modules/hosted-git-info": { - "version": "2.8.9", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", - "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==" - }, - "node_modules/read-pkg/node_modules/normalize-package-data": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", - "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", - "dependencies": { - "hosted-git-info": "^2.1.4", - "resolve": "^1.10.0", - "semver": "2 || 3 || 4 || 5", - "validate-npm-package-license": "^3.0.1" - } - }, - "node_modules/read-pkg/node_modules/semver": { - "version": "5.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", - "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", - "bin": { - "semver": "bin/semver" - } - }, - "node_modules/read-pkg/node_modules/type-fest": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz", - "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==", - "engines": { - "node": ">=8" - } - }, - "node_modules/readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "dev": true, - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "node_modules/readable-stream/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, - "node_modules/redent": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/redent/-/redent-3.0.0.tgz", - "integrity": "sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==", - "dev": true, - "dependencies": { - "indent-string": "^4.0.0", - "strip-indent": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/redis-errors": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/redis-errors/-/redis-errors-1.2.0.tgz", - "integrity": "sha512-1qny3OExCf0UvUV/5wpYKf2YwPcOqXzkwKKSmKHiE6ZMQs5heeE/c8eXK+PNllPvmjgAbfnsbpkGZWy8cBpn9w==", - "engines": { - "node": ">=4" - } - }, - "node_modules/redis-parser": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/redis-parser/-/redis-parser-3.0.0.tgz", - "integrity": "sha512-DJnGAeenTdpMEH6uAJRK/uiyEIH9WVsUmoLwzudwGJUwZPp80PDBWPHXSAGNPwNvIXAbe7MSUB1zQFugFml66A==", - "dependencies": { - "redis-errors": "^1.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/regexp-tree": { - "version": "0.1.24", - "resolved": "https://registry.npmjs.org/regexp-tree/-/regexp-tree-0.1.24.tgz", - "integrity": "sha512-s2aEVuLhvnVJW6s/iPgEGK6R+/xngd2jNQ+xy4bXNDKxZKJH6jpPHY6kVeVv1IeLCHgswRj+Kl3ELaDjG6V1iw==", - "dev": true, - "bin": { - "regexp-tree": "bin/regexp-tree" - } - }, - "node_modules/regexp.prototype.flags": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.4.3.tgz", - "integrity": "sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "functions-have-names": "^1.2.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/regjsparser": { - "version": "0.9.1", - "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.9.1.tgz", - "integrity": "sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ==", - "dev": true, - "dependencies": { - "jsesc": "~0.5.0" - }, - "bin": { - "regjsparser": "bin/parser" - } - }, - "node_modules/regjsparser/node_modules/jsesc": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", - "integrity": "sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==", - "dev": true, - "bin": { - "jsesc": "bin/jsesc" - } - }, - "node_modules/repeating": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz", - "integrity": "sha512-ZqtSMuVybkISo2OWvqvm7iHSWngvdaW3IpsT9/uP8v4gMi591LY6h35wdOfvQdWCKFWZWm2Y1Opp4kV7vQKT6A==", - "dev": true, - "dependencies": { - "is-finite": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/require-directory": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/require-from-string": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", - "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/require-main-filename": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", - "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", - "dev": true - }, - "node_modules/requirejs": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/requirejs/-/requirejs-2.3.6.tgz", - "integrity": "sha512-ipEzlWQe6RK3jkzikgCupiTbTvm4S0/CAU5GlgptkN5SO6F3u0UD0K18wy6ErDqiCyP4J4YYe1HuAShvsxePLg==", - "dev": true, - "bin": { - "r_js": "bin/r.js", - "r.js": "bin/r.js" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/requirejs-config-file": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/requirejs-config-file/-/requirejs-config-file-4.0.0.tgz", - "integrity": "sha512-jnIre8cbWOyvr8a5F2KuqBnY+SDA4NXr/hzEZJG79Mxm2WiFQz2dzhC8ibtPJS7zkmBEl1mxSwp5HhC1W4qpxw==", - "dev": true, - "dependencies": { - "esprima": "^4.0.0", - "stringify-object": "^3.2.1" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/resolve": { - "version": "1.22.1", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz", - "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==", - "dependencies": { - "is-core-module": "^2.9.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - }, - "bin": { - "resolve": "bin/resolve" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/resolve-cwd": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", - "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==", - "dev": true, - "dependencies": { - "resolve-from": "^5.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/resolve-dependency-path": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/resolve-dependency-path/-/resolve-dependency-path-2.0.0.tgz", - "integrity": "sha512-DIgu+0Dv+6v2XwRaNWnumKu7GPufBBOr5I1gRPJHkvghrfCGOooJODFvgFimX/KRxk9j0whD2MnKHzM1jYvk9w==", - "dev": true, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/resolve-dir": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/resolve-dir/-/resolve-dir-1.0.1.tgz", - "integrity": "sha512-R7uiTjECzvOsWSfdM0QKFNBVFcK27aHOUwdvK53BcW8zqnGdYp0Fbj82cy54+2A4P2tFM22J5kRfe1R+lM/1yg==", - "dev": true, - "dependencies": { - "expand-tilde": "^2.0.0", - "global-modules": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/resolve-from": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", - "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/resolve-global": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/resolve-global/-/resolve-global-1.0.0.tgz", - "integrity": "sha512-zFa12V4OLtT5XUX/Q4VLvTfBf+Ok0SPc1FNGM/z9ctUdiU618qwKpWnd0CHs3+RqROfyEg/DhuHbMWYqcgljEw==", - "dev": true, - "dependencies": { - "global-dirs": "^0.1.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/resolve.exports": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-2.0.2.tgz", - "integrity": "sha512-X2UW6Nw3n/aMgDVy+0rSqgHlv39WZAlZrXCdnbyEiKm17DSqHX4MmQMaST3FbeWR5FTuRcUwYAziZajji0Y7mg==", - "dev": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/responselike": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/responselike/-/responselike-1.0.2.tgz", - "integrity": "sha512-/Fpe5guzJk1gPqdJLJR5u7eG/gNY4nImjbRDaVWVMRhne55TCmj2i9Q+54PBRfatRC8v/rIiv9BN0pMd9OV5EQ==", - "dev": true, - "dependencies": { - "lowercase-keys": "^1.0.0" - } - }, - "node_modules/restore-cursor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", - "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", - "dev": true, - "dependencies": { - "onetime": "^5.1.0", - "signal-exit": "^3.0.2" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/reusify": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", - "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", - "dev": true, - "engines": { - "iojs": ">=1.0.0", - "node": ">=0.10.0" - } - }, - "node_modules/rfdc": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.3.0.tgz", - "integrity": "sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA==", - "dev": true - }, - "node_modules/right-pad": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/right-pad/-/right-pad-1.0.1.tgz", - "integrity": "sha512-bYBjgxmkvTAfgIYy328fmkwhp39v8lwVgWhhrzxPV3yHtcSqyYKe9/XOhvW48UFjATg3VuJbpsp5822ACNvkmw==", - "dev": true, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "dev": true, - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/rimraf/node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "dev": true, - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/roarr": { - "version": "7.15.0", - "resolved": "https://registry.npmjs.org/roarr/-/roarr-7.15.0.tgz", - "integrity": "sha512-CV9WefQfUXTX6wr8CrEMhfNef3sjIt9wNhE/5PNu4tNWsaoDNDXqq+OGn/RW9A1UPb0qc7FQlswXRaJJJsqn8A==", - "dev": true, - "dependencies": { - "boolean": "^3.1.4", - "fast-json-stringify": "^2.7.10", - "fast-printf": "^1.6.9", - "globalthis": "^1.0.2", - "safe-stable-stringify": "^2.4.1", - "semver-compare": "^1.0.0" - }, - "engines": { - "node": ">=12.0" - } - }, - "node_modules/rudder-json-template-engine": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/rudder-json-template-engine/-/rudder-json-template-engine-0.5.1.tgz", - "integrity": "sha512-D8zCcTXbhbFd2EhDmmgZKxw5uky6+DfikV/EW8I8HWdutMiyzdxgVMyH1dPo3feLgj3/0g2WNO9t4iPaegw4PQ==" - }, - "node_modules/rudder-transformer-cdk": { - "version": "1.4.11", - "resolved": "https://registry.npmjs.org/rudder-transformer-cdk/-/rudder-transformer-cdk-1.4.11.tgz", - "integrity": "sha512-u2t/L47tNe9wyzSpQptLkiECT0/P5Xx8BLmZisfuXQx3lXco57oaDX/Ii1ZhEiHM2zht+NiyrGkvhBKMt1IAyA==", - "dependencies": { - "get-value": "^3.0.1", - "handlebars": "^4.7.7", - "joi": "^17.9.2", - "js-yaml": "^4.1.0", - "lodash": "^4.17.21", - "moment-timezone": "^0.5.43", - "set-value": "^4.1.0", - "sha256": "^0.2.0", - "unset-value": "^2.0.1", - "winston": "^3.8.1" - } - }, - "node_modules/rudder-workflow-engine": { - "version": "0.4.7", - "resolved": "https://registry.npmjs.org/rudder-workflow-engine/-/rudder-workflow-engine-0.4.7.tgz", - "integrity": "sha512-USJ/h4XGxtUmAhaTJgtz1MrICpiju6GTubaFyPS+5hgpjdIsZx/iOOishjrNcOrwHvxcfblccA8wv5JTC8eSpg==", - "dependencies": { - "@aws-crypto/sha256-js": "^4.0.0", - "js-yaml": "^4.1.0", - "jsonata": "^2.0.3", - "lodash": "^4.17.21", - "rudder-json-template-engine": "^0.5.1" - } - }, - "node_modules/rudder-workflow-engine/node_modules/@aws-crypto/sha256-js": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@aws-crypto/sha256-js/-/sha256-js-4.0.0.tgz", - "integrity": "sha512-MHGJyjE7TX9aaqXj7zk2ppnFUOhaDs5sP+HtNS0evOxn72c+5njUmyJmpGd7TfyoDznZlHMmdo/xGUdu2NIjNQ==", - "dependencies": { - "@aws-crypto/util": "^4.0.0", - "@aws-sdk/types": "^3.222.0", - "tslib": "^1.11.1" - } - }, - "node_modules/rudder-workflow-engine/node_modules/@aws-crypto/util": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@aws-crypto/util/-/util-4.0.0.tgz", - "integrity": "sha512-2EnmPy2gsFZ6m8bwUQN4jq+IyXV3quHAcwPOS6ZA3k+geujiqI8aRokO2kFJe+idJ/P3v4qWI186rVMo0+zLDQ==", - "dependencies": { - "@aws-sdk/types": "^3.222.0", - "@aws-sdk/util-utf8-browser": "^3.0.0", - "tslib": "^1.11.1" - } - }, - "node_modules/rudder-workflow-engine/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" - }, - "node_modules/run-async": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz", - "integrity": "sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==", - "dev": true, - "engines": { - "node": ">=0.12.0" - } - }, - "node_modules/run-parallel": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", - "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "dependencies": { - "queue-microtask": "^1.2.2" - } - }, - "node_modules/rxjs": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.0.tgz", - "integrity": "sha512-F2+gxDshqmIub1KdvZkaEfGDwLNpPvk9Fs6LD/MyQxNgMds/WH9OdDDXOmxUZpME+iSK3rQCctkL0DYyytUqMg==", - "dev": true, - "dependencies": { - "tslib": "^2.1.0" - } - }, - "node_modules/safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/safe-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-2.1.1.tgz", - "integrity": "sha512-rx+x8AMzKb5Q5lQ95Zoi6ZbJqwCLkqi3XuJXp5P3rT8OEc6sZCJG5AE5dU3lsgRr/F4Bs31jSlVN+j5KrsGu9A==", - "dev": true, - "dependencies": { - "regexp-tree": "~0.1.1" - } - }, - "node_modules/safe-regex-test": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.0.tgz", - "integrity": "sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.3", - "is-regex": "^1.1.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/safe-stable-stringify": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/safe-stable-stringify/-/safe-stable-stringify-2.4.2.tgz", - "integrity": "sha512-gMxvPJYhP0O9n2pvcfYfIuYgbledAOJFcqRThtPRmjscaipiwcwPPKLytpVzMkG2HAN87Qmo2d4PtGiri1dSLA==", - "engines": { - "node": ">=10" - } - }, - "node_modules/safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" - }, - "node_modules/sass-lookup": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/sass-lookup/-/sass-lookup-3.0.0.tgz", - "integrity": "sha512-TTsus8CfFRn1N44bvdEai1no6PqdmDiQUiqW5DlpmtT+tYnIt1tXtDIph5KA1efC+LmioJXSnCtUVpcK9gaKIg==", - "dev": true, - "dependencies": { - "commander": "^2.16.0" - }, - "bin": { - "sass-lookup": "bin/cli.js" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/sass-lookup/node_modules/commander": { - "version": "2.20.3", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", - "dev": true - }, - "node_modules/semver": { - "version": "7.5.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.3.tgz", - "integrity": "sha512-QBlUtyVk/5EeHbi7X0fw6liDZc7BBmEaSYn01fMU1OUYbf6GPsbTtd8WmnqbI20SeycoHSeiybkE/q1Q+qlThQ==", - "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/semver-compare": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/semver-compare/-/semver-compare-1.0.0.tgz", - "integrity": "sha512-YM3/ITh2MJ5MtzaM429anh+x2jiLVjqILF4m4oyQB18W7Ggea7BfqdH/wGMK7dDiMghv/6WG7znWMwUDzJiXow==", - "dev": true - }, - "node_modules/semver-regex": { - "version": "3.1.4", - "resolved": "https://registry.npmjs.org/semver-regex/-/semver-regex-3.1.4.tgz", - "integrity": "sha512-6IiqeZNgq01qGf0TId0t3NvKzSvUsjcpdEO3AQNeIjR6A2+ckTnQlDpl4qu1bjRv0RzN3FP9hzFmws3lKqRWkA==", - "dev": true, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/semver/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/semver/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - }, - "node_modules/set-blocking": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", - "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==", - "dev": true - }, - "node_modules/set-value": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/set-value/-/set-value-4.1.0.tgz", - "integrity": "sha512-zTEg4HL0RwVrqcWs3ztF+x1vkxfm0lP+MQQFPiMJTKVceBwEV0A569Ou8l9IYQG8jOZdMVI1hGsc0tmeD2o/Lw==", - "funding": [ - "https://github.com/sponsors/jonschlinkert", - "https://paypal.me/jonathanschlinkert", - "https://jonschlinkert.dev/sponsor" - ], - "dependencies": { - "is-plain-object": "^2.0.4", - "is-primitive": "^3.0.1" - }, - "engines": { - "node": ">=11.0" - } - }, - "node_modules/setprototypeof": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", - "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" - }, - "node_modules/sha256": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/sha256/-/sha256-0.2.0.tgz", - "integrity": "sha512-kTWMJUaez5iiT9CcMv8jSq6kMhw3ST0uRdcIWl3D77s6AsLXNXRp3heeqqfu5+Dyfu4hwpQnMzhqHh8iNQxw0w==", - "dependencies": { - "convert-hex": "~0.1.0", - "convert-string": "~0.1.0" - } - }, - "node_modules/shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "dev": true, - "dependencies": { - "shebang-regex": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/shellwords": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/shellwords/-/shellwords-0.1.1.tgz", - "integrity": "sha512-vFwSUfQvqybiICwZY5+DAWIPLKsWO31Q91JSKl3UYv+K5c2QRPzn0qzec6QPu1Qc9eHYItiP3NdJqNVqetYAww==", - "dev": true - }, - "node_modules/side-channel": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", - "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", - "dependencies": { - "call-bind": "^1.0.0", - "get-intrinsic": "^1.0.2", - "object-inspect": "^1.9.0" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/signal-exit": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==" - }, - "node_modules/simple-swizzle": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz", - "integrity": "sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==", - "dependencies": { - "is-arrayish": "^0.3.1" - } - }, - "node_modules/simple-swizzle/node_modules/is-arrayish": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz", - "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==" - }, - "node_modules/sisteransi": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", - "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==", - "dev": true - }, - "node_modules/slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/slice-ansi": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-5.0.0.tgz", - "integrity": "sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ==", - "dev": true, - "dependencies": { - "ansi-styles": "^6.0.0", - "is-fullwidth-code-point": "^4.0.0" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/slice-ansi?sponsor=1" - } - }, - "node_modules/slice-ansi/node_modules/ansi-styles": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", - "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", - "dev": true, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/sort-keys": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/sort-keys/-/sort-keys-2.0.0.tgz", - "integrity": "sha512-/dPCrG1s3ePpWm6yBbxZq5Be1dXGLyLn9Z791chDC3NFrpkVbWGzkBwPN1knaciexFXgRJ7hzdnwZ4stHSDmjg==", - "dev": true, - "dependencies": { - "is-plain-obj": "^1.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/source-map-js": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", - "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/source-map-support": { - "version": "0.5.13", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.13.tgz", - "integrity": "sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==", - "dev": true, - "dependencies": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - } - }, - "node_modules/spdx-correct": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz", - "integrity": "sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==", - "dependencies": { - "spdx-expression-parse": "^3.0.0", - "spdx-license-ids": "^3.0.0" - } - }, - "node_modules/spdx-exceptions": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", - "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==" - }, - "node_modules/spdx-expression-parse": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", - "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", - "dependencies": { - "spdx-exceptions": "^2.1.0", - "spdx-license-ids": "^3.0.0" - } - }, - "node_modules/spdx-license-ids": { - "version": "3.0.12", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.12.tgz", - "integrity": "sha512-rr+VVSXtRhO4OHbXUiAF7xW3Bo9DuuF6C5jH+q/x15j2jniycgKbxU09Hr0WqlSLUs4i4ltHGXqTe7VHclYWyA==" - }, - "node_modules/split": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/split/-/split-1.0.1.tgz", - "integrity": "sha512-mTyOoPbrivtXnwnIxZRFYRrPNtEFKlpB2fvjSnCQUiAA6qAZzqwna5envK4uk6OIeP17CsdF3rSBGYVBsU0Tkg==", - "dev": true, - "dependencies": { - "through": "2" - }, - "engines": { - "node": "*" - } - }, - "node_modules/split2": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/split2/-/split2-3.2.2.tgz", - "integrity": "sha512-9NThjpgZnifTkJpzTZ7Eue85S49QwpNhZTq6GRJwObb6jnLFNGB7Qm73V5HewTROPyxD0C29xqmaI68bQtV+hg==", - "dev": true, - "dependencies": { - "readable-stream": "^3.0.0" - } - }, - "node_modules/split2/node_modules/readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "dev": true, - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", - "dev": true - }, - "node_modules/stack-generator": { - "version": "2.0.10", - "resolved": "https://registry.npmjs.org/stack-generator/-/stack-generator-2.0.10.tgz", - "integrity": "sha512-mwnua/hkqM6pF4k8SnmZ2zfETsRUpWXREfA/goT8SLCV4iOFa4bzOX2nDipWAZFPTjLvQB82f5yaodMVhK0yJQ==", - "dependencies": { - "stackframe": "^1.3.4" - } - }, - "node_modules/stack-trace": { - "version": "0.0.10", - "resolved": "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.10.tgz", - "integrity": "sha512-KGzahc7puUKkzyMt+IqAep+TVNbKP+k2Lmwhub39m1AsTSkaDutx56aDCo+HLDzf/D26BIHTJWNiTG1KAJiQCg==", - "engines": { - "node": "*" - } - }, - "node_modules/stack-utils": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.6.tgz", - "integrity": "sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==", - "dev": true, - "dependencies": { - "escape-string-regexp": "^2.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/stack-utils/node_modules/escape-string-regexp": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", - "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/stackframe": { - "version": "1.3.4", - "resolved": "https://registry.npmjs.org/stackframe/-/stackframe-1.3.4.tgz", - "integrity": "sha512-oeVtt7eWQS+Na6F//S4kJ2K2VbRlS9D43mAlMyVpVWovy9o+jfgH8O9agzANzaiLjclA0oYzUXEM4PurhSUChw==" - }, - "node_modules/stacktrace-parser": { - "version": "0.1.10", - "resolved": "https://registry.npmjs.org/stacktrace-parser/-/stacktrace-parser-0.1.10.tgz", - "integrity": "sha512-KJP1OCML99+8fhOHxwwzyWrlUuVX5GQ0ZpJTd1DFXhdkrvg1szxfHhawXUZ3g9TkXORQd4/WG68jMlQZ2p8wlg==", - "dependencies": { - "type-fest": "^0.7.1" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/stacktrace-parser/node_modules/type-fest": { - "version": "0.7.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.7.1.tgz", - "integrity": "sha512-Ne2YiiGN8bmrmJJEuTWTLJR32nh/JdL1+PSicowtNb0WFpn59GK8/lfD61bVtzguz7b3PBt74nxpv/Pw5po5Rg==", - "engines": { - "node": ">=8" - } - }, - "node_modules/standard-as-callback": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/standard-as-callback/-/standard-as-callback-2.1.0.tgz", - "integrity": "sha512-qoRRSyROncaz1z0mvYqIE4lCd9p2R90i6GxW3uZv5ucSu8tU7B5HXUP1gG8pVZsYNVaXjk8ClXHPttLyxAL48A==" - }, - "node_modules/standard-version": { - "version": "9.5.0", - "resolved": "https://registry.npmjs.org/standard-version/-/standard-version-9.5.0.tgz", - "integrity": "sha512-3zWJ/mmZQsOaO+fOlsa0+QK90pwhNd042qEcw6hKFNoLFs7peGyvPffpEBbK/DSGPbyOvli0mUIFv5A4qTjh2Q==", - "dev": true, - "dependencies": { - "chalk": "^2.4.2", - "conventional-changelog": "3.1.25", - "conventional-changelog-config-spec": "2.1.0", - "conventional-changelog-conventionalcommits": "4.6.3", - "conventional-recommended-bump": "6.1.0", - "detect-indent": "^6.0.0", - "detect-newline": "^3.1.0", - "dotgitignore": "^2.1.0", - "figures": "^3.1.0", - "find-up": "^5.0.0", - "git-semver-tags": "^4.0.0", - "semver": "^7.1.1", - "stringify-package": "^1.0.1", - "yargs": "^16.0.0" - }, - "bin": { - "standard-version": "bin/cli.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/standard-version/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/standard-version/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/standard-version/node_modules/cliui": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", - "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", - "dev": true, - "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^7.0.0" - } - }, - "node_modules/standard-version/node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/standard-version/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "dev": true - }, - "node_modules/standard-version/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/standard-version/node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/standard-version/node_modules/yargs": { - "version": "16.2.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", - "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", - "dev": true, - "dependencies": { - "cliui": "^7.0.2", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.0", - "y18n": "^5.0.5", - "yargs-parser": "^20.2.2" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/stats-accumulator": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/stats-accumulator/-/stats-accumulator-1.1.3.tgz", - "integrity": "sha512-ys8OR2RWx4Y9xC/fkFUKI3t2ElHpR4Xdp8rIWVCTl4DWmfS80gvxl0LwNKYUio/ibBUpsoMaUYbWldonVfPBFQ==", - "dev": true, - "engines": { - "node": ">=0.8" - } - }, - "node_modules/statsd-client": { - "version": "0.4.7", - "resolved": "https://registry.npmjs.org/statsd-client/-/statsd-client-0.4.7.tgz", - "integrity": "sha512-+sGCE6FednJ/vI7vywErOg/mhVqmf6Zlktz7cdGRnF/cQWXD9ifMgtqU1CIIXmhSwm11SCk4zDN+bwNCvIR/Kg==", - "deprecated": "Package no longer supported. Contact Support at https://www.npmjs.com/support for more info." - }, - "node_modules/statuses": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", - "integrity": "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/stream-browserify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-3.0.0.tgz", - "integrity": "sha512-H73RAHsVBapbim0tU2JwwOiXUj+fikfiaoYAKHF3VJfA0pe2BCzkhAHBlLG6REzE+2WNZcxOXjK7lkso+9euLA==", - "dependencies": { - "inherits": "~2.0.4", - "readable-stream": "^3.5.0" - } - }, - "node_modules/stream-browserify/node_modules/readable-stream": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", - "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/stream-to-array": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/stream-to-array/-/stream-to-array-2.3.0.tgz", - "integrity": "sha512-UsZtOYEn4tWU2RGLOXr/o/xjRBftZRlG3dEWoaHr8j4GuypJ3isitGbVyjQKAuMu+xbiop8q224TjiZWc4XTZA==", - "dev": true, - "dependencies": { - "any-promise": "^1.1.0" - } - }, - "node_modules/strict-uri-encode": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz", - "integrity": "sha512-R3f198pcvnB+5IpnBlRkphuE9n46WyVl8I39W/ZUTZLz4nqSP/oLYUrcnJrw462Ds8he4YKMov2efsTIw1BDGQ==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, - "node_modules/string_decoder/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" - }, - "node_modules/string-argv": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/string-argv/-/string-argv-0.3.1.tgz", - "integrity": "sha512-a1uQGz7IyVy9YwhqjZIZu1c8JO8dNIe20xBmSS6qu9kv++k3JGzCVmprbNN5Kn+BgzD5E7YYwg1CcjuJMRNsvg==", - "dev": true, - "engines": { - "node": ">=0.6.19" - } - }, - "node_modules/string-length": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz", - "integrity": "sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==", - "dev": true, - "dependencies": { - "char-regex": "^1.0.2", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/string-similarity": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/string-similarity/-/string-similarity-4.0.4.tgz", - "integrity": "sha512-/q/8Q4Bl4ZKAPjj8WerIBJWALKkaPRfrvhfF8k/B23i4nzrlRj2/go1m90In7nG/3XDSbOo0+pu6RvCTM9RGMQ==", - "deprecated": "Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.", - "dev": true - }, - "node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/string-width-cjs": { - "name": "string-width", - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/string-width-cjs/node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true - }, - "node_modules/string-width-cjs/node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/string-width/node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true - }, - "node_modules/string-width/node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/string.prototype.trimend": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.6.tgz", - "integrity": "sha512-JySq+4mrPf9EsDBEDYMOb/lM7XQLulwg5R/m1r0PXEFqrV0qHvl58sdTilSXtKOflCsK2E8jxf+GKC0T07RWwQ==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/string.prototype.trimstart": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.6.tgz", - "integrity": "sha512-omqjMDaY92pbn5HOX7f9IccLA+U1tA9GvtU4JrodiXFfYB7jPzzHpRzpglLAjtUV6bB557zwClJezTqnAiYnQA==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/stringify-object": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/stringify-object/-/stringify-object-3.3.0.tgz", - "integrity": "sha512-rHqiFh1elqCQ9WPLIC8I0Q/g/wj5J1eMkyoiD6eoQApWHP0FtlK7rqnhmabL5VUY9JQCcqwwvlOaSuutekgyrw==", - "dev": true, - "dependencies": { - "get-own-enumerable-property-symbols": "^3.0.0", - "is-obj": "^1.0.1", - "is-regexp": "^1.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/stringify-object/node_modules/is-obj": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz", - "integrity": "sha512-l4RyHgRqGN4Y3+9JHVrNqO+tN0rV5My76uW5/nuO4K1b6vw5G8d/cmFjP9tRfEsdhZNt0IFdZuK/c2Vr4Nb+Qg==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/stringify-package": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/stringify-package/-/stringify-package-1.0.1.tgz", - "integrity": "sha512-sa4DUQsYciMP1xhKWGuFM04fB0LG/9DlluZoSVywUMRNvzid6XucHK0/90xGxRoHrAaROrcHK1aPKaijCtSrhg==", - "deprecated": "This module is not used anymore, and has been replaced by @npmcli/package-json", - "dev": true - }, - "node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-ansi-cjs": { - "name": "strip-ansi", - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-bom": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", - "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-final-newline": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", - "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/strip-indent": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-3.0.0.tgz", - "integrity": "sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==", - "dev": true, - "dependencies": { - "min-indent": "^1.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-json-comments": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", - "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", - "dev": true, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/strnum": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/strnum/-/strnum-1.0.5.tgz", - "integrity": "sha512-J8bbNyKKXl5qYcR36TIO8W3mVGVHrmmxsd5PAItGkmyzwJvybiw2IVq5nqd0i4LSNSkB/sx9VHllbfFdr9k1JA==" - }, - "node_modules/stylus-lookup": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/stylus-lookup/-/stylus-lookup-3.0.2.tgz", - "integrity": "sha512-oEQGHSjg/AMaWlKe7gqsnYzan8DLcGIHe0dUaFkucZZ14z4zjENRlQMCHT4FNsiWnJf17YN9OvrCfCoi7VvOyg==", - "dev": true, - "dependencies": { - "commander": "^2.8.1", - "debug": "^4.1.0" - }, - "bin": { - "stylus-lookup": "bin/cli.js" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/stylus-lookup/node_modules/commander": { - "version": "2.20.3", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", - "dev": true - }, - "node_modules/subdirs": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/subdirs/-/subdirs-1.0.1.tgz", - "integrity": "sha512-KSbUKpwQIRcb5Th+l4EzxEZYpCwV/g0pQ348EV7CIM5YEEgzz2L1KJD8FCeTckTiE/TKn2u09DCxpdAL6/iFbg==", - "dependencies": { - "es6-promise": "^3.0.2" - } - }, - "node_modules/superagent": { - "version": "8.0.9", - "resolved": "https://registry.npmjs.org/superagent/-/superagent-8.0.9.tgz", - "integrity": "sha512-4C7Bh5pyHTvU33KpZgwrNKh/VQnvgtCSqPRfJAUdmrtSYePVzVg4E4OzsrbkhJj9O7SO6Bnv75K/F8XVZT8YHA==", - "dev": true, - "dependencies": { - "component-emitter": "^1.3.0", - "cookiejar": "^2.1.4", - "debug": "^4.3.4", - "fast-safe-stringify": "^2.1.1", - "form-data": "^4.0.0", - "formidable": "^2.1.2", - "methods": "^1.1.2", - "mime": "2.6.0", - "qs": "^6.11.0", - "semver": "^7.3.8" - }, - "engines": { - "node": ">=6.4.0 <13 || >=14" - } - }, - "node_modules/supertest": { - "version": "6.3.3", - "resolved": "https://registry.npmjs.org/supertest/-/supertest-6.3.3.tgz", - "integrity": "sha512-EMCG6G8gDu5qEqRQ3JjjPs6+FYT1a7Hv5ApHvtSghmOFJYtsU5S+pSb6Y2EUeCEY3CmEL3mmQ8YWlPOzQomabA==", - "dev": true, - "dependencies": { - "methods": "^1.1.2", - "superagent": "^8.0.5" - }, - "engines": { - "node": ">=6.4.0" - } - }, - "node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/supports-preserve-symlinks-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", - "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/swagger-cli": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/swagger-cli/-/swagger-cli-4.0.4.tgz", - "integrity": "sha512-Cp8YYuLny3RJFQ4CvOBTaqmOOgYsem52dPx1xM5S4EUWFblIh2Q8atppMZvXKUr1e9xH5RwipYpmdUzdPcxWcA==", - "dev": true, - "dependencies": { - "@apidevtools/swagger-cli": "4.0.4" - }, - "bin": { - "swagger-cli": "swagger-cli.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/swagger-cli/node_modules/@apidevtools/swagger-cli": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/@apidevtools/swagger-cli/-/swagger-cli-4.0.4.tgz", - "integrity": "sha512-hdDT3B6GLVovCsRZYDi3+wMcB1HfetTU20l2DC8zD3iFRNMC6QNAZG5fo/6PYeHWBEv7ri4MvnlKodhNB0nt7g==", - "dev": true, - "dependencies": { - "@apidevtools/swagger-parser": "^10.0.1", - "chalk": "^4.1.0", - "js-yaml": "^3.14.0", - "yargs": "^15.4.1" - }, - "bin": { - "swagger-cli": "bin/swagger-cli.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/swagger-cli/node_modules/argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "dev": true, - "dependencies": { - "sprintf-js": "~1.0.2" - } - }, - "node_modules/swagger-cli/node_modules/cliui": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", - "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==", - "dev": true, - "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^6.2.0" - } - }, - "node_modules/swagger-cli/node_modules/find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dev": true, - "dependencies": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/swagger-cli/node_modules/js-yaml": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", - "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", - "dev": true, - "dependencies": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/swagger-cli/node_modules/locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dev": true, - "dependencies": { - "p-locate": "^4.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/swagger-cli/node_modules/p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dev": true, - "dependencies": { - "p-try": "^2.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/swagger-cli/node_modules/p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dev": true, - "dependencies": { - "p-limit": "^2.2.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/swagger-cli/node_modules/wrap-ansi": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", - "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/swagger-cli/node_modules/y18n": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", - "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==", - "dev": true - }, - "node_modules/swagger-cli/node_modules/yargs": { - "version": "15.4.1", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz", - "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==", - "dev": true, - "dependencies": { - "cliui": "^6.0.0", - "decamelize": "^1.2.0", - "find-up": "^4.1.0", - "get-caller-file": "^2.0.1", - "require-directory": "^2.1.1", - "require-main-filename": "^2.0.0", - "set-blocking": "^2.0.0", - "string-width": "^4.2.0", - "which-module": "^2.0.0", - "y18n": "^4.0.0", - "yargs-parser": "^18.1.2" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/swagger-cli/node_modules/yargs-parser": { - "version": "18.1.3", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", - "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", - "dev": true, - "dependencies": { - "camelcase": "^5.0.0", - "decamelize": "^1.2.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/tapable": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", - "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/tdigest": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/tdigest/-/tdigest-0.1.2.tgz", - "integrity": "sha512-+G0LLgjjo9BZX2MfdvPfH+MKLCrxlXSYec5DaPYP1fe6Iyhf0/fSmJ0bFiZ1F8BT6cGXl2LpltQptzjXKWEkKA==", - "dependencies": { - "bintrees": "1.0.2" - } - }, - "node_modules/test-exclude": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", - "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", - "dev": true, - "dependencies": { - "@istanbuljs/schema": "^0.1.2", - "glob": "^7.1.4", - "minimatch": "^3.0.4" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/test-exclude/node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "dev": true, - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/text-extensions": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/text-extensions/-/text-extensions-1.9.0.tgz", - "integrity": "sha512-wiBrwC1EhBelW12Zy26JeOUkQ5mRu+5o8rpsJk5+2t+Y5vE7e842qtZDQ2g1NpX/29HdyFeJ4nSIhI47ENSxlQ==", - "dev": true, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/text-hex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/text-hex/-/text-hex-1.0.0.tgz", - "integrity": "sha512-uuVGNWzgJ4yhRaNSiubPY7OjISw4sw4E5Uv0wbjp+OzcbmVU/rsT8ujgcXJhn9ypzsgr5vlzpPqP+MBBKcGvbg==" - }, - "node_modules/text-table": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", - "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", - "dev": true - }, - "node_modules/through": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", - "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==", - "dev": true - }, - "node_modules/through2": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/through2/-/through2-4.0.2.tgz", - "integrity": "sha512-iOqSav00cVxEEICeD7TjLB1sueEL+81Wpzp2bY17uZjZN0pWZPuo4suZ/61VujxmqSGFfgOcNuTZ85QJwNZQpw==", - "dev": true, - "dependencies": { - "readable-stream": "3" - } - }, - "node_modules/through2/node_modules/readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "dev": true, - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/timed-out": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/timed-out/-/timed-out-4.0.1.tgz", - "integrity": "sha512-G7r3AhovYtr5YKOWQkta8RKAPb+J9IsO4uVmzjl8AZwfhs8UcUwTiD6gcJYSgOtzyjvQKrKYn41syHbUWMkafA==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/tmp": { - "version": "0.0.33", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", - "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", - "dev": true, - "dependencies": { - "os-tmpdir": "~1.0.2" - }, - "engines": { - "node": ">=0.6.0" - } - }, - "node_modules/tmpl": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz", - "integrity": "sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==", - "dev": true - }, - "node_modules/to-fast-properties": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/to-function": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/to-function/-/to-function-2.0.6.tgz", - "integrity": "sha512-LWfUmW851x5T8+78Nl82CA2j6w0trhoFj4rpS6pFUMgfUMUySDAKPgTvQkUqlWuH3Lihlk5sPyDHSVwmKDSc5Q==", - "dependencies": { - "component-props": "*" - } - }, - "node_modules/to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dev": true, - "dependencies": { - "is-number": "^7.0.0" - }, - "engines": { - "node": ">=8.0" - } - }, - "node_modules/toidentifier": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", - "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", - "engines": { - "node": ">=0.6" - } - }, - "node_modules/trim-newlines": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-3.0.1.tgz", - "integrity": "sha512-c1PTsA3tYrIsLGkJkzHF+w9F2EyxfXGo4UyJc4pFL++FMjnq0HJS69T3M7d//gKrFKwy429bouPescbjecU+Zw==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/triple-beam": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/triple-beam/-/triple-beam-1.3.0.tgz", - "integrity": "sha512-XrHUvV5HpdLmIj4uVMxHggLbFSZYIn7HEWsqePZcI50pco+MPqJ50wMGY794X7AOOhxOBAjbkqfAbEe/QMp2Lw==" - }, - "node_modules/truncate-utf8-bytes": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/truncate-utf8-bytes/-/truncate-utf8-bytes-1.0.2.tgz", - "integrity": "sha512-95Pu1QXQvruGEhv62XCMO3Mm90GscOCClvrIUwCM0PYOXK3kaF3l3sIHxx71ThJfcbM2O5Au6SO3AWCSEfW4mQ==", - "dependencies": { - "utf8-byte-length": "^1.0.1" - } - }, - "node_modules/ts-graphviz": { - "version": "1.5.5", - "resolved": "https://registry.npmjs.org/ts-graphviz/-/ts-graphviz-1.5.5.tgz", - "integrity": "sha512-abon0Tlcgvxcqr8x+p8QH1fTbR2R4cEXKGZfT4OJONZWah2YfqkmERb6hrr82omAc1IHwk5PlF8g4BS/ECYvwQ==", - "dev": true, - "engines": { - "node": ">=14.16" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/kamiazya" - } - }, - "node_modules/ts-jest": { - "version": "29.1.1", - "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-29.1.1.tgz", - "integrity": "sha512-D6xjnnbP17cC85nliwGiL+tpoKN0StpgE0TeOjXQTU6MVCfsB4v7aW05CgQ/1OywGb0x/oy9hHFnN+sczTiRaA==", - "dev": true, - "dependencies": { - "bs-logger": "0.x", - "fast-json-stable-stringify": "2.x", - "jest-util": "^29.0.0", - "json5": "^2.2.3", - "lodash.memoize": "4.x", - "make-error": "1.x", - "semver": "^7.5.3", - "yargs-parser": "^21.0.1" - }, - "bin": { - "ts-jest": "cli.js" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - }, - "peerDependencies": { - "@babel/core": ">=7.0.0-beta.0 <8", - "@jest/types": "^29.0.0", - "babel-jest": "^29.0.0", - "jest": "^29.0.0", - "typescript": ">=4.3 <6" - }, - "peerDependenciesMeta": { - "@babel/core": { - "optional": true - }, - "@jest/types": { - "optional": true - }, - "babel-jest": { - "optional": true - }, - "esbuild": { - "optional": true - } - } - }, - "node_modules/ts-jest/node_modules/yargs-parser": { - "version": "21.1.1", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", - "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", - "dev": true, - "engines": { - "node": ">=12" - } - }, - "node_modules/ts-node": { - "version": "10.9.1", - "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.1.tgz", - "integrity": "sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==", - "dev": true, - "dependencies": { - "@cspotcode/source-map-support": "^0.8.0", - "@tsconfig/node10": "^1.0.7", - "@tsconfig/node12": "^1.0.7", - "@tsconfig/node14": "^1.0.0", - "@tsconfig/node16": "^1.0.2", - "acorn": "^8.4.1", - "acorn-walk": "^8.1.1", - "arg": "^4.1.0", - "create-require": "^1.1.0", - "diff": "^4.0.1", - "make-error": "^1.1.1", - "v8-compile-cache-lib": "^3.0.1", - "yn": "3.1.1" - }, - "bin": { - "ts-node": "dist/bin.js", - "ts-node-cwd": "dist/bin-cwd.js", - "ts-node-esm": "dist/bin-esm.js", - "ts-node-script": "dist/bin-script.js", - "ts-node-transpile-only": "dist/bin-transpile.js", - "ts-script": "dist/bin-script-deprecated.js" - }, - "peerDependencies": { - "@swc/core": ">=1.2.50", - "@swc/wasm": ">=1.2.50", - "@types/node": "*", - "typescript": ">=2.7" - }, - "peerDependenciesMeta": { - "@swc/core": { - "optional": true - }, - "@swc/wasm": { - "optional": true - } - } - }, - "node_modules/ts-node/node_modules/acorn-walk": { - "version": "8.2.0", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz", - "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==", - "dev": true, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/tsconfig-paths": { - "version": "3.14.2", - "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.14.2.tgz", - "integrity": "sha512-o/9iXgCYc5L/JxCHPe3Hvh8Q/2xm5Z+p18PESBU6Ff33695QnCHBEjcytY2q19ua7Mbl/DavtBOLq+oG0RCL+g==", - "dev": true, - "dependencies": { - "@types/json5": "^0.0.29", - "json5": "^1.0.2", - "minimist": "^1.2.6", - "strip-bom": "^3.0.0" - } - }, - "node_modules/tsconfig-paths/node_modules/json5": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz", - "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==", - "dev": true, - "dependencies": { - "minimist": "^1.2.0" - }, - "bin": { - "json5": "lib/cli.js" - } - }, - "node_modules/tsconfig-paths/node_modules/strip-bom": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/tslib": { - "version": "2.5.3", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.3.tgz", - "integrity": "sha512-mSxlJJwl3BMEQCUNnxXBU9jP4JBktcEGhURcPR6VQVlnP0FdDEsIaz0C35dXNGLyRfrATNofF0F5p2KPxQgB+w==" - }, - "node_modules/tsscmp": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/tsscmp/-/tsscmp-1.0.6.tgz", - "integrity": "sha512-LxhtAkPDTkVCMQjt2h6eBVY28KCjikZqZfMcC15YBeNjkgUpdCfBu5HoiOTDu86v6smE8yOjyEktJ8hlbANHQA==", - "engines": { - "node": ">=0.6.x" - } - }, - "node_modules/tsutils": { - "version": "3.21.0", - "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", - "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", - "dev": true, - "dependencies": { - "tslib": "^1.8.1" - }, - "engines": { - "node": ">= 6" - }, - "peerDependencies": { - "typescript": ">=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta" - } - }, - "node_modules/tsutils/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true - }, - "node_modules/type-check": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", - "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", - "dev": true, - "dependencies": { - "prelude-ls": "^1.2.1" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/type-detect": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", - "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/type-fest": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", - "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", - "engines": { - "node": ">=8" - } - }, - "node_modules/type-is": { - "version": "1.6.18", - "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", - "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", - "dependencies": { - "media-typer": "0.3.0", - "mime-types": "~2.1.24" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/typed-array-length": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.4.tgz", - "integrity": "sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "for-each": "^0.3.3", - "is-typed-array": "^1.1.9" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/typedarray": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", - "integrity": "sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==", - "dev": true - }, - "node_modules/typescript": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.0.4.tgz", - "integrity": "sha512-cW9T5W9xY37cc+jfEnaUvX91foxtHkza3Nw3wkoF4sSlKn0MONdkdEndig/qPBWXNkmplh3NzayQzCiHM4/hqw==", - "dev": true, - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - }, - "engines": { - "node": ">=12.20" - } - }, - "node_modules/ua-parser-js": { - "version": "1.0.35", - "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-1.0.35.tgz", - "integrity": "sha512-fKnGuqmTBnIE+/KXSzCn4db8RTigUzw1AN0DmdU6hJovUTbYJKyqj+8Mt1c4VfRDnOVJnENmfYkIPZ946UrSAA==", - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/ua-parser-js" - }, - { - "type": "paypal", - "url": "https://paypal.me/faisalman" - } - ], - "engines": { - "node": "*" - } - }, - "node_modules/uglify-js": { - "version": "3.17.4", - "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.17.4.tgz", - "integrity": "sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g==", - "optional": true, - "bin": { - "uglifyjs": "bin/uglifyjs" - }, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/unbox-primitive": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", - "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "has-bigints": "^1.0.2", - "has-symbols": "^1.0.3", - "which-boxed-primitive": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/uniq": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/uniq/-/uniq-1.0.1.tgz", - "integrity": "sha512-Gw+zz50YNKPDKXs+9d+aKAjVwpjNwqzvNpLigIruT4HA9lMZNdMqs9x07kKHB/L9WRzqp4+DlTU5s4wG2esdoA==", - "dev": true - }, - "node_modules/universalify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", - "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", - "dev": true, - "engines": { - "node": ">= 10.0.0" - } - }, - "node_modules/unpipe": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", - "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/unset-value": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-2.0.1.tgz", - "integrity": "sha512-2hvrBfjUE00PkqN+q0XP6yRAOGrR06uSiUoIQGZkc7GxvQ9H7v8quUPNtZjMg4uux69i8HWpIjLPUKwCuRGyNg==", - "dependencies": { - "has-value": "^2.0.2", - "isobject": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/unset-value/node_modules/isobject": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-4.0.0.tgz", - "integrity": "sha512-S/2fF5wH8SJA/kmwr6HYhK/RI/OkhD84k8ntalo0iJjZikgq1XFvR5M8NPT1x5F7fBwCG3qHfnzeP/Vh/ZxCUA==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/update-browserslist-db": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.11.tgz", - "integrity": "sha512-dCwEFf0/oT85M1fHBg4F0jtLwJrutGoHSQXCh7u4o2t1drG+c0a9Flnqww6XUKSfQMPpJBRjU8d4RXB09qtvaA==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/browserslist" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "dependencies": { - "escalade": "^3.1.1", - "picocolors": "^1.0.0" - }, - "bin": { - "update-browserslist-db": "cli.js" - }, - "peerDependencies": { - "browserslist": ">= 4.21.0" - } - }, - "node_modules/uri-js": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", - "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", - "dependencies": { - "punycode": "^2.1.0" - } - }, - "node_modules/url-parse-lax": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-3.0.0.tgz", - "integrity": "sha512-NjFKA0DidqPa5ciFcSrXnAltTtzz84ogy+NebPvfEgAck0+TNg4UJ4IN+fB7zRZfbgUf0syOo9MDxFkDSMuFaQ==", - "dev": true, - "dependencies": { - "prepend-http": "^2.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/url-to-options": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/url-to-options/-/url-to-options-1.0.1.tgz", - "integrity": "sha512-0kQLIzG4fdk/G5NONku64rSH/x32NOA39LVQqlK8Le6lvTF6GGRJpqaQFGgU+CLwySIqBSMdwYM0sYcW9f6P4A==", - "dev": true, - "engines": { - "node": ">= 4" - } - }, - "node_modules/utf8-byte-length": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/utf8-byte-length/-/utf8-byte-length-1.0.4.tgz", - "integrity": "sha512-4+wkEYLBbWxqTahEsWrhxepcoVOJ+1z5PGIjPZxRkytcdSUaNjIjBM7Xn8E+pdSuV7SzvWovBFA54FO0JSoqhA==" - }, - "node_modules/utf8-length": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/utf8-length/-/utf8-length-0.0.1.tgz", - "integrity": "sha512-j/XH2ftofBiobnyApxlN/J6j/ixwT89WEjDcjT66d2i0+GIn9RZfzt8lpEXXE4jUe4NsjBSUq70kS2euQ4nnMw==" - }, - "node_modules/util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" - }, - "node_modules/uuid": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.0.tgz", - "integrity": "sha512-MXcSTerfPa4uqyzStbRoTgt5XIe3x5+42+q1sDuy3R5MDk66URdLMOZe5aPX/SQd+kuYAh0FdP/pO28IkQyTeg==", - "bin": { - "uuid": "dist/bin/uuid" - } - }, - "node_modules/v8-compile-cache-lib": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz", - "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==", - "dev": true - }, - "node_modules/v8-to-istanbul": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.1.0.tgz", - "integrity": "sha512-6z3GW9x8G1gd+JIIgQQQxXuiJtCXeAjp6RaPEPLv62mH3iPHPxV6W3robxtCzNErRo6ZwTmzWhsbNvjyEBKzKA==", - "dev": true, - "dependencies": { - "@jridgewell/trace-mapping": "^0.3.12", - "@types/istanbul-lib-coverage": "^2.0.1", - "convert-source-map": "^1.6.0" - }, - "engines": { - "node": ">=10.12.0" - } - }, - "node_modules/valid-url": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/valid-url/-/valid-url-1.0.9.tgz", - "integrity": "sha512-QQDsV8OnSf5Uc30CKSwG9lnhMPe6exHtTXLRYX8uMwKENy640pU+2BgBL0LRbDh/eYRahNCS7aewCx0wf3NYVA==" - }, - "node_modules/validate-npm-package-license": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", - "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", - "dependencies": { - "spdx-correct": "^3.0.0", - "spdx-expression-parse": "^3.0.0" - } - }, - "node_modules/vary": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", - "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/vscode-json-languageservice": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/vscode-json-languageservice/-/vscode-json-languageservice-4.2.1.tgz", - "integrity": "sha512-xGmv9QIWs2H8obGbWg+sIPI/3/pFgj/5OWBhNzs00BkYQ9UaB2F6JJaGB/2/YOZJ3BvLXQTC4Q7muqU25QgAhA==", - "dev": true, - "dependencies": { - "jsonc-parser": "^3.0.0", - "vscode-languageserver-textdocument": "^1.0.3", - "vscode-languageserver-types": "^3.16.0", - "vscode-nls": "^5.0.0", - "vscode-uri": "^3.0.3" - } - }, - "node_modules/vscode-languageserver-textdocument": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/vscode-languageserver-textdocument/-/vscode-languageserver-textdocument-1.0.8.tgz", - "integrity": "sha512-1bonkGqQs5/fxGT5UchTgjGVnfysL0O8v1AYMBjqTbWQTFn721zaPGDYFkOKtfDgFiSgXM3KwaG3FMGfW4Ed9Q==", - "dev": true - }, - "node_modules/vscode-languageserver-types": { - "version": "3.17.2", - "resolved": "https://registry.npmjs.org/vscode-languageserver-types/-/vscode-languageserver-types-3.17.2.tgz", - "integrity": "sha512-zHhCWatviizPIq9B7Vh9uvrH6x3sK8itC84HkamnBWoDFJtzBf7SWlpLCZUit72b3os45h6RWQNC9xHRDF8dRA==", - "dev": true - }, - "node_modules/vscode-nls": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/vscode-nls/-/vscode-nls-5.2.0.tgz", - "integrity": "sha512-RAaHx7B14ZU04EU31pT+rKz2/zSl7xMsfIZuo8pd+KZO6PXtQmpevpq3vxvWNcrGbdmhM/rr5Uw5Mz+NBfhVng==", - "dev": true - }, - "node_modules/vscode-uri": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/vscode-uri/-/vscode-uri-3.0.7.tgz", - "integrity": "sha512-eOpPHogvorZRobNqJGhapa0JdwaxpjVvyBp0QIUMRMSf8ZAlqOdEquKuRmw9Qwu0qXtJIWqFtMkmvJjUZmMjVA==", - "dev": true - }, - "node_modules/walkdir": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/walkdir/-/walkdir-0.4.1.tgz", - "integrity": "sha512-3eBwRyEln6E1MSzcxcVpQIhRG8Q1jLvEqRmCZqS3dsfXEDR/AhOF4d+jHg1qvDCpYaVRZjENPQyrVxAkQqxPgQ==", - "dev": true, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/walker": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.8.tgz", - "integrity": "sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==", - "dev": true, - "dependencies": { - "makeerror": "1.0.12" - } - }, - "node_modules/wcwidth": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", - "integrity": "sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==", - "dependencies": { - "defaults": "^1.0.3" - } - }, - "node_modules/which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/which-boxed-primitive": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", - "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", - "dev": true, - "dependencies": { - "is-bigint": "^1.0.1", - "is-boolean-object": "^1.1.0", - "is-number-object": "^1.0.4", - "is-string": "^1.0.5", - "is-symbol": "^1.0.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/which-module": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.1.tgz", - "integrity": "sha512-iBdZ57RDvnOR9AGBhML2vFZf7h8vmBjhoaZqODJBFWHVtKkDmKuHai3cx5PgVMrX5YDNp27AofYbAwctSS+vhQ==", - "dev": true - }, - "node_modules/which-typed-array": { - "version": "1.1.9", - "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.9.tgz", - "integrity": "sha512-w9c4xkx6mPidwp7180ckYWfMmvxpjlZuIudNtDf4N/tTAUB8VJbX25qZoAsrtGuYNnGw3pa0AXgbGKRB8/EceA==", - "dev": true, - "dependencies": { - "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.2", - "for-each": "^0.3.3", - "gopd": "^1.0.1", - "has-tostringtag": "^1.0.0", - "is-typed-array": "^1.1.10" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/widest-line": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-3.1.0.tgz", - "integrity": "sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg==", - "dev": true, - "dependencies": { - "string-width": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/winston": { - "version": "3.8.2", - "resolved": "https://registry.npmjs.org/winston/-/winston-3.8.2.tgz", - "integrity": "sha512-MsE1gRx1m5jdTTO9Ld/vND4krP2To+lgDoMEHGGa4HIlAUyXJtfc7CxQcGXVyz2IBpw5hbFkj2b/AtUdQwyRew==", - "dependencies": { - "@colors/colors": "1.5.0", - "@dabh/diagnostics": "^2.0.2", - "async": "^3.2.3", - "is-stream": "^2.0.0", - "logform": "^2.4.0", - "one-time": "^1.0.0", - "readable-stream": "^3.4.0", - "safe-stable-stringify": "^2.3.1", - "stack-trace": "0.0.x", - "triple-beam": "^1.3.0", - "winston-transport": "^4.5.0" - }, - "engines": { - "node": ">= 12.0.0" - } - }, - "node_modules/winston-transport": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/winston-transport/-/winston-transport-4.5.0.tgz", - "integrity": "sha512-YpZzcUzBedhlTAfJg6vJDlyEai/IFMIVcaEZZyl3UXIl4gmqRpU7AE89AHLkbzLUsv0NVmw7ts+iztqKxxPW1Q==", - "dependencies": { - "logform": "^2.3.2", - "readable-stream": "^3.6.0", - "triple-beam": "^1.3.0" - }, - "engines": { - "node": ">= 6.4.0" - } - }, - "node_modules/winston-transport/node_modules/readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/winston/node_modules/readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/word-wrap": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", - "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/wordwrap": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", - "integrity": "sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==" - }, - "node_modules/wrap-ansi": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, - "node_modules/wrap-ansi-cjs": { - "name": "wrap-ansi", - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, - "node_modules/wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" - }, - "node_modules/xtend": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", - "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", - "dev": true, - "engines": { - "node": ">=0.4" - } - }, - "node_modules/y18n": { - "version": "5.0.8", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", - "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", - "dev": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/yallist": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", - "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", - "dev": true - }, - "node_modules/yaml": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.3.1.tgz", - "integrity": "sha512-2eHWfjaoXgTBC2jNM1LRef62VQa0umtvRiDSk6HSzW7RvS5YtkabJrwYLLEKWBc8a5U2PTSCs+dJjUTJdlHsWQ==", - "dev": true, - "engines": { - "node": ">= 14" - } - }, - "node_modules/yargs": { - "version": "17.7.1", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.1.tgz", - "integrity": "sha512-cwiTb08Xuv5fqF4AovYacTFNxk62th7LKJ6BL9IGUpTJrWoU7/7WdQGTP2SjKf1dUNBGzDd28p/Yfs/GI6JrLw==", - "dev": true, - "dependencies": { - "cliui": "^8.0.1", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.3", - "y18n": "^5.0.5", - "yargs-parser": "^21.1.1" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/yargs-parser": { - "version": "20.2.9", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", - "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", - "dev": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/yargs/node_modules/yargs-parser": { - "version": "21.1.1", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", - "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", - "dev": true, - "engines": { - "node": ">=12" - } - }, - "node_modules/ylru": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/ylru/-/ylru-1.3.2.tgz", - "integrity": "sha512-RXRJzMiK6U2ye0BlGGZnmpwJDPgakn6aNQ0A7gHRbD4I0uvK4TW6UqkK1V0pp9jskjJBAXd3dRrbzWkqJ+6cxA==", - "engines": { - "node": ">= 4.0.0" - } - }, - "node_modules/yn": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", - "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/yocto-queue": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", - "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - } - } -} diff --git a/package.json b/package.json index 43c7deccb0..55aeecf425 100644 --- a/package.json +++ b/package.json @@ -53,7 +53,7 @@ "@amplitude/ua-parser-js": "^0.7.24", "@aws-sdk/client-personalize": "^3.363.0", "@aws-sdk/client-s3": "^3.370.0", - "@aws-sdk/credential-providers": "^3.363.0", + "@aws-sdk/credential-providers": "^3.391.0", "@aws-sdk/lib-storage": "^3.391.0", "@bugsnag/js": "^7.20.2", "@datadog/pprof": "^3.1.0", From 404140f81a5772b0c36535a186f0eee4d9806211 Mon Sep 17 00:00:00 2001 From: snyk-bot Date: Fri, 8 Sep 2023 03:19:09 +0000 Subject: [PATCH 03/37] fix: upgrade @aws-sdk/client-personalize from 3.363.0 to 3.391.0 Snyk has created this PR to upgrade @aws-sdk/client-personalize from 3.363.0 to 3.391.0. See this package in npm: https://www.npmjs.com/package/@aws-sdk/client-personalize See this project in Snyk: https://app.snyk.io/org/datamanagement/project/39f686fe-9e69-4343-a9ce-129e22bff288?utm_source=github&utm_medium=referral&page=upgrade-pr --- package-lock.json | 20345 ++++++++++++++++++++++++++++++++++++++++++++ package.json | 2 +- 2 files changed, 20346 insertions(+), 1 deletion(-) create mode 100644 package-lock.json diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000000..28d9321b2d --- /dev/null +++ b/package-lock.json @@ -0,0 +1,20345 @@ +{ + "name": "rudder-transformer", + "version": "1.40.1", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "rudder-transformer", + "version": "1.40.1", + "license": "ISC", + "dependencies": { + "@amplitude/ua-parser-js": "^0.7.24", + "@aws-sdk/client-personalize": "^3.391.0", + "@aws-sdk/client-s3": "^3.370.0", + "@aws-sdk/credential-providers": "^3.391.0", + "@aws-sdk/lib-storage": "^3.391.0", + "@bugsnag/js": "^7.20.2", + "@datadog/pprof": "^3.1.0", + "@koa/router": "^12.0.0", + "@ndhoule/extend": "^2.0.0", + "ajv": "^8.12.0", + "ajv-draft-04": "^1.0.0", + "ajv-formats": "^2.1.1", + "axios": "^1.4.0", + "btoa": "^1.2.1", + "component-each": "^0.2.6", + "crypto-js": "^4.1.1", + "dotenv": "^16.0.3", + "flat": "^5.0.2", + "form-data": "^4.0.0", + "get-value": "^3.0.1", + "handlebars": "^4.7.7", + "http-graceful-shutdown": "^3.1.13", + "https-proxy-agent": "^5.0.1", + "ioredis": "^5.3.2", + "is": "^3.3.0", + "is-ip": "^3.1.0", + "isolated-vm": "4.5.0", + "js-sha1": "^0.6.0", + "json-diff": "^1.0.3", + "json-size": "^1.0.0", + "jsontoxml": "^1.0.1", + "koa": "^2.14.1", + "koa-bodyparser": "^4.4.0", + "koa2-swagger-ui": "^5.7.0", + "lodash": "^4.17.21", + "match-json": "^1.3.5", + "md5": "^2.3.0", + "modclean": "^3.0.0-beta.1", + "moment": "^2.29.4", + "moment-timezone": "^0.5.43", + "node-cache": "^5.1.2", + "node-fetch": "^2.6.9", + "oauth-1.0a": "^2.2.6", + "object-hash": "^3.0.0", + "parse-static-imports": "^1.1.0", + "prom-client": "^14.2.0", + "qs": "^6.11.1", + "rudder-transformer-cdk": "^1.4.11", + "rudder-workflow-engine": "^0.4.7", + "set-value": "^4.1.0", + "sha256": "^0.2.0", + "stacktrace-parser": "^0.1.10", + "statsd-client": "^0.4.7", + "truncate-utf8-bytes": "^1.0.2", + "ua-parser-js": "^1.0.35", + "unset-value": "^2.0.1", + "uuid": "^9.0.0", + "valid-url": "^1.0.9" + }, + "devDependencies": { + "@commitlint/config-conventional": "^17.6.3", + "@digitalroute/cz-conventional-changelog-for-jira": "^8.0.1", + "@types/jest": "^29.5.1", + "@types/koa": "^2.13.6", + "@types/koa-bodyparser": "^4.3.10", + "@types/lodash": "^4.14.197", + "@types/node": "^20.2.5", + "@typescript-eslint/eslint-plugin": "^5.61.0", + "@typescript-eslint/parser": "^5.59.2", + "benchmark-suite": "^0.1.8", + "commander": "^10.0.1", + "commitizen": "^4.3.0", + "commitlint": "^17.6.3", + "conventional-github-releaser": "^3.1.5", + "eslint": "^8.40.0", + "eslint-config-airbnb-base": "^15.0.0", + "eslint-config-airbnb-typescript": "^17.0.0", + "eslint-config-prettier": "^8.8.0", + "eslint-plugin-import": "^2.27.5", + "eslint-plugin-json": "^3.1.0", + "eslint-plugin-sonarjs": "^0.19.0", + "eslint-plugin-unicorn": "^46.0.1", + "glob": "^10.3.3", + "http-terminator": "^3.2.0", + "husky": "^8.0.3", + "jest": "^29.5.0", + "jest-sonar": "^0.2.16", + "jest-when": "^3.5.2", + "lint-staged": "^13.2.2", + "madge": "^6.1.0", + "mocked-env": "^1.3.5", + "node-notifier": "^10.0.1", + "prettier": "^2.8.8", + "semver": "^7.5.3", + "standard-version": "^9.5.0", + "supertest": "^6.3.3", + "swagger-cli": "^4.0.4", + "ts-jest": "^29.1.0", + "typescript": "^5.0.4" + } + }, + "node_modules/@aashutoshrathi/word-wrap": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz", + "integrity": "sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@amplitude/ua-parser-js": { + "version": "0.7.24", + "resolved": "https://registry.npmjs.org/@amplitude/ua-parser-js/-/ua-parser-js-0.7.24.tgz", + "integrity": "sha512-VbQuJymJ20WEw0HtI2np7EdC3NJGUWi8+Xdbc7uk8WfMIF308T0howpzkQ3JFMN7ejnrcSM/OyNGveeE3TP3TA==", + "engines": { + "node": "*" + } + }, + "node_modules/@ampproject/remapping": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.0.tgz", + "integrity": "sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w==", + "dev": true, + "dependencies": { + "@jridgewell/gen-mapping": "^0.1.0", + "@jridgewell/trace-mapping": "^0.3.9" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@apidevtools/json-schema-ref-parser": { + "version": "9.0.6", + "resolved": "https://registry.npmjs.org/@apidevtools/json-schema-ref-parser/-/json-schema-ref-parser-9.0.6.tgz", + "integrity": "sha512-M3YgsLjI0lZxvrpeGVk9Ap032W6TPQkH6pRAZz81Ac3WUNF79VQooAFnp8umjvVzUmD93NkogxEwbSce7qMsUg==", + "dev": true, + "dependencies": { + "@jsdevtools/ono": "^7.1.3", + "call-me-maybe": "^1.0.1", + "js-yaml": "^3.13.1" + } + }, + "node_modules/@apidevtools/json-schema-ref-parser/node_modules/argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, + "dependencies": { + "sprintf-js": "~1.0.2" + } + }, + "node_modules/@apidevtools/json-schema-ref-parser/node_modules/js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "dev": true, + "dependencies": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/@apidevtools/openapi-schemas": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@apidevtools/openapi-schemas/-/openapi-schemas-2.1.0.tgz", + "integrity": "sha512-Zc1AlqrJlX3SlpupFGpiLi2EbteyP7fXmUOGup6/DnkRgjP9bgMM/ag+n91rsv0U1Gpz0H3VILA/o3bW7Ua6BQ==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/@apidevtools/swagger-methods": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@apidevtools/swagger-methods/-/swagger-methods-3.0.2.tgz", + "integrity": "sha512-QAkD5kK2b1WfjDS/UQn/qQkbwF31uqRjPTrsCs5ZG9BQGAkjwvqGFjjPqAuzac/IYzpPtRzjCP1WrTuAIjMrXg==", + "dev": true + }, + "node_modules/@apidevtools/swagger-parser": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/@apidevtools/swagger-parser/-/swagger-parser-10.1.0.tgz", + "integrity": "sha512-9Kt7EuS/7WbMAUv2gSziqjvxwDbFSg3Xeyfuj5laUODX8o/k/CpsAKiQ8W7/R88eXFTMbJYg6+7uAmOWNKmwnw==", + "dev": true, + "dependencies": { + "@apidevtools/json-schema-ref-parser": "9.0.6", + "@apidevtools/openapi-schemas": "^2.1.0", + "@apidevtools/swagger-methods": "^3.0.2", + "@jsdevtools/ono": "^7.1.3", + "ajv": "^8.6.3", + "ajv-draft-04": "^1.0.0", + "call-me-maybe": "^1.0.1" + }, + "peerDependencies": { + "openapi-types": ">=7" + } + }, + "node_modules/@aws-crypto/crc32": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/crc32/-/crc32-3.0.0.tgz", + "integrity": "sha512-IzSgsrxUcsrejQbPVilIKy16kAT52EwB6zSaI+M3xxIhKh5+aldEyvI+z6erM7TCLB2BJsFrtHjp6/4/sr+3dA==", + "dependencies": { + "@aws-crypto/util": "^3.0.0", + "@aws-sdk/types": "^3.222.0", + "tslib": "^1.11.1" + } + }, + "node_modules/@aws-crypto/crc32/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + }, + "node_modules/@aws-crypto/crc32c": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/crc32c/-/crc32c-3.0.0.tgz", + "integrity": "sha512-ENNPPManmnVJ4BTXlOjAgD7URidbAznURqD0KvfREyc4o20DPYdEldU1f5cQ7Jbj0CJJSPaMIk/9ZshdB3210w==", + "dependencies": { + "@aws-crypto/util": "^3.0.0", + "@aws-sdk/types": "^3.222.0", + "tslib": "^1.11.1" + } + }, + "node_modules/@aws-crypto/crc32c/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + }, + "node_modules/@aws-crypto/ie11-detection": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/ie11-detection/-/ie11-detection-3.0.0.tgz", + "integrity": "sha512-341lBBkiY1DfDNKai/wXM3aujNBkXR7tq1URPQDL9wi3AUbI80NR74uF1TXHMm7po1AcnFk8iu2S2IeU/+/A+Q==", + "dependencies": { + "tslib": "^1.11.1" + } + }, + "node_modules/@aws-crypto/ie11-detection/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + }, + "node_modules/@aws-crypto/sha1-browser": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/sha1-browser/-/sha1-browser-3.0.0.tgz", + "integrity": "sha512-NJth5c997GLHs6nOYTzFKTbYdMNA6/1XlKVgnZoaZcQ7z7UJlOgj2JdbHE8tiYLS3fzXNCguct77SPGat2raSw==", + "dependencies": { + "@aws-crypto/ie11-detection": "^3.0.0", + "@aws-crypto/supports-web-crypto": "^3.0.0", + "@aws-crypto/util": "^3.0.0", + "@aws-sdk/types": "^3.222.0", + "@aws-sdk/util-locate-window": "^3.0.0", + "@aws-sdk/util-utf8-browser": "^3.0.0", + "tslib": "^1.11.1" + } + }, + "node_modules/@aws-crypto/sha1-browser/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + }, + "node_modules/@aws-crypto/sha256-browser": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/sha256-browser/-/sha256-browser-3.0.0.tgz", + "integrity": "sha512-8VLmW2B+gjFbU5uMeqtQM6Nj0/F1bro80xQXCW6CQBWgosFWXTx77aeOF5CAIAmbOK64SdMBJdNr6J41yP5mvQ==", + "dependencies": { + "@aws-crypto/ie11-detection": "^3.0.0", + "@aws-crypto/sha256-js": "^3.0.0", + "@aws-crypto/supports-web-crypto": "^3.0.0", + "@aws-crypto/util": "^3.0.0", + "@aws-sdk/types": "^3.222.0", + "@aws-sdk/util-locate-window": "^3.0.0", + "@aws-sdk/util-utf8-browser": "^3.0.0", + "tslib": "^1.11.1" + } + }, + "node_modules/@aws-crypto/sha256-browser/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + }, + "node_modules/@aws-crypto/sha256-js": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/sha256-js/-/sha256-js-3.0.0.tgz", + "integrity": "sha512-PnNN7os0+yd1XvXAy23CFOmTbMaDxgxXtTKHybrJ39Y8kGzBATgBFibWJKH6BhytLI/Zyszs87xCOBNyBig6vQ==", + "dependencies": { + "@aws-crypto/util": "^3.0.0", + "@aws-sdk/types": "^3.222.0", + "tslib": "^1.11.1" + } + }, + "node_modules/@aws-crypto/sha256-js/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + }, + "node_modules/@aws-crypto/supports-web-crypto": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/supports-web-crypto/-/supports-web-crypto-3.0.0.tgz", + "integrity": "sha512-06hBdMwUAb2WFTuGG73LSC0wfPu93xWwo5vL2et9eymgmu3Id5vFAHBbajVWiGhPO37qcsdCap/FqXvJGJWPIg==", + "dependencies": { + "tslib": "^1.11.1" + } + }, + "node_modules/@aws-crypto/supports-web-crypto/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + }, + "node_modules/@aws-crypto/util": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/util/-/util-3.0.0.tgz", + "integrity": "sha512-2OJlpeJpCR48CC8r+uKVChzs9Iungj9wkZrl8Z041DWEWvyIHILYKCPNzJghKsivj+S3mLo6BVc7mBNzdxA46w==", + "dependencies": { + "@aws-sdk/types": "^3.222.0", + "@aws-sdk/util-utf8-browser": "^3.0.0", + "tslib": "^1.11.1" + } + }, + "node_modules/@aws-crypto/util/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + }, + "node_modules/@aws-sdk/chunked-blob-reader": { + "version": "3.310.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/chunked-blob-reader/-/chunked-blob-reader-3.310.0.tgz", + "integrity": "sha512-CrJS3exo4mWaLnWxfCH+w88Ou0IcAZSIkk4QbmxiHl/5Dq705OLoxf4385MVyExpqpeVJYOYQ2WaD8i/pQZ2fg==", + "dependencies": { + "tslib": "^2.5.0" + } + }, + "node_modules/@aws-sdk/chunked-blob-reader-native": { + "version": "3.310.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/chunked-blob-reader-native/-/chunked-blob-reader-native-3.310.0.tgz", + "integrity": "sha512-RuhyUY9hCd6KWA2DMF/U6rilYLLRYrDY6e0lq3Of1yzSRFxi4bk9ZMCF0mxf/9ppsB5eudUjrOypYgm6Axt3zw==", + "dependencies": { + "@aws-sdk/util-base64": "3.310.0", + "tslib": "^2.5.0" + } + }, + "node_modules/@aws-sdk/client-cognito-identity": { + "version": "3.391.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-cognito-identity/-/client-cognito-identity-3.391.0.tgz", + "integrity": "sha512-5mlkdrLP6sTG6D+q/qFw6vPVegFGSy1XcVUdERmWo6fvR7mYlRNETGC5sNsGPcMhnN3MCviqxCJmXpwnsP7okg==", + "dependencies": { + "@aws-crypto/sha256-browser": "3.0.0", + "@aws-crypto/sha256-js": "3.0.0", + "@aws-sdk/client-sts": "3.391.0", + "@aws-sdk/credential-provider-node": "3.391.0", + "@aws-sdk/middleware-host-header": "3.391.0", + "@aws-sdk/middleware-logger": "3.391.0", + "@aws-sdk/middleware-recursion-detection": "3.391.0", + "@aws-sdk/middleware-signing": "3.391.0", + "@aws-sdk/middleware-user-agent": "3.391.0", + "@aws-sdk/types": "3.391.0", + "@aws-sdk/util-endpoints": "3.391.0", + "@aws-sdk/util-user-agent-browser": "3.391.0", + "@aws-sdk/util-user-agent-node": "3.391.0", + "@smithy/config-resolver": "^2.0.3", + "@smithy/fetch-http-handler": "^2.0.3", + "@smithy/hash-node": "^2.0.3", + "@smithy/invalid-dependency": "^2.0.3", + "@smithy/middleware-content-length": "^2.0.3", + "@smithy/middleware-endpoint": "^2.0.3", + "@smithy/middleware-retry": "^2.0.3", + "@smithy/middleware-serde": "^2.0.3", + "@smithy/middleware-stack": "^2.0.0", + "@smithy/node-config-provider": "^2.0.3", + "@smithy/node-http-handler": "^2.0.3", + "@smithy/protocol-http": "^2.0.3", + "@smithy/smithy-client": "^2.0.3", + "@smithy/types": "^2.2.0", + "@smithy/url-parser": "^2.0.3", + "@smithy/util-base64": "^2.0.0", + "@smithy/util-body-length-browser": "^2.0.0", + "@smithy/util-body-length-node": "^2.0.0", + "@smithy/util-defaults-mode-browser": "^2.0.3", + "@smithy/util-defaults-mode-node": "^2.0.3", + "@smithy/util-retry": "^2.0.0", + "@smithy/util-utf8": "^2.0.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-cognito-identity/node_modules/@aws-sdk/client-sso": { + "version": "3.391.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso/-/client-sso-3.391.0.tgz", + "integrity": "sha512-aT+O1CbWIWYlCtWK6g3ZaMvFNImOgFGurOEPscuedqzG5UQc1bRtRrGYShLyzcZgfXP+s0cKYJqgGeRNoWiwqA==", + "dependencies": { + "@aws-crypto/sha256-browser": "3.0.0", + "@aws-crypto/sha256-js": "3.0.0", + "@aws-sdk/middleware-host-header": "3.391.0", + "@aws-sdk/middleware-logger": "3.391.0", + "@aws-sdk/middleware-recursion-detection": "3.391.0", + "@aws-sdk/middleware-user-agent": "3.391.0", + "@aws-sdk/types": "3.391.0", + "@aws-sdk/util-endpoints": "3.391.0", + "@aws-sdk/util-user-agent-browser": "3.391.0", + "@aws-sdk/util-user-agent-node": "3.391.0", + "@smithy/config-resolver": "^2.0.3", + "@smithy/fetch-http-handler": "^2.0.3", + "@smithy/hash-node": "^2.0.3", + "@smithy/invalid-dependency": "^2.0.3", + "@smithy/middleware-content-length": "^2.0.3", + "@smithy/middleware-endpoint": "^2.0.3", + "@smithy/middleware-retry": "^2.0.3", + "@smithy/middleware-serde": "^2.0.3", + "@smithy/middleware-stack": "^2.0.0", + "@smithy/node-config-provider": "^2.0.3", + "@smithy/node-http-handler": "^2.0.3", + "@smithy/protocol-http": "^2.0.3", + "@smithy/smithy-client": "^2.0.3", + "@smithy/types": "^2.2.0", + "@smithy/url-parser": "^2.0.3", + "@smithy/util-base64": "^2.0.0", + "@smithy/util-body-length-browser": "^2.0.0", + "@smithy/util-body-length-node": "^2.0.0", + "@smithy/util-defaults-mode-browser": "^2.0.3", + "@smithy/util-defaults-mode-node": "^2.0.3", + "@smithy/util-retry": "^2.0.0", + "@smithy/util-utf8": "^2.0.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-cognito-identity/node_modules/@aws-sdk/client-sts": { + "version": "3.391.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-sts/-/client-sts-3.391.0.tgz", + "integrity": "sha512-y+KmorcUx9o5O99sXVPbhGUpsLpfhzYRaYCqxArLsyzZTCO6XDXMi8vg/xtS+b703j9lWEl5GxAv2oBaEwEnhQ==", + "dependencies": { + "@aws-crypto/sha256-browser": "3.0.0", + "@aws-crypto/sha256-js": "3.0.0", + "@aws-sdk/credential-provider-node": "3.391.0", + "@aws-sdk/middleware-host-header": "3.391.0", + "@aws-sdk/middleware-logger": "3.391.0", + "@aws-sdk/middleware-recursion-detection": "3.391.0", + "@aws-sdk/middleware-sdk-sts": "3.391.0", + "@aws-sdk/middleware-signing": "3.391.0", + "@aws-sdk/middleware-user-agent": "3.391.0", + "@aws-sdk/types": "3.391.0", + "@aws-sdk/util-endpoints": "3.391.0", + "@aws-sdk/util-user-agent-browser": "3.391.0", + "@aws-sdk/util-user-agent-node": "3.391.0", + "@smithy/config-resolver": "^2.0.3", + "@smithy/fetch-http-handler": "^2.0.3", + "@smithy/hash-node": "^2.0.3", + "@smithy/invalid-dependency": "^2.0.3", + "@smithy/middleware-content-length": "^2.0.3", + "@smithy/middleware-endpoint": "^2.0.3", + "@smithy/middleware-retry": "^2.0.3", + "@smithy/middleware-serde": "^2.0.3", + "@smithy/middleware-stack": "^2.0.0", + "@smithy/node-config-provider": "^2.0.3", + "@smithy/node-http-handler": "^2.0.3", + "@smithy/protocol-http": "^2.0.3", + "@smithy/smithy-client": "^2.0.3", + "@smithy/types": "^2.2.0", + "@smithy/url-parser": "^2.0.3", + "@smithy/util-base64": "^2.0.0", + "@smithy/util-body-length-browser": "^2.0.0", + "@smithy/util-body-length-node": "^2.0.0", + "@smithy/util-defaults-mode-browser": "^2.0.3", + "@smithy/util-defaults-mode-node": "^2.0.3", + "@smithy/util-retry": "^2.0.0", + "@smithy/util-utf8": "^2.0.0", + "fast-xml-parser": "4.2.5", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-cognito-identity/node_modules/@aws-sdk/credential-provider-env": { + "version": "3.391.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-env/-/credential-provider-env-3.391.0.tgz", + "integrity": "sha512-mAzICedcg4bfL0mM5O6QTd9mQ331NLse1DMr6XL21ZZiLB48ej19L7AGV2xq5QwVbqKU3IVv1myRyhvpDM9jMg==", + "dependencies": { + "@aws-sdk/types": "3.391.0", + "@smithy/property-provider": "^2.0.0", + "@smithy/types": "^2.2.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-cognito-identity/node_modules/@aws-sdk/credential-provider-ini": { + "version": "3.391.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.391.0.tgz", + "integrity": "sha512-DJZmbmRMqNSfSV7UF8eBVhADz16KAMCTxnFuvgioHHfYUTZQEhCxRHI8jJqYWxhLTriS7AuTBIWr+1AIbwsCTA==", + "dependencies": { + "@aws-sdk/credential-provider-env": "3.391.0", + "@aws-sdk/credential-provider-process": "3.391.0", + "@aws-sdk/credential-provider-sso": "3.391.0", + "@aws-sdk/credential-provider-web-identity": "3.391.0", + "@aws-sdk/types": "3.391.0", + "@smithy/credential-provider-imds": "^2.0.0", + "@smithy/property-provider": "^2.0.0", + "@smithy/shared-ini-file-loader": "^2.0.0", + "@smithy/types": "^2.2.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-cognito-identity/node_modules/@aws-sdk/credential-provider-node": { + "version": "3.391.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.391.0.tgz", + "integrity": "sha512-LXHQwsTw4WBwRzD9swu8254Hao5MoIaGXIzbhX4EQ84dtOkKYbwiY4pDpLfcHcw3B1lFKkVclMze8WAs4EdEww==", + "dependencies": { + "@aws-sdk/credential-provider-env": "3.391.0", + "@aws-sdk/credential-provider-ini": "3.391.0", + "@aws-sdk/credential-provider-process": "3.391.0", + "@aws-sdk/credential-provider-sso": "3.391.0", + "@aws-sdk/credential-provider-web-identity": "3.391.0", + "@aws-sdk/types": "3.391.0", + "@smithy/credential-provider-imds": "^2.0.0", + "@smithy/property-provider": "^2.0.0", + "@smithy/shared-ini-file-loader": "^2.0.0", + "@smithy/types": "^2.2.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-cognito-identity/node_modules/@aws-sdk/credential-provider-process": { + "version": "3.391.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-process/-/credential-provider-process-3.391.0.tgz", + "integrity": "sha512-KMlzPlBI+hBmXDo+EoFZdLgCVRkRa9B9iEE6x0+hQQ6g9bW6HI7cDRVdceR1ZoPasSaNAZ9QOXMTIBxTpn0sPQ==", + "dependencies": { + "@aws-sdk/types": "3.391.0", + "@smithy/property-provider": "^2.0.0", + "@smithy/shared-ini-file-loader": "^2.0.0", + "@smithy/types": "^2.2.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-cognito-identity/node_modules/@aws-sdk/credential-provider-sso": { + "version": "3.391.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.391.0.tgz", + "integrity": "sha512-FT/WoiRHiKys+FcRwvjui0yKuzNtJdn2uGuI1hYE0gpW1wVmW02ouufLckJTmcw09THUZ4w53OoCVU5OY00p8A==", + "dependencies": { + "@aws-sdk/client-sso": "3.391.0", + "@aws-sdk/token-providers": "3.391.0", + "@aws-sdk/types": "3.391.0", + "@smithy/property-provider": "^2.0.0", + "@smithy/shared-ini-file-loader": "^2.0.0", + "@smithy/types": "^2.2.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-cognito-identity/node_modules/@aws-sdk/credential-provider-web-identity": { + "version": "3.391.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.391.0.tgz", + "integrity": "sha512-n0vYg82B8bc4rxKltVbVqclev7hx+elyS9pEnZs3YbnbWJq0qqsznXmDfLqd1TcWpa09PGXcah0nsRDolVThsA==", + "dependencies": { + "@aws-sdk/types": "3.391.0", + "@smithy/property-provider": "^2.0.0", + "@smithy/types": "^2.2.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-cognito-identity/node_modules/@aws-sdk/middleware-host-header": { + "version": "3.391.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-host-header/-/middleware-host-header-3.391.0.tgz", + "integrity": "sha512-+nyNr0rb2ixY7mU48nibr7L7gsw37y4oELhqgnNKhcjZDJ34imBwKIMFa64n21FdftmhcjR8IdSpzXE9xrkJ8g==", + "dependencies": { + "@aws-sdk/types": "3.391.0", + "@smithy/protocol-http": "^2.0.3", + "@smithy/types": "^2.2.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-cognito-identity/node_modules/@aws-sdk/middleware-logger": { + "version": "3.391.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-logger/-/middleware-logger-3.391.0.tgz", + "integrity": "sha512-KOwl5zo16b17JDhqILHBStccBQ2w35em7+/6vdkJdUII6OU8aVIFTlIQT9wOUvd4do6biIRBMZG3IK0Rg7mRDQ==", + "dependencies": { + "@aws-sdk/types": "3.391.0", + "@smithy/types": "^2.2.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-cognito-identity/node_modules/@aws-sdk/middleware-recursion-detection": { + "version": "3.391.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.391.0.tgz", + "integrity": "sha512-hVR3z59G7pX4pjDQs9Ag1tMgbLeGXOzeAAaNP9fEtHSd3KBMAGQgN3K3b9WPjzE2W0EoloHRJMK4qxZErdde2g==", + "dependencies": { + "@aws-sdk/types": "3.391.0", + "@smithy/protocol-http": "^2.0.3", + "@smithy/types": "^2.2.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-cognito-identity/node_modules/@aws-sdk/middleware-sdk-sts": { + "version": "3.391.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-sdk-sts/-/middleware-sdk-sts-3.391.0.tgz", + "integrity": "sha512-6ZXI3Z4QU+TnT5PwKWloGmRHG81tWeI18/zxf9wWzrO2NhYFvITzEJH0vWLLiXdWtn/BYfLULXtDvkTaepbI5A==", + "dependencies": { + "@aws-sdk/middleware-signing": "3.391.0", + "@aws-sdk/types": "3.391.0", + "@smithy/types": "^2.2.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-cognito-identity/node_modules/@aws-sdk/middleware-signing": { + "version": "3.391.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-signing/-/middleware-signing-3.391.0.tgz", + "integrity": "sha512-2pAJJlZqaHc0d+cz2FTVrQmWi8ygKfqfczHUo/loCtOaMNtWXBHb/JsLEecs6cXdizy6gi3YsLz6VZYwY4Ssxw==", + "dependencies": { + "@aws-sdk/types": "3.391.0", + "@smithy/property-provider": "^2.0.0", + "@smithy/protocol-http": "^2.0.3", + "@smithy/signature-v4": "^2.0.0", + "@smithy/types": "^2.2.0", + "@smithy/util-middleware": "^2.0.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-cognito-identity/node_modules/@aws-sdk/middleware-user-agent": { + "version": "3.391.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.391.0.tgz", + "integrity": "sha512-LdK9uMNA14zqRw3B79Mhy7GX36qld/GYo93xuu+lr+AQ98leZEdc6GUbrtNDI3fP1Z8TMQcyHUKBml4/B+wXpQ==", + "dependencies": { + "@aws-sdk/types": "3.391.0", + "@aws-sdk/util-endpoints": "3.391.0", + "@smithy/protocol-http": "^2.0.3", + "@smithy/types": "^2.2.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-cognito-identity/node_modules/@aws-sdk/token-providers": { + "version": "3.391.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/token-providers/-/token-providers-3.391.0.tgz", + "integrity": "sha512-kgfArsKLDJE71qQjfXiHiM5cZqgDHlMsqEx35+A65GmTWJaS1PGDqu3ZvVVU8E5mxnCCLw7vho21fsjvH6TBpg==", + "dependencies": { + "@aws-crypto/sha256-browser": "3.0.0", + "@aws-crypto/sha256-js": "3.0.0", + "@aws-sdk/middleware-host-header": "3.391.0", + "@aws-sdk/middleware-logger": "3.391.0", + "@aws-sdk/middleware-recursion-detection": "3.391.0", + "@aws-sdk/middleware-user-agent": "3.391.0", + "@aws-sdk/types": "3.391.0", + "@aws-sdk/util-endpoints": "3.391.0", + "@aws-sdk/util-user-agent-browser": "3.391.0", + "@aws-sdk/util-user-agent-node": "3.391.0", + "@smithy/config-resolver": "^2.0.3", + "@smithy/fetch-http-handler": "^2.0.3", + "@smithy/hash-node": "^2.0.3", + "@smithy/invalid-dependency": "^2.0.3", + "@smithy/middleware-content-length": "^2.0.3", + "@smithy/middleware-endpoint": "^2.0.3", + "@smithy/middleware-retry": "^2.0.3", + "@smithy/middleware-serde": "^2.0.3", + "@smithy/middleware-stack": "^2.0.0", + "@smithy/node-config-provider": "^2.0.3", + "@smithy/node-http-handler": "^2.0.3", + "@smithy/property-provider": "^2.0.0", + "@smithy/protocol-http": "^2.0.3", + "@smithy/shared-ini-file-loader": "^2.0.0", + "@smithy/smithy-client": "^2.0.3", + "@smithy/types": "^2.2.0", + "@smithy/url-parser": "^2.0.3", + "@smithy/util-base64": "^2.0.0", + "@smithy/util-body-length-browser": "^2.0.0", + "@smithy/util-body-length-node": "^2.0.0", + "@smithy/util-defaults-mode-browser": "^2.0.3", + "@smithy/util-defaults-mode-node": "^2.0.3", + "@smithy/util-retry": "^2.0.0", + "@smithy/util-utf8": "^2.0.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-cognito-identity/node_modules/@aws-sdk/types": { + "version": "3.391.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.391.0.tgz", + "integrity": "sha512-QpYVFKMOnzHz/JMj/b8wb18qxiT92U/5r5MmtRz2R3LOH6ooTO96k4ozXCrYr0qNed1PAnOj73rPrrH2wnCJKQ==", + "dependencies": { + "@smithy/types": "^2.2.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-cognito-identity/node_modules/@aws-sdk/util-endpoints": { + "version": "3.391.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-endpoints/-/util-endpoints-3.391.0.tgz", + "integrity": "sha512-zv4sYDTQhNxyLoekcE02/nk3xvoo6yCHDy1kDJk0MFxOKaqUB+CvZdQBR4YBLSDlD4o4DUBmdYgKT58FfbM8sQ==", + "dependencies": { + "@aws-sdk/types": "3.391.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-cognito-identity/node_modules/@aws-sdk/util-user-agent-browser": { + "version": "3.391.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.391.0.tgz", + "integrity": "sha512-6ipHOB1WdCBNeAMJauN7l2qNE0WLVaTNhkD290/ElXm1FHGTL8yw6lIDIjhIFO1bmbZxDiKApwDiG7ROhaJoxQ==", + "dependencies": { + "@aws-sdk/types": "3.391.0", + "@smithy/types": "^2.2.0", + "bowser": "^2.11.0", + "tslib": "^2.5.0" + } + }, + "node_modules/@aws-sdk/client-cognito-identity/node_modules/@aws-sdk/util-user-agent-node": { + "version": "3.391.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.391.0.tgz", + "integrity": "sha512-PVvAK/Lf4BdB1eJIZtyFpGSslGQwKpYt9/hKs5NlR+qxBMXU9T0DnTqH4GiXZaazvXr7OUVWitIF2b7iKBMTow==", + "dependencies": { + "@aws-sdk/types": "3.391.0", + "@smithy/node-config-provider": "^2.0.3", + "@smithy/types": "^2.2.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "aws-crt": ">=1.0.0" + }, + "peerDependenciesMeta": { + "aws-crt": { + "optional": true + } + } + }, + "node_modules/@aws-sdk/client-cognito-identity/node_modules/@smithy/abort-controller": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@smithy/abort-controller/-/abort-controller-2.0.6.tgz", + "integrity": "sha512-4I7g0lyGUlW2onf8mD76IzU37oRWSHsQ5zlW5MjDzgg4I4J9bOK4500Gx6qOuoN7+GulAnGLe1YwyrIluzhakg==", + "dependencies": { + "@smithy/types": "^2.3.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-cognito-identity/node_modules/@smithy/config-resolver": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/@smithy/config-resolver/-/config-resolver-2.0.7.tgz", + "integrity": "sha512-J4J1AWiqaApC+3I9U++SuxAQ3BOoM5VoYnpFzCZcb63aLF80Zpc/nq2pFR1OsEIYyg2UYNdcBKKfHABmwo4WgQ==", + "dependencies": { + "@smithy/node-config-provider": "^2.0.9", + "@smithy/types": "^2.3.0", + "@smithy/util-config-provider": "^2.0.0", + "@smithy/util-middleware": "^2.0.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-cognito-identity/node_modules/@smithy/credential-provider-imds": { + "version": "2.0.9", + "resolved": "https://registry.npmjs.org/@smithy/credential-provider-imds/-/credential-provider-imds-2.0.9.tgz", + "integrity": "sha512-K7WZRkHS5HZofRgK+O8W4YXXyaVexU1K6hp9vlUL/8CsnrFbZS9quyH/6hTROrYh2PuJr24yii1kc83NJdxMGQ==", + "dependencies": { + "@smithy/node-config-provider": "^2.0.9", + "@smithy/property-provider": "^2.0.7", + "@smithy/types": "^2.3.0", + "@smithy/url-parser": "^2.0.6", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-cognito-identity/node_modules/@smithy/eventstream-codec": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@smithy/eventstream-codec/-/eventstream-codec-2.0.6.tgz", + "integrity": "sha512-J9xL82mlYRUMXFnB9VaThXkD7z2JLr52FIVZMoQQ1dxZG5ub+NOGmzaTTZC/cMmKXI/nwCoFuwDWCTjwQhYhQA==", + "dependencies": { + "@aws-crypto/crc32": "3.0.0", + "@smithy/types": "^2.3.0", + "@smithy/util-hex-encoding": "^2.0.0", + "tslib": "^2.5.0" + } + }, + "node_modules/@aws-sdk/client-cognito-identity/node_modules/@smithy/fetch-http-handler": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/@smithy/fetch-http-handler/-/fetch-http-handler-2.1.2.tgz", + "integrity": "sha512-3Gm3pQm4viUPU+e7KkRScS9t5phBxSNRS8rQSZ+HeCwK/busrX0/2HJZiwLvGblqPqi1laJB0lD18AdiOioJww==", + "dependencies": { + "@smithy/protocol-http": "^3.0.2", + "@smithy/querystring-builder": "^2.0.6", + "@smithy/types": "^2.3.0", + "@smithy/util-base64": "^2.0.0", + "tslib": "^2.5.0" + } + }, + "node_modules/@aws-sdk/client-cognito-identity/node_modules/@smithy/fetch-http-handler/node_modules/@smithy/protocol-http": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-3.0.2.tgz", + "integrity": "sha512-LUOWCPRihvJBkdSs+ivK9m1f/rMfF3n9Zpzg8qdry2eIG4HQqqLBMWQyF9bgk7JhsrrOa3//jJKhXzvL7wL5Xw==", + "dependencies": { + "@smithy/types": "^2.3.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-cognito-identity/node_modules/@smithy/hash-node": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@smithy/hash-node/-/hash-node-2.0.6.tgz", + "integrity": "sha512-xz7fzFxSzxohKGGyKPbLReRrY01JOZgRDHIXSks3PxQxG9c8PJMa5nUw0stH8UOySUgkofmMy0n7vTUsF5Mdqg==", + "dependencies": { + "@smithy/types": "^2.3.0", + "@smithy/util-buffer-from": "^2.0.0", + "@smithy/util-utf8": "^2.0.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-cognito-identity/node_modules/@smithy/invalid-dependency": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@smithy/invalid-dependency/-/invalid-dependency-2.0.6.tgz", + "integrity": "sha512-L5MUyl9mzawIvBxr0Hg3J/Q5qZFXKcBgMk0PacfK3Mthp4WAR6h7iMxdSQ23Q7X/kxOrpZuoYEdh1BWLKbDc8Q==", + "dependencies": { + "@smithy/types": "^2.3.0", + "tslib": "^2.5.0" + } + }, + "node_modules/@aws-sdk/client-cognito-identity/node_modules/@smithy/is-array-buffer": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-2.0.0.tgz", + "integrity": "sha512-z3PjFjMyZNI98JFRJi/U0nGoLWMSJlDjAW4QUX2WNZLas5C0CmVV6LJ01JI0k90l7FvpmixjWxPFmENSClQ7ug==", + "dependencies": { + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-cognito-identity/node_modules/@smithy/middleware-content-length": { + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/@smithy/middleware-content-length/-/middleware-content-length-2.0.8.tgz", + "integrity": "sha512-fHJFsscHXrYhUSWMFJNXfsZW8KsyhWQfBgU3b0nvDfpm+NAeQLqKYNhywGrDwZQc1k+lt7Fw9faAquhNPxTZRA==", + "dependencies": { + "@smithy/protocol-http": "^3.0.2", + "@smithy/types": "^2.3.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-cognito-identity/node_modules/@smithy/middleware-content-length/node_modules/@smithy/protocol-http": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-3.0.2.tgz", + "integrity": "sha512-LUOWCPRihvJBkdSs+ivK9m1f/rMfF3n9Zpzg8qdry2eIG4HQqqLBMWQyF9bgk7JhsrrOa3//jJKhXzvL7wL5Xw==", + "dependencies": { + "@smithy/types": "^2.3.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-cognito-identity/node_modules/@smithy/middleware-endpoint": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@smithy/middleware-endpoint/-/middleware-endpoint-2.0.6.tgz", + "integrity": "sha512-MuSPPtEHFal/M77tR3ffLsdOfX29IZpA990nGuoPj5zQnAYrA4PYBGoqqrASQKm8Xb3C0NwuYzOATT7WX4f5Pg==", + "dependencies": { + "@smithy/middleware-serde": "^2.0.6", + "@smithy/types": "^2.3.0", + "@smithy/url-parser": "^2.0.6", + "@smithy/util-middleware": "^2.0.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-cognito-identity/node_modules/@smithy/middleware-retry": { + "version": "2.0.9", + "resolved": "https://registry.npmjs.org/@smithy/middleware-retry/-/middleware-retry-2.0.9.tgz", + "integrity": "sha512-gneEqWj4l/ZjHdZPk0BFMXoTalRArdQ8i579/KqJgBAc6Ux5vnR/SSppkMCkj2kOQYwdypvzSPeqEW3ZrvIg6g==", + "dependencies": { + "@smithy/node-config-provider": "^2.0.9", + "@smithy/protocol-http": "^3.0.2", + "@smithy/service-error-classification": "^2.0.0", + "@smithy/types": "^2.3.0", + "@smithy/util-middleware": "^2.0.0", + "@smithy/util-retry": "^2.0.0", + "tslib": "^2.5.0", + "uuid": "^8.3.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-cognito-identity/node_modules/@smithy/middleware-retry/node_modules/@smithy/protocol-http": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-3.0.2.tgz", + "integrity": "sha512-LUOWCPRihvJBkdSs+ivK9m1f/rMfF3n9Zpzg8qdry2eIG4HQqqLBMWQyF9bgk7JhsrrOa3//jJKhXzvL7wL5Xw==", + "dependencies": { + "@smithy/types": "^2.3.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-cognito-identity/node_modules/@smithy/middleware-serde": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@smithy/middleware-serde/-/middleware-serde-2.0.6.tgz", + "integrity": "sha512-8/GODBngYbrS28CMZtaHIL4R9rLNSQ/zgb+N1OAZ02NwBUawlnLDcatve9YRzhJC/IWz0/pt+WimJZaO1sGcig==", + "dependencies": { + "@smithy/types": "^2.3.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-cognito-identity/node_modules/@smithy/middleware-stack": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@smithy/middleware-stack/-/middleware-stack-2.0.0.tgz", + "integrity": "sha512-31XC1xNF65nlbc16yuh3wwTudmqs6qy4EseQUGF8A/p2m/5wdd/cnXJqpniy/XvXVwkHPz/GwV36HqzHtIKATQ==", + "dependencies": { + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-cognito-identity/node_modules/@smithy/node-config-provider": { + "version": "2.0.9", + "resolved": "https://registry.npmjs.org/@smithy/node-config-provider/-/node-config-provider-2.0.9.tgz", + "integrity": "sha512-TlSPbCwtT/jgNnmPQqKuCR5CFN8UIrCCHRrgUfs3NqRMuaLLeP8TPe1fSKq2J8h1M/jd4BF853gneles0gWevg==", + "dependencies": { + "@smithy/property-provider": "^2.0.7", + "@smithy/shared-ini-file-loader": "^2.0.8", + "@smithy/types": "^2.3.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-cognito-identity/node_modules/@smithy/node-http-handler": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/@smithy/node-http-handler/-/node-http-handler-2.1.2.tgz", + "integrity": "sha512-PdEEDCShuM8zxGoaRxmGB/1ikB8oeqz+ZAF9VIA8FCP3E59j8zDTF+wCELoWd1Y6gtxr+RcTAg5sA8nvn5qH/w==", + "dependencies": { + "@smithy/abort-controller": "^2.0.6", + "@smithy/protocol-http": "^3.0.2", + "@smithy/querystring-builder": "^2.0.6", + "@smithy/types": "^2.3.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-cognito-identity/node_modules/@smithy/node-http-handler/node_modules/@smithy/protocol-http": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-3.0.2.tgz", + "integrity": "sha512-LUOWCPRihvJBkdSs+ivK9m1f/rMfF3n9Zpzg8qdry2eIG4HQqqLBMWQyF9bgk7JhsrrOa3//jJKhXzvL7wL5Xw==", + "dependencies": { + "@smithy/types": "^2.3.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-cognito-identity/node_modules/@smithy/property-provider": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/@smithy/property-provider/-/property-provider-2.0.7.tgz", + "integrity": "sha512-XT8Tl7YNxM8tCtGqy7v7DSf6PxyXaPE9cdA/Yj4dEw2b05V3RrPqsP+t5XJiZu0yIsQ7pdeYZWv2sSEWVjNeAg==", + "dependencies": { + "@smithy/types": "^2.3.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-cognito-identity/node_modules/@smithy/protocol-http": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-2.0.5.tgz", + "integrity": "sha512-d2hhHj34mA2V86doiDfrsy2fNTnUOowGaf9hKb0hIPHqvcnShU4/OSc4Uf1FwHkAdYF3cFXTrj5VGUYbEuvMdw==", + "dependencies": { + "@smithy/types": "^2.2.2", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-cognito-identity/node_modules/@smithy/querystring-builder": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@smithy/querystring-builder/-/querystring-builder-2.0.6.tgz", + "integrity": "sha512-HnU00shCGoV8vKJZTiNBkNvR9NogU3NIUaVMAGJPSqNGJj3psWo+TUrC0BVCDcwiCljXwXCFGJqIcsWtClrktQ==", + "dependencies": { + "@smithy/types": "^2.3.0", + "@smithy/util-uri-escape": "^2.0.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-cognito-identity/node_modules/@smithy/querystring-parser": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@smithy/querystring-parser/-/querystring-parser-2.0.6.tgz", + "integrity": "sha512-i4LKoXHP7pTFAPjLIJyQXYOhWokbcFha3WWsX74sAKmuluv0XM2cxONZoFxwEzmWhsNyM6buSwJSZXyPiec0AQ==", + "dependencies": { + "@smithy/types": "^2.3.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-cognito-identity/node_modules/@smithy/service-error-classification": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@smithy/service-error-classification/-/service-error-classification-2.0.0.tgz", + "integrity": "sha512-2z5Nafy1O0cTf69wKyNjGW/sNVMiqDnb4jgwfMG8ye8KnFJ5qmJpDccwIbJNhXIfbsxTg9SEec2oe1cexhMJvw==", + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-cognito-identity/node_modules/@smithy/shared-ini-file-loader": { + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-2.0.8.tgz", + "integrity": "sha512-4u+V+Dv7JGpJ0tppB5rxCem7WhdFux950z4cGPhV0kHTPkKe8DDgINzOlVa2RBu5dI33D02OBJcxFjhW4FPORg==", + "dependencies": { + "@smithy/types": "^2.3.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-cognito-identity/node_modules/@smithy/signature-v4": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@smithy/signature-v4/-/signature-v4-2.0.6.tgz", + "integrity": "sha512-4zNTi8w4sky07YKq7oYucZt4ogY00IEaS1NFDXxmCN5V/ywE0WiK+WMim+8wtYQmB0qy3oExZR4LoCAml6j/rA==", + "dependencies": { + "@smithy/eventstream-codec": "^2.0.6", + "@smithy/is-array-buffer": "^2.0.0", + "@smithy/types": "^2.3.0", + "@smithy/util-hex-encoding": "^2.0.0", + "@smithy/util-middleware": "^2.0.0", + "@smithy/util-uri-escape": "^2.0.0", + "@smithy/util-utf8": "^2.0.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-cognito-identity/node_modules/@smithy/smithy-client": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/@smithy/smithy-client/-/smithy-client-2.1.2.tgz", + "integrity": "sha512-quUuJ0SsqgG7Flopvfd8iQJLhHfnMYtYPuvImVQzPHXtqUQImtVz5msudMxW3t3jl+L0w8RlR+IN2zT6UqCJ6g==", + "dependencies": { + "@smithy/middleware-stack": "^2.0.0", + "@smithy/types": "^2.3.0", + "@smithy/util-stream": "^2.0.8", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-cognito-identity/node_modules/@smithy/types": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-2.3.0.tgz", + "integrity": "sha512-pJce3rd39MElkV57UTPAoSYAApjQLELUxjU5adHNLYk9gnPvyIGbJNJTZVVFu00BrgZH3W/cQe8QuFcknDyodQ==", + "dependencies": { + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-cognito-identity/node_modules/@smithy/url-parser": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@smithy/url-parser/-/url-parser-2.0.6.tgz", + "integrity": "sha512-9i6j5QW6bapHZ4rtkXOAm0hOUG1+5IVdVJXNSUTcNskwJchZH5IQuDNPCbgUi/u2P8EZazKt4wXT51QxOXCz1A==", + "dependencies": { + "@smithy/querystring-parser": "^2.0.6", + "@smithy/types": "^2.3.0", + "tslib": "^2.5.0" + } + }, + "node_modules/@aws-sdk/client-cognito-identity/node_modules/@smithy/util-base64": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-base64/-/util-base64-2.0.0.tgz", + "integrity": "sha512-Zb1E4xx+m5Lud8bbeYi5FkcMJMnn+1WUnJF3qD7rAdXpaL7UjkFQLdmW5fHadoKbdHpwH9vSR8EyTJFHJs++tA==", + "dependencies": { + "@smithy/util-buffer-from": "^2.0.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-cognito-identity/node_modules/@smithy/util-body-length-browser": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-body-length-browser/-/util-body-length-browser-2.0.0.tgz", + "integrity": "sha512-JdDuS4ircJt+FDnaQj88TzZY3+njZ6O+D3uakS32f2VNnDo3vyEuNdBOh/oFd8Df1zSZOuH1HEChk2AOYDezZg==", + "dependencies": { + "tslib": "^2.5.0" + } + }, + "node_modules/@aws-sdk/client-cognito-identity/node_modules/@smithy/util-body-length-node": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@smithy/util-body-length-node/-/util-body-length-node-2.1.0.tgz", + "integrity": "sha512-/li0/kj/y3fQ3vyzn36NTLGmUwAICb7Jbe/CsWCktW363gh1MOcpEcSO3mJ344Gv2dqz8YJCLQpb6hju/0qOWw==", + "dependencies": { + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-cognito-identity/node_modules/@smithy/util-buffer-from": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-2.0.0.tgz", + "integrity": "sha512-/YNnLoHsR+4W4Vf2wL5lGv0ksg8Bmk3GEGxn2vEQt52AQaPSCuaO5PM5VM7lP1K9qHRKHwrPGktqVoAHKWHxzw==", + "dependencies": { + "@smithy/is-array-buffer": "^2.0.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-cognito-identity/node_modules/@smithy/util-config-provider": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-config-provider/-/util-config-provider-2.0.0.tgz", + "integrity": "sha512-xCQ6UapcIWKxXHEU4Mcs2s7LcFQRiU3XEluM2WcCjjBtQkUN71Tb+ydGmJFPxMUrW/GWMgQEEGipLym4XG0jZg==", + "dependencies": { + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-cognito-identity/node_modules/@smithy/util-defaults-mode-browser": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-browser/-/util-defaults-mode-browser-2.0.7.tgz", + "integrity": "sha512-s1caKxC7Y87Q72Goll//clZs2WNBfG9WtFDWVRS+Qgk147YPCOUYtkpuD0XZAh/vbayObFz5tQ1fiX4G19HSCA==", + "dependencies": { + "@smithy/property-provider": "^2.0.7", + "@smithy/types": "^2.3.0", + "bowser": "^2.11.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/@aws-sdk/client-cognito-identity/node_modules/@smithy/util-defaults-mode-node": { + "version": "2.0.9", + "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-node/-/util-defaults-mode-node-2.0.9.tgz", + "integrity": "sha512-HlV4iNL3/PgPpmDGs0+XrAKtwFQ8rOs5P2y5Dye8dUYaJauadlzHRrNKk7wH2aBYswvT2HM+PIgXamvrE7xbcw==", + "dependencies": { + "@smithy/config-resolver": "^2.0.7", + "@smithy/credential-provider-imds": "^2.0.9", + "@smithy/node-config-provider": "^2.0.9", + "@smithy/property-provider": "^2.0.7", + "@smithy/types": "^2.3.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/@aws-sdk/client-cognito-identity/node_modules/@smithy/util-hex-encoding": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-hex-encoding/-/util-hex-encoding-2.0.0.tgz", + "integrity": "sha512-c5xY+NUnFqG6d7HFh1IFfrm3mGl29lC+vF+geHv4ToiuJCBmIfzx6IeHLg+OgRdPFKDXIw6pvi+p3CsscaMcMA==", + "dependencies": { + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-cognito-identity/node_modules/@smithy/util-middleware": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-middleware/-/util-middleware-2.0.0.tgz", + "integrity": "sha512-eCWX4ECuDHn1wuyyDdGdUWnT4OGyIzV0LN1xRttBFMPI9Ff/4heSHVxneyiMtOB//zpXWCha1/SWHJOZstG7kA==", + "dependencies": { + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-cognito-identity/node_modules/@smithy/util-retry": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-retry/-/util-retry-2.0.0.tgz", + "integrity": "sha512-/dvJ8afrElasuiiIttRJeoS2sy8YXpksQwiM/TcepqdRVp7u4ejd9C4IQURHNjlfPUT7Y6lCDSa2zQJbdHhVTg==", + "dependencies": { + "@smithy/service-error-classification": "^2.0.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/@aws-sdk/client-cognito-identity/node_modules/@smithy/util-stream": { + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/@smithy/util-stream/-/util-stream-2.0.8.tgz", + "integrity": "sha512-1JoSHL/AOFRo/RVYdbOOGG5qSkU1IQN+F0f3HOZcwvGeGT5KnGwd4hLzmr0qkjKh4PW7nzuvPMdR7L8THV24Hw==", + "dependencies": { + "@smithy/fetch-http-handler": "^2.1.2", + "@smithy/node-http-handler": "^2.1.2", + "@smithy/types": "^2.3.0", + "@smithy/util-base64": "^2.0.0", + "@smithy/util-buffer-from": "^2.0.0", + "@smithy/util-hex-encoding": "^2.0.0", + "@smithy/util-utf8": "^2.0.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-cognito-identity/node_modules/@smithy/util-uri-escape": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-uri-escape/-/util-uri-escape-2.0.0.tgz", + "integrity": "sha512-ebkxsqinSdEooQduuk9CbKcI+wheijxEb3utGXkCoYQkJnwTnLbH1JXGimJtUkQwNQbsbuYwG2+aFVyZf5TLaw==", + "dependencies": { + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-cognito-identity/node_modules/@smithy/util-utf8": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-2.0.0.tgz", + "integrity": "sha512-rctU1VkziY84n5OXe3bPNpKR001ZCME2JCaBBFgtiM2hfKbHFudc/BkMuPab8hRbLd0j3vbnBTTZ1igBf0wgiQ==", + "dependencies": { + "@smithy/util-buffer-from": "^2.0.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-cognito-identity/node_modules/uuid": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "node_modules/@aws-sdk/client-personalize": { + "version": "3.391.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-personalize/-/client-personalize-3.391.0.tgz", + "integrity": "sha512-Yk9a5qki7m0syyGrXBezk63sJoR9ua8SJwHL2gpKeoQTB7s9ZYtcTxBbCBj3PSpLWGFMFxA53NOG8MdpIsh/Cg==", + "dependencies": { + "@aws-crypto/sha256-browser": "3.0.0", + "@aws-crypto/sha256-js": "3.0.0", + "@aws-sdk/client-sts": "3.391.0", + "@aws-sdk/credential-provider-node": "3.391.0", + "@aws-sdk/middleware-host-header": "3.391.0", + "@aws-sdk/middleware-logger": "3.391.0", + "@aws-sdk/middleware-recursion-detection": "3.391.0", + "@aws-sdk/middleware-signing": "3.391.0", + "@aws-sdk/middleware-user-agent": "3.391.0", + "@aws-sdk/types": "3.391.0", + "@aws-sdk/util-endpoints": "3.391.0", + "@aws-sdk/util-user-agent-browser": "3.391.0", + "@aws-sdk/util-user-agent-node": "3.391.0", + "@smithy/config-resolver": "^2.0.3", + "@smithy/fetch-http-handler": "^2.0.3", + "@smithy/hash-node": "^2.0.3", + "@smithy/invalid-dependency": "^2.0.3", + "@smithy/middleware-content-length": "^2.0.3", + "@smithy/middleware-endpoint": "^2.0.3", + "@smithy/middleware-retry": "^2.0.3", + "@smithy/middleware-serde": "^2.0.3", + "@smithy/middleware-stack": "^2.0.0", + "@smithy/node-config-provider": "^2.0.3", + "@smithy/node-http-handler": "^2.0.3", + "@smithy/protocol-http": "^2.0.3", + "@smithy/smithy-client": "^2.0.3", + "@smithy/types": "^2.2.0", + "@smithy/url-parser": "^2.0.3", + "@smithy/util-base64": "^2.0.0", + "@smithy/util-body-length-browser": "^2.0.0", + "@smithy/util-body-length-node": "^2.0.0", + "@smithy/util-defaults-mode-browser": "^2.0.3", + "@smithy/util-defaults-mode-node": "^2.0.3", + "@smithy/util-retry": "^2.0.0", + "@smithy/util-utf8": "^2.0.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-personalize/node_modules/@aws-sdk/client-sso": { + "version": "3.391.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso/-/client-sso-3.391.0.tgz", + "integrity": "sha512-aT+O1CbWIWYlCtWK6g3ZaMvFNImOgFGurOEPscuedqzG5UQc1bRtRrGYShLyzcZgfXP+s0cKYJqgGeRNoWiwqA==", + "dependencies": { + "@aws-crypto/sha256-browser": "3.0.0", + "@aws-crypto/sha256-js": "3.0.0", + "@aws-sdk/middleware-host-header": "3.391.0", + "@aws-sdk/middleware-logger": "3.391.0", + "@aws-sdk/middleware-recursion-detection": "3.391.0", + "@aws-sdk/middleware-user-agent": "3.391.0", + "@aws-sdk/types": "3.391.0", + "@aws-sdk/util-endpoints": "3.391.0", + "@aws-sdk/util-user-agent-browser": "3.391.0", + "@aws-sdk/util-user-agent-node": "3.391.0", + "@smithy/config-resolver": "^2.0.3", + "@smithy/fetch-http-handler": "^2.0.3", + "@smithy/hash-node": "^2.0.3", + "@smithy/invalid-dependency": "^2.0.3", + "@smithy/middleware-content-length": "^2.0.3", + "@smithy/middleware-endpoint": "^2.0.3", + "@smithy/middleware-retry": "^2.0.3", + "@smithy/middleware-serde": "^2.0.3", + "@smithy/middleware-stack": "^2.0.0", + "@smithy/node-config-provider": "^2.0.3", + "@smithy/node-http-handler": "^2.0.3", + "@smithy/protocol-http": "^2.0.3", + "@smithy/smithy-client": "^2.0.3", + "@smithy/types": "^2.2.0", + "@smithy/url-parser": "^2.0.3", + "@smithy/util-base64": "^2.0.0", + "@smithy/util-body-length-browser": "^2.0.0", + "@smithy/util-body-length-node": "^2.0.0", + "@smithy/util-defaults-mode-browser": "^2.0.3", + "@smithy/util-defaults-mode-node": "^2.0.3", + "@smithy/util-retry": "^2.0.0", + "@smithy/util-utf8": "^2.0.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-personalize/node_modules/@aws-sdk/client-sts": { + "version": "3.391.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-sts/-/client-sts-3.391.0.tgz", + "integrity": "sha512-y+KmorcUx9o5O99sXVPbhGUpsLpfhzYRaYCqxArLsyzZTCO6XDXMi8vg/xtS+b703j9lWEl5GxAv2oBaEwEnhQ==", + "dependencies": { + "@aws-crypto/sha256-browser": "3.0.0", + "@aws-crypto/sha256-js": "3.0.0", + "@aws-sdk/credential-provider-node": "3.391.0", + "@aws-sdk/middleware-host-header": "3.391.0", + "@aws-sdk/middleware-logger": "3.391.0", + "@aws-sdk/middleware-recursion-detection": "3.391.0", + "@aws-sdk/middleware-sdk-sts": "3.391.0", + "@aws-sdk/middleware-signing": "3.391.0", + "@aws-sdk/middleware-user-agent": "3.391.0", + "@aws-sdk/types": "3.391.0", + "@aws-sdk/util-endpoints": "3.391.0", + "@aws-sdk/util-user-agent-browser": "3.391.0", + "@aws-sdk/util-user-agent-node": "3.391.0", + "@smithy/config-resolver": "^2.0.3", + "@smithy/fetch-http-handler": "^2.0.3", + "@smithy/hash-node": "^2.0.3", + "@smithy/invalid-dependency": "^2.0.3", + "@smithy/middleware-content-length": "^2.0.3", + "@smithy/middleware-endpoint": "^2.0.3", + "@smithy/middleware-retry": "^2.0.3", + "@smithy/middleware-serde": "^2.0.3", + "@smithy/middleware-stack": "^2.0.0", + "@smithy/node-config-provider": "^2.0.3", + "@smithy/node-http-handler": "^2.0.3", + "@smithy/protocol-http": "^2.0.3", + "@smithy/smithy-client": "^2.0.3", + "@smithy/types": "^2.2.0", + "@smithy/url-parser": "^2.0.3", + "@smithy/util-base64": "^2.0.0", + "@smithy/util-body-length-browser": "^2.0.0", + "@smithy/util-body-length-node": "^2.0.0", + "@smithy/util-defaults-mode-browser": "^2.0.3", + "@smithy/util-defaults-mode-node": "^2.0.3", + "@smithy/util-retry": "^2.0.0", + "@smithy/util-utf8": "^2.0.0", + "fast-xml-parser": "4.2.5", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-personalize/node_modules/@aws-sdk/credential-provider-env": { + "version": "3.391.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-env/-/credential-provider-env-3.391.0.tgz", + "integrity": "sha512-mAzICedcg4bfL0mM5O6QTd9mQ331NLse1DMr6XL21ZZiLB48ej19L7AGV2xq5QwVbqKU3IVv1myRyhvpDM9jMg==", + "dependencies": { + "@aws-sdk/types": "3.391.0", + "@smithy/property-provider": "^2.0.0", + "@smithy/types": "^2.2.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-personalize/node_modules/@aws-sdk/credential-provider-ini": { + "version": "3.391.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.391.0.tgz", + "integrity": "sha512-DJZmbmRMqNSfSV7UF8eBVhADz16KAMCTxnFuvgioHHfYUTZQEhCxRHI8jJqYWxhLTriS7AuTBIWr+1AIbwsCTA==", + "dependencies": { + "@aws-sdk/credential-provider-env": "3.391.0", + "@aws-sdk/credential-provider-process": "3.391.0", + "@aws-sdk/credential-provider-sso": "3.391.0", + "@aws-sdk/credential-provider-web-identity": "3.391.0", + "@aws-sdk/types": "3.391.0", + "@smithy/credential-provider-imds": "^2.0.0", + "@smithy/property-provider": "^2.0.0", + "@smithy/shared-ini-file-loader": "^2.0.0", + "@smithy/types": "^2.2.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-personalize/node_modules/@aws-sdk/credential-provider-node": { + "version": "3.391.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.391.0.tgz", + "integrity": "sha512-LXHQwsTw4WBwRzD9swu8254Hao5MoIaGXIzbhX4EQ84dtOkKYbwiY4pDpLfcHcw3B1lFKkVclMze8WAs4EdEww==", + "dependencies": { + "@aws-sdk/credential-provider-env": "3.391.0", + "@aws-sdk/credential-provider-ini": "3.391.0", + "@aws-sdk/credential-provider-process": "3.391.0", + "@aws-sdk/credential-provider-sso": "3.391.0", + "@aws-sdk/credential-provider-web-identity": "3.391.0", + "@aws-sdk/types": "3.391.0", + "@smithy/credential-provider-imds": "^2.0.0", + "@smithy/property-provider": "^2.0.0", + "@smithy/shared-ini-file-loader": "^2.0.0", + "@smithy/types": "^2.2.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-personalize/node_modules/@aws-sdk/credential-provider-process": { + "version": "3.391.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-process/-/credential-provider-process-3.391.0.tgz", + "integrity": "sha512-KMlzPlBI+hBmXDo+EoFZdLgCVRkRa9B9iEE6x0+hQQ6g9bW6HI7cDRVdceR1ZoPasSaNAZ9QOXMTIBxTpn0sPQ==", + "dependencies": { + "@aws-sdk/types": "3.391.0", + "@smithy/property-provider": "^2.0.0", + "@smithy/shared-ini-file-loader": "^2.0.0", + "@smithy/types": "^2.2.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-personalize/node_modules/@aws-sdk/credential-provider-sso": { + "version": "3.391.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.391.0.tgz", + "integrity": "sha512-FT/WoiRHiKys+FcRwvjui0yKuzNtJdn2uGuI1hYE0gpW1wVmW02ouufLckJTmcw09THUZ4w53OoCVU5OY00p8A==", + "dependencies": { + "@aws-sdk/client-sso": "3.391.0", + "@aws-sdk/token-providers": "3.391.0", + "@aws-sdk/types": "3.391.0", + "@smithy/property-provider": "^2.0.0", + "@smithy/shared-ini-file-loader": "^2.0.0", + "@smithy/types": "^2.2.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-personalize/node_modules/@aws-sdk/credential-provider-web-identity": { + "version": "3.391.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.391.0.tgz", + "integrity": "sha512-n0vYg82B8bc4rxKltVbVqclev7hx+elyS9pEnZs3YbnbWJq0qqsznXmDfLqd1TcWpa09PGXcah0nsRDolVThsA==", + "dependencies": { + "@aws-sdk/types": "3.391.0", + "@smithy/property-provider": "^2.0.0", + "@smithy/types": "^2.2.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-personalize/node_modules/@aws-sdk/middleware-host-header": { + "version": "3.391.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-host-header/-/middleware-host-header-3.391.0.tgz", + "integrity": "sha512-+nyNr0rb2ixY7mU48nibr7L7gsw37y4oELhqgnNKhcjZDJ34imBwKIMFa64n21FdftmhcjR8IdSpzXE9xrkJ8g==", + "dependencies": { + "@aws-sdk/types": "3.391.0", + "@smithy/protocol-http": "^2.0.3", + "@smithy/types": "^2.2.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-personalize/node_modules/@aws-sdk/middleware-logger": { + "version": "3.391.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-logger/-/middleware-logger-3.391.0.tgz", + "integrity": "sha512-KOwl5zo16b17JDhqILHBStccBQ2w35em7+/6vdkJdUII6OU8aVIFTlIQT9wOUvd4do6biIRBMZG3IK0Rg7mRDQ==", + "dependencies": { + "@aws-sdk/types": "3.391.0", + "@smithy/types": "^2.2.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-personalize/node_modules/@aws-sdk/middleware-recursion-detection": { + "version": "3.391.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.391.0.tgz", + "integrity": "sha512-hVR3z59G7pX4pjDQs9Ag1tMgbLeGXOzeAAaNP9fEtHSd3KBMAGQgN3K3b9WPjzE2W0EoloHRJMK4qxZErdde2g==", + "dependencies": { + "@aws-sdk/types": "3.391.0", + "@smithy/protocol-http": "^2.0.3", + "@smithy/types": "^2.2.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-personalize/node_modules/@aws-sdk/middleware-sdk-sts": { + "version": "3.391.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-sdk-sts/-/middleware-sdk-sts-3.391.0.tgz", + "integrity": "sha512-6ZXI3Z4QU+TnT5PwKWloGmRHG81tWeI18/zxf9wWzrO2NhYFvITzEJH0vWLLiXdWtn/BYfLULXtDvkTaepbI5A==", + "dependencies": { + "@aws-sdk/middleware-signing": "3.391.0", + "@aws-sdk/types": "3.391.0", + "@smithy/types": "^2.2.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-personalize/node_modules/@aws-sdk/middleware-signing": { + "version": "3.391.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-signing/-/middleware-signing-3.391.0.tgz", + "integrity": "sha512-2pAJJlZqaHc0d+cz2FTVrQmWi8ygKfqfczHUo/loCtOaMNtWXBHb/JsLEecs6cXdizy6gi3YsLz6VZYwY4Ssxw==", + "dependencies": { + "@aws-sdk/types": "3.391.0", + "@smithy/property-provider": "^2.0.0", + "@smithy/protocol-http": "^2.0.3", + "@smithy/signature-v4": "^2.0.0", + "@smithy/types": "^2.2.0", + "@smithy/util-middleware": "^2.0.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-personalize/node_modules/@aws-sdk/middleware-user-agent": { + "version": "3.391.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.391.0.tgz", + "integrity": "sha512-LdK9uMNA14zqRw3B79Mhy7GX36qld/GYo93xuu+lr+AQ98leZEdc6GUbrtNDI3fP1Z8TMQcyHUKBml4/B+wXpQ==", + "dependencies": { + "@aws-sdk/types": "3.391.0", + "@aws-sdk/util-endpoints": "3.391.0", + "@smithy/protocol-http": "^2.0.3", + "@smithy/types": "^2.2.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-personalize/node_modules/@aws-sdk/token-providers": { + "version": "3.391.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/token-providers/-/token-providers-3.391.0.tgz", + "integrity": "sha512-kgfArsKLDJE71qQjfXiHiM5cZqgDHlMsqEx35+A65GmTWJaS1PGDqu3ZvVVU8E5mxnCCLw7vho21fsjvH6TBpg==", + "dependencies": { + "@aws-crypto/sha256-browser": "3.0.0", + "@aws-crypto/sha256-js": "3.0.0", + "@aws-sdk/middleware-host-header": "3.391.0", + "@aws-sdk/middleware-logger": "3.391.0", + "@aws-sdk/middleware-recursion-detection": "3.391.0", + "@aws-sdk/middleware-user-agent": "3.391.0", + "@aws-sdk/types": "3.391.0", + "@aws-sdk/util-endpoints": "3.391.0", + "@aws-sdk/util-user-agent-browser": "3.391.0", + "@aws-sdk/util-user-agent-node": "3.391.0", + "@smithy/config-resolver": "^2.0.3", + "@smithy/fetch-http-handler": "^2.0.3", + "@smithy/hash-node": "^2.0.3", + "@smithy/invalid-dependency": "^2.0.3", + "@smithy/middleware-content-length": "^2.0.3", + "@smithy/middleware-endpoint": "^2.0.3", + "@smithy/middleware-retry": "^2.0.3", + "@smithy/middleware-serde": "^2.0.3", + "@smithy/middleware-stack": "^2.0.0", + "@smithy/node-config-provider": "^2.0.3", + "@smithy/node-http-handler": "^2.0.3", + "@smithy/property-provider": "^2.0.0", + "@smithy/protocol-http": "^2.0.3", + "@smithy/shared-ini-file-loader": "^2.0.0", + "@smithy/smithy-client": "^2.0.3", + "@smithy/types": "^2.2.0", + "@smithy/url-parser": "^2.0.3", + "@smithy/util-base64": "^2.0.0", + "@smithy/util-body-length-browser": "^2.0.0", + "@smithy/util-body-length-node": "^2.0.0", + "@smithy/util-defaults-mode-browser": "^2.0.3", + "@smithy/util-defaults-mode-node": "^2.0.3", + "@smithy/util-retry": "^2.0.0", + "@smithy/util-utf8": "^2.0.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-personalize/node_modules/@aws-sdk/types": { + "version": "3.391.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.391.0.tgz", + "integrity": "sha512-QpYVFKMOnzHz/JMj/b8wb18qxiT92U/5r5MmtRz2R3LOH6ooTO96k4ozXCrYr0qNed1PAnOj73rPrrH2wnCJKQ==", + "dependencies": { + "@smithy/types": "^2.2.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-personalize/node_modules/@aws-sdk/util-endpoints": { + "version": "3.391.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-endpoints/-/util-endpoints-3.391.0.tgz", + "integrity": "sha512-zv4sYDTQhNxyLoekcE02/nk3xvoo6yCHDy1kDJk0MFxOKaqUB+CvZdQBR4YBLSDlD4o4DUBmdYgKT58FfbM8sQ==", + "dependencies": { + "@aws-sdk/types": "3.391.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-personalize/node_modules/@aws-sdk/util-user-agent-browser": { + "version": "3.391.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.391.0.tgz", + "integrity": "sha512-6ipHOB1WdCBNeAMJauN7l2qNE0WLVaTNhkD290/ElXm1FHGTL8yw6lIDIjhIFO1bmbZxDiKApwDiG7ROhaJoxQ==", + "dependencies": { + "@aws-sdk/types": "3.391.0", + "@smithy/types": "^2.2.0", + "bowser": "^2.11.0", + "tslib": "^2.5.0" + } + }, + "node_modules/@aws-sdk/client-personalize/node_modules/@aws-sdk/util-user-agent-node": { + "version": "3.391.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.391.0.tgz", + "integrity": "sha512-PVvAK/Lf4BdB1eJIZtyFpGSslGQwKpYt9/hKs5NlR+qxBMXU9T0DnTqH4GiXZaazvXr7OUVWitIF2b7iKBMTow==", + "dependencies": { + "@aws-sdk/types": "3.391.0", + "@smithy/node-config-provider": "^2.0.3", + "@smithy/types": "^2.2.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "aws-crt": ">=1.0.0" + }, + "peerDependenciesMeta": { + "aws-crt": { + "optional": true + } + } + }, + "node_modules/@aws-sdk/client-personalize/node_modules/@smithy/abort-controller": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@smithy/abort-controller/-/abort-controller-2.0.6.tgz", + "integrity": "sha512-4I7g0lyGUlW2onf8mD76IzU37oRWSHsQ5zlW5MjDzgg4I4J9bOK4500Gx6qOuoN7+GulAnGLe1YwyrIluzhakg==", + "dependencies": { + "@smithy/types": "^2.3.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-personalize/node_modules/@smithy/config-resolver": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/@smithy/config-resolver/-/config-resolver-2.0.7.tgz", + "integrity": "sha512-J4J1AWiqaApC+3I9U++SuxAQ3BOoM5VoYnpFzCZcb63aLF80Zpc/nq2pFR1OsEIYyg2UYNdcBKKfHABmwo4WgQ==", + "dependencies": { + "@smithy/node-config-provider": "^2.0.9", + "@smithy/types": "^2.3.0", + "@smithy/util-config-provider": "^2.0.0", + "@smithy/util-middleware": "^2.0.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-personalize/node_modules/@smithy/credential-provider-imds": { + "version": "2.0.9", + "resolved": "https://registry.npmjs.org/@smithy/credential-provider-imds/-/credential-provider-imds-2.0.9.tgz", + "integrity": "sha512-K7WZRkHS5HZofRgK+O8W4YXXyaVexU1K6hp9vlUL/8CsnrFbZS9quyH/6hTROrYh2PuJr24yii1kc83NJdxMGQ==", + "dependencies": { + "@smithy/node-config-provider": "^2.0.9", + "@smithy/property-provider": "^2.0.7", + "@smithy/types": "^2.3.0", + "@smithy/url-parser": "^2.0.6", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-personalize/node_modules/@smithy/eventstream-codec": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@smithy/eventstream-codec/-/eventstream-codec-2.0.6.tgz", + "integrity": "sha512-J9xL82mlYRUMXFnB9VaThXkD7z2JLr52FIVZMoQQ1dxZG5ub+NOGmzaTTZC/cMmKXI/nwCoFuwDWCTjwQhYhQA==", + "dependencies": { + "@aws-crypto/crc32": "3.0.0", + "@smithy/types": "^2.3.0", + "@smithy/util-hex-encoding": "^2.0.0", + "tslib": "^2.5.0" + } + }, + "node_modules/@aws-sdk/client-personalize/node_modules/@smithy/fetch-http-handler": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/@smithy/fetch-http-handler/-/fetch-http-handler-2.1.2.tgz", + "integrity": "sha512-3Gm3pQm4viUPU+e7KkRScS9t5phBxSNRS8rQSZ+HeCwK/busrX0/2HJZiwLvGblqPqi1laJB0lD18AdiOioJww==", + "dependencies": { + "@smithy/protocol-http": "^3.0.2", + "@smithy/querystring-builder": "^2.0.6", + "@smithy/types": "^2.3.0", + "@smithy/util-base64": "^2.0.0", + "tslib": "^2.5.0" + } + }, + "node_modules/@aws-sdk/client-personalize/node_modules/@smithy/fetch-http-handler/node_modules/@smithy/protocol-http": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-3.0.2.tgz", + "integrity": "sha512-LUOWCPRihvJBkdSs+ivK9m1f/rMfF3n9Zpzg8qdry2eIG4HQqqLBMWQyF9bgk7JhsrrOa3//jJKhXzvL7wL5Xw==", + "dependencies": { + "@smithy/types": "^2.3.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-personalize/node_modules/@smithy/hash-node": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@smithy/hash-node/-/hash-node-2.0.6.tgz", + "integrity": "sha512-xz7fzFxSzxohKGGyKPbLReRrY01JOZgRDHIXSks3PxQxG9c8PJMa5nUw0stH8UOySUgkofmMy0n7vTUsF5Mdqg==", + "dependencies": { + "@smithy/types": "^2.3.0", + "@smithy/util-buffer-from": "^2.0.0", + "@smithy/util-utf8": "^2.0.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-personalize/node_modules/@smithy/invalid-dependency": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@smithy/invalid-dependency/-/invalid-dependency-2.0.6.tgz", + "integrity": "sha512-L5MUyl9mzawIvBxr0Hg3J/Q5qZFXKcBgMk0PacfK3Mthp4WAR6h7iMxdSQ23Q7X/kxOrpZuoYEdh1BWLKbDc8Q==", + "dependencies": { + "@smithy/types": "^2.3.0", + "tslib": "^2.5.0" + } + }, + "node_modules/@aws-sdk/client-personalize/node_modules/@smithy/is-array-buffer": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-2.0.0.tgz", + "integrity": "sha512-z3PjFjMyZNI98JFRJi/U0nGoLWMSJlDjAW4QUX2WNZLas5C0CmVV6LJ01JI0k90l7FvpmixjWxPFmENSClQ7ug==", + "dependencies": { + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-personalize/node_modules/@smithy/middleware-content-length": { + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/@smithy/middleware-content-length/-/middleware-content-length-2.0.8.tgz", + "integrity": "sha512-fHJFsscHXrYhUSWMFJNXfsZW8KsyhWQfBgU3b0nvDfpm+NAeQLqKYNhywGrDwZQc1k+lt7Fw9faAquhNPxTZRA==", + "dependencies": { + "@smithy/protocol-http": "^3.0.2", + "@smithy/types": "^2.3.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-personalize/node_modules/@smithy/middleware-content-length/node_modules/@smithy/protocol-http": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-3.0.2.tgz", + "integrity": "sha512-LUOWCPRihvJBkdSs+ivK9m1f/rMfF3n9Zpzg8qdry2eIG4HQqqLBMWQyF9bgk7JhsrrOa3//jJKhXzvL7wL5Xw==", + "dependencies": { + "@smithy/types": "^2.3.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-personalize/node_modules/@smithy/middleware-endpoint": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@smithy/middleware-endpoint/-/middleware-endpoint-2.0.6.tgz", + "integrity": "sha512-MuSPPtEHFal/M77tR3ffLsdOfX29IZpA990nGuoPj5zQnAYrA4PYBGoqqrASQKm8Xb3C0NwuYzOATT7WX4f5Pg==", + "dependencies": { + "@smithy/middleware-serde": "^2.0.6", + "@smithy/types": "^2.3.0", + "@smithy/url-parser": "^2.0.6", + "@smithy/util-middleware": "^2.0.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-personalize/node_modules/@smithy/middleware-retry": { + "version": "2.0.9", + "resolved": "https://registry.npmjs.org/@smithy/middleware-retry/-/middleware-retry-2.0.9.tgz", + "integrity": "sha512-gneEqWj4l/ZjHdZPk0BFMXoTalRArdQ8i579/KqJgBAc6Ux5vnR/SSppkMCkj2kOQYwdypvzSPeqEW3ZrvIg6g==", + "dependencies": { + "@smithy/node-config-provider": "^2.0.9", + "@smithy/protocol-http": "^3.0.2", + "@smithy/service-error-classification": "^2.0.0", + "@smithy/types": "^2.3.0", + "@smithy/util-middleware": "^2.0.0", + "@smithy/util-retry": "^2.0.0", + "tslib": "^2.5.0", + "uuid": "^8.3.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-personalize/node_modules/@smithy/middleware-retry/node_modules/@smithy/protocol-http": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-3.0.2.tgz", + "integrity": "sha512-LUOWCPRihvJBkdSs+ivK9m1f/rMfF3n9Zpzg8qdry2eIG4HQqqLBMWQyF9bgk7JhsrrOa3//jJKhXzvL7wL5Xw==", + "dependencies": { + "@smithy/types": "^2.3.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-personalize/node_modules/@smithy/middleware-serde": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@smithy/middleware-serde/-/middleware-serde-2.0.6.tgz", + "integrity": "sha512-8/GODBngYbrS28CMZtaHIL4R9rLNSQ/zgb+N1OAZ02NwBUawlnLDcatve9YRzhJC/IWz0/pt+WimJZaO1sGcig==", + "dependencies": { + "@smithy/types": "^2.3.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-personalize/node_modules/@smithy/middleware-stack": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@smithy/middleware-stack/-/middleware-stack-2.0.0.tgz", + "integrity": "sha512-31XC1xNF65nlbc16yuh3wwTudmqs6qy4EseQUGF8A/p2m/5wdd/cnXJqpniy/XvXVwkHPz/GwV36HqzHtIKATQ==", + "dependencies": { + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-personalize/node_modules/@smithy/node-config-provider": { + "version": "2.0.9", + "resolved": "https://registry.npmjs.org/@smithy/node-config-provider/-/node-config-provider-2.0.9.tgz", + "integrity": "sha512-TlSPbCwtT/jgNnmPQqKuCR5CFN8UIrCCHRrgUfs3NqRMuaLLeP8TPe1fSKq2J8h1M/jd4BF853gneles0gWevg==", + "dependencies": { + "@smithy/property-provider": "^2.0.7", + "@smithy/shared-ini-file-loader": "^2.0.8", + "@smithy/types": "^2.3.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-personalize/node_modules/@smithy/node-http-handler": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/@smithy/node-http-handler/-/node-http-handler-2.1.2.tgz", + "integrity": "sha512-PdEEDCShuM8zxGoaRxmGB/1ikB8oeqz+ZAF9VIA8FCP3E59j8zDTF+wCELoWd1Y6gtxr+RcTAg5sA8nvn5qH/w==", + "dependencies": { + "@smithy/abort-controller": "^2.0.6", + "@smithy/protocol-http": "^3.0.2", + "@smithy/querystring-builder": "^2.0.6", + "@smithy/types": "^2.3.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-personalize/node_modules/@smithy/node-http-handler/node_modules/@smithy/protocol-http": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-3.0.2.tgz", + "integrity": "sha512-LUOWCPRihvJBkdSs+ivK9m1f/rMfF3n9Zpzg8qdry2eIG4HQqqLBMWQyF9bgk7JhsrrOa3//jJKhXzvL7wL5Xw==", + "dependencies": { + "@smithy/types": "^2.3.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-personalize/node_modules/@smithy/property-provider": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/@smithy/property-provider/-/property-provider-2.0.7.tgz", + "integrity": "sha512-XT8Tl7YNxM8tCtGqy7v7DSf6PxyXaPE9cdA/Yj4dEw2b05V3RrPqsP+t5XJiZu0yIsQ7pdeYZWv2sSEWVjNeAg==", + "dependencies": { + "@smithy/types": "^2.3.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-personalize/node_modules/@smithy/protocol-http": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-2.0.5.tgz", + "integrity": "sha512-d2hhHj34mA2V86doiDfrsy2fNTnUOowGaf9hKb0hIPHqvcnShU4/OSc4Uf1FwHkAdYF3cFXTrj5VGUYbEuvMdw==", + "dependencies": { + "@smithy/types": "^2.2.2", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-personalize/node_modules/@smithy/querystring-builder": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@smithy/querystring-builder/-/querystring-builder-2.0.6.tgz", + "integrity": "sha512-HnU00shCGoV8vKJZTiNBkNvR9NogU3NIUaVMAGJPSqNGJj3psWo+TUrC0BVCDcwiCljXwXCFGJqIcsWtClrktQ==", + "dependencies": { + "@smithy/types": "^2.3.0", + "@smithy/util-uri-escape": "^2.0.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-personalize/node_modules/@smithy/querystring-parser": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@smithy/querystring-parser/-/querystring-parser-2.0.6.tgz", + "integrity": "sha512-i4LKoXHP7pTFAPjLIJyQXYOhWokbcFha3WWsX74sAKmuluv0XM2cxONZoFxwEzmWhsNyM6buSwJSZXyPiec0AQ==", + "dependencies": { + "@smithy/types": "^2.3.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-personalize/node_modules/@smithy/service-error-classification": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@smithy/service-error-classification/-/service-error-classification-2.0.0.tgz", + "integrity": "sha512-2z5Nafy1O0cTf69wKyNjGW/sNVMiqDnb4jgwfMG8ye8KnFJ5qmJpDccwIbJNhXIfbsxTg9SEec2oe1cexhMJvw==", + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-personalize/node_modules/@smithy/shared-ini-file-loader": { + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-2.0.8.tgz", + "integrity": "sha512-4u+V+Dv7JGpJ0tppB5rxCem7WhdFux950z4cGPhV0kHTPkKe8DDgINzOlVa2RBu5dI33D02OBJcxFjhW4FPORg==", + "dependencies": { + "@smithy/types": "^2.3.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-personalize/node_modules/@smithy/signature-v4": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@smithy/signature-v4/-/signature-v4-2.0.6.tgz", + "integrity": "sha512-4zNTi8w4sky07YKq7oYucZt4ogY00IEaS1NFDXxmCN5V/ywE0WiK+WMim+8wtYQmB0qy3oExZR4LoCAml6j/rA==", + "dependencies": { + "@smithy/eventstream-codec": "^2.0.6", + "@smithy/is-array-buffer": "^2.0.0", + "@smithy/types": "^2.3.0", + "@smithy/util-hex-encoding": "^2.0.0", + "@smithy/util-middleware": "^2.0.0", + "@smithy/util-uri-escape": "^2.0.0", + "@smithy/util-utf8": "^2.0.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-personalize/node_modules/@smithy/smithy-client": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/@smithy/smithy-client/-/smithy-client-2.1.2.tgz", + "integrity": "sha512-quUuJ0SsqgG7Flopvfd8iQJLhHfnMYtYPuvImVQzPHXtqUQImtVz5msudMxW3t3jl+L0w8RlR+IN2zT6UqCJ6g==", + "dependencies": { + "@smithy/middleware-stack": "^2.0.0", + "@smithy/types": "^2.3.0", + "@smithy/util-stream": "^2.0.8", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-personalize/node_modules/@smithy/types": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-2.3.0.tgz", + "integrity": "sha512-pJce3rd39MElkV57UTPAoSYAApjQLELUxjU5adHNLYk9gnPvyIGbJNJTZVVFu00BrgZH3W/cQe8QuFcknDyodQ==", + "dependencies": { + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-personalize/node_modules/@smithy/url-parser": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@smithy/url-parser/-/url-parser-2.0.6.tgz", + "integrity": "sha512-9i6j5QW6bapHZ4rtkXOAm0hOUG1+5IVdVJXNSUTcNskwJchZH5IQuDNPCbgUi/u2P8EZazKt4wXT51QxOXCz1A==", + "dependencies": { + "@smithy/querystring-parser": "^2.0.6", + "@smithy/types": "^2.3.0", + "tslib": "^2.5.0" + } + }, + "node_modules/@aws-sdk/client-personalize/node_modules/@smithy/util-base64": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-base64/-/util-base64-2.0.0.tgz", + "integrity": "sha512-Zb1E4xx+m5Lud8bbeYi5FkcMJMnn+1WUnJF3qD7rAdXpaL7UjkFQLdmW5fHadoKbdHpwH9vSR8EyTJFHJs++tA==", + "dependencies": { + "@smithy/util-buffer-from": "^2.0.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-personalize/node_modules/@smithy/util-body-length-browser": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-body-length-browser/-/util-body-length-browser-2.0.0.tgz", + "integrity": "sha512-JdDuS4ircJt+FDnaQj88TzZY3+njZ6O+D3uakS32f2VNnDo3vyEuNdBOh/oFd8Df1zSZOuH1HEChk2AOYDezZg==", + "dependencies": { + "tslib": "^2.5.0" + } + }, + "node_modules/@aws-sdk/client-personalize/node_modules/@smithy/util-body-length-node": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@smithy/util-body-length-node/-/util-body-length-node-2.1.0.tgz", + "integrity": "sha512-/li0/kj/y3fQ3vyzn36NTLGmUwAICb7Jbe/CsWCktW363gh1MOcpEcSO3mJ344Gv2dqz8YJCLQpb6hju/0qOWw==", + "dependencies": { + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-personalize/node_modules/@smithy/util-buffer-from": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-2.0.0.tgz", + "integrity": "sha512-/YNnLoHsR+4W4Vf2wL5lGv0ksg8Bmk3GEGxn2vEQt52AQaPSCuaO5PM5VM7lP1K9qHRKHwrPGktqVoAHKWHxzw==", + "dependencies": { + "@smithy/is-array-buffer": "^2.0.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-personalize/node_modules/@smithy/util-config-provider": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-config-provider/-/util-config-provider-2.0.0.tgz", + "integrity": "sha512-xCQ6UapcIWKxXHEU4Mcs2s7LcFQRiU3XEluM2WcCjjBtQkUN71Tb+ydGmJFPxMUrW/GWMgQEEGipLym4XG0jZg==", + "dependencies": { + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-personalize/node_modules/@smithy/util-defaults-mode-browser": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-browser/-/util-defaults-mode-browser-2.0.7.tgz", + "integrity": "sha512-s1caKxC7Y87Q72Goll//clZs2WNBfG9WtFDWVRS+Qgk147YPCOUYtkpuD0XZAh/vbayObFz5tQ1fiX4G19HSCA==", + "dependencies": { + "@smithy/property-provider": "^2.0.7", + "@smithy/types": "^2.3.0", + "bowser": "^2.11.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/@aws-sdk/client-personalize/node_modules/@smithy/util-defaults-mode-node": { + "version": "2.0.9", + "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-node/-/util-defaults-mode-node-2.0.9.tgz", + "integrity": "sha512-HlV4iNL3/PgPpmDGs0+XrAKtwFQ8rOs5P2y5Dye8dUYaJauadlzHRrNKk7wH2aBYswvT2HM+PIgXamvrE7xbcw==", + "dependencies": { + "@smithy/config-resolver": "^2.0.7", + "@smithy/credential-provider-imds": "^2.0.9", + "@smithy/node-config-provider": "^2.0.9", + "@smithy/property-provider": "^2.0.7", + "@smithy/types": "^2.3.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/@aws-sdk/client-personalize/node_modules/@smithy/util-hex-encoding": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-hex-encoding/-/util-hex-encoding-2.0.0.tgz", + "integrity": "sha512-c5xY+NUnFqG6d7HFh1IFfrm3mGl29lC+vF+geHv4ToiuJCBmIfzx6IeHLg+OgRdPFKDXIw6pvi+p3CsscaMcMA==", + "dependencies": { + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-personalize/node_modules/@smithy/util-middleware": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-middleware/-/util-middleware-2.0.0.tgz", + "integrity": "sha512-eCWX4ECuDHn1wuyyDdGdUWnT4OGyIzV0LN1xRttBFMPI9Ff/4heSHVxneyiMtOB//zpXWCha1/SWHJOZstG7kA==", + "dependencies": { + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-personalize/node_modules/@smithy/util-retry": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-retry/-/util-retry-2.0.0.tgz", + "integrity": "sha512-/dvJ8afrElasuiiIttRJeoS2sy8YXpksQwiM/TcepqdRVp7u4ejd9C4IQURHNjlfPUT7Y6lCDSa2zQJbdHhVTg==", + "dependencies": { + "@smithy/service-error-classification": "^2.0.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/@aws-sdk/client-personalize/node_modules/@smithy/util-stream": { + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/@smithy/util-stream/-/util-stream-2.0.8.tgz", + "integrity": "sha512-1JoSHL/AOFRo/RVYdbOOGG5qSkU1IQN+F0f3HOZcwvGeGT5KnGwd4hLzmr0qkjKh4PW7nzuvPMdR7L8THV24Hw==", + "dependencies": { + "@smithy/fetch-http-handler": "^2.1.2", + "@smithy/node-http-handler": "^2.1.2", + "@smithy/types": "^2.3.0", + "@smithy/util-base64": "^2.0.0", + "@smithy/util-buffer-from": "^2.0.0", + "@smithy/util-hex-encoding": "^2.0.0", + "@smithy/util-utf8": "^2.0.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-personalize/node_modules/@smithy/util-uri-escape": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-uri-escape/-/util-uri-escape-2.0.0.tgz", + "integrity": "sha512-ebkxsqinSdEooQduuk9CbKcI+wheijxEb3utGXkCoYQkJnwTnLbH1JXGimJtUkQwNQbsbuYwG2+aFVyZf5TLaw==", + "dependencies": { + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-personalize/node_modules/@smithy/util-utf8": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-2.0.0.tgz", + "integrity": "sha512-rctU1VkziY84n5OXe3bPNpKR001ZCME2JCaBBFgtiM2hfKbHFudc/BkMuPab8hRbLd0j3vbnBTTZ1igBf0wgiQ==", + "dependencies": { + "@smithy/util-buffer-from": "^2.0.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-personalize/node_modules/uuid": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "node_modules/@aws-sdk/client-s3": { + "version": "3.370.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-s3/-/client-s3-3.370.0.tgz", + "integrity": "sha512-+b53hI+C+tIiE6OhIvaUXD5qC0zFrCWIu6EKT597W+4XzfFIZE0BGgolP8pC1lLDghPjCFSmAm9Efcb2a1sPvw==", + "dependencies": { + "@aws-crypto/sha1-browser": "3.0.0", + "@aws-crypto/sha256-browser": "3.0.0", + "@aws-crypto/sha256-js": "3.0.0", + "@aws-sdk/client-sts": "3.370.0", + "@aws-sdk/credential-provider-node": "3.370.0", + "@aws-sdk/hash-blob-browser": "3.370.0", + "@aws-sdk/hash-stream-node": "3.370.0", + "@aws-sdk/md5-js": "3.370.0", + "@aws-sdk/middleware-bucket-endpoint": "3.370.0", + "@aws-sdk/middleware-expect-continue": "3.370.0", + "@aws-sdk/middleware-flexible-checksums": "3.370.0", + "@aws-sdk/middleware-host-header": "3.370.0", + "@aws-sdk/middleware-location-constraint": "3.370.0", + "@aws-sdk/middleware-logger": "3.370.0", + "@aws-sdk/middleware-recursion-detection": "3.370.0", + "@aws-sdk/middleware-sdk-s3": "3.370.0", + "@aws-sdk/middleware-signing": "3.370.0", + "@aws-sdk/middleware-ssec": "3.370.0", + "@aws-sdk/middleware-user-agent": "3.370.0", + "@aws-sdk/signature-v4-multi-region": "3.370.0", + "@aws-sdk/types": "3.370.0", + "@aws-sdk/util-endpoints": "3.370.0", + "@aws-sdk/util-user-agent-browser": "3.370.0", + "@aws-sdk/util-user-agent-node": "3.370.0", + "@aws-sdk/xml-builder": "3.310.0", + "@smithy/config-resolver": "^1.0.1", + "@smithy/eventstream-serde-browser": "^1.0.1", + "@smithy/eventstream-serde-config-resolver": "^1.0.1", + "@smithy/eventstream-serde-node": "^1.0.1", + "@smithy/fetch-http-handler": "^1.0.1", + "@smithy/hash-node": "^1.0.1", + "@smithy/invalid-dependency": "^1.0.1", + "@smithy/middleware-content-length": "^1.0.1", + "@smithy/middleware-endpoint": "^1.0.2", + "@smithy/middleware-retry": "^1.0.3", + "@smithy/middleware-serde": "^1.0.1", + "@smithy/middleware-stack": "^1.0.1", + "@smithy/node-config-provider": "^1.0.1", + "@smithy/node-http-handler": "^1.0.2", + "@smithy/protocol-http": "^1.1.0", + "@smithy/smithy-client": "^1.0.3", + "@smithy/types": "^1.1.0", + "@smithy/url-parser": "^1.0.1", + "@smithy/util-base64": "^1.0.1", + "@smithy/util-body-length-browser": "^1.0.1", + "@smithy/util-body-length-node": "^1.0.1", + "@smithy/util-defaults-mode-browser": "^1.0.1", + "@smithy/util-defaults-mode-node": "^1.0.1", + "@smithy/util-retry": "^1.0.3", + "@smithy/util-stream": "^1.0.1", + "@smithy/util-utf8": "^1.0.1", + "@smithy/util-waiter": "^1.0.1", + "fast-xml-parser": "4.2.5", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-s3/node_modules/@aws-sdk/client-sso": { + "version": "3.370.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso/-/client-sso-3.370.0.tgz", + "integrity": "sha512-0Ty1iHuzNxMQtN7nahgkZr4Wcu1XvqGfrQniiGdKKif9jG/4elxsQPiydRuQpFqN6b+bg7wPP7crFP1uTxx2KQ==", + "dependencies": { + "@aws-crypto/sha256-browser": "3.0.0", + "@aws-crypto/sha256-js": "3.0.0", + "@aws-sdk/middleware-host-header": "3.370.0", + "@aws-sdk/middleware-logger": "3.370.0", + "@aws-sdk/middleware-recursion-detection": "3.370.0", + "@aws-sdk/middleware-user-agent": "3.370.0", + "@aws-sdk/types": "3.370.0", + "@aws-sdk/util-endpoints": "3.370.0", + "@aws-sdk/util-user-agent-browser": "3.370.0", + "@aws-sdk/util-user-agent-node": "3.370.0", + "@smithy/config-resolver": "^1.0.1", + "@smithy/fetch-http-handler": "^1.0.1", + "@smithy/hash-node": "^1.0.1", + "@smithy/invalid-dependency": "^1.0.1", + "@smithy/middleware-content-length": "^1.0.1", + "@smithy/middleware-endpoint": "^1.0.2", + "@smithy/middleware-retry": "^1.0.3", + "@smithy/middleware-serde": "^1.0.1", + "@smithy/middleware-stack": "^1.0.1", + "@smithy/node-config-provider": "^1.0.1", + "@smithy/node-http-handler": "^1.0.2", + "@smithy/protocol-http": "^1.1.0", + "@smithy/smithy-client": "^1.0.3", + "@smithy/types": "^1.1.0", + "@smithy/url-parser": "^1.0.1", + "@smithy/util-base64": "^1.0.1", + "@smithy/util-body-length-browser": "^1.0.1", + "@smithy/util-body-length-node": "^1.0.1", + "@smithy/util-defaults-mode-browser": "^1.0.1", + "@smithy/util-defaults-mode-node": "^1.0.1", + "@smithy/util-retry": "^1.0.3", + "@smithy/util-utf8": "^1.0.1", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-s3/node_modules/@aws-sdk/client-sso-oidc": { + "version": "3.370.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso-oidc/-/client-sso-oidc-3.370.0.tgz", + "integrity": "sha512-jAYOO74lmVXylQylqkPrjLzxvUnMKw476JCUTvCO6Q8nv3LzCWd76Ihgv/m9Q4M2Tbqi1iP2roVK5bstsXzEjA==", + "dependencies": { + "@aws-crypto/sha256-browser": "3.0.0", + "@aws-crypto/sha256-js": "3.0.0", + "@aws-sdk/middleware-host-header": "3.370.0", + "@aws-sdk/middleware-logger": "3.370.0", + "@aws-sdk/middleware-recursion-detection": "3.370.0", + "@aws-sdk/middleware-user-agent": "3.370.0", + "@aws-sdk/types": "3.370.0", + "@aws-sdk/util-endpoints": "3.370.0", + "@aws-sdk/util-user-agent-browser": "3.370.0", + "@aws-sdk/util-user-agent-node": "3.370.0", + "@smithy/config-resolver": "^1.0.1", + "@smithy/fetch-http-handler": "^1.0.1", + "@smithy/hash-node": "^1.0.1", + "@smithy/invalid-dependency": "^1.0.1", + "@smithy/middleware-content-length": "^1.0.1", + "@smithy/middleware-endpoint": "^1.0.2", + "@smithy/middleware-retry": "^1.0.3", + "@smithy/middleware-serde": "^1.0.1", + "@smithy/middleware-stack": "^1.0.1", + "@smithy/node-config-provider": "^1.0.1", + "@smithy/node-http-handler": "^1.0.2", + "@smithy/protocol-http": "^1.1.0", + "@smithy/smithy-client": "^1.0.3", + "@smithy/types": "^1.1.0", + "@smithy/url-parser": "^1.0.1", + "@smithy/util-base64": "^1.0.1", + "@smithy/util-body-length-browser": "^1.0.1", + "@smithy/util-body-length-node": "^1.0.1", + "@smithy/util-defaults-mode-browser": "^1.0.1", + "@smithy/util-defaults-mode-node": "^1.0.1", + "@smithy/util-retry": "^1.0.3", + "@smithy/util-utf8": "^1.0.1", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-s3/node_modules/@aws-sdk/client-sts": { + "version": "3.370.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-sts/-/client-sts-3.370.0.tgz", + "integrity": "sha512-utFxOPWIzbN+3kc415Je2o4J72hOLNhgR2Gt5EnRSggC3yOnkC4GzauxG8n7n5gZGBX45eyubHyPOXLOIyoqQA==", + "dependencies": { + "@aws-crypto/sha256-browser": "3.0.0", + "@aws-crypto/sha256-js": "3.0.0", + "@aws-sdk/credential-provider-node": "3.370.0", + "@aws-sdk/middleware-host-header": "3.370.0", + "@aws-sdk/middleware-logger": "3.370.0", + "@aws-sdk/middleware-recursion-detection": "3.370.0", + "@aws-sdk/middleware-sdk-sts": "3.370.0", + "@aws-sdk/middleware-signing": "3.370.0", + "@aws-sdk/middleware-user-agent": "3.370.0", + "@aws-sdk/types": "3.370.0", + "@aws-sdk/util-endpoints": "3.370.0", + "@aws-sdk/util-user-agent-browser": "3.370.0", + "@aws-sdk/util-user-agent-node": "3.370.0", + "@smithy/config-resolver": "^1.0.1", + "@smithy/fetch-http-handler": "^1.0.1", + "@smithy/hash-node": "^1.0.1", + "@smithy/invalid-dependency": "^1.0.1", + "@smithy/middleware-content-length": "^1.0.1", + "@smithy/middleware-endpoint": "^1.0.2", + "@smithy/middleware-retry": "^1.0.3", + "@smithy/middleware-serde": "^1.0.1", + "@smithy/middleware-stack": "^1.0.1", + "@smithy/node-config-provider": "^1.0.1", + "@smithy/node-http-handler": "^1.0.2", + "@smithy/protocol-http": "^1.1.0", + "@smithy/smithy-client": "^1.0.3", + "@smithy/types": "^1.1.0", + "@smithy/url-parser": "^1.0.1", + "@smithy/util-base64": "^1.0.1", + "@smithy/util-body-length-browser": "^1.0.1", + "@smithy/util-body-length-node": "^1.0.1", + "@smithy/util-defaults-mode-browser": "^1.0.1", + "@smithy/util-defaults-mode-node": "^1.0.1", + "@smithy/util-retry": "^1.0.3", + "@smithy/util-utf8": "^1.0.1", + "fast-xml-parser": "4.2.5", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-s3/node_modules/@aws-sdk/credential-provider-env": { + "version": "3.370.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-env/-/credential-provider-env-3.370.0.tgz", + "integrity": "sha512-raR3yP/4GGbKFRPP5hUBNkEmTnzxI9mEc2vJAJrcv4G4J4i/UP6ELiLInQ5eO2/VcV/CeKGZA3t7d1tsJ+jhCg==", + "dependencies": { + "@aws-sdk/types": "3.370.0", + "@smithy/property-provider": "^1.0.1", + "@smithy/types": "^1.1.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-s3/node_modules/@aws-sdk/credential-provider-ini": { + "version": "3.370.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.370.0.tgz", + "integrity": "sha512-eJyapFKa4NrC9RfTgxlXnXfS9InG/QMEUPPVL+VhG7YS6nKqetC1digOYgivnEeu+XSKE0DJ7uZuXujN2Y7VAQ==", + "dependencies": { + "@aws-sdk/credential-provider-env": "3.370.0", + "@aws-sdk/credential-provider-process": "3.370.0", + "@aws-sdk/credential-provider-sso": "3.370.0", + "@aws-sdk/credential-provider-web-identity": "3.370.0", + "@aws-sdk/types": "3.370.0", + "@smithy/credential-provider-imds": "^1.0.1", + "@smithy/property-provider": "^1.0.1", + "@smithy/shared-ini-file-loader": "^1.0.1", + "@smithy/types": "^1.1.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-s3/node_modules/@aws-sdk/credential-provider-node": { + "version": "3.370.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.370.0.tgz", + "integrity": "sha512-gkFiotBFKE4Fcn8CzQnMeab9TAR06FEAD02T4ZRYW1xGrBJOowmje9dKqdwQFHSPgnWAP+8HoTA8iwbhTLvjNA==", + "dependencies": { + "@aws-sdk/credential-provider-env": "3.370.0", + "@aws-sdk/credential-provider-ini": "3.370.0", + "@aws-sdk/credential-provider-process": "3.370.0", + "@aws-sdk/credential-provider-sso": "3.370.0", + "@aws-sdk/credential-provider-web-identity": "3.370.0", + "@aws-sdk/types": "3.370.0", + "@smithy/credential-provider-imds": "^1.0.1", + "@smithy/property-provider": "^1.0.1", + "@smithy/shared-ini-file-loader": "^1.0.1", + "@smithy/types": "^1.1.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-s3/node_modules/@aws-sdk/credential-provider-process": { + "version": "3.370.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-process/-/credential-provider-process-3.370.0.tgz", + "integrity": "sha512-0BKFFZmUO779Xdw3u7wWnoWhYA4zygxJbgGVSyjkOGBvdkbPSTTcdwT1KFkaQy2kOXYeZPl+usVVRXs+ph4ejg==", + "dependencies": { + "@aws-sdk/types": "3.370.0", + "@smithy/property-provider": "^1.0.1", + "@smithy/shared-ini-file-loader": "^1.0.1", + "@smithy/types": "^1.1.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-s3/node_modules/@aws-sdk/credential-provider-sso": { + "version": "3.370.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.370.0.tgz", + "integrity": "sha512-PFroYm5hcPSfC/jkZnCI34QFL3I7WVKveVk6/F3fud/cnP8hp6YjA9NiTNbqdFSzsyoiN/+e5fZgNKih8vVPTA==", + "dependencies": { + "@aws-sdk/client-sso": "3.370.0", + "@aws-sdk/token-providers": "3.370.0", + "@aws-sdk/types": "3.370.0", + "@smithy/property-provider": "^1.0.1", + "@smithy/shared-ini-file-loader": "^1.0.1", + "@smithy/types": "^1.1.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-s3/node_modules/@aws-sdk/credential-provider-web-identity": { + "version": "3.370.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.370.0.tgz", + "integrity": "sha512-CFaBMLRudwhjv1sDzybNV93IaT85IwS+L8Wq6VRMa0mro1q9rrWsIZO811eF+k0NEPfgU1dLH+8Vc2qhw4SARQ==", + "dependencies": { + "@aws-sdk/types": "3.370.0", + "@smithy/property-provider": "^1.0.1", + "@smithy/types": "^1.1.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-s3/node_modules/@aws-sdk/middleware-host-header": { + "version": "3.370.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-host-header/-/middleware-host-header-3.370.0.tgz", + "integrity": "sha512-CPXOm/TnOFC7KyXcJglICC7OiA7Kj6mT3ChvEijr56TFOueNHvJdV4aNIFEQy0vGHOWtY12qOWLNto/wYR1BAQ==", + "dependencies": { + "@aws-sdk/types": "3.370.0", + "@smithy/protocol-http": "^1.1.0", + "@smithy/types": "^1.1.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-s3/node_modules/@aws-sdk/middleware-logger": { + "version": "3.370.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-logger/-/middleware-logger-3.370.0.tgz", + "integrity": "sha512-cQMq9SaZ/ORmTJPCT6VzMML7OxFdQzNkhMAgKpTDl+tdPWynlHF29E5xGoSzROnThHlQPCjogU0NZ8AxI0SWPA==", + "dependencies": { + "@aws-sdk/types": "3.370.0", + "@smithy/types": "^1.1.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-s3/node_modules/@aws-sdk/middleware-recursion-detection": { + "version": "3.370.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.370.0.tgz", + "integrity": "sha512-L7ZF/w0lAAY/GK1khT8VdoU0XB7nWHk51rl/ecAg64J70dHnMOAg8n+5FZ9fBu/xH1FwUlHOkwlodJOgzLJjtg==", + "dependencies": { + "@aws-sdk/types": "3.370.0", + "@smithy/protocol-http": "^1.1.0", + "@smithy/types": "^1.1.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-s3/node_modules/@aws-sdk/middleware-sdk-sts": { + "version": "3.370.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-sdk-sts/-/middleware-sdk-sts-3.370.0.tgz", + "integrity": "sha512-ykbsoVy0AJtVbuhAlTAMcaz/tCE3pT8nAp0L7CQQxSoanRCvOux7au0KwMIQVhxgnYid4dWVF6d00SkqU5MXRA==", + "dependencies": { + "@aws-sdk/middleware-signing": "3.370.0", + "@aws-sdk/types": "3.370.0", + "@smithy/types": "^1.1.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-s3/node_modules/@aws-sdk/middleware-signing": { + "version": "3.370.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-signing/-/middleware-signing-3.370.0.tgz", + "integrity": "sha512-Dwr/RTCWOXdm394wCwICGT2VNOTMRe4IGPsBRJAsM24pm+EEqQzSS3Xu/U/zF4exuxqpMta4wec4QpSarPNTxA==", + "dependencies": { + "@aws-sdk/types": "3.370.0", + "@smithy/property-provider": "^1.0.1", + "@smithy/protocol-http": "^1.1.0", + "@smithy/signature-v4": "^1.0.1", + "@smithy/types": "^1.1.0", + "@smithy/util-middleware": "^1.0.1", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-s3/node_modules/@aws-sdk/middleware-user-agent": { + "version": "3.370.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.370.0.tgz", + "integrity": "sha512-2+3SB6MtMAq1+gVXhw0Y3ONXuljorh6ijnxgTpv+uQnBW5jHCUiAS8WDYiDEm7i9euJPbvJfM8WUrSMDMU6Cog==", + "dependencies": { + "@aws-sdk/types": "3.370.0", + "@aws-sdk/util-endpoints": "3.370.0", + "@smithy/protocol-http": "^1.1.0", + "@smithy/types": "^1.1.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-s3/node_modules/@aws-sdk/token-providers": { + "version": "3.370.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/token-providers/-/token-providers-3.370.0.tgz", + "integrity": "sha512-EyR2ZYr+lJeRiZU2/eLR+mlYU9RXLQvNyGFSAekJKgN13Rpq/h0syzXVFLP/RSod/oZenh/fhVZ2HwlZxuGBtQ==", + "dependencies": { + "@aws-sdk/client-sso-oidc": "3.370.0", + "@aws-sdk/types": "3.370.0", + "@smithy/property-provider": "^1.0.1", + "@smithy/shared-ini-file-loader": "^1.0.1", + "@smithy/types": "^1.1.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-s3/node_modules/@aws-sdk/util-endpoints": { + "version": "3.370.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-endpoints/-/util-endpoints-3.370.0.tgz", + "integrity": "sha512-5ltVAnM79nRlywwzZN5i8Jp4tk245OCGkKwwXbnDU+gq7zT3CIOsct1wNZvmpfZEPGt/bv7/NyRcjP+7XNsX/g==", + "dependencies": { + "@aws-sdk/types": "3.370.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-s3/node_modules/@aws-sdk/util-user-agent-browser": { + "version": "3.370.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.370.0.tgz", + "integrity": "sha512-028LxYZMQ0DANKhW+AKFQslkScZUeYlPmSphrCIXgdIItRZh6ZJHGzE7J/jDsEntZOrZJsjI4z0zZ5W2idj04w==", + "dependencies": { + "@aws-sdk/types": "3.370.0", + "@smithy/types": "^1.1.0", + "bowser": "^2.11.0", + "tslib": "^2.5.0" + } + }, + "node_modules/@aws-sdk/client-s3/node_modules/@aws-sdk/util-user-agent-node": { + "version": "3.370.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.370.0.tgz", + "integrity": "sha512-33vxZUp8vxTT/DGYIR3PivQm07sSRGWI+4fCv63Rt7Q++fO24E0kQtmVAlikRY810I10poD6rwILVtITtFSzkg==", + "dependencies": { + "@aws-sdk/types": "3.370.0", + "@smithy/node-config-provider": "^1.0.1", + "@smithy/types": "^1.1.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "aws-crt": ">=1.0.0" + }, + "peerDependenciesMeta": { + "aws-crt": { + "optional": true + } + } + }, + "node_modules/@aws-sdk/credential-provider-cognito-identity": { + "version": "3.391.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-cognito-identity/-/credential-provider-cognito-identity-3.391.0.tgz", + "integrity": "sha512-60B2WDGJOijluCzeTQDzPWgGuAhYKTcYnK5fNMi9xzHBqw+IhPaGYcmAx1bQGY7SuoZBqVgt1h6fiNxY8TWO5w==", + "dependencies": { + "@aws-sdk/client-cognito-identity": "3.391.0", + "@aws-sdk/types": "3.391.0", + "@smithy/property-provider": "^2.0.0", + "@smithy/types": "^2.2.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-cognito-identity/node_modules/@aws-sdk/types": { + "version": "3.391.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.391.0.tgz", + "integrity": "sha512-QpYVFKMOnzHz/JMj/b8wb18qxiT92U/5r5MmtRz2R3LOH6ooTO96k4ozXCrYr0qNed1PAnOj73rPrrH2wnCJKQ==", + "dependencies": { + "@smithy/types": "^2.2.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-cognito-identity/node_modules/@smithy/property-provider": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/@smithy/property-provider/-/property-provider-2.0.7.tgz", + "integrity": "sha512-XT8Tl7YNxM8tCtGqy7v7DSf6PxyXaPE9cdA/Yj4dEw2b05V3RrPqsP+t5XJiZu0yIsQ7pdeYZWv2sSEWVjNeAg==", + "dependencies": { + "@smithy/types": "^2.3.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-cognito-identity/node_modules/@smithy/types": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-2.3.0.tgz", + "integrity": "sha512-pJce3rd39MElkV57UTPAoSYAApjQLELUxjU5adHNLYk9gnPvyIGbJNJTZVVFu00BrgZH3W/cQe8QuFcknDyodQ==", + "dependencies": { + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/credential-providers": { + "version": "3.391.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-providers/-/credential-providers-3.391.0.tgz", + "integrity": "sha512-J2fh74zUC3qZnbZol95T9w9PTgmx9NfyIy5JVs43rISdvgnAkD9fXd6YbBfQOxl9Xx9HiZW7Fa3hTxma7d/zlA==", + "dependencies": { + "@aws-sdk/client-cognito-identity": "3.391.0", + "@aws-sdk/client-sso": "3.391.0", + "@aws-sdk/client-sts": "3.391.0", + "@aws-sdk/credential-provider-cognito-identity": "3.391.0", + "@aws-sdk/credential-provider-env": "3.391.0", + "@aws-sdk/credential-provider-ini": "3.391.0", + "@aws-sdk/credential-provider-node": "3.391.0", + "@aws-sdk/credential-provider-process": "3.391.0", + "@aws-sdk/credential-provider-sso": "3.391.0", + "@aws-sdk/credential-provider-web-identity": "3.391.0", + "@aws-sdk/types": "3.391.0", + "@smithy/credential-provider-imds": "^2.0.0", + "@smithy/property-provider": "^2.0.0", + "@smithy/types": "^2.2.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/credential-providers/node_modules/@aws-sdk/client-sso": { + "version": "3.391.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso/-/client-sso-3.391.0.tgz", + "integrity": "sha512-aT+O1CbWIWYlCtWK6g3ZaMvFNImOgFGurOEPscuedqzG5UQc1bRtRrGYShLyzcZgfXP+s0cKYJqgGeRNoWiwqA==", + "dependencies": { + "@aws-crypto/sha256-browser": "3.0.0", + "@aws-crypto/sha256-js": "3.0.0", + "@aws-sdk/middleware-host-header": "3.391.0", + "@aws-sdk/middleware-logger": "3.391.0", + "@aws-sdk/middleware-recursion-detection": "3.391.0", + "@aws-sdk/middleware-user-agent": "3.391.0", + "@aws-sdk/types": "3.391.0", + "@aws-sdk/util-endpoints": "3.391.0", + "@aws-sdk/util-user-agent-browser": "3.391.0", + "@aws-sdk/util-user-agent-node": "3.391.0", + "@smithy/config-resolver": "^2.0.3", + "@smithy/fetch-http-handler": "^2.0.3", + "@smithy/hash-node": "^2.0.3", + "@smithy/invalid-dependency": "^2.0.3", + "@smithy/middleware-content-length": "^2.0.3", + "@smithy/middleware-endpoint": "^2.0.3", + "@smithy/middleware-retry": "^2.0.3", + "@smithy/middleware-serde": "^2.0.3", + "@smithy/middleware-stack": "^2.0.0", + "@smithy/node-config-provider": "^2.0.3", + "@smithy/node-http-handler": "^2.0.3", + "@smithy/protocol-http": "^2.0.3", + "@smithy/smithy-client": "^2.0.3", + "@smithy/types": "^2.2.0", + "@smithy/url-parser": "^2.0.3", + "@smithy/util-base64": "^2.0.0", + "@smithy/util-body-length-browser": "^2.0.0", + "@smithy/util-body-length-node": "^2.0.0", + "@smithy/util-defaults-mode-browser": "^2.0.3", + "@smithy/util-defaults-mode-node": "^2.0.3", + "@smithy/util-retry": "^2.0.0", + "@smithy/util-utf8": "^2.0.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/credential-providers/node_modules/@aws-sdk/client-sts": { + "version": "3.391.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-sts/-/client-sts-3.391.0.tgz", + "integrity": "sha512-y+KmorcUx9o5O99sXVPbhGUpsLpfhzYRaYCqxArLsyzZTCO6XDXMi8vg/xtS+b703j9lWEl5GxAv2oBaEwEnhQ==", + "dependencies": { + "@aws-crypto/sha256-browser": "3.0.0", + "@aws-crypto/sha256-js": "3.0.0", + "@aws-sdk/credential-provider-node": "3.391.0", + "@aws-sdk/middleware-host-header": "3.391.0", + "@aws-sdk/middleware-logger": "3.391.0", + "@aws-sdk/middleware-recursion-detection": "3.391.0", + "@aws-sdk/middleware-sdk-sts": "3.391.0", + "@aws-sdk/middleware-signing": "3.391.0", + "@aws-sdk/middleware-user-agent": "3.391.0", + "@aws-sdk/types": "3.391.0", + "@aws-sdk/util-endpoints": "3.391.0", + "@aws-sdk/util-user-agent-browser": "3.391.0", + "@aws-sdk/util-user-agent-node": "3.391.0", + "@smithy/config-resolver": "^2.0.3", + "@smithy/fetch-http-handler": "^2.0.3", + "@smithy/hash-node": "^2.0.3", + "@smithy/invalid-dependency": "^2.0.3", + "@smithy/middleware-content-length": "^2.0.3", + "@smithy/middleware-endpoint": "^2.0.3", + "@smithy/middleware-retry": "^2.0.3", + "@smithy/middleware-serde": "^2.0.3", + "@smithy/middleware-stack": "^2.0.0", + "@smithy/node-config-provider": "^2.0.3", + "@smithy/node-http-handler": "^2.0.3", + "@smithy/protocol-http": "^2.0.3", + "@smithy/smithy-client": "^2.0.3", + "@smithy/types": "^2.2.0", + "@smithy/url-parser": "^2.0.3", + "@smithy/util-base64": "^2.0.0", + "@smithy/util-body-length-browser": "^2.0.0", + "@smithy/util-body-length-node": "^2.0.0", + "@smithy/util-defaults-mode-browser": "^2.0.3", + "@smithy/util-defaults-mode-node": "^2.0.3", + "@smithy/util-retry": "^2.0.0", + "@smithy/util-utf8": "^2.0.0", + "fast-xml-parser": "4.2.5", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/credential-providers/node_modules/@aws-sdk/credential-provider-env": { + "version": "3.391.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-env/-/credential-provider-env-3.391.0.tgz", + "integrity": "sha512-mAzICedcg4bfL0mM5O6QTd9mQ331NLse1DMr6XL21ZZiLB48ej19L7AGV2xq5QwVbqKU3IVv1myRyhvpDM9jMg==", + "dependencies": { + "@aws-sdk/types": "3.391.0", + "@smithy/property-provider": "^2.0.0", + "@smithy/types": "^2.2.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/credential-providers/node_modules/@aws-sdk/credential-provider-ini": { + "version": "3.391.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.391.0.tgz", + "integrity": "sha512-DJZmbmRMqNSfSV7UF8eBVhADz16KAMCTxnFuvgioHHfYUTZQEhCxRHI8jJqYWxhLTriS7AuTBIWr+1AIbwsCTA==", + "dependencies": { + "@aws-sdk/credential-provider-env": "3.391.0", + "@aws-sdk/credential-provider-process": "3.391.0", + "@aws-sdk/credential-provider-sso": "3.391.0", + "@aws-sdk/credential-provider-web-identity": "3.391.0", + "@aws-sdk/types": "3.391.0", + "@smithy/credential-provider-imds": "^2.0.0", + "@smithy/property-provider": "^2.0.0", + "@smithy/shared-ini-file-loader": "^2.0.0", + "@smithy/types": "^2.2.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/credential-providers/node_modules/@aws-sdk/credential-provider-node": { + "version": "3.391.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.391.0.tgz", + "integrity": "sha512-LXHQwsTw4WBwRzD9swu8254Hao5MoIaGXIzbhX4EQ84dtOkKYbwiY4pDpLfcHcw3B1lFKkVclMze8WAs4EdEww==", + "dependencies": { + "@aws-sdk/credential-provider-env": "3.391.0", + "@aws-sdk/credential-provider-ini": "3.391.0", + "@aws-sdk/credential-provider-process": "3.391.0", + "@aws-sdk/credential-provider-sso": "3.391.0", + "@aws-sdk/credential-provider-web-identity": "3.391.0", + "@aws-sdk/types": "3.391.0", + "@smithy/credential-provider-imds": "^2.0.0", + "@smithy/property-provider": "^2.0.0", + "@smithy/shared-ini-file-loader": "^2.0.0", + "@smithy/types": "^2.2.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/credential-providers/node_modules/@aws-sdk/credential-provider-process": { + "version": "3.391.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-process/-/credential-provider-process-3.391.0.tgz", + "integrity": "sha512-KMlzPlBI+hBmXDo+EoFZdLgCVRkRa9B9iEE6x0+hQQ6g9bW6HI7cDRVdceR1ZoPasSaNAZ9QOXMTIBxTpn0sPQ==", + "dependencies": { + "@aws-sdk/types": "3.391.0", + "@smithy/property-provider": "^2.0.0", + "@smithy/shared-ini-file-loader": "^2.0.0", + "@smithy/types": "^2.2.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/credential-providers/node_modules/@aws-sdk/credential-provider-sso": { + "version": "3.391.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.391.0.tgz", + "integrity": "sha512-FT/WoiRHiKys+FcRwvjui0yKuzNtJdn2uGuI1hYE0gpW1wVmW02ouufLckJTmcw09THUZ4w53OoCVU5OY00p8A==", + "dependencies": { + "@aws-sdk/client-sso": "3.391.0", + "@aws-sdk/token-providers": "3.391.0", + "@aws-sdk/types": "3.391.0", + "@smithy/property-provider": "^2.0.0", + "@smithy/shared-ini-file-loader": "^2.0.0", + "@smithy/types": "^2.2.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/credential-providers/node_modules/@aws-sdk/credential-provider-web-identity": { + "version": "3.391.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.391.0.tgz", + "integrity": "sha512-n0vYg82B8bc4rxKltVbVqclev7hx+elyS9pEnZs3YbnbWJq0qqsznXmDfLqd1TcWpa09PGXcah0nsRDolVThsA==", + "dependencies": { + "@aws-sdk/types": "3.391.0", + "@smithy/property-provider": "^2.0.0", + "@smithy/types": "^2.2.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/credential-providers/node_modules/@aws-sdk/middleware-host-header": { + "version": "3.391.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-host-header/-/middleware-host-header-3.391.0.tgz", + "integrity": "sha512-+nyNr0rb2ixY7mU48nibr7L7gsw37y4oELhqgnNKhcjZDJ34imBwKIMFa64n21FdftmhcjR8IdSpzXE9xrkJ8g==", + "dependencies": { + "@aws-sdk/types": "3.391.0", + "@smithy/protocol-http": "^2.0.3", + "@smithy/types": "^2.2.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/credential-providers/node_modules/@aws-sdk/middleware-logger": { + "version": "3.391.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-logger/-/middleware-logger-3.391.0.tgz", + "integrity": "sha512-KOwl5zo16b17JDhqILHBStccBQ2w35em7+/6vdkJdUII6OU8aVIFTlIQT9wOUvd4do6biIRBMZG3IK0Rg7mRDQ==", + "dependencies": { + "@aws-sdk/types": "3.391.0", + "@smithy/types": "^2.2.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/credential-providers/node_modules/@aws-sdk/middleware-recursion-detection": { + "version": "3.391.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.391.0.tgz", + "integrity": "sha512-hVR3z59G7pX4pjDQs9Ag1tMgbLeGXOzeAAaNP9fEtHSd3KBMAGQgN3K3b9WPjzE2W0EoloHRJMK4qxZErdde2g==", + "dependencies": { + "@aws-sdk/types": "3.391.0", + "@smithy/protocol-http": "^2.0.3", + "@smithy/types": "^2.2.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/credential-providers/node_modules/@aws-sdk/middleware-sdk-sts": { + "version": "3.391.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-sdk-sts/-/middleware-sdk-sts-3.391.0.tgz", + "integrity": "sha512-6ZXI3Z4QU+TnT5PwKWloGmRHG81tWeI18/zxf9wWzrO2NhYFvITzEJH0vWLLiXdWtn/BYfLULXtDvkTaepbI5A==", + "dependencies": { + "@aws-sdk/middleware-signing": "3.391.0", + "@aws-sdk/types": "3.391.0", + "@smithy/types": "^2.2.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/credential-providers/node_modules/@aws-sdk/middleware-signing": { + "version": "3.391.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-signing/-/middleware-signing-3.391.0.tgz", + "integrity": "sha512-2pAJJlZqaHc0d+cz2FTVrQmWi8ygKfqfczHUo/loCtOaMNtWXBHb/JsLEecs6cXdizy6gi3YsLz6VZYwY4Ssxw==", + "dependencies": { + "@aws-sdk/types": "3.391.0", + "@smithy/property-provider": "^2.0.0", + "@smithy/protocol-http": "^2.0.3", + "@smithy/signature-v4": "^2.0.0", + "@smithy/types": "^2.2.0", + "@smithy/util-middleware": "^2.0.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/credential-providers/node_modules/@aws-sdk/middleware-user-agent": { + "version": "3.391.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.391.0.tgz", + "integrity": "sha512-LdK9uMNA14zqRw3B79Mhy7GX36qld/GYo93xuu+lr+AQ98leZEdc6GUbrtNDI3fP1Z8TMQcyHUKBml4/B+wXpQ==", + "dependencies": { + "@aws-sdk/types": "3.391.0", + "@aws-sdk/util-endpoints": "3.391.0", + "@smithy/protocol-http": "^2.0.3", + "@smithy/types": "^2.2.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/credential-providers/node_modules/@aws-sdk/token-providers": { + "version": "3.391.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/token-providers/-/token-providers-3.391.0.tgz", + "integrity": "sha512-kgfArsKLDJE71qQjfXiHiM5cZqgDHlMsqEx35+A65GmTWJaS1PGDqu3ZvVVU8E5mxnCCLw7vho21fsjvH6TBpg==", + "dependencies": { + "@aws-crypto/sha256-browser": "3.0.0", + "@aws-crypto/sha256-js": "3.0.0", + "@aws-sdk/middleware-host-header": "3.391.0", + "@aws-sdk/middleware-logger": "3.391.0", + "@aws-sdk/middleware-recursion-detection": "3.391.0", + "@aws-sdk/middleware-user-agent": "3.391.0", + "@aws-sdk/types": "3.391.0", + "@aws-sdk/util-endpoints": "3.391.0", + "@aws-sdk/util-user-agent-browser": "3.391.0", + "@aws-sdk/util-user-agent-node": "3.391.0", + "@smithy/config-resolver": "^2.0.3", + "@smithy/fetch-http-handler": "^2.0.3", + "@smithy/hash-node": "^2.0.3", + "@smithy/invalid-dependency": "^2.0.3", + "@smithy/middleware-content-length": "^2.0.3", + "@smithy/middleware-endpoint": "^2.0.3", + "@smithy/middleware-retry": "^2.0.3", + "@smithy/middleware-serde": "^2.0.3", + "@smithy/middleware-stack": "^2.0.0", + "@smithy/node-config-provider": "^2.0.3", + "@smithy/node-http-handler": "^2.0.3", + "@smithy/property-provider": "^2.0.0", + "@smithy/protocol-http": "^2.0.3", + "@smithy/shared-ini-file-loader": "^2.0.0", + "@smithy/smithy-client": "^2.0.3", + "@smithy/types": "^2.2.0", + "@smithy/url-parser": "^2.0.3", + "@smithy/util-base64": "^2.0.0", + "@smithy/util-body-length-browser": "^2.0.0", + "@smithy/util-body-length-node": "^2.0.0", + "@smithy/util-defaults-mode-browser": "^2.0.3", + "@smithy/util-defaults-mode-node": "^2.0.3", + "@smithy/util-retry": "^2.0.0", + "@smithy/util-utf8": "^2.0.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/credential-providers/node_modules/@aws-sdk/types": { + "version": "3.391.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.391.0.tgz", + "integrity": "sha512-QpYVFKMOnzHz/JMj/b8wb18qxiT92U/5r5MmtRz2R3LOH6ooTO96k4ozXCrYr0qNed1PAnOj73rPrrH2wnCJKQ==", + "dependencies": { + "@smithy/types": "^2.2.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/credential-providers/node_modules/@aws-sdk/util-endpoints": { + "version": "3.391.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-endpoints/-/util-endpoints-3.391.0.tgz", + "integrity": "sha512-zv4sYDTQhNxyLoekcE02/nk3xvoo6yCHDy1kDJk0MFxOKaqUB+CvZdQBR4YBLSDlD4o4DUBmdYgKT58FfbM8sQ==", + "dependencies": { + "@aws-sdk/types": "3.391.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/credential-providers/node_modules/@aws-sdk/util-user-agent-browser": { + "version": "3.391.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.391.0.tgz", + "integrity": "sha512-6ipHOB1WdCBNeAMJauN7l2qNE0WLVaTNhkD290/ElXm1FHGTL8yw6lIDIjhIFO1bmbZxDiKApwDiG7ROhaJoxQ==", + "dependencies": { + "@aws-sdk/types": "3.391.0", + "@smithy/types": "^2.2.0", + "bowser": "^2.11.0", + "tslib": "^2.5.0" + } + }, + "node_modules/@aws-sdk/credential-providers/node_modules/@aws-sdk/util-user-agent-node": { + "version": "3.391.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.391.0.tgz", + "integrity": "sha512-PVvAK/Lf4BdB1eJIZtyFpGSslGQwKpYt9/hKs5NlR+qxBMXU9T0DnTqH4GiXZaazvXr7OUVWitIF2b7iKBMTow==", + "dependencies": { + "@aws-sdk/types": "3.391.0", + "@smithy/node-config-provider": "^2.0.3", + "@smithy/types": "^2.2.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "aws-crt": ">=1.0.0" + }, + "peerDependenciesMeta": { + "aws-crt": { + "optional": true + } + } + }, + "node_modules/@aws-sdk/credential-providers/node_modules/@smithy/abort-controller": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@smithy/abort-controller/-/abort-controller-2.0.6.tgz", + "integrity": "sha512-4I7g0lyGUlW2onf8mD76IzU37oRWSHsQ5zlW5MjDzgg4I4J9bOK4500Gx6qOuoN7+GulAnGLe1YwyrIluzhakg==", + "dependencies": { + "@smithy/types": "^2.3.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/credential-providers/node_modules/@smithy/config-resolver": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/@smithy/config-resolver/-/config-resolver-2.0.7.tgz", + "integrity": "sha512-J4J1AWiqaApC+3I9U++SuxAQ3BOoM5VoYnpFzCZcb63aLF80Zpc/nq2pFR1OsEIYyg2UYNdcBKKfHABmwo4WgQ==", + "dependencies": { + "@smithy/node-config-provider": "^2.0.9", + "@smithy/types": "^2.3.0", + "@smithy/util-config-provider": "^2.0.0", + "@smithy/util-middleware": "^2.0.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/credential-providers/node_modules/@smithy/credential-provider-imds": { + "version": "2.0.9", + "resolved": "https://registry.npmjs.org/@smithy/credential-provider-imds/-/credential-provider-imds-2.0.9.tgz", + "integrity": "sha512-K7WZRkHS5HZofRgK+O8W4YXXyaVexU1K6hp9vlUL/8CsnrFbZS9quyH/6hTROrYh2PuJr24yii1kc83NJdxMGQ==", + "dependencies": { + "@smithy/node-config-provider": "^2.0.9", + "@smithy/property-provider": "^2.0.7", + "@smithy/types": "^2.3.0", + "@smithy/url-parser": "^2.0.6", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/credential-providers/node_modules/@smithy/eventstream-codec": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@smithy/eventstream-codec/-/eventstream-codec-2.0.6.tgz", + "integrity": "sha512-J9xL82mlYRUMXFnB9VaThXkD7z2JLr52FIVZMoQQ1dxZG5ub+NOGmzaTTZC/cMmKXI/nwCoFuwDWCTjwQhYhQA==", + "dependencies": { + "@aws-crypto/crc32": "3.0.0", + "@smithy/types": "^2.3.0", + "@smithy/util-hex-encoding": "^2.0.0", + "tslib": "^2.5.0" + } + }, + "node_modules/@aws-sdk/credential-providers/node_modules/@smithy/fetch-http-handler": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/@smithy/fetch-http-handler/-/fetch-http-handler-2.1.2.tgz", + "integrity": "sha512-3Gm3pQm4viUPU+e7KkRScS9t5phBxSNRS8rQSZ+HeCwK/busrX0/2HJZiwLvGblqPqi1laJB0lD18AdiOioJww==", + "dependencies": { + "@smithy/protocol-http": "^3.0.2", + "@smithy/querystring-builder": "^2.0.6", + "@smithy/types": "^2.3.0", + "@smithy/util-base64": "^2.0.0", + "tslib": "^2.5.0" + } + }, + "node_modules/@aws-sdk/credential-providers/node_modules/@smithy/fetch-http-handler/node_modules/@smithy/protocol-http": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-3.0.2.tgz", + "integrity": "sha512-LUOWCPRihvJBkdSs+ivK9m1f/rMfF3n9Zpzg8qdry2eIG4HQqqLBMWQyF9bgk7JhsrrOa3//jJKhXzvL7wL5Xw==", + "dependencies": { + "@smithy/types": "^2.3.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/credential-providers/node_modules/@smithy/hash-node": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@smithy/hash-node/-/hash-node-2.0.6.tgz", + "integrity": "sha512-xz7fzFxSzxohKGGyKPbLReRrY01JOZgRDHIXSks3PxQxG9c8PJMa5nUw0stH8UOySUgkofmMy0n7vTUsF5Mdqg==", + "dependencies": { + "@smithy/types": "^2.3.0", + "@smithy/util-buffer-from": "^2.0.0", + "@smithy/util-utf8": "^2.0.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/credential-providers/node_modules/@smithy/invalid-dependency": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@smithy/invalid-dependency/-/invalid-dependency-2.0.6.tgz", + "integrity": "sha512-L5MUyl9mzawIvBxr0Hg3J/Q5qZFXKcBgMk0PacfK3Mthp4WAR6h7iMxdSQ23Q7X/kxOrpZuoYEdh1BWLKbDc8Q==", + "dependencies": { + "@smithy/types": "^2.3.0", + "tslib": "^2.5.0" + } + }, + "node_modules/@aws-sdk/credential-providers/node_modules/@smithy/is-array-buffer": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-2.0.0.tgz", + "integrity": "sha512-z3PjFjMyZNI98JFRJi/U0nGoLWMSJlDjAW4QUX2WNZLas5C0CmVV6LJ01JI0k90l7FvpmixjWxPFmENSClQ7ug==", + "dependencies": { + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/credential-providers/node_modules/@smithy/middleware-content-length": { + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/@smithy/middleware-content-length/-/middleware-content-length-2.0.8.tgz", + "integrity": "sha512-fHJFsscHXrYhUSWMFJNXfsZW8KsyhWQfBgU3b0nvDfpm+NAeQLqKYNhywGrDwZQc1k+lt7Fw9faAquhNPxTZRA==", + "dependencies": { + "@smithy/protocol-http": "^3.0.2", + "@smithy/types": "^2.3.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/credential-providers/node_modules/@smithy/middleware-content-length/node_modules/@smithy/protocol-http": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-3.0.2.tgz", + "integrity": "sha512-LUOWCPRihvJBkdSs+ivK9m1f/rMfF3n9Zpzg8qdry2eIG4HQqqLBMWQyF9bgk7JhsrrOa3//jJKhXzvL7wL5Xw==", + "dependencies": { + "@smithy/types": "^2.3.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/credential-providers/node_modules/@smithy/middleware-endpoint": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@smithy/middleware-endpoint/-/middleware-endpoint-2.0.6.tgz", + "integrity": "sha512-MuSPPtEHFal/M77tR3ffLsdOfX29IZpA990nGuoPj5zQnAYrA4PYBGoqqrASQKm8Xb3C0NwuYzOATT7WX4f5Pg==", + "dependencies": { + "@smithy/middleware-serde": "^2.0.6", + "@smithy/types": "^2.3.0", + "@smithy/url-parser": "^2.0.6", + "@smithy/util-middleware": "^2.0.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/credential-providers/node_modules/@smithy/middleware-retry": { + "version": "2.0.9", + "resolved": "https://registry.npmjs.org/@smithy/middleware-retry/-/middleware-retry-2.0.9.tgz", + "integrity": "sha512-gneEqWj4l/ZjHdZPk0BFMXoTalRArdQ8i579/KqJgBAc6Ux5vnR/SSppkMCkj2kOQYwdypvzSPeqEW3ZrvIg6g==", + "dependencies": { + "@smithy/node-config-provider": "^2.0.9", + "@smithy/protocol-http": "^3.0.2", + "@smithy/service-error-classification": "^2.0.0", + "@smithy/types": "^2.3.0", + "@smithy/util-middleware": "^2.0.0", + "@smithy/util-retry": "^2.0.0", + "tslib": "^2.5.0", + "uuid": "^8.3.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/credential-providers/node_modules/@smithy/middleware-retry/node_modules/@smithy/protocol-http": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-3.0.2.tgz", + "integrity": "sha512-LUOWCPRihvJBkdSs+ivK9m1f/rMfF3n9Zpzg8qdry2eIG4HQqqLBMWQyF9bgk7JhsrrOa3//jJKhXzvL7wL5Xw==", + "dependencies": { + "@smithy/types": "^2.3.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/credential-providers/node_modules/@smithy/middleware-serde": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@smithy/middleware-serde/-/middleware-serde-2.0.6.tgz", + "integrity": "sha512-8/GODBngYbrS28CMZtaHIL4R9rLNSQ/zgb+N1OAZ02NwBUawlnLDcatve9YRzhJC/IWz0/pt+WimJZaO1sGcig==", + "dependencies": { + "@smithy/types": "^2.3.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/credential-providers/node_modules/@smithy/middleware-stack": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@smithy/middleware-stack/-/middleware-stack-2.0.0.tgz", + "integrity": "sha512-31XC1xNF65nlbc16yuh3wwTudmqs6qy4EseQUGF8A/p2m/5wdd/cnXJqpniy/XvXVwkHPz/GwV36HqzHtIKATQ==", + "dependencies": { + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/credential-providers/node_modules/@smithy/node-config-provider": { + "version": "2.0.9", + "resolved": "https://registry.npmjs.org/@smithy/node-config-provider/-/node-config-provider-2.0.9.tgz", + "integrity": "sha512-TlSPbCwtT/jgNnmPQqKuCR5CFN8UIrCCHRrgUfs3NqRMuaLLeP8TPe1fSKq2J8h1M/jd4BF853gneles0gWevg==", + "dependencies": { + "@smithy/property-provider": "^2.0.7", + "@smithy/shared-ini-file-loader": "^2.0.8", + "@smithy/types": "^2.3.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/credential-providers/node_modules/@smithy/node-http-handler": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/@smithy/node-http-handler/-/node-http-handler-2.1.2.tgz", + "integrity": "sha512-PdEEDCShuM8zxGoaRxmGB/1ikB8oeqz+ZAF9VIA8FCP3E59j8zDTF+wCELoWd1Y6gtxr+RcTAg5sA8nvn5qH/w==", + "dependencies": { + "@smithy/abort-controller": "^2.0.6", + "@smithy/protocol-http": "^3.0.2", + "@smithy/querystring-builder": "^2.0.6", + "@smithy/types": "^2.3.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/credential-providers/node_modules/@smithy/node-http-handler/node_modules/@smithy/protocol-http": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-3.0.2.tgz", + "integrity": "sha512-LUOWCPRihvJBkdSs+ivK9m1f/rMfF3n9Zpzg8qdry2eIG4HQqqLBMWQyF9bgk7JhsrrOa3//jJKhXzvL7wL5Xw==", + "dependencies": { + "@smithy/types": "^2.3.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/credential-providers/node_modules/@smithy/property-provider": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/@smithy/property-provider/-/property-provider-2.0.7.tgz", + "integrity": "sha512-XT8Tl7YNxM8tCtGqy7v7DSf6PxyXaPE9cdA/Yj4dEw2b05V3RrPqsP+t5XJiZu0yIsQ7pdeYZWv2sSEWVjNeAg==", + "dependencies": { + "@smithy/types": "^2.3.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/credential-providers/node_modules/@smithy/protocol-http": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-2.0.5.tgz", + "integrity": "sha512-d2hhHj34mA2V86doiDfrsy2fNTnUOowGaf9hKb0hIPHqvcnShU4/OSc4Uf1FwHkAdYF3cFXTrj5VGUYbEuvMdw==", + "dependencies": { + "@smithy/types": "^2.2.2", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/credential-providers/node_modules/@smithy/querystring-builder": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@smithy/querystring-builder/-/querystring-builder-2.0.6.tgz", + "integrity": "sha512-HnU00shCGoV8vKJZTiNBkNvR9NogU3NIUaVMAGJPSqNGJj3psWo+TUrC0BVCDcwiCljXwXCFGJqIcsWtClrktQ==", + "dependencies": { + "@smithy/types": "^2.3.0", + "@smithy/util-uri-escape": "^2.0.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/credential-providers/node_modules/@smithy/querystring-parser": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@smithy/querystring-parser/-/querystring-parser-2.0.6.tgz", + "integrity": "sha512-i4LKoXHP7pTFAPjLIJyQXYOhWokbcFha3WWsX74sAKmuluv0XM2cxONZoFxwEzmWhsNyM6buSwJSZXyPiec0AQ==", + "dependencies": { + "@smithy/types": "^2.3.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/credential-providers/node_modules/@smithy/service-error-classification": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@smithy/service-error-classification/-/service-error-classification-2.0.0.tgz", + "integrity": "sha512-2z5Nafy1O0cTf69wKyNjGW/sNVMiqDnb4jgwfMG8ye8KnFJ5qmJpDccwIbJNhXIfbsxTg9SEec2oe1cexhMJvw==", + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/credential-providers/node_modules/@smithy/shared-ini-file-loader": { + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-2.0.8.tgz", + "integrity": "sha512-4u+V+Dv7JGpJ0tppB5rxCem7WhdFux950z4cGPhV0kHTPkKe8DDgINzOlVa2RBu5dI33D02OBJcxFjhW4FPORg==", + "dependencies": { + "@smithy/types": "^2.3.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/credential-providers/node_modules/@smithy/signature-v4": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@smithy/signature-v4/-/signature-v4-2.0.6.tgz", + "integrity": "sha512-4zNTi8w4sky07YKq7oYucZt4ogY00IEaS1NFDXxmCN5V/ywE0WiK+WMim+8wtYQmB0qy3oExZR4LoCAml6j/rA==", + "dependencies": { + "@smithy/eventstream-codec": "^2.0.6", + "@smithy/is-array-buffer": "^2.0.0", + "@smithy/types": "^2.3.0", + "@smithy/util-hex-encoding": "^2.0.0", + "@smithy/util-middleware": "^2.0.0", + "@smithy/util-uri-escape": "^2.0.0", + "@smithy/util-utf8": "^2.0.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/credential-providers/node_modules/@smithy/smithy-client": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/@smithy/smithy-client/-/smithy-client-2.1.2.tgz", + "integrity": "sha512-quUuJ0SsqgG7Flopvfd8iQJLhHfnMYtYPuvImVQzPHXtqUQImtVz5msudMxW3t3jl+L0w8RlR+IN2zT6UqCJ6g==", + "dependencies": { + "@smithy/middleware-stack": "^2.0.0", + "@smithy/types": "^2.3.0", + "@smithy/util-stream": "^2.0.8", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/credential-providers/node_modules/@smithy/types": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-2.3.0.tgz", + "integrity": "sha512-pJce3rd39MElkV57UTPAoSYAApjQLELUxjU5adHNLYk9gnPvyIGbJNJTZVVFu00BrgZH3W/cQe8QuFcknDyodQ==", + "dependencies": { + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/credential-providers/node_modules/@smithy/url-parser": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@smithy/url-parser/-/url-parser-2.0.6.tgz", + "integrity": "sha512-9i6j5QW6bapHZ4rtkXOAm0hOUG1+5IVdVJXNSUTcNskwJchZH5IQuDNPCbgUi/u2P8EZazKt4wXT51QxOXCz1A==", + "dependencies": { + "@smithy/querystring-parser": "^2.0.6", + "@smithy/types": "^2.3.0", + "tslib": "^2.5.0" + } + }, + "node_modules/@aws-sdk/credential-providers/node_modules/@smithy/util-base64": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-base64/-/util-base64-2.0.0.tgz", + "integrity": "sha512-Zb1E4xx+m5Lud8bbeYi5FkcMJMnn+1WUnJF3qD7rAdXpaL7UjkFQLdmW5fHadoKbdHpwH9vSR8EyTJFHJs++tA==", + "dependencies": { + "@smithy/util-buffer-from": "^2.0.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/credential-providers/node_modules/@smithy/util-body-length-browser": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-body-length-browser/-/util-body-length-browser-2.0.0.tgz", + "integrity": "sha512-JdDuS4ircJt+FDnaQj88TzZY3+njZ6O+D3uakS32f2VNnDo3vyEuNdBOh/oFd8Df1zSZOuH1HEChk2AOYDezZg==", + "dependencies": { + "tslib": "^2.5.0" + } + }, + "node_modules/@aws-sdk/credential-providers/node_modules/@smithy/util-body-length-node": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@smithy/util-body-length-node/-/util-body-length-node-2.1.0.tgz", + "integrity": "sha512-/li0/kj/y3fQ3vyzn36NTLGmUwAICb7Jbe/CsWCktW363gh1MOcpEcSO3mJ344Gv2dqz8YJCLQpb6hju/0qOWw==", + "dependencies": { + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/credential-providers/node_modules/@smithy/util-buffer-from": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-2.0.0.tgz", + "integrity": "sha512-/YNnLoHsR+4W4Vf2wL5lGv0ksg8Bmk3GEGxn2vEQt52AQaPSCuaO5PM5VM7lP1K9qHRKHwrPGktqVoAHKWHxzw==", + "dependencies": { + "@smithy/is-array-buffer": "^2.0.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/credential-providers/node_modules/@smithy/util-config-provider": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-config-provider/-/util-config-provider-2.0.0.tgz", + "integrity": "sha512-xCQ6UapcIWKxXHEU4Mcs2s7LcFQRiU3XEluM2WcCjjBtQkUN71Tb+ydGmJFPxMUrW/GWMgQEEGipLym4XG0jZg==", + "dependencies": { + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/credential-providers/node_modules/@smithy/util-defaults-mode-browser": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-browser/-/util-defaults-mode-browser-2.0.7.tgz", + "integrity": "sha512-s1caKxC7Y87Q72Goll//clZs2WNBfG9WtFDWVRS+Qgk147YPCOUYtkpuD0XZAh/vbayObFz5tQ1fiX4G19HSCA==", + "dependencies": { + "@smithy/property-provider": "^2.0.7", + "@smithy/types": "^2.3.0", + "bowser": "^2.11.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/@aws-sdk/credential-providers/node_modules/@smithy/util-defaults-mode-node": { + "version": "2.0.9", + "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-node/-/util-defaults-mode-node-2.0.9.tgz", + "integrity": "sha512-HlV4iNL3/PgPpmDGs0+XrAKtwFQ8rOs5P2y5Dye8dUYaJauadlzHRrNKk7wH2aBYswvT2HM+PIgXamvrE7xbcw==", + "dependencies": { + "@smithy/config-resolver": "^2.0.7", + "@smithy/credential-provider-imds": "^2.0.9", + "@smithy/node-config-provider": "^2.0.9", + "@smithy/property-provider": "^2.0.7", + "@smithy/types": "^2.3.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/@aws-sdk/credential-providers/node_modules/@smithy/util-hex-encoding": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-hex-encoding/-/util-hex-encoding-2.0.0.tgz", + "integrity": "sha512-c5xY+NUnFqG6d7HFh1IFfrm3mGl29lC+vF+geHv4ToiuJCBmIfzx6IeHLg+OgRdPFKDXIw6pvi+p3CsscaMcMA==", + "dependencies": { + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/credential-providers/node_modules/@smithy/util-middleware": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-middleware/-/util-middleware-2.0.0.tgz", + "integrity": "sha512-eCWX4ECuDHn1wuyyDdGdUWnT4OGyIzV0LN1xRttBFMPI9Ff/4heSHVxneyiMtOB//zpXWCha1/SWHJOZstG7kA==", + "dependencies": { + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/credential-providers/node_modules/@smithy/util-retry": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-retry/-/util-retry-2.0.0.tgz", + "integrity": "sha512-/dvJ8afrElasuiiIttRJeoS2sy8YXpksQwiM/TcepqdRVp7u4ejd9C4IQURHNjlfPUT7Y6lCDSa2zQJbdHhVTg==", + "dependencies": { + "@smithy/service-error-classification": "^2.0.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/@aws-sdk/credential-providers/node_modules/@smithy/util-stream": { + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/@smithy/util-stream/-/util-stream-2.0.8.tgz", + "integrity": "sha512-1JoSHL/AOFRo/RVYdbOOGG5qSkU1IQN+F0f3HOZcwvGeGT5KnGwd4hLzmr0qkjKh4PW7nzuvPMdR7L8THV24Hw==", + "dependencies": { + "@smithy/fetch-http-handler": "^2.1.2", + "@smithy/node-http-handler": "^2.1.2", + "@smithy/types": "^2.3.0", + "@smithy/util-base64": "^2.0.0", + "@smithy/util-buffer-from": "^2.0.0", + "@smithy/util-hex-encoding": "^2.0.0", + "@smithy/util-utf8": "^2.0.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/credential-providers/node_modules/@smithy/util-uri-escape": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-uri-escape/-/util-uri-escape-2.0.0.tgz", + "integrity": "sha512-ebkxsqinSdEooQduuk9CbKcI+wheijxEb3utGXkCoYQkJnwTnLbH1JXGimJtUkQwNQbsbuYwG2+aFVyZf5TLaw==", + "dependencies": { + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/credential-providers/node_modules/@smithy/util-utf8": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-2.0.0.tgz", + "integrity": "sha512-rctU1VkziY84n5OXe3bPNpKR001ZCME2JCaBBFgtiM2hfKbHFudc/BkMuPab8hRbLd0j3vbnBTTZ1igBf0wgiQ==", + "dependencies": { + "@smithy/util-buffer-from": "^2.0.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/credential-providers/node_modules/uuid": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "node_modules/@aws-sdk/hash-blob-browser": { + "version": "3.370.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/hash-blob-browser/-/hash-blob-browser-3.370.0.tgz", + "integrity": "sha512-DyStaznfloyF9jN3KvG6puOAjt25alXoBNeHBF2FyLlEEbrOqUmso39JB5LVAw2/KB4UmCNsbAXFb6WktX/yHQ==", + "dependencies": { + "@aws-sdk/chunked-blob-reader": "3.310.0", + "@aws-sdk/chunked-blob-reader-native": "3.310.0", + "@aws-sdk/types": "3.370.0", + "tslib": "^2.5.0" + } + }, + "node_modules/@aws-sdk/hash-stream-node": { + "version": "3.370.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/hash-stream-node/-/hash-stream-node-3.370.0.tgz", + "integrity": "sha512-ExsbBiIMiL9AN1VpWlD8+xaO5s0cXUZJC2UONiQbgMb1jz7Wq9fa1GmKUDyaGXOuQTT7DDhAmalb9fIpauZKuA==", + "dependencies": { + "@aws-sdk/types": "3.370.0", + "@aws-sdk/util-utf8": "3.310.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/is-array-buffer": { + "version": "3.310.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/is-array-buffer/-/is-array-buffer-3.310.0.tgz", + "integrity": "sha512-urnbcCR+h9NWUnmOtet/s4ghvzsidFmspfhYaHAmSRdy9yDjdjBJMFjjsn85A1ODUktztm+cVncXjQ38WCMjMQ==", + "dependencies": { + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/lib-storage": { + "version": "3.414.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/lib-storage/-/lib-storage-3.414.0.tgz", + "integrity": "sha512-R2ZdLVWa+EhMYrta61c0fNgnRpsIWr4zj1rCnC0ZlTwP5J3jiAaRHPMVgd9Jgo1u91y8nHVYaLdIJ6EQDN0scg==", + "dependencies": { + "@smithy/abort-controller": "^2.0.1", + "@smithy/middleware-endpoint": "^2.0.7", + "@smithy/smithy-client": "^2.1.4", + "buffer": "5.6.0", + "events": "3.3.0", + "stream-browserify": "3.0.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "@aws-sdk/client-s3": "^3.0.0" + } + }, + "node_modules/@aws-sdk/lib-storage/node_modules/@smithy/abort-controller": { + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/@smithy/abort-controller/-/abort-controller-2.0.8.tgz", + "integrity": "sha512-2SOdVj5y0zE37Y9scSXoizoxgi6mgnDabi7a/SOfhl0p+50I0rIkuJTfyAuTPDtQ7e5dD6tSZPCLB3c/YM6Zig==", + "dependencies": { + "@smithy/types": "^2.3.2", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/lib-storage/node_modules/@smithy/fetch-http-handler": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@smithy/fetch-http-handler/-/fetch-http-handler-2.1.4.tgz", + "integrity": "sha512-SL24M9W5ERByoXaVicRx+bj9GJVujDnPn+QO7GY7adhY0mPGa6DSF58pVKsgIh4r5Tx/k3SWCPlH4BxxSxA/fQ==", + "dependencies": { + "@smithy/protocol-http": "^3.0.4", + "@smithy/querystring-builder": "^2.0.8", + "@smithy/types": "^2.3.2", + "@smithy/util-base64": "^2.0.0", + "tslib": "^2.5.0" + } + }, + "node_modules/@aws-sdk/lib-storage/node_modules/@smithy/is-array-buffer": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-2.0.0.tgz", + "integrity": "sha512-z3PjFjMyZNI98JFRJi/U0nGoLWMSJlDjAW4QUX2WNZLas5C0CmVV6LJ01JI0k90l7FvpmixjWxPFmENSClQ7ug==", + "dependencies": { + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/lib-storage/node_modules/@smithy/middleware-endpoint": { + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/@smithy/middleware-endpoint/-/middleware-endpoint-2.0.8.tgz", + "integrity": "sha512-yOpogfG2d2V0cbJdAJ6GLAWkNOc9pVsL5hZUfXcxJu408N3CUCsXzIAFF6+70ZKSE+lCfG3GFErcSXv/UfUbjw==", + "dependencies": { + "@smithy/middleware-serde": "^2.0.8", + "@smithy/types": "^2.3.2", + "@smithy/url-parser": "^2.0.8", + "@smithy/util-middleware": "^2.0.1", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/lib-storage/node_modules/@smithy/middleware-serde": { + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/@smithy/middleware-serde/-/middleware-serde-2.0.8.tgz", + "integrity": "sha512-Is0sm+LiNlgsc0QpstDzifugzL9ehno1wXp109GgBgpnKTK3j+KphiparBDI4hWTtH9/7OUsxuspNqai2yyhcg==", + "dependencies": { + "@smithy/types": "^2.3.2", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/lib-storage/node_modules/@smithy/middleware-stack": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@smithy/middleware-stack/-/middleware-stack-2.0.1.tgz", + "integrity": "sha512-UexsfY6/oQZRjTQL56s9AKtMcR60tBNibSgNYX1I2WXaUaXg97W9JCkFyth85TzBWKDBTyhLfenrukS/kyu54A==", + "dependencies": { + "@smithy/types": "^2.3.2", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/lib-storage/node_modules/@smithy/node-http-handler": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@smithy/node-http-handler/-/node-http-handler-2.1.4.tgz", + "integrity": "sha512-8Rw/AusvWDyC6SK8esAcVBeTlQHf94NMFv805suFUJCQ2gwlh0oLDNh+6s2MDOrxcjvLxjjzv1mytM0Mt+0cPQ==", + "dependencies": { + "@smithy/abort-controller": "^2.0.8", + "@smithy/protocol-http": "^3.0.4", + "@smithy/querystring-builder": "^2.0.8", + "@smithy/types": "^2.3.2", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/lib-storage/node_modules/@smithy/protocol-http": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-3.0.4.tgz", + "integrity": "sha512-CGfSWk6TRlbwa8YgrSXdn80Yu7pov3EV/h7TSfiCHhq6/LO3WymmqnzgH1f0qV2bdTDipIkTNp5dGCGN3Af/5g==", + "dependencies": { + "@smithy/types": "^2.3.2", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/lib-storage/node_modules/@smithy/querystring-builder": { + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/@smithy/querystring-builder/-/querystring-builder-2.0.8.tgz", + "integrity": "sha512-+vzIMwjC8Saz97/ptPn+IJRCRRZ+pP95ZIWDRqEqZV/a6hiKbaFoMSa2iCKsnKzR696U2JZXrDqMu3e/FD1+2g==", + "dependencies": { + "@smithy/types": "^2.3.2", + "@smithy/util-uri-escape": "^2.0.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/lib-storage/node_modules/@smithy/querystring-parser": { + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/@smithy/querystring-parser/-/querystring-parser-2.0.8.tgz", + "integrity": "sha512-ArbanNuR7O/MmTd90ZqhDqGOPPDYmxx3huHxD+R3cuCnazcK/1tGQA+SnnR5307T7ZRb5WTpB6qBggERuibVSA==", + "dependencies": { + "@smithy/types": "^2.3.2", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/lib-storage/node_modules/@smithy/smithy-client": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@smithy/smithy-client/-/smithy-client-2.1.5.tgz", + "integrity": "sha512-7S865uKzsxApM8W8Q6zkij7tcUFgaG8PuADMFdMt1yL/ku3d0+s6Zwrg3N7iXCPM08Gu/mf0BIfTXIu/9i450Q==", + "dependencies": { + "@smithy/middleware-stack": "^2.0.1", + "@smithy/types": "^2.3.2", + "@smithy/util-stream": "^2.0.11", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/lib-storage/node_modules/@smithy/types": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-2.3.2.tgz", + "integrity": "sha512-iH0cdKi7HQlzfAM3w2shFk/qZYKAqJWswtpmQpPtlruF+uFZeGEpMJjgDRyhWiddfVM4e2oP4nMaOBsMy6lXgg==", + "dependencies": { + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/lib-storage/node_modules/@smithy/url-parser": { + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/@smithy/url-parser/-/url-parser-2.0.8.tgz", + "integrity": "sha512-wQw7j004ScCrBRJ+oNPXlLE9mtofxyadSZ9D8ov/rHkyurS7z1HTNuyaGRj6OvKsEk0SVQsuY0C9+EfM75XTkw==", + "dependencies": { + "@smithy/querystring-parser": "^2.0.8", + "@smithy/types": "^2.3.2", + "tslib": "^2.5.0" + } + }, + "node_modules/@aws-sdk/lib-storage/node_modules/@smithy/util-base64": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-base64/-/util-base64-2.0.0.tgz", + "integrity": "sha512-Zb1E4xx+m5Lud8bbeYi5FkcMJMnn+1WUnJF3qD7rAdXpaL7UjkFQLdmW5fHadoKbdHpwH9vSR8EyTJFHJs++tA==", + "dependencies": { + "@smithy/util-buffer-from": "^2.0.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/lib-storage/node_modules/@smithy/util-buffer-from": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-2.0.0.tgz", + "integrity": "sha512-/YNnLoHsR+4W4Vf2wL5lGv0ksg8Bmk3GEGxn2vEQt52AQaPSCuaO5PM5VM7lP1K9qHRKHwrPGktqVoAHKWHxzw==", + "dependencies": { + "@smithy/is-array-buffer": "^2.0.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/lib-storage/node_modules/@smithy/util-hex-encoding": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-hex-encoding/-/util-hex-encoding-2.0.0.tgz", + "integrity": "sha512-c5xY+NUnFqG6d7HFh1IFfrm3mGl29lC+vF+geHv4ToiuJCBmIfzx6IeHLg+OgRdPFKDXIw6pvi+p3CsscaMcMA==", + "dependencies": { + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/lib-storage/node_modules/@smithy/util-middleware": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@smithy/util-middleware/-/util-middleware-2.0.1.tgz", + "integrity": "sha512-LnsBMi0Mg3gfz/TpNGLv2Jjcz2ra1OX5HR/4IaCepIYmtPQzqMWDdhX/XTW1LS8OZ0xbQuyQPcHkQ+2XkhWOVQ==", + "dependencies": { + "@smithy/types": "^2.3.2", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/lib-storage/node_modules/@smithy/util-stream": { + "version": "2.0.11", + "resolved": "https://registry.npmjs.org/@smithy/util-stream/-/util-stream-2.0.11.tgz", + "integrity": "sha512-2MeWfqSpZKdmEJ+tH8CJQSgzLWhH5cmdE24X7JB0hiamXrOmswWGGuPvyj/9sQCTclo57pNxLR2p7KrP8Ahiyg==", + "dependencies": { + "@smithy/fetch-http-handler": "^2.1.4", + "@smithy/node-http-handler": "^2.1.4", + "@smithy/types": "^2.3.2", + "@smithy/util-base64": "^2.0.0", + "@smithy/util-buffer-from": "^2.0.0", + "@smithy/util-hex-encoding": "^2.0.0", + "@smithy/util-utf8": "^2.0.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/lib-storage/node_modules/@smithy/util-uri-escape": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-uri-escape/-/util-uri-escape-2.0.0.tgz", + "integrity": "sha512-ebkxsqinSdEooQduuk9CbKcI+wheijxEb3utGXkCoYQkJnwTnLbH1JXGimJtUkQwNQbsbuYwG2+aFVyZf5TLaw==", + "dependencies": { + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/lib-storage/node_modules/@smithy/util-utf8": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-2.0.0.tgz", + "integrity": "sha512-rctU1VkziY84n5OXe3bPNpKR001ZCME2JCaBBFgtiM2hfKbHFudc/BkMuPab8hRbLd0j3vbnBTTZ1igBf0wgiQ==", + "dependencies": { + "@smithy/util-buffer-from": "^2.0.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/md5-js": { + "version": "3.370.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/md5-js/-/md5-js-3.370.0.tgz", + "integrity": "sha512-wch3+hiRdFGsu5E+w3WU9qmumQErKshtgetd6wMgFYm2MPSksFU58rM/aiwiWRA6knpcaShKaPKMmGnuX3HwhQ==", + "dependencies": { + "@aws-sdk/types": "3.370.0", + "@aws-sdk/util-utf8": "3.310.0", + "tslib": "^2.5.0" + } + }, + "node_modules/@aws-sdk/middleware-bucket-endpoint": { + "version": "3.370.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-bucket-endpoint/-/middleware-bucket-endpoint-3.370.0.tgz", + "integrity": "sha512-B36+fOeJVO0D9cjR92Ob6Ki2FTzyTQ/uKk8w+xtur6W6zYVOPU4IQNpNZvN3Ykt4jitR2uUnVSlBb3sXHHhdFA==", + "dependencies": { + "@aws-sdk/types": "3.370.0", + "@aws-sdk/util-arn-parser": "3.310.0", + "@smithy/protocol-http": "^1.1.0", + "@smithy/types": "^1.1.0", + "@smithy/util-config-provider": "^1.0.1", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/middleware-expect-continue": { + "version": "3.370.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-expect-continue/-/middleware-expect-continue-3.370.0.tgz", + "integrity": "sha512-OlFIpXa53obLryHyrqedE2Cp8lp2k+1Vjd++hlZFDFJncRlWZMxoXSyl6shQPqhIiGnNW4vt7tG5xE4jg4NAvw==", + "dependencies": { + "@aws-sdk/types": "3.370.0", + "@smithy/protocol-http": "^1.1.0", + "@smithy/types": "^1.1.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/middleware-flexible-checksums": { + "version": "3.370.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-flexible-checksums/-/middleware-flexible-checksums-3.370.0.tgz", + "integrity": "sha512-62fyW4hZxppvkQKSXdkzjHQ95dXyVCuL18Sfnlciy9pr9f/t5w6LhZIxsNIW+Ge9mbgc661SVRKTwxlZj6FuLQ==", + "dependencies": { + "@aws-crypto/crc32": "3.0.0", + "@aws-crypto/crc32c": "3.0.0", + "@aws-sdk/types": "3.370.0", + "@smithy/is-array-buffer": "^1.0.1", + "@smithy/protocol-http": "^1.1.0", + "@smithy/types": "^1.1.0", + "@smithy/util-utf8": "^1.0.1", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/middleware-location-constraint": { + "version": "3.370.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-location-constraint/-/middleware-location-constraint-3.370.0.tgz", + "integrity": "sha512-NlDZEbBOF1IN7svUTcjbLodkUctt9zsfDI8+DqNlklRs5lsPb91WYvahOfjFO/EvACixa+a5d3cCumMCaIq4Cw==", + "dependencies": { + "@aws-sdk/types": "3.370.0", + "@smithy/types": "^1.1.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/middleware-sdk-s3": { + "version": "3.370.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-sdk-s3/-/middleware-sdk-s3-3.370.0.tgz", + "integrity": "sha512-DPYXtveWBDS5MzSHWTThg2KkLaOzZkCgPejjEuw3yl4ljsHawDs/ZIVCtmWXlBIS2lLCaBMpCV+t9psuJ/6/zQ==", + "dependencies": { + "@aws-sdk/types": "3.370.0", + "@aws-sdk/util-arn-parser": "3.310.0", + "@smithy/protocol-http": "^1.1.0", + "@smithy/types": "^1.1.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/middleware-ssec": { + "version": "3.370.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-ssec/-/middleware-ssec-3.370.0.tgz", + "integrity": "sha512-NIosfLS7mxCNdGYnuy76W9qP3f3YWVTusUA+uv+s6rnwG+Z2UheXCf1wpnJKzxORA8pioSP7ylZ8w2A0reCgYQ==", + "dependencies": { + "@aws-sdk/types": "3.370.0", + "@smithy/types": "^1.1.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/signature-v4-multi-region": { + "version": "3.370.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/signature-v4-multi-region/-/signature-v4-multi-region-3.370.0.tgz", + "integrity": "sha512-Q3NQopPDnHbJXMhtYl0Mfy5U2o76K6tzhdnYRcrYImY0ze/zOkCQI7KPC4588PuyvAXCdQ02cmCPPjYD55UeNg==", + "dependencies": { + "@aws-sdk/types": "3.370.0", + "@smithy/protocol-http": "^1.1.0", + "@smithy/signature-v4": "^1.0.1", + "@smithy/types": "^1.1.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "@aws-sdk/signature-v4-crt": "^3.118.0" + }, + "peerDependenciesMeta": { + "@aws-sdk/signature-v4-crt": { + "optional": true + } + } + }, + "node_modules/@aws-sdk/types": { + "version": "3.370.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.370.0.tgz", + "integrity": "sha512-8PGMKklSkRKjunFhzM2y5Jm0H2TBu7YRNISdYzXLUHKSP9zlMEYagseKVdmox0zKHf1LXVNuSlUV2b6SRrieCQ==", + "dependencies": { + "@smithy/types": "^1.1.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/util-arn-parser": { + "version": "3.310.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-arn-parser/-/util-arn-parser-3.310.0.tgz", + "integrity": "sha512-jL8509owp/xB9+Or0pvn3Fe+b94qfklc2yPowZZIFAkFcCSIdkIglz18cPDWnYAcy9JGewpMS1COXKIUhZkJsA==", + "dependencies": { + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/util-base64": { + "version": "3.310.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-base64/-/util-base64-3.310.0.tgz", + "integrity": "sha512-v3+HBKQvqgdzcbL+pFswlx5HQsd9L6ZTlyPVL2LS9nNXnCcR3XgGz9jRskikRUuUvUXtkSG1J88GAOnJ/apTPg==", + "dependencies": { + "@aws-sdk/util-buffer-from": "3.310.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/util-buffer-from": { + "version": "3.310.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-buffer-from/-/util-buffer-from-3.310.0.tgz", + "integrity": "sha512-i6LVeXFtGih5Zs8enLrt+ExXY92QV25jtEnTKHsmlFqFAuL3VBeod6boeMXkN2p9lbSVVQ1sAOOYZOHYbYkntw==", + "dependencies": { + "@aws-sdk/is-array-buffer": "3.310.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/util-locate-window": { + "version": "3.310.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-locate-window/-/util-locate-window-3.310.0.tgz", + "integrity": "sha512-qo2t/vBTnoXpjKxlsC2e1gBrRm80M3bId27r0BRB2VniSSe7bL1mmzM+/HFtujm0iAxtPM+aLEflLJlJeDPg0w==", + "dependencies": { + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/util-utf8": { + "version": "3.310.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-utf8/-/util-utf8-3.310.0.tgz", + "integrity": "sha512-DnLfFT8uCO22uOJc0pt0DsSNau1GTisngBCDw8jQuWT5CqogMJu4b/uXmwEqfj8B3GX6Xsz8zOd6JpRlPftQoA==", + "dependencies": { + "@aws-sdk/util-buffer-from": "3.310.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/util-utf8-browser": { + "version": "3.259.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-utf8-browser/-/util-utf8-browser-3.259.0.tgz", + "integrity": "sha512-UvFa/vR+e19XookZF8RzFZBrw2EUkQWxiBW0yYQAhvk3C+QVGl0H3ouca8LDBlBfQKXwmW3huo/59H8rwb1wJw==", + "dependencies": { + "tslib": "^2.3.1" + } + }, + "node_modules/@aws-sdk/xml-builder": { + "version": "3.310.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/xml-builder/-/xml-builder-3.310.0.tgz", + "integrity": "sha512-TqELu4mOuSIKQCqj63fGVs86Yh+vBx5nHRpWKNUNhB2nPTpfbziTs5c1X358be3peVWA4wPxW7Nt53KIg1tnNw==", + "dependencies": { + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@babel/code-frame": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.22.5.tgz", + "integrity": "sha512-Xmwn266vad+6DAqEB2A6V/CcZVp62BbwVmcOJc2RPuwih1kw02TjQvWVWlcKGbBPd+8/0V5DEkOcizRGYsspYQ==", + "dependencies": { + "@babel/highlight": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/compat-data": { + "version": "7.22.6", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.22.6.tgz", + "integrity": "sha512-29tfsWTq2Ftu7MXmimyC0C5FDZv5DYxOZkh3XD3+QW4V/BYuv/LyEsjj3c0hqedEaDt6DBfDvexMKU8YevdqFg==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/core": { + "version": "7.22.6", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.22.6.tgz", + "integrity": "sha512-HPIyDa6n+HKw5dEuway3vVAhBboYCtREBMp+IWeseZy6TFtzn6MHkCH2KKYUOC/vKKwgSMHQW4htBOrmuRPXfw==", + "dev": true, + "dependencies": { + "@ampproject/remapping": "^2.2.0", + "@babel/code-frame": "^7.22.5", + "@babel/generator": "^7.22.5", + "@babel/helper-compilation-targets": "^7.22.6", + "@babel/helper-module-transforms": "^7.22.5", + "@babel/helpers": "^7.22.6", + "@babel/parser": "^7.22.6", + "@babel/template": "^7.22.5", + "@babel/traverse": "^7.22.6", + "@babel/types": "^7.22.5", + "@nicolo-ribaudo/semver-v6": "^6.3.3", + "convert-source-map": "^1.7.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.2" + }, + "engines": { + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" + } + }, + "node_modules/@babel/generator": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.22.5.tgz", + "integrity": "sha512-+lcUbnTRhd0jOewtFSedLyiPsD5tswKkbgcezOqqWFUVNEwoUTlpPOBmvhG7OXWLR4jMdv0czPGH5XbflnD1EA==", + "dev": true, + "dependencies": { + "@babel/types": "^7.22.5", + "@jridgewell/gen-mapping": "^0.3.2", + "@jridgewell/trace-mapping": "^0.3.17", + "jsesc": "^2.5.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/generator/node_modules/@jridgewell/gen-mapping": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz", + "integrity": "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==", + "dev": true, + "dependencies": { + "@jridgewell/set-array": "^1.0.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.9" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/helper-compilation-targets": { + "version": "7.22.6", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.22.6.tgz", + "integrity": "sha512-534sYEqWD9VfUm3IPn2SLcH4Q3P86XL+QvqdC7ZsFrzyyPF3T4XGiVghF6PTYNdWg6pXuoqXxNQAhbYeEInTzA==", + "dev": true, + "dependencies": { + "@babel/compat-data": "^7.22.6", + "@babel/helper-validator-option": "^7.22.5", + "@nicolo-ribaudo/semver-v6": "^6.3.3", + "browserslist": "^4.21.9", + "lru-cache": "^5.1.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-environment-visitor": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.5.tgz", + "integrity": "sha512-XGmhECfVA/5sAt+H+xpSg0mfrHq6FzNr9Oxh7PSEBBRUb/mL7Kz3NICXb194rCqAEdxkhPT1a88teizAFyvk8Q==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-function-name": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.22.5.tgz", + "integrity": "sha512-wtHSq6jMRE3uF2otvfuD3DIvVhOsSNshQl0Qrd7qC9oQJzHvOL4qQXlQn2916+CXGywIjpGuIkoyZRRxHPiNQQ==", + "dev": true, + "dependencies": { + "@babel/template": "^7.22.5", + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-hoist-variables": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz", + "integrity": "sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==", + "dev": true, + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-imports": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.22.5.tgz", + "integrity": "sha512-8Dl6+HD/cKifutF5qGd/8ZJi84QeAKh+CEe1sBzz8UayBBGg1dAIJrdHOcOM5b2MpzWL2yuotJTtGjETq0qjXg==", + "dev": true, + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-transforms": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.22.5.tgz", + "integrity": "sha512-+hGKDt/Ze8GFExiVHno/2dvG5IdstpzCq0y4Qc9OJ25D4q3pKfiIP/4Vp3/JvhDkLKsDK2api3q3fpIgiIF5bw==", + "dev": true, + "dependencies": { + "@babel/helper-environment-visitor": "^7.22.5", + "@babel/helper-module-imports": "^7.22.5", + "@babel/helper-simple-access": "^7.22.5", + "@babel/helper-split-export-declaration": "^7.22.5", + "@babel/helper-validator-identifier": "^7.22.5", + "@babel/template": "^7.22.5", + "@babel/traverse": "^7.22.5", + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-plugin-utils": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.22.5.tgz", + "integrity": "sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-simple-access": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.22.5.tgz", + "integrity": "sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==", + "dev": true, + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-split-export-declaration": { + "version": "7.22.6", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz", + "integrity": "sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==", + "dev": true, + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-string-parser": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.22.5.tgz", + "integrity": "sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.5.tgz", + "integrity": "sha512-aJXu+6lErq8ltp+JhkJUfk1MTGyuA4v7f3pA+BJ5HLfNC6nAQ0Cpi9uOquUj8Hehg0aUiHzWQbOVJGao6ztBAQ==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-option": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.22.5.tgz", + "integrity": "sha512-R3oB6xlIVKUnxNUxbmgq7pKjxpru24zlimpE8WK47fACIlM0II/Hm1RS8IaOI7NgCr6LNS+jl5l75m20npAziw==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helpers": { + "version": "7.22.6", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.22.6.tgz", + "integrity": "sha512-YjDs6y/fVOYFV8hAf1rxd1QvR9wJe1pDBZ2AREKq/SDayfPzgk0PBnVuTCE5X1acEpMMNOVUqoe+OwiZGJ+OaA==", + "dev": true, + "dependencies": { + "@babel/template": "^7.22.5", + "@babel/traverse": "^7.22.6", + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/highlight": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.22.5.tgz", + "integrity": "sha512-BSKlD1hgnedS5XRnGOljZawtag7H1yPfQp0tdNJCHoH6AZ+Pcm9VvkrK59/Yy593Ypg0zMxH2BxD1VPYUQ7UIw==", + "dependencies": { + "@babel/helper-validator-identifier": "^7.22.5", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/highlight/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/highlight/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/highlight/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/@babel/highlight/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" + }, + "node_modules/@babel/highlight/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/highlight/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/parser": { + "version": "7.22.6", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.22.6.tgz", + "integrity": "sha512-EIQu22vNkceq3LbjAq7knDf/UmtI2qbcNI8GRBlijez6TpQLvSodJPYfydQmNA5buwkxxxa/PVI44jjYZ+/cLw==", + "dev": true, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/plugin-syntax-async-generators": { + "version": "7.8.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", + "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-bigint": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz", + "integrity": "sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-class-properties": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", + "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.12.13" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-import-meta": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz", + "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-json-strings": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", + "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-jsx": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.22.5.tgz", + "integrity": "sha512-gvyP4hZrgrs/wWMaocvxZ44Hw0b3W8Pe+cMxc8V1ULQ07oh8VNbIRaoD1LRZVTvD+0nieDKjfgKg89sD7rrKrg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-logical-assignment-operators": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", + "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-nullish-coalescing-operator": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", + "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-numeric-separator": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", + "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-object-rest-spread": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", + "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-optional-catch-binding": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", + "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-optional-chaining": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", + "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-top-level-await": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", + "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-typescript": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.22.5.tgz", + "integrity": "sha512-1mS2o03i7t1c6VzH6fdQ3OA8tcEIxwG18zIPRp+UY1Ihv6W+XZzBCVxExF9upussPXJ0xE9XRHwMoNs1ep/nRQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/template": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.22.5.tgz", + "integrity": "sha512-X7yV7eiwAxdj9k94NEylvbVHLiVG1nvzCV2EAowhxLTwODV1jl9UzZ48leOC0sH7OnuHrIkllaBgneUykIcZaw==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.22.5", + "@babel/parser": "^7.22.5", + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse": { + "version": "7.22.6", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.22.6.tgz", + "integrity": "sha512-53CijMvKlLIDlOTrdWiHileRddlIiwUIyCKqYa7lYnnPldXCG5dUSN38uT0cA6i7rHWNKJLH0VU/Kxdr1GzB3w==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.22.5", + "@babel/generator": "^7.22.5", + "@babel/helper-environment-visitor": "^7.22.5", + "@babel/helper-function-name": "^7.22.5", + "@babel/helper-hoist-variables": "^7.22.5", + "@babel/helper-split-export-declaration": "^7.22.6", + "@babel/parser": "^7.22.6", + "@babel/types": "^7.22.5", + "debug": "^4.1.0", + "globals": "^11.1.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse/node_modules/globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/types": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.22.5.tgz", + "integrity": "sha512-zo3MIHGOkPOfoRXitsgHLjEXmlDaD/5KU1Uzuc9GNiZPhSqVxVRtxuPaSBZDsYZ9qV88AjtMtWW7ww98loJ9KA==", + "dev": true, + "dependencies": { + "@babel/helper-string-parser": "^7.22.5", + "@babel/helper-validator-identifier": "^7.22.5", + "to-fast-properties": "^2.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@bcoe/v8-coverage": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz", + "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==", + "dev": true + }, + "node_modules/@bugsnag/browser": { + "version": "7.20.2", + "resolved": "https://registry.npmjs.org/@bugsnag/browser/-/browser-7.20.2.tgz", + "integrity": "sha512-4J4s53ZpYr3hHA+QjxUjOI6U+A8+XuUVH45UshE87Jp2Y4mV8ML2DovejqJS8J8yjdbnh2z1Wtg/v3WUNt4ayQ==", + "dependencies": { + "@bugsnag/core": "^7.19.0" + } + }, + "node_modules/@bugsnag/core": { + "version": "7.19.0", + "resolved": "https://registry.npmjs.org/@bugsnag/core/-/core-7.19.0.tgz", + "integrity": "sha512-2KGwdaLD9PhR7Wk7xPi3jGuGsKTatc/28U4TOZIDU3CgC2QhGjubwiXSECel5gwxhZ3jACKcMKSV2ovHhv1NrA==", + "dependencies": { + "@bugsnag/cuid": "^3.0.0", + "@bugsnag/safe-json-stringify": "^6.0.0", + "error-stack-parser": "^2.0.3", + "iserror": "0.0.2", + "stack-generator": "^2.0.3" + } + }, + "node_modules/@bugsnag/cuid": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@bugsnag/cuid/-/cuid-3.0.2.tgz", + "integrity": "sha512-cIwzC93r3PQ/INeuwtZwkZIG2K8WWN0rRLZQhu+mr48Ay+i6sEki4GYfTsflse7hZ1BeDWrNb/Q9vgY3B31xHQ==" + }, + "node_modules/@bugsnag/js": { + "version": "7.20.2", + "resolved": "https://registry.npmjs.org/@bugsnag/js/-/js-7.20.2.tgz", + "integrity": "sha512-Q08k0h0h6NFwFGkFmib39Uln2WpvJdqT1EGF1JlyYiGW03Y+VopVb9r37pZrRrN9IY08mxaIEO8la5xeaWAs6A==", + "dependencies": { + "@bugsnag/browser": "^7.20.2", + "@bugsnag/node": "^7.19.0" + } + }, + "node_modules/@bugsnag/node": { + "version": "7.19.0", + "resolved": "https://registry.npmjs.org/@bugsnag/node/-/node-7.19.0.tgz", + "integrity": "sha512-c4snyxx5d/fsMogmgehFBGc//daH6+4XCplia4zrEQYltjaQ+l8ud0dPx623DgJl/2j1+2zlRc7y7IHSd7Gm5w==", + "dependencies": { + "@bugsnag/core": "^7.19.0", + "byline": "^5.0.0", + "error-stack-parser": "^2.0.2", + "iserror": "^0.0.2", + "pump": "^3.0.0", + "stack-generator": "^2.0.3" + } + }, + "node_modules/@bugsnag/safe-json-stringify": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/@bugsnag/safe-json-stringify/-/safe-json-stringify-6.0.0.tgz", + "integrity": "sha512-htzFO1Zc57S8kgdRK9mLcPVTW1BY2ijfH7Dk2CeZmspTWKdKqSo1iwmqrq2WtRjFlo8aRZYgLX0wFrDXF/9DLA==" + }, + "node_modules/@colors/colors": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@colors/colors/-/colors-1.5.0.tgz", + "integrity": "sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==", + "engines": { + "node": ">=0.1.90" + } + }, + "node_modules/@commitlint/cli": { + "version": "17.6.6", + "resolved": "https://registry.npmjs.org/@commitlint/cli/-/cli-17.6.6.tgz", + "integrity": "sha512-sTKpr2i/Fjs9OmhU+beBxjPavpnLSqZaO6CzwKVq2Tc4UYVTMFgpKOslDhUBVlfAUBfjVO8ParxC/MXkIOevEA==", + "dev": true, + "dependencies": { + "@commitlint/format": "^17.4.4", + "@commitlint/lint": "^17.6.6", + "@commitlint/load": "^17.5.0", + "@commitlint/read": "^17.5.1", + "@commitlint/types": "^17.4.4", + "execa": "^5.0.0", + "lodash.isfunction": "^3.0.9", + "resolve-from": "5.0.0", + "resolve-global": "1.0.0", + "yargs": "^17.0.0" + }, + "bin": { + "commitlint": "cli.js" + }, + "engines": { + "node": ">=v14" + } + }, + "node_modules/@commitlint/config-conventional": { + "version": "17.6.5", + "resolved": "https://registry.npmjs.org/@commitlint/config-conventional/-/config-conventional-17.6.5.tgz", + "integrity": "sha512-Xl9H9KLl86NZm5CYNTNF9dcz1xelE/EbvhWIWcYxG/rn3UWYWdWmmnX2q6ZduNdLFSGbOxzUpIx61j5zxbeXxg==", + "dev": true, + "dependencies": { + "conventional-changelog-conventionalcommits": "^5.0.0" + }, + "engines": { + "node": ">=v14" + } + }, + "node_modules/@commitlint/config-conventional/node_modules/conventional-changelog-conventionalcommits": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/conventional-changelog-conventionalcommits/-/conventional-changelog-conventionalcommits-5.0.0.tgz", + "integrity": "sha512-lCDbA+ZqVFQGUj7h9QBKoIpLhl8iihkO0nCTyRNzuXtcd7ubODpYB04IFy31JloiJgG0Uovu8ot8oxRzn7Nwtw==", + "dev": true, + "dependencies": { + "compare-func": "^2.0.0", + "lodash": "^4.17.15", + "q": "^1.5.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@commitlint/config-validator": { + "version": "17.4.4", + "resolved": "https://registry.npmjs.org/@commitlint/config-validator/-/config-validator-17.4.4.tgz", + "integrity": "sha512-bi0+TstqMiqoBAQDvdEP4AFh0GaKyLFlPPEObgI29utoKEYoPQTvF0EYqIwYYLEoJYhj5GfMIhPHJkTJhagfeg==", + "dev": true, + "dependencies": { + "@commitlint/types": "^17.4.4", + "ajv": "^8.11.0" + }, + "engines": { + "node": ">=v14" + } + }, + "node_modules/@commitlint/ensure": { + "version": "17.4.4", + "resolved": "https://registry.npmjs.org/@commitlint/ensure/-/ensure-17.4.4.tgz", + "integrity": "sha512-AHsFCNh8hbhJiuZ2qHv/m59W/GRE9UeOXbkOqxYMNNg9pJ7qELnFcwj5oYpa6vzTSHtPGKf3C2yUFNy1GGHq6g==", + "dev": true, + "dependencies": { + "@commitlint/types": "^17.4.4", + "lodash.camelcase": "^4.3.0", + "lodash.kebabcase": "^4.1.1", + "lodash.snakecase": "^4.1.1", + "lodash.startcase": "^4.4.0", + "lodash.upperfirst": "^4.3.1" + }, + "engines": { + "node": ">=v14" + } + }, + "node_modules/@commitlint/execute-rule": { + "version": "17.4.0", + "resolved": "https://registry.npmjs.org/@commitlint/execute-rule/-/execute-rule-17.4.0.tgz", + "integrity": "sha512-LIgYXuCSO5Gvtc0t9bebAMSwd68ewzmqLypqI2Kke1rqOqqDbMpYcYfoPfFlv9eyLIh4jocHWwCK5FS7z9icUA==", + "dev": true, + "engines": { + "node": ">=v14" + } + }, + "node_modules/@commitlint/format": { + "version": "17.4.4", + "resolved": "https://registry.npmjs.org/@commitlint/format/-/format-17.4.4.tgz", + "integrity": "sha512-+IS7vpC4Gd/x+uyQPTAt3hXs5NxnkqAZ3aqrHd5Bx/R9skyCAWusNlNbw3InDbAK6j166D9asQM8fnmYIa+CXQ==", + "dev": true, + "dependencies": { + "@commitlint/types": "^17.4.4", + "chalk": "^4.1.0" + }, + "engines": { + "node": ">=v14" + } + }, + "node_modules/@commitlint/is-ignored": { + "version": "17.6.6", + "resolved": "https://registry.npmjs.org/@commitlint/is-ignored/-/is-ignored-17.6.6.tgz", + "integrity": "sha512-4Fw875faAKO+2nILC04yW/2Vy/wlV3BOYCSQ4CEFzriPEprc1Td2LILmqmft6PDEK5Sr14dT9tEzeaZj0V56Gg==", + "dev": true, + "dependencies": { + "@commitlint/types": "^17.4.4", + "semver": "7.5.2" + }, + "engines": { + "node": ">=v14" + } + }, + "node_modules/@commitlint/is-ignored/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@commitlint/is-ignored/node_modules/semver": { + "version": "7.5.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.2.tgz", + "integrity": "sha512-SoftuTROv/cRjCze/scjGyiDtcUyxw1rgYQSZY7XTmtR5hX+dm76iDbTH8TkLPHCQmlbQVSSbNZCPM2hb0knnQ==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@commitlint/is-ignored/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "node_modules/@commitlint/lint": { + "version": "17.6.6", + "resolved": "https://registry.npmjs.org/@commitlint/lint/-/lint-17.6.6.tgz", + "integrity": "sha512-5bN+dnHcRLkTvwCHYMS7Xpbr+9uNi0Kq5NR3v4+oPNx6pYXt8ACuw9luhM/yMgHYwW0ajIR20wkPAFkZLEMGmg==", + "dev": true, + "dependencies": { + "@commitlint/is-ignored": "^17.6.6", + "@commitlint/parse": "^17.6.5", + "@commitlint/rules": "^17.6.5", + "@commitlint/types": "^17.4.4" + }, + "engines": { + "node": ">=v14" + } + }, + "node_modules/@commitlint/load": { + "version": "17.5.0", + "resolved": "https://registry.npmjs.org/@commitlint/load/-/load-17.5.0.tgz", + "integrity": "sha512-l+4W8Sx4CD5rYFsrhHH8HP01/8jEP7kKf33Xlx2Uk2out/UKoKPYMOIRcDH5ppT8UXLMV+x6Wm5osdRKKgaD1Q==", + "dev": true, + "dependencies": { + "@commitlint/config-validator": "^17.4.4", + "@commitlint/execute-rule": "^17.4.0", + "@commitlint/resolve-extends": "^17.4.4", + "@commitlint/types": "^17.4.4", + "@types/node": "*", + "chalk": "^4.1.0", + "cosmiconfig": "^8.0.0", + "cosmiconfig-typescript-loader": "^4.0.0", + "lodash.isplainobject": "^4.0.6", + "lodash.merge": "^4.6.2", + "lodash.uniq": "^4.5.0", + "resolve-from": "^5.0.0", + "ts-node": "^10.8.1", + "typescript": "^4.6.4 || ^5.0.0" + }, + "engines": { + "node": ">=v14" + } + }, + "node_modules/@commitlint/message": { + "version": "17.4.2", + "resolved": "https://registry.npmjs.org/@commitlint/message/-/message-17.4.2.tgz", + "integrity": "sha512-3XMNbzB+3bhKA1hSAWPCQA3lNxR4zaeQAQcHj0Hx5sVdO6ryXtgUBGGv+1ZCLMgAPRixuc6en+iNAzZ4NzAa8Q==", + "dev": true, + "engines": { + "node": ">=v14" + } + }, + "node_modules/@commitlint/parse": { + "version": "17.6.5", + "resolved": "https://registry.npmjs.org/@commitlint/parse/-/parse-17.6.5.tgz", + "integrity": "sha512-0zle3bcn1Hevw5Jqpz/FzEWNo2KIzUbc1XyGg6WrWEoa6GH3A1pbqNF6MvE6rjuy6OY23c8stWnb4ETRZyN+Yw==", + "dev": true, + "dependencies": { + "@commitlint/types": "^17.4.4", + "conventional-changelog-angular": "^5.0.11", + "conventional-commits-parser": "^3.2.2" + }, + "engines": { + "node": ">=v14" + } + }, + "node_modules/@commitlint/read": { + "version": "17.5.1", + "resolved": "https://registry.npmjs.org/@commitlint/read/-/read-17.5.1.tgz", + "integrity": "sha512-7IhfvEvB//p9aYW09YVclHbdf1u7g7QhxeYW9ZHSO8Huzp8Rz7m05aCO1mFG7G8M+7yfFnXB5xOmG18brqQIBg==", + "dev": true, + "dependencies": { + "@commitlint/top-level": "^17.4.0", + "@commitlint/types": "^17.4.4", + "fs-extra": "^11.0.0", + "git-raw-commits": "^2.0.11", + "minimist": "^1.2.6" + }, + "engines": { + "node": ">=v14" + } + }, + "node_modules/@commitlint/read/node_modules/fs-extra": { + "version": "11.1.1", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.1.1.tgz", + "integrity": "sha512-MGIE4HOvQCeUCzmlHs0vXpih4ysz4wg9qiSAu6cd42lVwPbTM1TjV7RusoyQqMmk/95gdQZX72u+YW+c3eEpFQ==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=14.14" + } + }, + "node_modules/@commitlint/resolve-extends": { + "version": "17.4.4", + "resolved": "https://registry.npmjs.org/@commitlint/resolve-extends/-/resolve-extends-17.4.4.tgz", + "integrity": "sha512-znXr1S0Rr8adInptHw0JeLgumS11lWbk5xAWFVno+HUFVN45875kUtqjrI6AppmD3JI+4s0uZlqqlkepjJd99A==", + "dev": true, + "dependencies": { + "@commitlint/config-validator": "^17.4.4", + "@commitlint/types": "^17.4.4", + "import-fresh": "^3.0.0", + "lodash.mergewith": "^4.6.2", + "resolve-from": "^5.0.0", + "resolve-global": "^1.0.0" + }, + "engines": { + "node": ">=v14" + } + }, + "node_modules/@commitlint/rules": { + "version": "17.6.5", + "resolved": "https://registry.npmjs.org/@commitlint/rules/-/rules-17.6.5.tgz", + "integrity": "sha512-uTB3zSmnPyW2qQQH+Dbq2rekjlWRtyrjDo4aLFe63uteandgkI+cc0NhhbBAzcXShzVk0qqp8SlkQMu0mgHg/A==", + "dev": true, + "dependencies": { + "@commitlint/ensure": "^17.4.4", + "@commitlint/message": "^17.4.2", + "@commitlint/to-lines": "^17.4.0", + "@commitlint/types": "^17.4.4", + "execa": "^5.0.0" + }, + "engines": { + "node": ">=v14" + } + }, + "node_modules/@commitlint/to-lines": { + "version": "17.4.0", + "resolved": "https://registry.npmjs.org/@commitlint/to-lines/-/to-lines-17.4.0.tgz", + "integrity": "sha512-LcIy/6ZZolsfwDUWfN1mJ+co09soSuNASfKEU5sCmgFCvX5iHwRYLiIuoqXzOVDYOy7E7IcHilr/KS0e5T+0Hg==", + "dev": true, + "engines": { + "node": ">=v14" + } + }, + "node_modules/@commitlint/top-level": { + "version": "17.4.0", + "resolved": "https://registry.npmjs.org/@commitlint/top-level/-/top-level-17.4.0.tgz", + "integrity": "sha512-/1loE/g+dTTQgHnjoCy0AexKAEFyHsR2zRB4NWrZ6lZSMIxAhBJnmCqwao7b4H8888PsfoTBCLBYIw8vGnej8g==", + "dev": true, + "dependencies": { + "find-up": "^5.0.0" + }, + "engines": { + "node": ">=v14" + } + }, + "node_modules/@commitlint/types": { + "version": "17.4.4", + "resolved": "https://registry.npmjs.org/@commitlint/types/-/types-17.4.4.tgz", + "integrity": "sha512-amRN8tRLYOsxRr6mTnGGGvB5EmW/4DDjLMgiwK3CCVEmN6Sr/6xePGEpWaspKkckILuUORCwe6VfDBw6uj4axQ==", + "dev": true, + "dependencies": { + "chalk": "^4.1.0" + }, + "engines": { + "node": ">=v14" + } + }, + "node_modules/@cspotcode/source-map-support": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", + "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==", + "dev": true, + "dependencies": { + "@jridgewell/trace-mapping": "0.3.9" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@cspotcode/source-map-support/node_modules/@jridgewell/trace-mapping": { + "version": "0.3.9", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", + "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", + "dev": true, + "dependencies": { + "@jridgewell/resolve-uri": "^3.0.3", + "@jridgewell/sourcemap-codec": "^1.4.10" + } + }, + "node_modules/@dabh/diagnostics": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@dabh/diagnostics/-/diagnostics-2.0.3.tgz", + "integrity": "sha512-hrlQOIi7hAfzsMqlGSFyVucrx38O+j6wiGOf//H2ecvIEqYN4ADBSS2iLMh5UFyDunCNniUIPk/q3riFv45xRA==", + "dependencies": { + "colorspace": "1.1.x", + "enabled": "2.0.x", + "kuler": "^2.0.0" + } + }, + "node_modules/@datadog/pprof": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@datadog/pprof/-/pprof-3.1.0.tgz", + "integrity": "sha512-Bg8O8yrHeL2KKHXhLoAAT33ZfzLnZ6rWfOjy8PkcNhUJy3UwNVLbUoApf+99EyLjqpzpk/kZXrIAMBzMMB8ilg==", + "hasInstallScript": true, + "dependencies": { + "delay": "^5.0.0", + "node-gyp-build": "<4.0", + "p-limit": "^3.1.0", + "pprof-format": "^2.0.7", + "source-map": "^0.7.4" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@datadog/pprof/node_modules/source-map": { + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz", + "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==", + "engines": { + "node": ">= 8" + } + }, + "node_modules/@dependents/detective-less": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@dependents/detective-less/-/detective-less-3.0.1.tgz", + "integrity": "sha512-NjjCPJbx/za2287T6gnC5zD2IFSplro1evaTV9yvx3jnPpHi7s8PwJvh9vvJRFnMx5nbakodwNOnFvk8+9YQTg==", + "dev": true, + "dependencies": { + "gonzales-pe": "^4.3.0", + "node-source-walk": "^5.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@dependents/detective-less/node_modules/node-source-walk": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/node-source-walk/-/node-source-walk-5.0.1.tgz", + "integrity": "sha512-fe5rFjPqkWQb4CLfsOf10fZAJvImfLpcVx+Nqbozaj6PBoAEjyEK1HZGCGvQNyre2HdL1HnZG6mxBf2UHSzr/w==", + "dev": true, + "dependencies": { + "@babel/parser": "^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@digitalroute/cz-conventional-changelog-for-jira": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/@digitalroute/cz-conventional-changelog-for-jira/-/cz-conventional-changelog-for-jira-8.0.1.tgz", + "integrity": "sha512-I7uNQ2R5LnDYVhQ01sfNvaxqe1PutXyDl8Kltj4L8uDa1LTYqQgWWp3yEj3XYDNjhUjsAheHW0lsmF1oiAjWVg==", + "dev": true, + "dependencies": { + "boxen": "^5.1.2", + "chalk": "^2.4.1", + "commitizen": "^4.2.6", + "cz-conventional-changelog": "^3.3.0", + "inquirer": "^8.2.4", + "lodash.map": "^4.5.1", + "longest": "^2.0.1", + "right-pad": "^1.0.1", + "word-wrap": "^1.0.3" + }, + "engines": { + "node": ">= 10" + }, + "optionalDependencies": { + "@commitlint/load": ">6.1.1" + } + }, + "node_modules/@digitalroute/cz-conventional-changelog-for-jira/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@digitalroute/cz-conventional-changelog-for-jira/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@digitalroute/cz-conventional-changelog-for-jira/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/@digitalroute/cz-conventional-changelog-for-jira/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "dev": true + }, + "node_modules/@digitalroute/cz-conventional-changelog-for-jira/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/@digitalroute/cz-conventional-changelog-for-jira/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@eslint-community/eslint-utils": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.3.0.tgz", + "integrity": "sha512-v3oplH6FYCULtFuCeqyuTd9D2WKO937Dxdq+GmHOLL72TTRriLxz2VLlNfkZRsvj6PKnOPAtuT6dwrs/pA5DvA==", + "dev": true, + "dependencies": { + "eslint-visitor-keys": "^3.3.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" + } + }, + "node_modules/@eslint-community/regexpp": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.4.0.tgz", + "integrity": "sha512-A9983Q0LnDGdLPjxyXQ00sbV+K+O+ko2Dr+CZigbHWtX9pNfxlaBkMR8X1CztI73zuEyEBXTVjx7CE+/VSwDiQ==", + "dev": true, + "engines": { + "node": "^12.0.0 || ^14.0.0 || >=16.0.0" + } + }, + "node_modules/@eslint/eslintrc": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.0.3.tgz", + "integrity": "sha512-+5gy6OQfk+xx3q0d6jGZZC3f3KzAkXc/IanVxd1is/VIIziRqqt3ongQz0FiTUXqTk0c7aDB3OaFuKnuSoJicQ==", + "dev": true, + "dependencies": { + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^9.5.2", + "globals": "^13.19.0", + "ignore": "^5.2.0", + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "minimatch": "^3.1.2", + "strip-json-comments": "^3.1.1" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@eslint/eslintrc/node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/@eslint/eslintrc/node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true + }, + "node_modules/@eslint/js": { + "version": "8.41.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.41.0.tgz", + "integrity": "sha512-LxcyMGxwmTh2lY9FwHPGWOHmYFCZvbrFCBZL4FzSSsxsRPuhrYUg/49/0KDfW8tnIEaEHtfmn6+NPN+1DqaNmA==", + "dev": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/@ewoudenberg/difflib": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/@ewoudenberg/difflib/-/difflib-0.1.0.tgz", + "integrity": "sha512-OU5P5mJyD3OoWYMWY+yIgwvgNS9cFAU10f+DDuvtogcWQOoJIsQ4Hy2McSfUfhKjq8L0FuWVb4Rt7kgA+XK86A==", + "dependencies": { + "heap": ">= 0.2.0" + } + }, + "node_modules/@hapi/hoek": { + "version": "9.3.0", + "resolved": "https://registry.npmjs.org/@hapi/hoek/-/hoek-9.3.0.tgz", + "integrity": "sha512-/c6rf4UJlmHlC9b5BaNvzAcFv7HZ2QHaV0D4/HNlBdvFnvQq8RI4kYdhyPCl7Xj+oWvTWQ8ujhqS53LIgAe6KQ==" + }, + "node_modules/@hapi/topo": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/@hapi/topo/-/topo-5.1.0.tgz", + "integrity": "sha512-foQZKJig7Ob0BMAYBfcJk8d77QtOe7Wo4ox7ff1lQYoNNAb6jwcY1ncdoy2e9wQZzvNy7ODZCYJkK8kzmcAnAg==", + "dependencies": { + "@hapi/hoek": "^9.0.0" + } + }, + "node_modules/@humanwhocodes/config-array": { + "version": "0.11.8", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.8.tgz", + "integrity": "sha512-UybHIJzJnR5Qc/MsD9Kr+RpO2h+/P1GhOwdiLPXK5TWk5sgTdu88bTD9UP+CKbPPh5Rni1u0GjAdYQLemG8g+g==", + "dev": true, + "dependencies": { + "@humanwhocodes/object-schema": "^1.2.1", + "debug": "^4.1.1", + "minimatch": "^3.0.5" + }, + "engines": { + "node": ">=10.10.0" + } + }, + "node_modules/@humanwhocodes/module-importer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", + "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", + "dev": true, + "engines": { + "node": ">=12.22" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@humanwhocodes/object-schema": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", + "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", + "dev": true + }, + "node_modules/@hutson/parse-repository-url": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@hutson/parse-repository-url/-/parse-repository-url-3.0.2.tgz", + "integrity": "sha512-H9XAx3hc0BQHY6l+IFSWHDySypcXsvsuLhgYLUGywmJ5pswRVQJUHpOsobnLYp2ZUaUlKiKDrgWWhosOwAEM8Q==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@ioredis/commands": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@ioredis/commands/-/commands-1.2.0.tgz", + "integrity": "sha512-Sx1pU8EM64o2BrqNpEO1CNLtKQwyhuXuqyfH7oGKCk+1a33d2r5saW8zNwm3j6BTExtjrv2BxTgzzkMwts6vGg==" + }, + "node_modules/@isaacs/cliui": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", + "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", + "dev": true, + "dependencies": { + "string-width": "^5.1.2", + "string-width-cjs": "npm:string-width@^4.2.0", + "strip-ansi": "^7.0.1", + "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", + "wrap-ansi": "^8.1.0", + "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@isaacs/cliui/node_modules/ansi-regex": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", + "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/@isaacs/cliui/node_modules/ansi-styles": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@isaacs/cliui/node_modules/string-width": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "dev": true, + "dependencies": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@isaacs/cliui/node_modules/strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "dev": true, + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/@isaacs/cliui/node_modules/wrap-ansi": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", + "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^6.1.0", + "string-width": "^5.0.1", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/@istanbuljs/load-nyc-config": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", + "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==", + "dev": true, + "dependencies": { + "camelcase": "^5.3.1", + "find-up": "^4.1.0", + "get-package-type": "^0.1.0", + "js-yaml": "^3.13.1", + "resolve-from": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, + "dependencies": { + "sprintf-js": "~1.0.2" + } + }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "dev": true, + "dependencies": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@istanbuljs/schema": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", + "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@jest/console": { + "version": "29.6.0", + "resolved": "https://registry.npmjs.org/@jest/console/-/console-29.6.0.tgz", + "integrity": "sha512-anb6L1yg7uPQpytNVA5skRaXy3BmrsU8icRhTVNbWdjYWDDfy8M1Kq5HIVRpYoABdbpqsc5Dr+jtu4+qWRQBiQ==", + "dev": true, + "dependencies": { + "@jest/types": "^29.6.0", + "@types/node": "*", + "chalk": "^4.0.0", + "jest-message-util": "^29.6.0", + "jest-util": "^29.6.0", + "slash": "^3.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/core": { + "version": "29.6.0", + "resolved": "https://registry.npmjs.org/@jest/core/-/core-29.6.0.tgz", + "integrity": "sha512-5dbMHfY/5R9m8NbgmB3JlxQqooZ/ooPSOiwEQZZ+HODwJTbIu37seVcZNBK29aMdXtjvTRB3f6LCvkKq+r8uQA==", + "dev": true, + "dependencies": { + "@jest/console": "^29.6.0", + "@jest/reporters": "^29.6.0", + "@jest/test-result": "^29.6.0", + "@jest/transform": "^29.6.0", + "@jest/types": "^29.6.0", + "@types/node": "*", + "ansi-escapes": "^4.2.1", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "exit": "^0.1.2", + "graceful-fs": "^4.2.9", + "jest-changed-files": "^29.5.0", + "jest-config": "^29.6.0", + "jest-haste-map": "^29.6.0", + "jest-message-util": "^29.6.0", + "jest-regex-util": "^29.4.3", + "jest-resolve": "^29.6.0", + "jest-resolve-dependencies": "^29.6.0", + "jest-runner": "^29.6.0", + "jest-runtime": "^29.6.0", + "jest-snapshot": "^29.6.0", + "jest-util": "^29.6.0", + "jest-validate": "^29.6.0", + "jest-watcher": "^29.6.0", + "micromatch": "^4.0.4", + "pretty-format": "^29.6.0", + "slash": "^3.0.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } + } + }, + "node_modules/@jest/environment": { + "version": "29.6.0", + "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-29.6.0.tgz", + "integrity": "sha512-bUZLYUxYlUIsslBbxII0fq0kr1+friI3Gty+cRLmocGB1jdcAHs7FS8QdCDqedE8q4DZE1g/AJHH6OJZBLGGsg==", + "dev": true, + "dependencies": { + "@jest/fake-timers": "^29.6.0", + "@jest/types": "^29.6.0", + "@types/node": "*", + "jest-mock": "^29.6.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/expect": { + "version": "29.6.0", + "resolved": "https://registry.npmjs.org/@jest/expect/-/expect-29.6.0.tgz", + "integrity": "sha512-a7pISPW28Q3c0/pLwz4mQ6tbAI+hc8/0CJp9ix6e9U4dQ6TiHQX82CT5DV5BMWaw8bFH4E6zsfZxXdn6Ka23Bw==", + "dev": true, + "dependencies": { + "expect": "^29.6.0", + "jest-snapshot": "^29.6.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/expect-utils": { + "version": "29.6.0", + "resolved": "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-29.6.0.tgz", + "integrity": "sha512-LLSQQN7oypMSETKoPWpsWYVKJd9LQWmSDDAc4hUQ4JocVC7LAMy9R3ZMhlnLwbcFvQORZnZR7HM893Px6cJhvA==", + "dev": true, + "dependencies": { + "jest-get-type": "^29.4.3" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/fake-timers": { + "version": "29.6.0", + "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-29.6.0.tgz", + "integrity": "sha512-nuCU46AsZoskthWSDS2Aj6LARgyNcp5Fjx2qxsO/fPl1Wp1CJ+dBDqs0OkEcJK8FBeV/MbjH5efe79M2sHcV+A==", + "dev": true, + "dependencies": { + "@jest/types": "^29.6.0", + "@sinonjs/fake-timers": "^10.0.2", + "@types/node": "*", + "jest-message-util": "^29.6.0", + "jest-mock": "^29.6.0", + "jest-util": "^29.6.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/globals": { + "version": "29.6.0", + "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-29.6.0.tgz", + "integrity": "sha512-IQQ3hZ2D/hwEwXSMv5GbfhzdH0nTQR3KPYxnuW6gYWbd6+7/zgMz7Okn6EgBbNtJNONq03k5EKA6HqGyzRbpeg==", + "dev": true, + "dependencies": { + "@jest/environment": "^29.6.0", + "@jest/expect": "^29.6.0", + "@jest/types": "^29.6.0", + "jest-mock": "^29.6.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/reporters": { + "version": "29.6.0", + "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-29.6.0.tgz", + "integrity": "sha512-dWEq4HI0VvHcAD6XTtyBKKARLytyyWPIy1SvGOcU91106MfvHPdxZgupFwVHd8TFpZPpA3SebYjtwS5BUS76Rw==", + "dev": true, + "dependencies": { + "@bcoe/v8-coverage": "^0.2.3", + "@jest/console": "^29.6.0", + "@jest/test-result": "^29.6.0", + "@jest/transform": "^29.6.0", + "@jest/types": "^29.6.0", + "@jridgewell/trace-mapping": "^0.3.18", + "@types/node": "*", + "chalk": "^4.0.0", + "collect-v8-coverage": "^1.0.0", + "exit": "^0.1.2", + "glob": "^7.1.3", + "graceful-fs": "^4.2.9", + "istanbul-lib-coverage": "^3.0.0", + "istanbul-lib-instrument": "^5.1.0", + "istanbul-lib-report": "^3.0.0", + "istanbul-lib-source-maps": "^4.0.0", + "istanbul-reports": "^3.1.3", + "jest-message-util": "^29.6.0", + "jest-util": "^29.6.0", + "jest-worker": "^29.6.0", + "slash": "^3.0.0", + "string-length": "^4.0.1", + "strip-ansi": "^6.0.0", + "v8-to-istanbul": "^9.0.1" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } + } + }, + "node_modules/@jest/reporters/node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@jest/schemas": { + "version": "29.6.0", + "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.6.0.tgz", + "integrity": "sha512-rxLjXyJBTL4LQeJW3aKo0M/+GkCOXsO+8i9Iu7eDb6KwtP65ayoDsitrdPBtujxQ88k4wI2FNYfa6TOGwSn6cQ==", + "dev": true, + "dependencies": { + "@sinclair/typebox": "^0.27.8" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/source-map": { + "version": "29.6.0", + "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-29.6.0.tgz", + "integrity": "sha512-oA+I2SHHQGxDCZpbrsCQSoMLb3Bz547JnM+jUr9qEbuw0vQlWZfpPS7CO9J7XiwKicEz9OFn/IYoLkkiUD7bzA==", + "dev": true, + "dependencies": { + "@jridgewell/trace-mapping": "^0.3.18", + "callsites": "^3.0.0", + "graceful-fs": "^4.2.9" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/test-result": { + "version": "29.6.0", + "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-29.6.0.tgz", + "integrity": "sha512-9qLb7xITeyWhM4yatn2muqfomuoCTOhv0QV9i7XiIyYi3QLfnvPv5NeJp5u0PZeutAOROMLKakOkmoAisOr3YQ==", + "dev": true, + "dependencies": { + "@jest/console": "^29.6.0", + "@jest/types": "^29.6.0", + "@types/istanbul-lib-coverage": "^2.0.0", + "collect-v8-coverage": "^1.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/test-sequencer": { + "version": "29.6.0", + "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-29.6.0.tgz", + "integrity": "sha512-HYCS3LKRQotKWj2mnA3AN13PPevYZu8MJKm12lzYojpJNnn6kI/3PWmr1At/e3tUu+FHQDiOyaDVuR4EV3ezBw==", + "dev": true, + "dependencies": { + "@jest/test-result": "^29.6.0", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^29.6.0", + "slash": "^3.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/transform": { + "version": "29.6.0", + "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-29.6.0.tgz", + "integrity": "sha512-bhP/KxPo3e322FJ0nKAcb6WVK76ZYyQd1lWygJzoSqP8SYMSLdxHqP4wnPTI4WvbB8PKPDV30y5y7Tya4RHOBA==", + "dev": true, + "dependencies": { + "@babel/core": "^7.11.6", + "@jest/types": "^29.6.0", + "@jridgewell/trace-mapping": "^0.3.18", + "babel-plugin-istanbul": "^6.1.1", + "chalk": "^4.0.0", + "convert-source-map": "^2.0.0", + "fast-json-stable-stringify": "^2.1.0", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^29.6.0", + "jest-regex-util": "^29.4.3", + "jest-util": "^29.6.0", + "micromatch": "^4.0.4", + "pirates": "^4.0.4", + "slash": "^3.0.0", + "write-file-atomic": "^4.0.2" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/transform/node_modules/convert-source-map": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", + "dev": true + }, + "node_modules/@jest/transform/node_modules/write-file-atomic": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-4.0.2.tgz", + "integrity": "sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==", + "dev": true, + "dependencies": { + "imurmurhash": "^0.1.4", + "signal-exit": "^3.0.7" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/@jest/types": { + "version": "29.6.0", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.0.tgz", + "integrity": "sha512-8XCgL9JhqbJTFnMRjEAO+TuW251+MoMd5BSzLiE3vvzpQ8RlBxy8NoyNkDhs3K3OL3HeVinlOl9or5p7GTeOLg==", + "dev": true, + "dependencies": { + "@jest/schemas": "^29.6.0", + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^17.0.8", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.1.1.tgz", + "integrity": "sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w==", + "dev": true, + "dependencies": { + "@jridgewell/set-array": "^1.0.0", + "@jridgewell/sourcemap-codec": "^1.4.10" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", + "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==", + "dev": true, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/set-array": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", + "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", + "dev": true, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.4.14", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", + "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==", + "dev": true + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.18", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.18.tgz", + "integrity": "sha512-w+niJYzMHdd7USdiH2U6869nqhD2nbfZXND5Yp93qIbEmnDNk7PD48o+YchRVpzMU7M6jVCbenTR7PA1FLQ9pA==", + "dev": true, + "dependencies": { + "@jridgewell/resolve-uri": "3.1.0", + "@jridgewell/sourcemap-codec": "1.4.14" + } + }, + "node_modules/@jsdevtools/ono": { + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/@jsdevtools/ono/-/ono-7.1.3.tgz", + "integrity": "sha512-4JQNk+3mVzK3xh2rqd6RB4J46qUR19azEHBneZyTZM+c456qOrbbM/5xcR8huNCCcbVt7+UmizG6GuUvPvKUYg==", + "dev": true + }, + "node_modules/@koa/router": { + "version": "12.0.0", + "resolved": "https://registry.npmjs.org/@koa/router/-/router-12.0.0.tgz", + "integrity": "sha512-cnnxeKHXlt7XARJptflGURdJaO+ITpNkOHmQu7NHmCoRinPbyvFzce/EG/E8Zy81yQ1W9MoSdtklc3nyaDReUw==", + "dependencies": { + "http-errors": "^2.0.0", + "koa-compose": "^4.1.0", + "methods": "^1.1.2", + "path-to-regexp": "^6.2.1" + }, + "engines": { + "node": ">= 12" + } + }, + "node_modules/@koa/router/node_modules/http-errors": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", + "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", + "dependencies": { + "depd": "2.0.0", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "toidentifier": "1.0.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/@koa/router/node_modules/statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/@ndhoule/extend": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@ndhoule/extend/-/extend-2.0.0.tgz", + "integrity": "sha512-xb77tVVGDGwjy25a6RmBiiBQ9uvxhkG0OEpVkQ74oNFsy9u+4PGp5BIIblmJZmJBMgXiKxZtkr4GcmHCNVubBQ==" + }, + "node_modules/@nicolo-ribaudo/semver-v6": { + "version": "6.3.3", + "resolved": "https://registry.npmjs.org/@nicolo-ribaudo/semver-v6/-/semver-v6-6.3.3.tgz", + "integrity": "sha512-3Yc1fUTs69MG/uZbJlLSI3JISMn2UV2rg+1D/vROUqZyh3l6iYHCs7GMp+M40ZD7yOdDbYjJcU1oTJhrc+dGKg==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dev": true, + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dev": true, + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@pkgjs/parseargs": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", + "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", + "dev": true, + "optional": true, + "engines": { + "node": ">=14" + } + }, + "node_modules/@sideway/address": { + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/@sideway/address/-/address-4.1.4.tgz", + "integrity": "sha512-7vwq+rOHVWjyXxVlR76Agnvhy8I9rpzjosTESvmhNeXOXdZZB15Fl+TI9x1SiHZH5Jv2wTGduSxFDIaq0m3DUw==", + "dependencies": { + "@hapi/hoek": "^9.0.0" + } + }, + "node_modules/@sideway/formula": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@sideway/formula/-/formula-3.0.1.tgz", + "integrity": "sha512-/poHZJJVjx3L+zVD6g9KgHfYnb443oi7wLu/XKojDviHy6HOEOA6z1Trk5aR1dGcmPenJEgb2sK2I80LeS3MIg==" + }, + "node_modules/@sideway/pinpoint": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@sideway/pinpoint/-/pinpoint-2.0.0.tgz", + "integrity": "sha512-RNiOoTPkptFtSVzQevY/yWtZwf/RxyVnPy/OcA9HBM3MlGDnBEYL5B41H0MTn0Uec8Hi+2qUtTfG2WWZBmMejQ==" + }, + "node_modules/@sinclair/typebox": { + "version": "0.27.8", + "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz", + "integrity": "sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==", + "dev": true + }, + "node_modules/@sindresorhus/is": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-0.7.0.tgz", + "integrity": "sha512-ONhaKPIufzzrlNbqtWFFd+jlnemX6lJAgq9ZeiZtS7I1PIf/la7CW4m83rTXRnVnsMbW2k56pGYu7AUFJD9Pow==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/@sinonjs/commons": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-3.0.0.tgz", + "integrity": "sha512-jXBtWAF4vmdNmZgD5FoKsVLv3rPgDnLgPbU84LIJ3otV44vJlDRokVng5v8NFJdCf/da9legHcKaRuZs4L7faA==", + "dev": true, + "dependencies": { + "type-detect": "4.0.8" + } + }, + "node_modules/@sinonjs/fake-timers": { + "version": "10.3.0", + "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-10.3.0.tgz", + "integrity": "sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA==", + "dev": true, + "dependencies": { + "@sinonjs/commons": "^3.0.0" + } + }, + "node_modules/@smithy/abort-controller": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@smithy/abort-controller/-/abort-controller-1.0.1.tgz", + "integrity": "sha512-An6irzp9NCji2JtJHhrEFlDbxLwHd6c6Y9fq3ZeomyUR8BIXlGXVTxsemUSZVVgOq3166iYbYs/CrPAmgRSFLw==", + "dependencies": { + "@smithy/types": "^1.1.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/config-resolver": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@smithy/config-resolver/-/config-resolver-1.0.1.tgz", + "integrity": "sha512-quj0xUiEVG/UHfY82EtthR/+S5/17p3IxXArC3NFSNqryMobWbG9oWgJy2s2cgUSVZLzxevjKKvxrilK7JEDaA==", + "dependencies": { + "@smithy/types": "^1.1.0", + "@smithy/util-config-provider": "^1.0.1", + "@smithy/util-middleware": "^1.0.1", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/credential-provider-imds": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@smithy/credential-provider-imds/-/credential-provider-imds-1.0.1.tgz", + "integrity": "sha512-hkRJoxVCh4CEt1zYOBElE+G/MV6lyx3g68hSJpesM4pwMT/bzEVo5E5XzXY+6dVq8yszeatWKbFuqCCBQte8tg==", + "dependencies": { + "@smithy/node-config-provider": "^1.0.1", + "@smithy/property-provider": "^1.0.1", + "@smithy/types": "^1.1.0", + "@smithy/url-parser": "^1.0.1", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/eventstream-codec": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@smithy/eventstream-codec/-/eventstream-codec-1.0.1.tgz", + "integrity": "sha512-cpcTXQEOEs2wEvIyxW/iTHJ2m0RVqoEOTjjWEXD6SY8Gcs3FCFP6E8MXadC098tdH5ctMIUXc8POXyMpxzGnjw==", + "dependencies": { + "@aws-crypto/crc32": "3.0.0", + "@smithy/types": "^1.1.0", + "@smithy/util-hex-encoding": "^1.0.1", + "tslib": "^2.5.0" + } + }, + "node_modules/@smithy/eventstream-serde-browser": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-browser/-/eventstream-serde-browser-1.0.1.tgz", + "integrity": "sha512-oc8vxe+AU2RzvXH/Ehh0TzM/Nsw3I3ywu7V3qaCzqdkBIntAwK9JGZqcSDsqTK0WxZKBRgFIEwopcuZ2slVnFQ==", + "dependencies": { + "@smithy/eventstream-serde-universal": "^1.0.1", + "@smithy/types": "^1.1.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/eventstream-serde-config-resolver": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-config-resolver/-/eventstream-serde-config-resolver-1.0.1.tgz", + "integrity": "sha512-TJwaXima0djnNY819utO1j93qZHaheFH1bhHxBkMrImtEOuXY48Tjma/L2m8swkIq8dy8jFC9hrYOkD0eYHkFA==", + "dependencies": { + "@smithy/types": "^1.1.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/eventstream-serde-node": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-node/-/eventstream-serde-node-1.0.1.tgz", + "integrity": "sha512-JEj8w7IRs4l+kcwKxbv3pNuu8n7ORC4pMFrIOrM4rERzrRnI7vMNTRzvAPGYA53rqm/Y9tBA9dw4C+H6hLXcsA==", + "dependencies": { + "@smithy/eventstream-serde-universal": "^1.0.1", + "@smithy/types": "^1.1.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/eventstream-serde-universal": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-universal/-/eventstream-serde-universal-1.0.1.tgz", + "integrity": "sha512-c6m9DH7m6D2S93dof4wSxysaGSQdauO20TNcSePzrgHd4rkTnz5pqZ1a7Pt22q2SKf09SvTugq5cV2Sy4r8zHw==", + "dependencies": { + "@smithy/eventstream-codec": "^1.0.1", + "@smithy/types": "^1.1.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/fetch-http-handler": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@smithy/fetch-http-handler/-/fetch-http-handler-1.0.1.tgz", + "integrity": "sha512-/e2A8eOMk4FVZBQ0o6uF/ttLtFZcmsK5MIwDu1UE3crM4pCAIP19Ul8U9rdLlHhIu81X4AcJmSw55RDSpVRL/w==", + "dependencies": { + "@smithy/protocol-http": "^1.1.0", + "@smithy/querystring-builder": "^1.0.1", + "@smithy/types": "^1.1.0", + "@smithy/util-base64": "^1.0.1", + "tslib": "^2.5.0" + } + }, + "node_modules/@smithy/hash-node": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@smithy/hash-node/-/hash-node-1.0.1.tgz", + "integrity": "sha512-eCz08BySBcOjVObjbRAS/XMKUGY4ujnuS+GoWeEpzpCSKDnO8/YQ0rStRt4C0llRmhApizYc1tK9DiJwfvXcBg==", + "dependencies": { + "@smithy/types": "^1.1.0", + "@smithy/util-buffer-from": "^1.0.1", + "@smithy/util-utf8": "^1.0.1", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/invalid-dependency": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@smithy/invalid-dependency/-/invalid-dependency-1.0.1.tgz", + "integrity": "sha512-kib63GFlAzRn/wf8M0cRWrZA1cyOy5IvpTkLavCY782DPFMP0EaEeD6VrlNIOvD6ncf7uCJ68HqckhwK1qLT3g==", + "dependencies": { + "@smithy/types": "^1.1.0", + "tslib": "^2.5.0" + } + }, + "node_modules/@smithy/is-array-buffer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-1.0.1.tgz", + "integrity": "sha512-fHSTW70gANnzPYWNDcWkPXpp+QMbHhKozbQm/+Denkhp4gwSiPuAovWZRpJa9sXO+Q4dOnNzYN2max1vTCEroA==", + "dependencies": { + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/middleware-content-length": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@smithy/middleware-content-length/-/middleware-content-length-1.0.1.tgz", + "integrity": "sha512-vWWigayk5i2cFp9xPX5vdzHyK+P0t/xZ3Ovp4Ss+c8JQ1Hlq2kpJZVWtTKsmdfND5rVo5lu0kD5wgAMUCcmuhw==", + "dependencies": { + "@smithy/protocol-http": "^1.1.0", + "@smithy/types": "^1.1.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/middleware-endpoint": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@smithy/middleware-endpoint/-/middleware-endpoint-1.0.2.tgz", + "integrity": "sha512-F3CyXgjtDI4quGFkDmVNytt6KMwlzzeMxtopk6Edue4uKdKcMC1vUmoRS5xTbFzKDDp4XwpnEV7FshPaL3eCPw==", + "dependencies": { + "@smithy/middleware-serde": "^1.0.1", + "@smithy/types": "^1.1.0", + "@smithy/url-parser": "^1.0.1", + "@smithy/util-middleware": "^1.0.1", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/middleware-retry": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@smithy/middleware-retry/-/middleware-retry-1.0.3.tgz", + "integrity": "sha512-ZRsjG8adtxQ456FULPqPFmWtrW44Fq8IgdQvQB+rC2RSho3OUzS+TiEIwb5Zs6rf2IoewITKtfdtsUZcxXO0ng==", + "dependencies": { + "@smithy/protocol-http": "^1.1.0", + "@smithy/service-error-classification": "^1.0.2", + "@smithy/types": "^1.1.0", + "@smithy/util-middleware": "^1.0.1", + "@smithy/util-retry": "^1.0.3", + "tslib": "^2.5.0", + "uuid": "^8.3.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/middleware-retry/node_modules/uuid": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "node_modules/@smithy/middleware-serde": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@smithy/middleware-serde/-/middleware-serde-1.0.1.tgz", + "integrity": "sha512-bn5lWk8UUeXFCQfkrNErz5SbeNd+2hgYegHMLsOLPt4URDIsyREar6wMsdsR+8UCdgR5s8udG3Zalgc7puizIQ==", + "dependencies": { + "@smithy/types": "^1.1.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/middleware-stack": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@smithy/middleware-stack/-/middleware-stack-1.0.1.tgz", + "integrity": "sha512-T6+gsAO1JYamOJqmORCrByDeQ/NB+ggjHb33UDOgdX4xIjXz/FB/3UqHgQu6PL1cSFrK+i4oteDIwqARDs/Szw==", + "dependencies": { + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/node-config-provider": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@smithy/node-config-provider/-/node-config-provider-1.0.1.tgz", + "integrity": "sha512-FRxifH/J2SgOaVLihIqBFuGhiHR/NfzbZYp5nYO7BGgT/gc/f9nAuuRJcEy/hwO3aI6ThyG5apH4tGec6A2sCw==", + "dependencies": { + "@smithy/property-provider": "^1.0.1", + "@smithy/shared-ini-file-loader": "^1.0.1", + "@smithy/types": "^1.1.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/node-http-handler": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@smithy/node-http-handler/-/node-http-handler-1.0.2.tgz", + "integrity": "sha512-PzPrGRSt3kNuruLCeR4ffJp57ZLVnIukMXVL3Ppr65ZoxiE+HBsOVAa/Z/T+4HzjCM6RaXnnmB8YKfsDjlb0iA==", + "dependencies": { + "@smithy/abort-controller": "^1.0.1", + "@smithy/protocol-http": "^1.1.0", + "@smithy/querystring-builder": "^1.0.1", + "@smithy/types": "^1.1.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/property-provider": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@smithy/property-provider/-/property-provider-1.0.1.tgz", + "integrity": "sha512-3EG/61Ls1MrgEaafpltXBJHSqFPqmTzEX7QKO7lOEHuYGmGYzZ08t1SsTgd1vM74z0IihoZyGPynZ7WmXKvTeg==", + "dependencies": { + "@smithy/types": "^1.1.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/protocol-http": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-1.1.0.tgz", + "integrity": "sha512-H5y/kZOqfJSqRkwtcAoVbqONmhdXwSgYNJ1Glk5Ry8qlhVVy5qUzD9EklaCH8/XLnoCsLO/F/Giee8MIvaBRkg==", + "dependencies": { + "@smithy/types": "^1.1.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/querystring-builder": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@smithy/querystring-builder/-/querystring-builder-1.0.1.tgz", + "integrity": "sha512-J5Tzkw1PMtu01h6wl+tlN5vsyROmS6/z5lEfNlLo/L4ELHeVkQ4Q0PEIjDddPLfjVLCm8biQTESE5GCMixSRNQ==", + "dependencies": { + "@smithy/types": "^1.1.0", + "@smithy/util-uri-escape": "^1.0.1", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/querystring-parser": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@smithy/querystring-parser/-/querystring-parser-1.0.1.tgz", + "integrity": "sha512-zauxdMc3cwxoLitI5DZqH7xN6Fk0mwRxrUMAETbav2j6Se2U0UGak/55rZcDg2yGzOURaLYi5iOm1gHr98P+Bw==", + "dependencies": { + "@smithy/types": "^1.1.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/service-error-classification": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@smithy/service-error-classification/-/service-error-classification-1.0.2.tgz", + "integrity": "sha512-Q5CCuzYL5FGo6Rr/O+lZxXHm2hrRgbmMn8MgyjqZUWZg20COg20DuNtIbho2iht6CoB7jOpmpBqhWizLlzUZgg==", + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/shared-ini-file-loader": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-1.0.1.tgz", + "integrity": "sha512-EztziuIPoNronENGqh+MWVKJErA4rJpaPzJCPukzBeEoG2USka0/q4B5Mr/1zszOnrb49fPNh4u3u5LfiH7QzA==", + "dependencies": { + "@smithy/types": "^1.1.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/signature-v4": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@smithy/signature-v4/-/signature-v4-1.0.1.tgz", + "integrity": "sha512-2D69je14ou1vBTnAQeysSK4QVMm0j3WHS3MDg/DnHnFFcXRCzVl/xAARO7POD8+fpi4tMFPs8Z4hzo1Zw40L0Q==", + "dependencies": { + "@smithy/eventstream-codec": "^1.0.1", + "@smithy/is-array-buffer": "^1.0.1", + "@smithy/types": "^1.1.0", + "@smithy/util-hex-encoding": "^1.0.1", + "@smithy/util-middleware": "^1.0.1", + "@smithy/util-uri-escape": "^1.0.1", + "@smithy/util-utf8": "^1.0.1", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/smithy-client": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@smithy/smithy-client/-/smithy-client-1.0.3.tgz", + "integrity": "sha512-Wh1mNP/1yUZK0uYkgCQ6NMxpBT3Fmc45TMdUfOlH1xD2zGYL7U4yDHFOhEZdi/suyjaelFobXB2p9pPIw6LjRQ==", + "dependencies": { + "@smithy/middleware-stack": "^1.0.1", + "@smithy/types": "^1.1.0", + "@smithy/util-stream": "^1.0.1", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/types": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-1.1.0.tgz", + "integrity": "sha512-KzmvisMmuwD2jZXuC9e65JrgsZM97y5NpDU7g347oB+Q+xQLU6hQZ5zFNNbEfwwOJHoOvEVTna+dk1h/lW7alw==", + "dependencies": { + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/url-parser": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@smithy/url-parser/-/url-parser-1.0.1.tgz", + "integrity": "sha512-33vWEtE6HzmwjEcEb4I58XMLRAchwPS93YhfDyXAXr1jwDCzfXmMayQwwpyW847rpWj0XJimxqia8q0z+k/ybw==", + "dependencies": { + "@smithy/querystring-parser": "^1.0.1", + "@smithy/types": "^1.1.0", + "tslib": "^2.5.0" + } + }, + "node_modules/@smithy/util-base64": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@smithy/util-base64/-/util-base64-1.0.1.tgz", + "integrity": "sha512-rJcpRi/yUi6TyCEkjdTH86/ExBuKlfctEXhG9/4gMJ3/cnPcHJJnr0mQ9evSEO+3DbpT/Nxq90bcTBdTIAmCig==", + "dependencies": { + "@smithy/util-buffer-from": "^1.0.1", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/util-body-length-browser": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@smithy/util-body-length-browser/-/util-body-length-browser-1.0.1.tgz", + "integrity": "sha512-Pdp744fmF7E1NWoSb7256Anhm8eYoCubvosdMwXzOnHuPRVbDa15pKUz2027K3+jrfGpXo1r+MnDerajME1Osw==", + "dependencies": { + "tslib": "^2.5.0" + } + }, + "node_modules/@smithy/util-body-length-node": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@smithy/util-body-length-node/-/util-body-length-node-1.0.1.tgz", + "integrity": "sha512-4PIHjDFwG07SNensAiVq/CJmubEVuwclWSYOTNtzBNTvxOeGLznvygkGYgPzS3erByT8C4S9JvnLYgtrsVV3nQ==", + "dependencies": { + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/util-buffer-from": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-1.0.1.tgz", + "integrity": "sha512-363N7Wq0ceUgE5lLe6kaR6GlJs2/m4r9V6bRMfIszb6P1FZbbRRM2FQYUWWPFSsRymm9mJL18b3fjiVsIvhDGg==", + "dependencies": { + "@smithy/is-array-buffer": "^1.0.1", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/util-config-provider": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@smithy/util-config-provider/-/util-config-provider-1.0.1.tgz", + "integrity": "sha512-4Qy38Oy5/q43MpTwCLV1P+7NeaOp4W2etQDxMjgEeRlOyGGNlgttn0syi4g2rVSukFVqQ6FbeRs5xbnFmS6kaQ==", + "dependencies": { + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/util-defaults-mode-browser": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-browser/-/util-defaults-mode-browser-1.0.1.tgz", + "integrity": "sha512-/9ObwNch4Z/NJYfkO4AvqBWku60Ju+c2Ck32toPOLmWe/V6eI9FLn8C1abri+GxDRCkLIqvkaWU1lgZ3nWZIIw==", + "dependencies": { + "@smithy/property-provider": "^1.0.1", + "@smithy/types": "^1.1.0", + "bowser": "^2.11.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/@smithy/util-defaults-mode-node": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-node/-/util-defaults-mode-node-1.0.1.tgz", + "integrity": "sha512-XQM3KvqRLgv7bwAzVkXTITkOmcOINoG9icJiGT8FA0zV35lY5UvyIsg5kHw01xigQS8ufa/33AwG3ZoXip+V5g==", + "dependencies": { + "@smithy/config-resolver": "^1.0.1", + "@smithy/credential-provider-imds": "^1.0.1", + "@smithy/node-config-provider": "^1.0.1", + "@smithy/property-provider": "^1.0.1", + "@smithy/types": "^1.1.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/@smithy/util-hex-encoding": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@smithy/util-hex-encoding/-/util-hex-encoding-1.0.1.tgz", + "integrity": "sha512-FPTtMz/t02/rbfq5Pdll/TWUYP+GVFLCQNr+DgifrLzVRU0g8rdRjyFpDh8nPTdkDDusTTo9P1bepAYj68s0eA==", + "dependencies": { + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/util-middleware": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@smithy/util-middleware/-/util-middleware-1.0.1.tgz", + "integrity": "sha512-u9akN3Zmbr0vZH4F+2iehG7cFg+3fvDfnvS/hhsXH4UHuhqiQ+ADefibnLzPoz1pooY7rvwaQ/TVHyJmZHdLdQ==", + "dependencies": { + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/util-retry": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@smithy/util-retry/-/util-retry-1.0.3.tgz", + "integrity": "sha512-gYQnZDD8I2XJFspVwUISyukjPWVikTzKR0IdG8hCWYPTpeULFl1o6yzXlT5SL63TBkuEYl0R1/93cdNtMiNnoA==", + "dependencies": { + "@smithy/service-error-classification": "^1.0.2", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/@smithy/util-stream": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@smithy/util-stream/-/util-stream-1.0.1.tgz", + "integrity": "sha512-4aBCIz35aZAnt2Rbq341KrnUzGhWv2/Zu8HouJqYLvSWCzlrvsNCGlXP4e70Kjzcw8hSuuCNtdUICwQ5qUWLxg==", + "dependencies": { + "@smithy/fetch-http-handler": "^1.0.1", + "@smithy/node-http-handler": "^1.0.2", + "@smithy/types": "^1.1.0", + "@smithy/util-base64": "^1.0.1", + "@smithy/util-buffer-from": "^1.0.1", + "@smithy/util-hex-encoding": "^1.0.1", + "@smithy/util-utf8": "^1.0.1", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/util-uri-escape": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@smithy/util-uri-escape/-/util-uri-escape-1.0.1.tgz", + "integrity": "sha512-IJUrRnXKEIc+PKnU1XzTsIENVR+60jUDPBP3iWX/EvuuT3Xfob47x1FGUe2c3yMXNuU6ax8VDk27hL5LKNoehQ==", + "dependencies": { + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/util-utf8": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-1.0.1.tgz", + "integrity": "sha512-iX6XHpjh4DFEUIBSKp2tjy3pYnLQMsJ62zYi1BVAC0kobE6p8AVpiZnxsU3ZkgQatAsUaEspFHUZ7CL7oSqaPQ==", + "dependencies": { + "@smithy/util-buffer-from": "^1.0.1", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/util-waiter": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@smithy/util-waiter/-/util-waiter-1.0.1.tgz", + "integrity": "sha512-dsn8O0s3pFIgxFzySLe1dv0w4tEQizEP6UqbgZ4r/Kar4n8pSdrPi6DJg8BzXwkwEIZpMtV4/nhSeGZ7HksDXA==", + "dependencies": { + "@smithy/abort-controller": "^1.0.1", + "@smithy/types": "^1.1.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@tsconfig/node10": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.9.tgz", + "integrity": "sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA==", + "dev": true + }, + "node_modules/@tsconfig/node12": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz", + "integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==", + "dev": true + }, + "node_modules/@tsconfig/node14": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz", + "integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==", + "dev": true + }, + "node_modules/@tsconfig/node16": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.3.tgz", + "integrity": "sha512-yOlFc+7UtL/89t2ZhjPvvB/DeAr3r+Dq58IgzsFkOAvVC6NMJXmCGjbptdXdR9qsX7pKcTL+s87FtYREi2dEEQ==", + "dev": true + }, + "node_modules/@types/accepts": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/@types/accepts/-/accepts-1.3.5.tgz", + "integrity": "sha512-jOdnI/3qTpHABjM5cx1Hc0sKsPoYCp+DP/GJRGtDlPd7fiV9oXGGIcjW/ZOxLIvjGz8MA+uMZI9metHlgqbgwQ==", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/babel__core": { + "version": "7.1.20", + "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.1.20.tgz", + "integrity": "sha512-PVb6Bg2QuscZ30FvOU7z4guG6c926D9YRvOxEaelzndpMsvP+YM74Q/dAFASpg2l6+XLalxSGxcq/lrgYWZtyQ==", + "dev": true, + "dependencies": { + "@babel/parser": "^7.1.0", + "@babel/types": "^7.0.0", + "@types/babel__generator": "*", + "@types/babel__template": "*", + "@types/babel__traverse": "*" + } + }, + "node_modules/@types/babel__generator": { + "version": "7.6.4", + "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.4.tgz", + "integrity": "sha512-tFkciB9j2K755yrTALxD44McOrk+gfpIpvC3sxHjRawj6PfnQxrse4Clq5y/Rq+G3mrBurMax/lG8Qn2t9mSsg==", + "dev": true, + "dependencies": { + "@babel/types": "^7.0.0" + } + }, + "node_modules/@types/babel__template": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.1.tgz", + "integrity": "sha512-azBFKemX6kMg5Io+/rdGT0dkGreboUVR0Cdm3fz9QJWpaQGJRQXl7C+6hOTCZcMll7KFyEQpgbYI2lHdsS4U7g==", + "dev": true, + "dependencies": { + "@babel/parser": "^7.1.0", + "@babel/types": "^7.0.0" + } + }, + "node_modules/@types/babel__traverse": { + "version": "7.18.3", + "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.18.3.tgz", + "integrity": "sha512-1kbcJ40lLB7MHsj39U4Sh1uTd2E7rLEa79kmDpI6cy+XiXsteB3POdQomoq4FxszMrO3ZYchkhYJw7A2862b3w==", + "dev": true, + "dependencies": { + "@babel/types": "^7.3.0" + } + }, + "node_modules/@types/body-parser": { + "version": "1.19.2", + "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.2.tgz", + "integrity": "sha512-ALYone6pm6QmwZoAgeyNksccT9Q4AWZQ6PvfwR37GT6r6FWUPguq6sUmNGSMV2Wr761oQoBxwGGa6DR5o1DC9g==", + "dependencies": { + "@types/connect": "*", + "@types/node": "*" + } + }, + "node_modules/@types/connect": { + "version": "3.4.35", + "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.35.tgz", + "integrity": "sha512-cdeYyv4KWoEgpBISTxWvqYsVy444DOqehiF3fM3ne10AmJ62RSyNkUnxMJXHQWRQQX2eR94m5y1IZyDwBjV9FQ==", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/content-disposition": { + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/@types/content-disposition/-/content-disposition-0.5.5.tgz", + "integrity": "sha512-v6LCdKfK6BwcqMo+wYW05rLS12S0ZO0Fl4w1h4aaZMD7bqT3gVUns6FvLJKGZHQmYn3SX55JWGpziwJRwVgutA==" + }, + "node_modules/@types/cookies": { + "version": "0.7.7", + "resolved": "https://registry.npmjs.org/@types/cookies/-/cookies-0.7.7.tgz", + "integrity": "sha512-h7BcvPUogWbKCzBR2lY4oqaZbO3jXZksexYJVFvkrFeLgbZjQkU4x8pRq6eg2MHXQhY0McQdqmmsxRWlVAHooA==", + "dependencies": { + "@types/connect": "*", + "@types/express": "*", + "@types/keygrip": "*", + "@types/node": "*" + } + }, + "node_modules/@types/express": { + "version": "4.17.17", + "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.17.tgz", + "integrity": "sha512-Q4FmmuLGBG58btUnfS1c1r/NQdlp3DMfGDGig8WhfpA2YRUtEkxAjkZb0yvplJGYdF1fsQ81iMDcH24sSCNC/Q==", + "dependencies": { + "@types/body-parser": "*", + "@types/express-serve-static-core": "^4.17.33", + "@types/qs": "*", + "@types/serve-static": "*" + } + }, + "node_modules/@types/express-serve-static-core": { + "version": "4.17.35", + "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.35.tgz", + "integrity": "sha512-wALWQwrgiB2AWTT91CB62b6Yt0sNHpznUXeZEcnPU3DRdlDIz74x8Qg1UUYKSVFi+va5vKOLYRBI1bRKiLLKIg==", + "dependencies": { + "@types/node": "*", + "@types/qs": "*", + "@types/range-parser": "*", + "@types/send": "*" + } + }, + "node_modules/@types/graceful-fs": { + "version": "4.1.6", + "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.6.tgz", + "integrity": "sha512-Sig0SNORX9fdW+bQuTEovKj3uHcUL6LQKbCrrqb1X7J6/ReAbhCXRAhc+SMejhLELFj2QcyuxmUooZ4bt5ReSw==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/http-assert": { + "version": "1.5.3", + "resolved": "https://registry.npmjs.org/@types/http-assert/-/http-assert-1.5.3.tgz", + "integrity": "sha512-FyAOrDuQmBi8/or3ns4rwPno7/9tJTijVW6aQQjK02+kOQ8zmoNg2XJtAuQhvQcy1ASJq38wirX5//9J1EqoUA==" + }, + "node_modules/@types/http-errors": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@types/http-errors/-/http-errors-2.0.1.tgz", + "integrity": "sha512-/K3ds8TRAfBvi5vfjuz8y6+GiAYBZ0x4tXv1Av6CWBWn0IlADc+ZX9pMq7oU0fNQPnBwIZl3rmeLp6SBApbxSQ==" + }, + "node_modules/@types/istanbul-lib-coverage": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.4.tgz", + "integrity": "sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g==", + "dev": true + }, + "node_modules/@types/istanbul-lib-report": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", + "integrity": "sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg==", + "dev": true, + "dependencies": { + "@types/istanbul-lib-coverage": "*" + } + }, + "node_modules/@types/istanbul-reports": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz", + "integrity": "sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw==", + "dev": true, + "dependencies": { + "@types/istanbul-lib-report": "*" + } + }, + "node_modules/@types/jest": { + "version": "29.5.1", + "resolved": "https://registry.npmjs.org/@types/jest/-/jest-29.5.1.tgz", + "integrity": "sha512-tEuVcHrpaixS36w7hpsfLBLpjtMRJUE09/MHXn923LOVojDwyC14cWcfc0rDs0VEfUyYmt/+iX1kxxp+gZMcaQ==", + "dev": true, + "dependencies": { + "expect": "^29.0.0", + "pretty-format": "^29.0.0" + } + }, + "node_modules/@types/json-schema": { + "version": "7.0.12", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.12.tgz", + "integrity": "sha512-Hr5Jfhc9eYOQNPYO5WLDq/n4jqijdHNlDXjuAQkkt+mWdQR+XJToOHrsD4cPaMXpn6KO7y2+wM8AZEs8VpBLVA==", + "dev": true + }, + "node_modules/@types/json5": { + "version": "0.0.29", + "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", + "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==", + "dev": true + }, + "node_modules/@types/keygrip": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@types/keygrip/-/keygrip-1.0.2.tgz", + "integrity": "sha512-GJhpTepz2udxGexqos8wgaBx4I/zWIDPh/KOGEwAqtuGDkOUJu5eFvwmdBX4AmB8Odsr+9pHCQqiAqDL/yKMKw==" + }, + "node_modules/@types/koa": { + "version": "2.13.6", + "resolved": "https://registry.npmjs.org/@types/koa/-/koa-2.13.6.tgz", + "integrity": "sha512-diYUfp/GqfWBAiwxHtYJ/FQYIXhlEhlyaU7lB/bWQrx4Il9lCET5UwpFy3StOAohfsxxvEQ11qIJgT1j2tfBvw==", + "dependencies": { + "@types/accepts": "*", + "@types/content-disposition": "*", + "@types/cookies": "*", + "@types/http-assert": "*", + "@types/http-errors": "*", + "@types/keygrip": "*", + "@types/koa-compose": "*", + "@types/node": "*" + } + }, + "node_modules/@types/koa-bodyparser": { + "version": "4.3.10", + "resolved": "https://registry.npmjs.org/@types/koa-bodyparser/-/koa-bodyparser-4.3.10.tgz", + "integrity": "sha512-6ae05pjhmrmGhUR8GYD5qr5p9LTEMEGfGXCsK8VaSL+totwigm8+H/7MHW7K4854CMeuwRAubT8qcc/EagaeIA==", + "dev": true, + "dependencies": { + "@types/koa": "*" + } + }, + "node_modules/@types/koa-compose": { + "version": "3.2.5", + "resolved": "https://registry.npmjs.org/@types/koa-compose/-/koa-compose-3.2.5.tgz", + "integrity": "sha512-B8nG/OoE1ORZqCkBVsup/AKcvjdgoHnfi4pZMn5UwAPCbhk/96xyv284eBYW8JlQbQ7zDmnpFr68I/40mFoIBQ==", + "dependencies": { + "@types/koa": "*" + } + }, + "node_modules/@types/lodash": { + "version": "4.14.197", + "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.197.tgz", + "integrity": "sha512-BMVOiWs0uNxHVlHBgzTIqJYmj+PgCo4euloGF+5m4okL3rEYzM2EEv78mw8zWSMM57dM7kVIgJ2QDvwHSoCI5g==", + "dev": true + }, + "node_modules/@types/mime": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.2.tgz", + "integrity": "sha512-YATxVxgRqNH6nHEIsvg6k2Boc1JHI9ZbH5iWFFv/MTkchz3b1ieGDa5T0a9RznNdI0KhVbdbWSN+KWWrQZRxTw==" + }, + "node_modules/@types/minimist": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/@types/minimist/-/minimist-1.2.2.tgz", + "integrity": "sha512-jhuKLIRrhvCPLqwPcx6INqmKeiA5EWrsCOPhrlFSrbrmU4ZMPjj5Ul/oLCMDO98XRUIwVm78xICz4EPCektzeQ==", + "dev": true + }, + "node_modules/@types/node": { + "version": "20.2.5", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.2.5.tgz", + "integrity": "sha512-JJulVEQXmiY9Px5axXHeYGLSjhkZEnD+MDPDGbCbIAbMslkKwmygtZFy1X6s/075Yo94sf8GuSlFfPzysQrWZQ==" + }, + "node_modules/@types/normalize-package-data": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.1.tgz", + "integrity": "sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw==" + }, + "node_modules/@types/prettier": { + "version": "2.7.3", + "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.7.3.tgz", + "integrity": "sha512-+68kP9yzs4LMp7VNh8gdzMSPZFL44MLGqiHWvttYJe+6qnuVr4Ek9wSBQoveqY/r+LwjCcU29kNVkidwim+kYA==", + "dev": true + }, + "node_modules/@types/qs": { + "version": "6.9.7", + "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.7.tgz", + "integrity": "sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw==" + }, + "node_modules/@types/range-parser": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.4.tgz", + "integrity": "sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw==" + }, + "node_modules/@types/semver": { + "version": "7.5.0", + "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.0.tgz", + "integrity": "sha512-G8hZ6XJiHnuhQKR7ZmysCeJWE08o8T0AXtk5darsCaTVsYZhhgUrq53jizaR2FvsoeCwJhlmwTjkXBY5Pn/ZHw==", + "dev": true + }, + "node_modules/@types/send": { + "version": "0.17.1", + "resolved": "https://registry.npmjs.org/@types/send/-/send-0.17.1.tgz", + "integrity": "sha512-Cwo8LE/0rnvX7kIIa3QHCkcuF21c05Ayb0ZfxPiv0W8VRiZiNW/WuRupHKpqqGVGf7SUA44QSOUKaEd9lIrd/Q==", + "dependencies": { + "@types/mime": "^1", + "@types/node": "*" + } + }, + "node_modules/@types/serve-static": { + "version": "1.15.1", + "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.1.tgz", + "integrity": "sha512-NUo5XNiAdULrJENtJXZZ3fHtfMolzZwczzBbnAeBbqBwG+LaG6YaJtuwzwGSQZ2wsCrxjEhNNjAkKigy3n8teQ==", + "dependencies": { + "@types/mime": "*", + "@types/node": "*" + } + }, + "node_modules/@types/stack-utils": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.1.tgz", + "integrity": "sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw==", + "dev": true + }, + "node_modules/@types/yargs": { + "version": "17.0.23", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.23.tgz", + "integrity": "sha512-yuogunc04OnzGQCrfHx+Kk883Q4X0aSwmYZhKjI21m+SVYzjIbrWl8dOOwSv5hf2Um2pdCOXWo9isteZTNXUZQ==", + "dev": true, + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/@types/yargs-parser": { + "version": "21.0.0", + "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.0.tgz", + "integrity": "sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA==", + "dev": true + }, + "node_modules/@typescript-eslint/eslint-plugin": { + "version": "5.61.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.61.0.tgz", + "integrity": "sha512-A5l/eUAug103qtkwccSCxn8ZRwT+7RXWkFECdA4Cvl1dOlDUgTpAOfSEElZn2uSUxhdDpnCdetrf0jvU4qrL+g==", + "dev": true, + "dependencies": { + "@eslint-community/regexpp": "^4.4.0", + "@typescript-eslint/scope-manager": "5.61.0", + "@typescript-eslint/type-utils": "5.61.0", + "@typescript-eslint/utils": "5.61.0", + "debug": "^4.3.4", + "graphemer": "^1.4.0", + "ignore": "^5.2.0", + "natural-compare-lite": "^1.4.0", + "semver": "^7.3.7", + "tsutils": "^3.21.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "@typescript-eslint/parser": "^5.0.0", + "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/eslint-plugin/node_modules/@typescript-eslint/scope-manager": { + "version": "5.61.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.61.0.tgz", + "integrity": "sha512-W8VoMjoSg7f7nqAROEmTt6LoBpn81AegP7uKhhW5KzYlehs8VV0ZW0fIDVbcZRcaP3aPSW+JZFua+ysQN+m/Nw==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "5.61.0", + "@typescript-eslint/visitor-keys": "5.61.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/parser": { + "version": "5.59.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.59.2.tgz", + "integrity": "sha512-uq0sKyw6ao1iFOZZGk9F8Nro/8+gfB5ezl1cA06SrqbgJAt0SRoFhb9pXaHvkrxUpZaoLxt8KlovHNk8Gp6/HQ==", + "dev": true, + "dependencies": { + "@typescript-eslint/scope-manager": "5.59.2", + "@typescript-eslint/types": "5.59.2", + "@typescript-eslint/typescript-estree": "5.59.2", + "debug": "^4.3.4" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/parser/node_modules/@typescript-eslint/types": { + "version": "5.59.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.59.2.tgz", + "integrity": "sha512-LbJ/HqoVs2XTGq5shkiKaNTuVv5tTejdHgfdjqRUGdYhjW1crm/M7og2jhVskMt8/4wS3T1+PfFvL1K3wqYj4w==", + "dev": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/parser/node_modules/@typescript-eslint/typescript-estree": { + "version": "5.59.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.59.2.tgz", + "integrity": "sha512-+j4SmbwVmZsQ9jEyBMgpuBD0rKwi9RxRpjX71Brr73RsYnEr3Lt5QZ624Bxphp8HUkSKfqGnPJp1kA5nl0Sh7Q==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "5.59.2", + "@typescript-eslint/visitor-keys": "5.59.2", + "debug": "^4.3.4", + "globby": "^11.1.0", + "is-glob": "^4.0.3", + "semver": "^7.3.7", + "tsutils": "^3.21.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/parser/node_modules/@typescript-eslint/visitor-keys": { + "version": "5.59.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.59.2.tgz", + "integrity": "sha512-EEpsO8m3RASrKAHI9jpavNv9NlEUebV4qmF1OWxSTtKSFBpC1NCmWazDQHFivRf0O1DV11BA645yrLEVQ0/Lig==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "5.59.2", + "eslint-visitor-keys": "^3.3.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/scope-manager": { + "version": "5.59.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.59.2.tgz", + "integrity": "sha512-dB1v7ROySwQWKqQ8rEWcdbTsFjh2G0vn8KUyvTXdPoyzSL6lLGkiXEV5CvpJsEe9xIdKV+8Zqb7wif2issoOFA==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "5.59.2", + "@typescript-eslint/visitor-keys": "5.59.2" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/scope-manager/node_modules/@typescript-eslint/types": { + "version": "5.59.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.59.2.tgz", + "integrity": "sha512-LbJ/HqoVs2XTGq5shkiKaNTuVv5tTejdHgfdjqRUGdYhjW1crm/M7og2jhVskMt8/4wS3T1+PfFvL1K3wqYj4w==", + "dev": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/scope-manager/node_modules/@typescript-eslint/visitor-keys": { + "version": "5.59.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.59.2.tgz", + "integrity": "sha512-EEpsO8m3RASrKAHI9jpavNv9NlEUebV4qmF1OWxSTtKSFBpC1NCmWazDQHFivRf0O1DV11BA645yrLEVQ0/Lig==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "5.59.2", + "eslint-visitor-keys": "^3.3.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/type-utils": { + "version": "5.61.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.61.0.tgz", + "integrity": "sha512-kk8u//r+oVK2Aj3ph/26XdH0pbAkC2RiSjUYhKD+PExemG4XSjpGFeyZ/QM8lBOa7O8aGOU+/yEbMJgQv/DnCg==", + "dev": true, + "dependencies": { + "@typescript-eslint/typescript-estree": "5.61.0", + "@typescript-eslint/utils": "5.61.0", + "debug": "^4.3.4", + "tsutils": "^3.21.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "*" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/types": { + "version": "5.61.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.61.0.tgz", + "integrity": "sha512-ldyueo58KjngXpzloHUog/h9REmHl59G1b3a5Sng1GfBo14BkS3ZbMEb3693gnP1k//97lh7bKsp6/V/0v1veQ==", + "dev": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/typescript-estree": { + "version": "5.61.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.61.0.tgz", + "integrity": "sha512-Fud90PxONnnLZ36oR5ClJBLTLfU4pIWBmnvGwTbEa2cXIqj70AEDEmOmpkFComjBZ/037ueKrOdHuYmSFVD7Rw==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "5.61.0", + "@typescript-eslint/visitor-keys": "5.61.0", + "debug": "^4.3.4", + "globby": "^11.1.0", + "is-glob": "^4.0.3", + "semver": "^7.3.7", + "tsutils": "^3.21.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/utils": { + "version": "5.61.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.61.0.tgz", + "integrity": "sha512-mV6O+6VgQmVE6+xzlA91xifndPW9ElFW8vbSF0xCT/czPXVhwDewKila1jOyRwa9AE19zKnrr7Cg5S3pJVrTWQ==", + "dev": true, + "dependencies": { + "@eslint-community/eslint-utils": "^4.2.0", + "@types/json-schema": "^7.0.9", + "@types/semver": "^7.3.12", + "@typescript-eslint/scope-manager": "5.61.0", + "@typescript-eslint/types": "5.61.0", + "@typescript-eslint/typescript-estree": "5.61.0", + "eslint-scope": "^5.1.1", + "semver": "^7.3.7" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/@typescript-eslint/utils/node_modules/@typescript-eslint/scope-manager": { + "version": "5.61.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.61.0.tgz", + "integrity": "sha512-W8VoMjoSg7f7nqAROEmTt6LoBpn81AegP7uKhhW5KzYlehs8VV0ZW0fIDVbcZRcaP3aPSW+JZFua+ysQN+m/Nw==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "5.61.0", + "@typescript-eslint/visitor-keys": "5.61.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/utils/node_modules/eslint-scope": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "dev": true, + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/@typescript-eslint/utils/node_modules/estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/@typescript-eslint/visitor-keys": { + "version": "5.61.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.61.0.tgz", + "integrity": "sha512-50XQ5VdbWrX06mQXhy93WywSFZZGsv3EOjq+lqp6WC2t+j3mb6A9xYVdrRxafvK88vg9k9u+CT4l6D8PEatjKg==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "5.61.0", + "eslint-visitor-keys": "^3.3.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/accepts": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", + "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", + "dependencies": { + "mime-types": "~2.1.34", + "negotiator": "0.6.3" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/acorn": { + "version": "8.8.2", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.2.tgz", + "integrity": "sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw==", + "dev": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "dev": true, + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/add-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/add-stream/-/add-stream-1.0.0.tgz", + "integrity": "sha512-qQLMr+8o0WC4FZGQTcJiKBVC59JylcPSrTtk6usvmIDFUOCKegapy1VHQwRbFMOFyb/inzUVqHs+eMYKDM1YeQ==", + "dev": true + }, + "node_modules/agent-base": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", + "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", + "dependencies": { + "debug": "4" + }, + "engines": { + "node": ">= 6.0.0" + } + }, + "node_modules/aggregate-error": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", + "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", + "dev": true, + "dependencies": { + "clean-stack": "^2.0.0", + "indent-string": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/ajv": { + "version": "8.12.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", + "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ajv-draft-04": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/ajv-draft-04/-/ajv-draft-04-1.0.0.tgz", + "integrity": "sha512-mv00Te6nmYbRp5DCwclxtt7yV/joXJPGS7nM+97GdxvuttCOfgI3K4U25zboyeX0O+myI8ERluxQe5wljMmVIw==", + "peerDependencies": { + "ajv": "^8.5.0" + }, + "peerDependenciesMeta": { + "ajv": { + "optional": true + } + } + }, + "node_modules/ajv-formats": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz", + "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==", + "dependencies": { + "ajv": "^8.0.0" + }, + "peerDependencies": { + "ajv": "^8.0.0" + }, + "peerDependenciesMeta": { + "ajv": { + "optional": true + } + } + }, + "node_modules/ansi-align": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-3.0.1.tgz", + "integrity": "sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w==", + "dev": true, + "dependencies": { + "string-width": "^4.1.0" + } + }, + "node_modules/ansi-escapes": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", + "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", + "dev": true, + "dependencies": { + "type-fest": "^0.21.3" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ansi-escapes/node_modules/type-fest": { + "version": "0.21.3", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", + "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/any-promise": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz", + "integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==", + "dev": true + }, + "node_modules/anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "dev": true, + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/app-module-path": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/app-module-path/-/app-module-path-2.2.0.tgz", + "integrity": "sha512-gkco+qxENJV+8vFcDiiFhuoSvRXb2a/QPqpSoWhVz829VNJfOTnELbBmPmNKFxf3xdNnw4DWCkzkDaavcX/1YQ==", + "dev": true + }, + "node_modules/arg": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", + "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", + "dev": true + }, + "node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" + }, + "node_modules/array-find-index": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/array-find-index/-/array-find-index-1.0.2.tgz", + "integrity": "sha512-M1HQyIXcBGtVywBt8WVdim+lrNaK7VHp99Qt5pSNziXznKHViIBbXWtfRTpEFpF/c4FdfxNAsCCwPp5phBYJtw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/array-ify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/array-ify/-/array-ify-1.0.0.tgz", + "integrity": "sha512-c5AMf34bKdvPhQ7tBGhqkgKNUzMr4WUs+WDtC2ZUGOUncbxKMTvqxYctiseW3+L4bA8ec+GcZ6/A/FW4m8ukng==", + "dev": true + }, + "node_modules/array-includes": { + "version": "3.1.6", + "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.6.tgz", + "integrity": "sha512-sgTbLvL6cNnw24FnbaDyjmvddQ2ML8arZsgaJhoABMoplz/4QRhtrYS+alr1BUM1Bwp6dhx8vVCBSLG+StwOFw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4", + "get-intrinsic": "^1.1.3", + "is-string": "^1.0.7" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array-union": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/array.prototype.flat": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.1.tgz", + "integrity": "sha512-roTU0KWIOmJ4DRLmwKd19Otg0/mT3qPNt0Qb3GWW8iObuZXxrjB/pzn0R3hqpRSWg4HCwqx+0vwOnWnvlOyeIA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4", + "es-shim-unscopables": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array.prototype.flatmap": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.1.tgz", + "integrity": "sha512-8UGn9O1FDVvMNB0UlLv4voxRMze7+FpHyF5mSMRjWHUMlpoDViniy05870VlxhfgTnLbpuwTzvD76MTtWxB/mQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4", + "es-shim-unscopables": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/arrify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", + "integrity": "sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/asap": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", + "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==", + "dev": true + }, + "node_modules/ast-module-types": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ast-module-types/-/ast-module-types-3.0.0.tgz", + "integrity": "sha512-CMxMCOCS+4D+DkOQfuZf+vLrSEmY/7xtORwdxs4wtcC1wVgvk2MqFFTwQCFhvWsI4KPU9lcWXPI8DgRiz+xetQ==", + "dev": true, + "engines": { + "node": ">=6.0" + } + }, + "node_modules/astral-regex": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", + "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/async": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/async/-/async-3.2.4.tgz", + "integrity": "sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ==" + }, + "node_modules/asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" + }, + "node_modules/at-least-node": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", + "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==", + "dev": true, + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/available-typed-arrays": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz", + "integrity": "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/await-handler": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/await-handler/-/await-handler-1.1.2.tgz", + "integrity": "sha512-dihteGhwbJpT89kVbacWiyKeAZr+En0YGK6pAKQJLR0En9ZxSH2H4TTvfG4bBjzFq9gDAma4y9BrpDns6j5UiQ==" + }, + "node_modules/axios": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.4.0.tgz", + "integrity": "sha512-S4XCWMEmzvo64T9GfvQDOXgYRDJ/wsSZc7Jvdgx5u1sd0JwsuPLqb3SYmusag+edF6ziyMensPVqLTSc1PiSEA==", + "dependencies": { + "follow-redirects": "^1.15.0", + "form-data": "^4.0.0", + "proxy-from-env": "^1.1.0" + } + }, + "node_modules/babel-jest": { + "version": "29.6.0", + "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-29.6.0.tgz", + "integrity": "sha512-Jj8Bq2yKsk11XLk06Nm8SdvYkAcecH+GuhxB8DnK5SncjHnJ88TQjSnGgE7jpajpnSvz9DZ6X8hXrDkD/6/TPQ==", + "dev": true, + "dependencies": { + "@jest/transform": "^29.6.0", + "@types/babel__core": "^7.1.14", + "babel-plugin-istanbul": "^6.1.1", + "babel-preset-jest": "^29.5.0", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "slash": "^3.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "@babel/core": "^7.8.0" + } + }, + "node_modules/babel-plugin-istanbul": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz", + "integrity": "sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.0.0", + "@istanbuljs/load-nyc-config": "^1.0.0", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-instrument": "^5.0.4", + "test-exclude": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/babel-plugin-jest-hoist": { + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-29.5.0.tgz", + "integrity": "sha512-zSuuuAlTMT4mzLj2nPnUm6fsE6270vdOfnpbJ+RmruU75UhLFvL0N2NgI7xpeS7NaB6hGqmd5pVpGTDYvi4Q3w==", + "dev": true, + "dependencies": { + "@babel/template": "^7.3.3", + "@babel/types": "^7.3.3", + "@types/babel__core": "^7.1.14", + "@types/babel__traverse": "^7.0.6" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/babel-preset-current-node-syntax": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.0.1.tgz", + "integrity": "sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ==", + "dev": true, + "dependencies": { + "@babel/plugin-syntax-async-generators": "^7.8.4", + "@babel/plugin-syntax-bigint": "^7.8.3", + "@babel/plugin-syntax-class-properties": "^7.8.3", + "@babel/plugin-syntax-import-meta": "^7.8.3", + "@babel/plugin-syntax-json-strings": "^7.8.3", + "@babel/plugin-syntax-logical-assignment-operators": "^7.8.3", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", + "@babel/plugin-syntax-numeric-separator": "^7.8.3", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", + "@babel/plugin-syntax-optional-chaining": "^7.8.3", + "@babel/plugin-syntax-top-level-await": "^7.8.3" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/babel-preset-jest": { + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-29.5.0.tgz", + "integrity": "sha512-JOMloxOqdiBSxMAzjRaH023/vvcaSaec49zvg+2LmNsktC7ei39LTJGw02J+9uUtTZUq6xbLyJ4dxe9sSmIuAg==", + "dev": true, + "dependencies": { + "babel-plugin-jest-hoist": "^29.5.0", + "babel-preset-current-node-syntax": "^1.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" + }, + "node_modules/base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/benchmark-suite": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/benchmark-suite/-/benchmark-suite-0.1.8.tgz", + "integrity": "sha512-UDfWBQfeq/lXcsjuGAanOrX6AhP6HQSsutGS7CfStcbE1loLge7aQr5DT6n8r/4bUoiK+5RYwnogNu5UuTBMNg==", + "dev": true, + "dependencies": { + "eventemitter3": "^4.0.7", + "expose-gc": "^1.0.0", + "human-format": "^1.0.0", + "pretty-bytes": "^5.6.0", + "stats-accumulator": "^1.1.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/bintrees": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/bintrees/-/bintrees-1.0.2.tgz", + "integrity": "sha512-VOMgTMwjAaUG580SXn3LacVgjurrbMme7ZZNYGSSV7mmtY6QQRh0Eg3pwIcntQ77DErK1L0NxkbetjcoXzVwKw==" + }, + "node_modules/bl": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", + "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", + "dev": true, + "dependencies": { + "buffer": "^5.5.0", + "inherits": "^2.0.4", + "readable-stream": "^3.4.0" + } + }, + "node_modules/bl/node_modules/readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "dev": true, + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/boolean": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/boolean/-/boolean-3.2.0.tgz", + "integrity": "sha512-d0II/GO9uf9lfUHH2BQsjxzRJZBdsjgsBiW4BvhWk/3qoKwQFjIDVN19PfX8F2D/r9PCMTtLWjYVCFrpeYUzsw==", + "dev": true + }, + "node_modules/bowser": { + "version": "2.11.0", + "resolved": "https://registry.npmjs.org/bowser/-/bowser-2.11.0.tgz", + "integrity": "sha512-AlcaJBi/pqqJBIQ8U9Mcpc9i8Aqxn88Skv5d+xBX006BY5u8N3mGLHa5Lgppa7L/HfwgwLgZ6NYs+Ag6uUmJRA==" + }, + "node_modules/boxen": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/boxen/-/boxen-5.1.2.tgz", + "integrity": "sha512-9gYgQKXx+1nP8mP7CzFyaUARhg7D3n1dF/FnErWmu9l6JvGpNUN278h0aSb+QjoiKSWG+iZ3uHrcqk0qrY9RQQ==", + "dev": true, + "dependencies": { + "ansi-align": "^3.0.0", + "camelcase": "^6.2.0", + "chalk": "^4.1.0", + "cli-boxes": "^2.2.1", + "string-width": "^4.2.2", + "type-fest": "^0.20.2", + "widest-line": "^3.1.0", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/boxen/node_modules/camelcase": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/boxen/node_modules/type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, + "dependencies": { + "fill-range": "^7.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/browserslist": { + "version": "4.21.9", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.9.tgz", + "integrity": "sha512-M0MFoZzbUrRU4KNfCrDLnvyE7gub+peetoTid3TBIqtunaDJyXlwhakT+/VkvSXcfIzFfK/nkCs4nmyTmxdNSg==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "caniuse-lite": "^1.0.30001503", + "electron-to-chromium": "^1.4.431", + "node-releases": "^2.0.12", + "update-browserslist-db": "^1.0.11" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, + "node_modules/bs-logger": { + "version": "0.2.6", + "resolved": "https://registry.npmjs.org/bs-logger/-/bs-logger-0.2.6.tgz", + "integrity": "sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog==", + "dev": true, + "dependencies": { + "fast-json-stable-stringify": "2.x" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/bser": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz", + "integrity": "sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==", + "dev": true, + "dependencies": { + "node-int64": "^0.4.0" + } + }, + "node_modules/btoa": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/btoa/-/btoa-1.2.1.tgz", + "integrity": "sha512-SB4/MIGlsiVkMcHmT+pSmIPoNDoHg+7cMzmt3Uxt628MTz2487DKSqK/fuhFBrkuqrYv5UCEnACpF4dTFNKc/g==", + "bin": { + "btoa": "bin/btoa.js" + }, + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/buffer": { + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.6.0.tgz", + "integrity": "sha512-/gDYp/UtU0eA1ys8bOs9J6a+E/KWIY+DZ+Q2WESNUA0jFRsJOc0SNUO6xJ5SGA1xueg3NL65W6s+NY5l9cunuw==", + "dependencies": { + "base64-js": "^1.0.2", + "ieee754": "^1.1.4" + } + }, + "node_modules/buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", + "dev": true + }, + "node_modules/builtin-modules": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.3.0.tgz", + "integrity": "sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==", + "dev": true, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/byline": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/byline/-/byline-5.0.0.tgz", + "integrity": "sha512-s6webAy+R4SR8XVuJWt2V2rGvhnrhxN+9S15GNuTK3wKPOXFF6RNc+8ug2XhH+2s4f+uudG4kUVYmYOQWL2g0Q==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/bytes": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/cache-content-type": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/cache-content-type/-/cache-content-type-1.0.1.tgz", + "integrity": "sha512-IKufZ1o4Ut42YUrZSo8+qnMTrFuKkvyoLXUywKz9GJ5BrhOFGhLdkx9sG4KAnVvbY6kEcSFjLQul+DVmBm2bgA==", + "dependencies": { + "mime-types": "^2.1.18", + "ylru": "^1.2.0" + }, + "engines": { + "node": ">= 6.0.0" + } + }, + "node_modules/cacheable-request": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-2.1.4.tgz", + "integrity": "sha512-vag0O2LKZ/najSoUwDbVlnlCFvhBE/7mGTY2B5FgCBDcRD+oVV1HYTOwM6JZfMg/hIcM6IwnTZ1uQQL5/X3xIQ==", + "dev": true, + "dependencies": { + "clone-response": "1.0.2", + "get-stream": "3.0.0", + "http-cache-semantics": "3.8.1", + "keyv": "3.0.0", + "lowercase-keys": "1.0.0", + "normalize-url": "2.0.1", + "responselike": "1.0.2" + } + }, + "node_modules/cacheable-request/node_modules/get-stream": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", + "integrity": "sha512-GlhdIUuVakc8SJ6kK0zAFbiGzRFzNnY4jUuEbV9UROo4Y+0Ny4fjvcZFVTeDA4odpFyOQzaw6hXukJSq/f28sQ==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/cacheable-request/node_modules/lowercase-keys": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.0.tgz", + "integrity": "sha512-RPlX0+PHuvxVDZ7xX+EBVAp4RsVxP/TdDSN2mJYdiq1Lc4Hz7EUSjUI7RZrKKlmrIzVhf6Jo2stj7++gVarS0A==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/cachedir": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/cachedir/-/cachedir-2.3.0.tgz", + "integrity": "sha512-A+Fezp4zxnit6FanDmv9EqXNAi3vt9DWp51/71UEhXukb7QUuvtv9344h91dyAxuTLoSYJFU299qzR3tzwPAhw==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/call-bind": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", + "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", + "dependencies": { + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/call-me-maybe": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-me-maybe/-/call-me-maybe-1.0.2.tgz", + "integrity": "sha512-HpX65o1Hnr9HH25ojC1YGs7HCQLq0GCOibSaWER0eNpgJ/Z1MZv2mTc7+xh6WOPxbRVcmgbv4hGU+uSQ/2xFZQ==", + "dev": true + }, + "node_modules/callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/camelcase-keys": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-6.2.2.tgz", + "integrity": "sha512-YrwaA0vEKazPBkn0ipTiMpSajYDSe+KjQfrjhcBMxJt/znbvlHd8Pw/Vamaz5EB4Wfhs3SUR3Z9mwRu/P3s3Yg==", + "dev": true, + "dependencies": { + "camelcase": "^5.3.1", + "map-obj": "^4.0.0", + "quick-lru": "^4.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001512", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001512.tgz", + "integrity": "sha512-2S9nK0G/mE+jasCUsMPlARhRCts1ebcp2Ji8Y8PWi4NDE1iRdLCnEPHkEfeBrGC45L4isBx5ur3IQ6yTE2mRZw==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ] + }, + "node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/char-regex": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/char-regex/-/char-regex-1.0.2.tgz", + "integrity": "sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/chardet": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", + "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==", + "dev": true + }, + "node_modules/charenc": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/charenc/-/charenc-0.0.2.tgz", + "integrity": "sha512-yrLQ/yVUFXkzg7EDQsPieE/53+0RlaWTs+wBrvW36cyilJ2SaDWfl4Yj7MtLTXleV9uEKefbAGUPv2/iWSooRA==", + "engines": { + "node": "*" + } + }, + "node_modules/check-more-types": { + "version": "2.24.0", + "resolved": "https://registry.npmjs.org/check-more-types/-/check-more-types-2.24.0.tgz", + "integrity": "sha512-Pj779qHxV2tuapviy1bSZNEL1maXr13bPYpsvSDB68HlYcYuhlDrmGd63i0JHMCLKzc7rUSNIrpdJlhVlNwrxA==", + "dev": true, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/ci-info": { + "version": "3.7.1", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.7.1.tgz", + "integrity": "sha512-4jYS4MOAaCIStSRwiuxc4B8MYhIe676yO1sYGzARnjXkWpmzZMMYxY6zu8WYWDhSuth5zhrQ1rhNSibyyvv4/w==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/sibiraj-s" + } + ], + "engines": { + "node": ">=8" + } + }, + "node_modules/cjs-module-lexer": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.2.3.tgz", + "integrity": "sha512-0TNiGstbQmCFwt4akjjBg5pLRTSyj/PkWQ1ZoO2zntmg9yLqSRxwEa4iCfQLGjqhiqBfOJa7W/E8wfGrTDmlZQ==", + "dev": true + }, + "node_modules/clean-regexp": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/clean-regexp/-/clean-regexp-1.0.0.tgz", + "integrity": "sha512-GfisEZEJvzKrmGWkvfhgzcz/BllN1USeqD2V6tg14OAOgaCD2Z/PUEuxnAZ/nPvmaHRG7a8y77p1T/IRQ4D1Hw==", + "dev": true, + "dependencies": { + "escape-string-regexp": "^1.0.5" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/clean-stack": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", + "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/cli-boxes": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-2.2.1.tgz", + "integrity": "sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw==", + "dev": true, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cli-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", + "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", + "dev": true, + "dependencies": { + "restore-cursor": "^3.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cli-spinners": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.7.0.tgz", + "integrity": "sha512-qu3pN8Y3qHNgE2AFweciB1IfMnmZ/fsNTEE+NOFjmGB2F/7rLhnhzppvpCnN4FovtP26k8lHyy9ptEbNwWFLzw==", + "dev": true, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cli-truncate": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-3.1.0.tgz", + "integrity": "sha512-wfOBkjXteqSnI59oPcJkcPl/ZmwvMMOj340qUIY1SKZCv0B9Cf4D4fAucRkIKQmsIuYK3x1rrgU7MeGRruiuiA==", + "dev": true, + "dependencies": { + "slice-ansi": "^5.0.0", + "string-width": "^5.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cli-truncate/node_modules/ansi-regex": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", + "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/cli-truncate/node_modules/string-width": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "dev": true, + "dependencies": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cli-truncate/node_modules/strip-ansi": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.0.1.tgz", + "integrity": "sha512-cXNxvT8dFNRVfhVME3JAe98mkXDYN2O1l7jmcwMnOslDeESg1rF/OZMtK0nRAhiari1unG5cD4jG3rapUAkLbw==", + "dev": true, + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/cli-width": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-3.0.0.tgz", + "integrity": "sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==", + "dev": true, + "engines": { + "node": ">= 10" + } + }, + "node_modules/cliui": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "dev": true, + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/clone": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz", + "integrity": "sha512-3Pe/CF1Nn94hyhIYpjtiLhdCoEoz0DqQ+988E9gmeEdQZlojxnOb74wctFyuwWQHzqyf9X7C7MG8juUpqBJT8w==", + "engines": { + "node": ">=0.8" + } + }, + "node_modules/clone-response": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.2.tgz", + "integrity": "sha512-yjLXh88P599UOyPTFX0POsd7WxnbsVsGohcwzHOLspIhhpalPw1BcqED8NblyZLKcGrL8dTgMlcaZxV2jAD41Q==", + "dev": true, + "dependencies": { + "mimic-response": "^1.0.0" + } + }, + "node_modules/cluster-key-slot": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/cluster-key-slot/-/cluster-key-slot-1.1.2.tgz", + "integrity": "sha512-RMr0FhtfXemyinomL4hrWcYJxmX6deFdCxpJzhDttxgO1+bcCnkk+9drydLVDmAMG7NE6aN/fl4F7ucU/90gAA==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/co": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", + "integrity": "sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==", + "engines": { + "iojs": ">= 1.0.0", + "node": ">= 0.12.0" + } + }, + "node_modules/co-body": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/co-body/-/co-body-6.1.0.tgz", + "integrity": "sha512-m7pOT6CdLN7FuXUcpuz/8lfQ/L77x8SchHCF4G0RBTJO20Wzmhn5Sp4/5WsKy8OSpifBSUrmg83qEqaDHdyFuQ==", + "dependencies": { + "inflation": "^2.0.0", + "qs": "^6.5.2", + "raw-body": "^2.3.3", + "type-is": "^1.6.16" + } + }, + "node_modules/collect-v8-coverage": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.1.tgz", + "integrity": "sha512-iBPtljfCNcTKNAto0KEtDfZ3qzjJvqE3aTGZsbhjSBlorqpXJlaWWtPO35D+ZImoC3KWejX64o+yPGxhWSTzfg==", + "dev": true + }, + "node_modules/color": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/color/-/color-3.2.1.tgz", + "integrity": "sha512-aBl7dZI9ENN6fUGC7mWpMTPNHmWUSNan9tuWN6ahh5ZLNk9baLJOnSMlrQkHcrfFgz2/RigjUVAjdx36VcemKA==", + "dependencies": { + "color-convert": "^1.9.3", + "color-string": "^1.6.0" + } + }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "node_modules/color-string": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.9.1.tgz", + "integrity": "sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==", + "dependencies": { + "color-name": "^1.0.0", + "simple-swizzle": "^0.2.2" + } + }, + "node_modules/color/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/color/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" + }, + "node_modules/colorette": { + "version": "2.0.19", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.19.tgz", + "integrity": "sha512-3tlv/dIP7FWvj3BsbHrGLJ6l/oKh1O3TcgBqMn+yyCagOxc23fyzDS6HypQbgxWbkpDnf52p1LuR4eWDQ/K9WQ==", + "dev": true + }, + "node_modules/colors": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz", + "integrity": "sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==", + "engines": { + "node": ">=0.1.90" + } + }, + "node_modules/colorspace": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/colorspace/-/colorspace-1.1.4.tgz", + "integrity": "sha512-BgvKJiuVu1igBUF2kEjRCZXol6wiiGbY5ipL/oVPwm0BL9sIpMIzM8IK7vwuxIIzOXMV3Ey5w+vxhm0rR/TN8w==", + "dependencies": { + "color": "^3.1.3", + "text-hex": "1.0.x" + } + }, + "node_modules/combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "dependencies": { + "delayed-stream": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/commander": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-10.0.1.tgz", + "integrity": "sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==", + "dev": true, + "engines": { + "node": ">=14" + } + }, + "node_modules/commitizen": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/commitizen/-/commitizen-4.3.0.tgz", + "integrity": "sha512-H0iNtClNEhT0fotHvGV3E9tDejDeS04sN1veIebsKYGMuGscFaswRoYJKmT3eW85eIJAs0F28bG2+a/9wCOfPw==", + "dev": true, + "dependencies": { + "cachedir": "2.3.0", + "cz-conventional-changelog": "3.3.0", + "dedent": "0.7.0", + "detect-indent": "6.1.0", + "find-node-modules": "^2.1.2", + "find-root": "1.1.0", + "fs-extra": "9.1.0", + "glob": "7.2.3", + "inquirer": "8.2.5", + "is-utf8": "^0.2.1", + "lodash": "4.17.21", + "minimist": "1.2.7", + "strip-bom": "4.0.0", + "strip-json-comments": "3.1.1" + }, + "bin": { + "commitizen": "bin/commitizen", + "cz": "bin/git-cz", + "git-cz": "bin/git-cz" + }, + "engines": { + "node": ">= 12" + } + }, + "node_modules/commitizen/node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/commitizen/node_modules/inquirer": { + "version": "8.2.5", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-8.2.5.tgz", + "integrity": "sha512-QAgPDQMEgrDssk1XiwwHoOGYF9BAbUcc1+j+FhEvaOt8/cKRqyLn0U5qA6F74fGhTMGxf92pOvPBeh29jQJDTQ==", + "dev": true, + "dependencies": { + "ansi-escapes": "^4.2.1", + "chalk": "^4.1.1", + "cli-cursor": "^3.1.0", + "cli-width": "^3.0.0", + "external-editor": "^3.0.3", + "figures": "^3.0.0", + "lodash": "^4.17.21", + "mute-stream": "0.0.8", + "ora": "^5.4.1", + "run-async": "^2.4.0", + "rxjs": "^7.5.5", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0", + "through": "^2.3.6", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/commitizen/node_modules/minimist": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.7.tgz", + "integrity": "sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/commitlint": { + "version": "17.6.6", + "resolved": "https://registry.npmjs.org/commitlint/-/commitlint-17.6.6.tgz", + "integrity": "sha512-Q5M+w1nqGQSEkEW43EtPNrU+uKL2pENrJl6QigFupZ0v4AfvI8k5Q6uFgWmxlEOrSkgCYaN436Q9c9pydqyJqg==", + "dev": true, + "dependencies": { + "@commitlint/cli": "^17.6.6", + "@commitlint/types": "^17.4.4" + }, + "bin": { + "commitlint": "cli.js" + }, + "engines": { + "node": ">=v14" + } + }, + "node_modules/commondir": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", + "integrity": "sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==", + "dev": true + }, + "node_modules/compare-func": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/compare-func/-/compare-func-2.0.0.tgz", + "integrity": "sha512-zHig5N+tPWARooBnb0Zx1MFcdfpyJrfTJ3Y5L+IFvUm8rM74hHz66z0gw0x4tijh5CorKkKUCnW82R2vmpeCRA==", + "dev": true, + "dependencies": { + "array-ify": "^1.0.0", + "dot-prop": "^5.1.0" + } + }, + "node_modules/compare-func/node_modules/dot-prop": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-4.2.1.tgz", + "integrity": "sha512-l0p4+mIuJIua0mhxGoh4a+iNL9bmeK5DvnSVQa6T0OhrVmaEa1XScX5Etc673FePCJOArq/4Pa2cLGODUWTPOQ==", + "dev": true, + "dependencies": { + "is-obj": "^1.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/compare-func/node_modules/is-obj": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz", + "integrity": "sha512-l4RyHgRqGN4Y3+9JHVrNqO+tN0rV5My76uW5/nuO4K1b6vw5G8d/cmFjP9tRfEsdhZNt0IFdZuK/c2Vr4Nb+Qg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/component-each": { + "version": "0.2.6", + "resolved": "https://registry.npmjs.org/component-each/-/component-each-0.2.6.tgz", + "integrity": "sha512-IOXG+HZmbgaBS8Rqy+tAMrwsPdEY1BWcPcp0xI2ZOzKQhHvSVGrL7iCnoDU37TEKOCfaf4ywsR6GwAr0JivPjg==", + "dependencies": { + "component-type": "1.0.0", + "to-function": "2.0.6" + } + }, + "node_modules/component-emitter": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", + "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==", + "dev": true + }, + "node_modules/component-props": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/component-props/-/component-props-1.1.1.tgz", + "integrity": "sha512-69pIRJs9fCCHRqCz3390YF2LV1Lu6iEMZ5zuVqqUn+G20V9BNXlMs0cWawWeW9g4Ynmg29JmkG6R7/lUJoGd1Q==" + }, + "node_modules/component-type": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/component-type/-/component-type-1.0.0.tgz", + "integrity": "sha512-qzUg4SGDH6KFYlcklmeZwucbtosh/XGwuIffqXAhC1dZyjO7Xu1UuaxwKRY29EncuBj/DH+h6Zot3AdZS6xdFw==" + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" + }, + "node_modules/confusing-browser-globals": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/confusing-browser-globals/-/confusing-browser-globals-1.0.11.tgz", + "integrity": "sha512-JsPKdmh8ZkmnHxDk55FZ1TqVLvEQTvoByJZRN9jzI0UjxK/QgAmsphz7PGtqgPieQZ/CQcHWXCR7ATDNhGe+YA==", + "dev": true + }, + "node_modules/content-disposition": { + "version": "0.5.4", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", + "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", + "dependencies": { + "safe-buffer": "5.2.1" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/content-type": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", + "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/conventional-changelog": { + "version": "3.1.25", + "resolved": "https://registry.npmjs.org/conventional-changelog/-/conventional-changelog-3.1.25.tgz", + "integrity": "sha512-ryhi3fd1mKf3fSjbLXOfK2D06YwKNic1nC9mWqybBHdObPd8KJ2vjaXZfYj1U23t+V8T8n0d7gwnc9XbIdFbyQ==", + "dev": true, + "dependencies": { + "conventional-changelog-angular": "^5.0.12", + "conventional-changelog-atom": "^2.0.8", + "conventional-changelog-codemirror": "^2.0.8", + "conventional-changelog-conventionalcommits": "^4.5.0", + "conventional-changelog-core": "^4.2.1", + "conventional-changelog-ember": "^2.0.9", + "conventional-changelog-eslint": "^3.0.9", + "conventional-changelog-express": "^2.0.6", + "conventional-changelog-jquery": "^3.0.11", + "conventional-changelog-jshint": "^2.0.9", + "conventional-changelog-preset-loader": "^2.3.4" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/conventional-changelog-angular": { + "version": "5.0.13", + "resolved": "https://registry.npmjs.org/conventional-changelog-angular/-/conventional-changelog-angular-5.0.13.tgz", + "integrity": "sha512-i/gipMxs7s8L/QeuavPF2hLnJgH6pEZAttySB6aiQLWcX3puWDL3ACVmvBhJGxnAy52Qc15ua26BufY6KpmrVA==", + "dev": true, + "dependencies": { + "compare-func": "^2.0.0", + "q": "^1.5.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/conventional-changelog-atom": { + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/conventional-changelog-atom/-/conventional-changelog-atom-2.0.8.tgz", + "integrity": "sha512-xo6v46icsFTK3bb7dY/8m2qvc8sZemRgdqLb/bjpBsH2UyOS8rKNTgcb5025Hri6IpANPApbXMg15QLb1LJpBw==", + "dev": true, + "dependencies": { + "q": "^1.5.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/conventional-changelog-codemirror": { + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/conventional-changelog-codemirror/-/conventional-changelog-codemirror-2.0.8.tgz", + "integrity": "sha512-z5DAsn3uj1Vfp7po3gpt2Boc+Bdwmw2++ZHa5Ak9k0UKsYAO5mH1UBTN0qSCuJZREIhX6WU4E1p3IW2oRCNzQw==", + "dev": true, + "dependencies": { + "q": "^1.5.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/conventional-changelog-config-spec": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/conventional-changelog-config-spec/-/conventional-changelog-config-spec-2.1.0.tgz", + "integrity": "sha512-IpVePh16EbbB02V+UA+HQnnPIohgXvJRxHcS5+Uwk4AT5LjzCZJm5sp/yqs5C6KZJ1jMsV4paEV13BN1pvDuxQ==", + "dev": true + }, + "node_modules/conventional-changelog-conventionalcommits": { + "version": "4.6.3", + "resolved": "https://registry.npmjs.org/conventional-changelog-conventionalcommits/-/conventional-changelog-conventionalcommits-4.6.3.tgz", + "integrity": "sha512-LTTQV4fwOM4oLPad317V/QNQ1FY4Hju5qeBIM1uTHbrnCE+Eg4CdRZ3gO2pUeR+tzWdp80M2j3qFFEDWVqOV4g==", + "dev": true, + "dependencies": { + "compare-func": "^2.0.0", + "lodash": "^4.17.15", + "q": "^1.5.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/conventional-changelog-core": { + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/conventional-changelog-core/-/conventional-changelog-core-4.2.4.tgz", + "integrity": "sha512-gDVS+zVJHE2v4SLc6B0sLsPiloR0ygU7HaDW14aNJE1v4SlqJPILPl/aJC7YdtRE4CybBf8gDwObBvKha8Xlyg==", + "dev": true, + "dependencies": { + "add-stream": "^1.0.0", + "conventional-changelog-writer": "^5.0.0", + "conventional-commits-parser": "^3.2.0", + "dateformat": "^3.0.0", + "get-pkg-repo": "^4.0.0", + "git-raw-commits": "^2.0.8", + "git-remote-origin-url": "^2.0.0", + "git-semver-tags": "^4.1.1", + "lodash": "^4.17.15", + "normalize-package-data": "^3.0.0", + "q": "^1.5.1", + "read-pkg": "^3.0.0", + "read-pkg-up": "^3.0.0", + "through2": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/conventional-changelog-core/node_modules/find-up": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", + "integrity": "sha512-NWzkk0jSJtTt08+FBFMvXoeZnOJD+jTtsRmBYbAIzJdX6l7dLgR7CTubCM5/eDdPUBvLCeVasP1brfVR/9/EZQ==", + "dev": true, + "dependencies": { + "locate-path": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/conventional-changelog-core/node_modules/hosted-git-info": { + "version": "2.8.9", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", + "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", + "dev": true + }, + "node_modules/conventional-changelog-core/node_modules/locate-path": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", + "integrity": "sha512-NCI2kiDkyR7VeEKm27Kda/iQHyKJe1Bu0FlTbYp3CqJu+9IFe9bLyAjMxf5ZDDbEg+iMPzB5zYyUTSm8wVTKmA==", + "dev": true, + "dependencies": { + "p-locate": "^2.0.0", + "path-exists": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/conventional-changelog-core/node_modules/p-limit": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", + "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", + "dev": true, + "dependencies": { + "p-try": "^1.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/conventional-changelog-core/node_modules/p-locate": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", + "integrity": "sha512-nQja7m7gSKuewoVRen45CtVfODR3crN3goVQ0DDZ9N3yHxgpkuBhZqsaiotSQRrADUrne346peY7kT3TSACykg==", + "dev": true, + "dependencies": { + "p-limit": "^1.1.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/conventional-changelog-core/node_modules/p-try": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", + "integrity": "sha512-U1etNYuMJoIz3ZXSrrySFjsXQTWOx2/jdi86L+2pRvph/qMKL6sbcCYdH23fqsbm8TH2Gn0OybpT4eSFlCVHww==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/conventional-changelog-core/node_modules/path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/conventional-changelog-core/node_modules/path-type": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz", + "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==", + "dev": true, + "dependencies": { + "pify": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/conventional-changelog-core/node_modules/pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/conventional-changelog-core/node_modules/read-pkg": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz", + "integrity": "sha512-BLq/cCO9two+lBgiTYNqD6GdtK8s4NpaWrl6/rCO9w0TUS8oJl7cmToOZfRYllKTISY6nt1U7jQ53brmKqY6BA==", + "dev": true, + "dependencies": { + "load-json-file": "^4.0.0", + "normalize-package-data": "^2.3.2", + "path-type": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/conventional-changelog-core/node_modules/read-pkg-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-3.0.0.tgz", + "integrity": "sha512-YFzFrVvpC6frF1sz8psoHDBGF7fLPc+llq/8NB43oagqWkx8ar5zYtsTORtOjw9W2RHLpWP+zTWwBvf1bCmcSw==", + "dev": true, + "dependencies": { + "find-up": "^2.0.0", + "read-pkg": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/conventional-changelog-core/node_modules/read-pkg/node_modules/normalize-package-data": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", + "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", + "dev": true, + "dependencies": { + "hosted-git-info": "^2.1.4", + "resolve": "^1.10.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" + } + }, + "node_modules/conventional-changelog-core/node_modules/semver": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", + "dev": true, + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/conventional-changelog-ember": { + "version": "2.0.9", + "resolved": "https://registry.npmjs.org/conventional-changelog-ember/-/conventional-changelog-ember-2.0.9.tgz", + "integrity": "sha512-ulzIReoZEvZCBDhcNYfDIsLTHzYHc7awh+eI44ZtV5cx6LVxLlVtEmcO+2/kGIHGtw+qVabJYjdI5cJOQgXh1A==", + "dev": true, + "dependencies": { + "q": "^1.5.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/conventional-changelog-eslint": { + "version": "3.0.9", + "resolved": "https://registry.npmjs.org/conventional-changelog-eslint/-/conventional-changelog-eslint-3.0.9.tgz", + "integrity": "sha512-6NpUCMgU8qmWmyAMSZO5NrRd7rTgErjrm4VASam2u5jrZS0n38V7Y9CzTtLT2qwz5xEChDR4BduoWIr8TfwvXA==", + "dev": true, + "dependencies": { + "q": "^1.5.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/conventional-changelog-express": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/conventional-changelog-express/-/conventional-changelog-express-2.0.6.tgz", + "integrity": "sha512-SDez2f3iVJw6V563O3pRtNwXtQaSmEfTCaTBPCqn0oG0mfkq0rX4hHBq5P7De2MncoRixrALj3u3oQsNK+Q0pQ==", + "dev": true, + "dependencies": { + "q": "^1.5.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/conventional-changelog-jquery": { + "version": "3.0.11", + "resolved": "https://registry.npmjs.org/conventional-changelog-jquery/-/conventional-changelog-jquery-3.0.11.tgz", + "integrity": "sha512-x8AWz5/Td55F7+o/9LQ6cQIPwrCjfJQ5Zmfqi8thwUEKHstEn4kTIofXub7plf1xvFA2TqhZlq7fy5OmV6BOMw==", + "dev": true, + "dependencies": { + "q": "^1.5.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/conventional-changelog-jscs": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/conventional-changelog-jscs/-/conventional-changelog-jscs-0.1.0.tgz", + "integrity": "sha512-V8sey4tE0nJUlWGi2PZKDMfawYLf/+F165xhhDjcIoTEJDxssVV5PMVzTQzjS6U/dEX85fWkur+bs6imOqkIng==", + "dev": true, + "dependencies": { + "q": "^1.4.1" + } + }, + "node_modules/conventional-changelog-jshint": { + "version": "2.0.9", + "resolved": "https://registry.npmjs.org/conventional-changelog-jshint/-/conventional-changelog-jshint-2.0.9.tgz", + "integrity": "sha512-wMLdaIzq6TNnMHMy31hql02OEQ8nCQfExw1SE0hYL5KvU+JCTuPaDO+7JiogGT2gJAxiUGATdtYYfh+nT+6riA==", + "dev": true, + "dependencies": { + "compare-func": "^2.0.0", + "q": "^1.5.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/conventional-changelog-preset-loader": { + "version": "2.3.4", + "resolved": "https://registry.npmjs.org/conventional-changelog-preset-loader/-/conventional-changelog-preset-loader-2.3.4.tgz", + "integrity": "sha512-GEKRWkrSAZeTq5+YjUZOYxdHq+ci4dNwHvpaBC3+ENalzFWuCWa9EZXSuZBpkr72sMdKB+1fyDV4takK1Lf58g==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/conventional-changelog-writer": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/conventional-changelog-writer/-/conventional-changelog-writer-5.0.1.tgz", + "integrity": "sha512-5WsuKUfxW7suLblAbFnxAcrvf6r+0b7GvNaWUwUIk0bXMnENP/PEieGKVUQrjPqwPT4o3EPAASBXiY6iHooLOQ==", + "dev": true, + "dependencies": { + "conventional-commits-filter": "^2.0.7", + "dateformat": "^3.0.0", + "handlebars": "^4.7.7", + "json-stringify-safe": "^5.0.1", + "lodash": "^4.17.15", + "meow": "^8.0.0", + "semver": "^6.0.0", + "split": "^1.0.0", + "through2": "^4.0.0" + }, + "bin": { + "conventional-changelog-writer": "cli.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/conventional-changelog-writer/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/conventional-commit-types": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/conventional-commit-types/-/conventional-commit-types-3.0.0.tgz", + "integrity": "sha512-SmmCYnOniSsAa9GqWOeLqc179lfr5TRu5b4QFDkbsrJ5TZjPJx85wtOr3zn+1dbeNiXDKGPbZ72IKbPhLXh/Lg==", + "dev": true + }, + "node_modules/conventional-commits-filter": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/conventional-commits-filter/-/conventional-commits-filter-2.0.7.tgz", + "integrity": "sha512-ASS9SamOP4TbCClsRHxIHXRfcGCnIoQqkvAzCSbZzTFLfcTqJVugB0agRgsEELsqaeWgsXv513eS116wnlSSPA==", + "dev": true, + "dependencies": { + "lodash.ismatch": "^4.4.0", + "modify-values": "^1.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/conventional-commits-parser": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/conventional-commits-parser/-/conventional-commits-parser-3.2.4.tgz", + "integrity": "sha512-nK7sAtfi+QXbxHCYfhpZsfRtaitZLIA6889kFIouLvz6repszQDgxBu7wf2WbU+Dco7sAnNCJYERCwt54WPC2Q==", + "dev": true, + "dependencies": { + "is-text-path": "^1.0.1", + "JSONStream": "^1.0.4", + "lodash": "^4.17.15", + "meow": "^8.0.0", + "split2": "^3.0.0", + "through2": "^4.0.0" + }, + "bin": { + "conventional-commits-parser": "cli.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/conventional-github-releaser": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/conventional-github-releaser/-/conventional-github-releaser-3.1.5.tgz", + "integrity": "sha512-VhPKbdN92b2ygnQLkuwHIfUaPAVrVfJVuQdxbmmVPkN927LDP98HthLWFVShh4pxqLK0nE66v78RERGJVeCzbg==", + "dev": true, + "dependencies": { + "conventional-changelog": "^2.0.0", + "dateformat": "^3.0.0", + "debug": "^3.1.0", + "gh-got": "^7.0.0", + "git-semver-tags": "^2.0.0", + "lodash.merge": "^4.0.2", + "meow": "^7.0.0", + "object-assign": "^4.0.1", + "q": "^1.4.1", + "semver": "^5.0.1", + "semver-regex": "^2.0.0", + "through2": "^2.0.0" + }, + "bin": { + "conventional-github-releaser": "src/cli.js" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/conventional-github-releaser/node_modules/compare-func": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/compare-func/-/compare-func-1.3.4.tgz", + "integrity": "sha512-sq2sWtrqKPkEXAC8tEJA1+BqAH9GbFkGBtUOqrUX57VSfwp8xyktctk+uLoRy5eccTdxzDcVIztlYDpKs3Jv1Q==", + "dev": true, + "dependencies": { + "array-ify": "^1.0.0", + "dot-prop": "^3.0.0" + } + }, + "node_modules/conventional-github-releaser/node_modules/conventional-changelog": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/conventional-changelog/-/conventional-changelog-2.0.3.tgz", + "integrity": "sha512-4bcII9cJHSKb2qi9e8qGF6aJHLf/AB0dokhyR+X6QILTMl77s4l163vK+reXhajvfOYbbHQvsrWybr5+PKZwNA==", + "dev": true, + "dependencies": { + "conventional-changelog-angular": "^1.6.6", + "conventional-changelog-atom": "^2.0.0", + "conventional-changelog-codemirror": "^2.0.0", + "conventional-changelog-core": "^3.1.0", + "conventional-changelog-ember": "^2.0.1", + "conventional-changelog-eslint": "^3.0.0", + "conventional-changelog-express": "^2.0.0", + "conventional-changelog-jquery": "^0.1.0", + "conventional-changelog-jscs": "^0.1.0", + "conventional-changelog-jshint": "^2.0.0", + "conventional-changelog-preset-loader": "^2.0.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/conventional-github-releaser/node_modules/conventional-changelog-angular": { + "version": "1.6.6", + "resolved": "https://registry.npmjs.org/conventional-changelog-angular/-/conventional-changelog-angular-1.6.6.tgz", + "integrity": "sha512-suQnFSqCxRwyBxY68pYTsFkG0taIdinHLNEAX5ivtw8bCRnIgnpvcHmlR/yjUyZIrNPYAoXlY1WiEKWgSE4BNg==", + "dev": true, + "dependencies": { + "compare-func": "^1.3.1", + "q": "^1.5.1" + } + }, + "node_modules/conventional-github-releaser/node_modules/conventional-changelog-core": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/conventional-changelog-core/-/conventional-changelog-core-3.2.3.tgz", + "integrity": "sha512-LMMX1JlxPIq/Ez5aYAYS5CpuwbOk6QFp8O4HLAcZxe3vxoCtABkhfjetk8IYdRB9CDQGwJFLR3Dr55Za6XKgUQ==", + "dev": true, + "dependencies": { + "conventional-changelog-writer": "^4.0.6", + "conventional-commits-parser": "^3.0.3", + "dateformat": "^3.0.0", + "get-pkg-repo": "^1.0.0", + "git-raw-commits": "2.0.0", + "git-remote-origin-url": "^2.0.0", + "git-semver-tags": "^2.0.3", + "lodash": "^4.2.1", + "normalize-package-data": "^2.3.5", + "q": "^1.5.1", + "read-pkg": "^3.0.0", + "read-pkg-up": "^3.0.0", + "through2": "^3.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/conventional-github-releaser/node_modules/conventional-changelog-core/node_modules/read-pkg-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-3.0.0.tgz", + "integrity": "sha512-YFzFrVvpC6frF1sz8psoHDBGF7fLPc+llq/8NB43oagqWkx8ar5zYtsTORtOjw9W2RHLpWP+zTWwBvf1bCmcSw==", + "dev": true, + "dependencies": { + "find-up": "^2.0.0", + "read-pkg": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/conventional-github-releaser/node_modules/conventional-changelog-core/node_modules/through2": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/through2/-/through2-3.0.2.tgz", + "integrity": "sha512-enaDQ4MUyP2W6ZyT6EsMzqBPZaM/avg8iuo+l2d3QCs0J+6RaqkHV/2/lOwDTueBHeJ/2LG9lrLW3d5rWPucuQ==", + "dev": true, + "dependencies": { + "inherits": "^2.0.4", + "readable-stream": "2 || 3" + } + }, + "node_modules/conventional-github-releaser/node_modules/conventional-changelog-jquery": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/conventional-changelog-jquery/-/conventional-changelog-jquery-0.1.0.tgz", + "integrity": "sha512-wbz5vVcvu/SPZTDFB21fF/xo5zFq6NQR42jhtUfOrrP1N/ZjNshhGb3expCGqHYdnUHzPevHeUafsVrdxVD5Og==", + "dev": true, + "dependencies": { + "q": "^1.4.1" + } + }, + "node_modules/conventional-github-releaser/node_modules/conventional-changelog-writer": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/conventional-changelog-writer/-/conventional-changelog-writer-4.1.0.tgz", + "integrity": "sha512-WwKcUp7WyXYGQmkLsX4QmU42AZ1lqlvRW9mqoyiQzdD+rJWbTepdWoKJuwXTS+yq79XKnQNa93/roViPQrAQgw==", + "dev": true, + "dependencies": { + "compare-func": "^2.0.0", + "conventional-commits-filter": "^2.0.7", + "dateformat": "^3.0.0", + "handlebars": "^4.7.6", + "json-stringify-safe": "^5.0.1", + "lodash": "^4.17.15", + "meow": "^8.0.0", + "semver": "^6.0.0", + "split": "^1.0.0", + "through2": "^4.0.0" + }, + "bin": { + "conventional-changelog-writer": "cli.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/conventional-github-releaser/node_modules/conventional-changelog-writer/node_modules/compare-func": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/compare-func/-/compare-func-2.0.0.tgz", + "integrity": "sha512-zHig5N+tPWARooBnb0Zx1MFcdfpyJrfTJ3Y5L+IFvUm8rM74hHz66z0gw0x4tijh5CorKkKUCnW82R2vmpeCRA==", + "dev": true, + "dependencies": { + "array-ify": "^1.0.0", + "dot-prop": "^5.1.0" + } + }, + "node_modules/conventional-github-releaser/node_modules/conventional-changelog-writer/node_modules/hosted-git-info": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz", + "integrity": "sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/conventional-github-releaser/node_modules/conventional-changelog-writer/node_modules/meow": { + "version": "8.1.2", + "resolved": "https://registry.npmjs.org/meow/-/meow-8.1.2.tgz", + "integrity": "sha512-r85E3NdZ+mpYk1C6RjPFEMSE+s1iZMuHtsHAqY0DT3jZczl0diWUZ8g6oU7h0M9cD2EL+PzaYghhCLzR0ZNn5Q==", + "dev": true, + "dependencies": { + "@types/minimist": "^1.2.0", + "camelcase-keys": "^6.2.2", + "decamelize-keys": "^1.1.0", + "hard-rejection": "^2.1.0", + "minimist-options": "4.1.0", + "normalize-package-data": "^3.0.0", + "read-pkg-up": "^7.0.1", + "redent": "^3.0.0", + "trim-newlines": "^3.0.0", + "type-fest": "^0.18.0", + "yargs-parser": "^20.2.3" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/conventional-github-releaser/node_modules/conventional-changelog-writer/node_modules/normalize-package-data": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-3.0.3.tgz", + "integrity": "sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA==", + "dev": true, + "dependencies": { + "hosted-git-info": "^4.0.1", + "is-core-module": "^2.5.0", + "semver": "^7.3.4", + "validate-npm-package-license": "^3.0.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/conventional-github-releaser/node_modules/conventional-changelog-writer/node_modules/normalize-package-data/node_modules/semver": { + "version": "7.5.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.3.tgz", + "integrity": "sha512-QBlUtyVk/5EeHbi7X0fw6liDZc7BBmEaSYn01fMU1OUYbf6GPsbTtd8WmnqbI20SeycoHSeiybkE/q1Q+qlThQ==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/conventional-github-releaser/node_modules/conventional-changelog-writer/node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "dev": true, + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/conventional-github-releaser/node_modules/conventional-changelog-writer/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/conventional-github-releaser/node_modules/conventional-changelog-writer/node_modules/through2": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/through2/-/through2-4.0.2.tgz", + "integrity": "sha512-iOqSav00cVxEEICeD7TjLB1sueEL+81Wpzp2bY17uZjZN0pWZPuo4suZ/61VujxmqSGFfgOcNuTZ85QJwNZQpw==", + "dev": true, + "dependencies": { + "readable-stream": "3" + } + }, + "node_modules/conventional-github-releaser/node_modules/conventional-changelog-writer/node_modules/type-fest": { + "version": "0.18.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.18.1.tgz", + "integrity": "sha512-OIAYXk8+ISY+qTOwkHtKqzAuxchoMiD9Udx+FSGQDuiRR+PJKJHc2NJAXlbhkGwTt/4/nKZxELY1w3ReWOL8mw==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/conventional-github-releaser/node_modules/dargs": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/dargs/-/dargs-4.1.0.tgz", + "integrity": "sha512-jyweV/k0rbv2WK4r9KLayuBrSh2Py0tNmV7LBoSMH4hMQyrG8OPyIOWB2VEx4DJKXWmK4lopYMVvORlDt2S8Aw==", + "dev": true, + "dependencies": { + "number-is-nan": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/conventional-github-releaser/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/conventional-github-releaser/node_modules/dot-prop": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-4.2.1.tgz", + "integrity": "sha512-l0p4+mIuJIua0mhxGoh4a+iNL9bmeK5DvnSVQa6T0OhrVmaEa1XScX5Etc673FePCJOArq/4Pa2cLGODUWTPOQ==", + "dev": true, + "dependencies": { + "is-obj": "^1.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/conventional-github-releaser/node_modules/find-up": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", + "integrity": "sha512-NWzkk0jSJtTt08+FBFMvXoeZnOJD+jTtsRmBYbAIzJdX6l7dLgR7CTubCM5/eDdPUBvLCeVasP1brfVR/9/EZQ==", + "dev": true, + "dependencies": { + "locate-path": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/conventional-github-releaser/node_modules/get-pkg-repo": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/get-pkg-repo/-/get-pkg-repo-1.4.0.tgz", + "integrity": "sha512-xPCyvcEOxCJDxhBfXDNH+zA7mIRGb2aY1gIUJWsZkpJbp1BLHl+/Sycg26Dv+ZbZAJkO61tzbBtqHUi30NGBvg==", + "dev": true, + "dependencies": { + "hosted-git-info": "^2.1.4", + "meow": "^3.3.0", + "normalize-package-data": "^2.3.0", + "parse-github-repo-url": "^1.3.0", + "through2": "^2.0.0" + }, + "bin": { + "get-pkg-repo": "cli.js" + } + }, + "node_modules/conventional-github-releaser/node_modules/get-pkg-repo/node_modules/camelcase": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-2.1.1.tgz", + "integrity": "sha512-DLIsRzJVBQu72meAKPkWQOLcujdXT32hwdfnkI1frSiSRMK1MofjKHf+MEx0SB6fjEFXL8fBDv1dKymBlOp4Qw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/conventional-github-releaser/node_modules/get-pkg-repo/node_modules/camelcase-keys": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-2.1.0.tgz", + "integrity": "sha512-bA/Z/DERHKqoEOrp+qeGKw1QlvEQkGZSc0XaY6VnTxZr+Kv1G5zFwttpjv8qxZ/sBPT4nthwZaAcsAZTJlSKXQ==", + "dev": true, + "dependencies": { + "camelcase": "^2.0.0", + "map-obj": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/conventional-github-releaser/node_modules/get-pkg-repo/node_modules/find-up": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", + "integrity": "sha512-jvElSjyuo4EMQGoTwo1uJU5pQMwTW5lS1x05zzfJuTIyLR3zwO27LYrxNg+dlvKpGOuGy/MzBdXh80g0ve5+HA==", + "dev": true, + "dependencies": { + "path-exists": "^2.0.0", + "pinkie-promise": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/conventional-github-releaser/node_modules/get-pkg-repo/node_modules/load-json-file": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", + "integrity": "sha512-cy7ZdNRXdablkXYNI049pthVeXFurRyb9+hA/dZzerZ0pGTx42z+y+ssxBaVV2l70t1muq5IdKhn4UtcoGUY9A==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.1.2", + "parse-json": "^2.2.0", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0", + "strip-bom": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/conventional-github-releaser/node_modules/get-pkg-repo/node_modules/meow": { + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/meow/-/meow-3.7.0.tgz", + "integrity": "sha512-TNdwZs0skRlpPpCUK25StC4VH+tP5GgeY1HQOOGP+lQ2xtdkN2VtT/5tiX9k3IWpkBPV9b3LsAWXn4GGi/PrSA==", + "dev": true, + "dependencies": { + "camelcase-keys": "^2.0.0", + "decamelize": "^1.1.2", + "loud-rejection": "^1.0.0", + "map-obj": "^1.0.1", + "minimist": "^1.1.3", + "normalize-package-data": "^2.3.4", + "object-assign": "^4.0.1", + "read-pkg-up": "^1.0.1", + "redent": "^1.0.0", + "trim-newlines": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/conventional-github-releaser/node_modules/get-pkg-repo/node_modules/path-exists": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", + "integrity": "sha512-yTltuKuhtNeFJKa1PiRzfLAU5182q1y4Eb4XCJ3PBqyzEDkAZRzBrKKBct682ls9reBVHf9udYLN5Nd+K1B9BQ==", + "dev": true, + "dependencies": { + "pinkie-promise": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/conventional-github-releaser/node_modules/get-pkg-repo/node_modules/path-type": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz", + "integrity": "sha512-S4eENJz1pkiQn9Znv33Q+deTOKmbl+jj1Fl+qiP/vYezj+S8x+J3Uo0ISrx/QoEvIlOaDWJhPaRd1flJ9HXZqg==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.1.2", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/conventional-github-releaser/node_modules/get-pkg-repo/node_modules/pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/conventional-github-releaser/node_modules/get-pkg-repo/node_modules/read-pkg": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz", + "integrity": "sha512-7BGwRHqt4s/uVbuyoeejRn4YmFnYZiFl4AuaeXHlgZf3sONF0SOGlxs2Pw8g6hCKupo08RafIO5YXFNOKTfwsQ==", + "dev": true, + "dependencies": { + "load-json-file": "^1.0.0", + "normalize-package-data": "^2.3.2", + "path-type": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/conventional-github-releaser/node_modules/get-pkg-repo/node_modules/read-pkg-up": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz", + "integrity": "sha512-WD9MTlNtI55IwYUS27iHh9tK3YoIVhxis8yKhLpTqWtml739uXc9NWTpxoHkfZf3+DkCCsXox94/VWZniuZm6A==", + "dev": true, + "dependencies": { + "find-up": "^1.0.0", + "read-pkg": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/conventional-github-releaser/node_modules/get-pkg-repo/node_modules/redent": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/redent/-/redent-1.0.0.tgz", + "integrity": "sha512-qtW5hKzGQZqKoh6JNSD+4lfitfPKGz42e6QwiRmPM5mmKtR0N41AbJRYu0xJi7nhOJ4WDgRkKvAk6tw4WIwR4g==", + "dev": true, + "dependencies": { + "indent-string": "^2.1.0", + "strip-indent": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/conventional-github-releaser/node_modules/git-raw-commits": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/git-raw-commits/-/git-raw-commits-2.0.0.tgz", + "integrity": "sha512-w4jFEJFgKXMQJ0H0ikBk2S+4KP2VEjhCvLCNqbNRQC8BgGWgLKNCO7a9K9LI+TVT7Gfoloje502sEnctibffgg==", + "dev": true, + "dependencies": { + "dargs": "^4.0.1", + "lodash.template": "^4.0.2", + "meow": "^4.0.0", + "split2": "^2.0.0", + "through2": "^2.0.0" + }, + "bin": { + "git-raw-commits": "cli.js" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/conventional-github-releaser/node_modules/git-raw-commits/node_modules/camelcase": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz", + "integrity": "sha512-FxAv7HpHrXbh3aPo4o2qxHay2lkLY3x5Mw3KeE4KQE8ysVfziWeRZDwcjauvwBSGEC/nXUPzZy8zeh4HokqOnw==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/conventional-github-releaser/node_modules/git-raw-commits/node_modules/camelcase-keys": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-4.2.0.tgz", + "integrity": "sha512-Ej37YKYbFUI8QiYlvj9YHb6/Z60dZyPJW0Cs8sFilMbd2lP0bw3ylAq9yJkK4lcTA2dID5fG8LjmJYbO7kWb7Q==", + "dev": true, + "dependencies": { + "camelcase": "^4.1.0", + "map-obj": "^2.0.0", + "quick-lru": "^1.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/conventional-github-releaser/node_modules/git-raw-commits/node_modules/indent-string": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-3.2.0.tgz", + "integrity": "sha512-BYqTHXTGUIvg7t1r4sJNKcbDZkL92nkXA8YtRpbjFHRHGDL/NtUeiBJMeE60kIFN/Mg8ESaWQvftaYMGJzQZCQ==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/conventional-github-releaser/node_modules/git-raw-commits/node_modules/map-obj": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-2.0.0.tgz", + "integrity": "sha512-TzQSV2DiMYgoF5RycneKVUzIa9bQsj/B3tTgsE3dOGqlzHnGIDaC7XBE7grnA+8kZPnfqSGFe95VHc2oc0VFUQ==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/conventional-github-releaser/node_modules/git-raw-commits/node_modules/meow": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/meow/-/meow-4.0.1.tgz", + "integrity": "sha512-xcSBHD5Z86zaOc+781KrupuHAzeGXSLtiAOmBsiLDiPSaYSB6hdew2ng9EBAnZ62jagG9MHAOdxpDi/lWBFJ/A==", + "dev": true, + "dependencies": { + "camelcase-keys": "^4.0.0", + "decamelize-keys": "^1.0.0", + "loud-rejection": "^1.0.0", + "minimist": "^1.1.3", + "minimist-options": "^3.0.1", + "normalize-package-data": "^2.3.4", + "read-pkg-up": "^3.0.0", + "redent": "^2.0.0", + "trim-newlines": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/conventional-github-releaser/node_modules/git-raw-commits/node_modules/minimist-options": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/minimist-options/-/minimist-options-3.0.2.tgz", + "integrity": "sha512-FyBrT/d0d4+uiZRbqznPXqw3IpZZG3gl3wKWiX784FycUKVwBt0uLBFkQrtE4tZOrgo78nZp2jnKz3L65T5LdQ==", + "dev": true, + "dependencies": { + "arrify": "^1.0.1", + "is-plain-obj": "^1.1.0" + }, + "engines": { + "node": ">= 4" + } + }, + "node_modules/conventional-github-releaser/node_modules/git-raw-commits/node_modules/read-pkg-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-3.0.0.tgz", + "integrity": "sha512-YFzFrVvpC6frF1sz8psoHDBGF7fLPc+llq/8NB43oagqWkx8ar5zYtsTORtOjw9W2RHLpWP+zTWwBvf1bCmcSw==", + "dev": true, + "dependencies": { + "find-up": "^2.0.0", + "read-pkg": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/conventional-github-releaser/node_modules/git-raw-commits/node_modules/redent": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/redent/-/redent-2.0.0.tgz", + "integrity": "sha512-XNwrTx77JQCEMXTeb8movBKuK75MgH0RZkujNuDKCezemx/voapl9i2gCSi8WWm8+ox5ycJi1gxF22fR7c0Ciw==", + "dev": true, + "dependencies": { + "indent-string": "^3.0.0", + "strip-indent": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/conventional-github-releaser/node_modules/git-raw-commits/node_modules/strip-indent": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-2.0.0.tgz", + "integrity": "sha512-RsSNPLpq6YUL7QYy44RnPVTn/lcVZtb48Uof3X5JLbF4zD/Gs7ZFDv2HWol+leoQN2mT86LAzSshGfkTlSOpsA==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/conventional-github-releaser/node_modules/git-semver-tags": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/git-semver-tags/-/git-semver-tags-2.0.3.tgz", + "integrity": "sha512-tj4FD4ww2RX2ae//jSrXZzrocla9db5h0V7ikPl1P/WwoZar9epdUhwR7XHXSgc+ZkNq72BEEerqQuicoEQfzA==", + "dev": true, + "dependencies": { + "meow": "^4.0.0", + "semver": "^6.0.0" + }, + "bin": { + "git-semver-tags": "cli.js" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/conventional-github-releaser/node_modules/git-semver-tags/node_modules/camelcase": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz", + "integrity": "sha512-FxAv7HpHrXbh3aPo4o2qxHay2lkLY3x5Mw3KeE4KQE8ysVfziWeRZDwcjauvwBSGEC/nXUPzZy8zeh4HokqOnw==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/conventional-github-releaser/node_modules/git-semver-tags/node_modules/camelcase-keys": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-4.2.0.tgz", + "integrity": "sha512-Ej37YKYbFUI8QiYlvj9YHb6/Z60dZyPJW0Cs8sFilMbd2lP0bw3ylAq9yJkK4lcTA2dID5fG8LjmJYbO7kWb7Q==", + "dev": true, + "dependencies": { + "camelcase": "^4.1.0", + "map-obj": "^2.0.0", + "quick-lru": "^1.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/conventional-github-releaser/node_modules/git-semver-tags/node_modules/indent-string": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-3.2.0.tgz", + "integrity": "sha512-BYqTHXTGUIvg7t1r4sJNKcbDZkL92nkXA8YtRpbjFHRHGDL/NtUeiBJMeE60kIFN/Mg8ESaWQvftaYMGJzQZCQ==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/conventional-github-releaser/node_modules/git-semver-tags/node_modules/map-obj": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-2.0.0.tgz", + "integrity": "sha512-TzQSV2DiMYgoF5RycneKVUzIa9bQsj/B3tTgsE3dOGqlzHnGIDaC7XBE7grnA+8kZPnfqSGFe95VHc2oc0VFUQ==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/conventional-github-releaser/node_modules/git-semver-tags/node_modules/meow": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/meow/-/meow-4.0.1.tgz", + "integrity": "sha512-xcSBHD5Z86zaOc+781KrupuHAzeGXSLtiAOmBsiLDiPSaYSB6hdew2ng9EBAnZ62jagG9MHAOdxpDi/lWBFJ/A==", + "dev": true, + "dependencies": { + "camelcase-keys": "^4.0.0", + "decamelize-keys": "^1.0.0", + "loud-rejection": "^1.0.0", + "minimist": "^1.1.3", + "minimist-options": "^3.0.1", + "normalize-package-data": "^2.3.4", + "read-pkg-up": "^3.0.0", + "redent": "^2.0.0", + "trim-newlines": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/conventional-github-releaser/node_modules/git-semver-tags/node_modules/minimist-options": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/minimist-options/-/minimist-options-3.0.2.tgz", + "integrity": "sha512-FyBrT/d0d4+uiZRbqznPXqw3IpZZG3gl3wKWiX784FycUKVwBt0uLBFkQrtE4tZOrgo78nZp2jnKz3L65T5LdQ==", + "dev": true, + "dependencies": { + "arrify": "^1.0.1", + "is-plain-obj": "^1.1.0" + }, + "engines": { + "node": ">= 4" + } + }, + "node_modules/conventional-github-releaser/node_modules/git-semver-tags/node_modules/read-pkg-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-3.0.0.tgz", + "integrity": "sha512-YFzFrVvpC6frF1sz8psoHDBGF7fLPc+llq/8NB43oagqWkx8ar5zYtsTORtOjw9W2RHLpWP+zTWwBvf1bCmcSw==", + "dev": true, + "dependencies": { + "find-up": "^2.0.0", + "read-pkg": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/conventional-github-releaser/node_modules/git-semver-tags/node_modules/redent": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/redent/-/redent-2.0.0.tgz", + "integrity": "sha512-XNwrTx77JQCEMXTeb8movBKuK75MgH0RZkujNuDKCezemx/voapl9i2gCSi8WWm8+ox5ycJi1gxF22fR7c0Ciw==", + "dev": true, + "dependencies": { + "indent-string": "^3.0.0", + "strip-indent": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/conventional-github-releaser/node_modules/git-semver-tags/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/conventional-github-releaser/node_modules/git-semver-tags/node_modules/strip-indent": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-2.0.0.tgz", + "integrity": "sha512-RsSNPLpq6YUL7QYy44RnPVTn/lcVZtb48Uof3X5JLbF4zD/Gs7ZFDv2HWol+leoQN2mT86LAzSshGfkTlSOpsA==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/conventional-github-releaser/node_modules/hosted-git-info": { + "version": "2.8.9", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", + "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", + "dev": true + }, + "node_modules/conventional-github-releaser/node_modules/indent-string": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-2.1.0.tgz", + "integrity": "sha512-aqwDFWSgSgfRaEwao5lg5KEcVd/2a+D1rvoG7NdilmYz0NwRk6StWpWdz/Hpk34MKPpx7s8XxUqimfcQK6gGlg==", + "dev": true, + "dependencies": { + "repeating": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/conventional-github-releaser/node_modules/is-obj": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz", + "integrity": "sha512-l4RyHgRqGN4Y3+9JHVrNqO+tN0rV5My76uW5/nuO4K1b6vw5G8d/cmFjP9tRfEsdhZNt0IFdZuK/c2Vr4Nb+Qg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/conventional-github-releaser/node_modules/locate-path": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", + "integrity": "sha512-NCI2kiDkyR7VeEKm27Kda/iQHyKJe1Bu0FlTbYp3CqJu+9IFe9bLyAjMxf5ZDDbEg+iMPzB5zYyUTSm8wVTKmA==", + "dev": true, + "dependencies": { + "p-locate": "^2.0.0", + "path-exists": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/conventional-github-releaser/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/conventional-github-releaser/node_modules/map-obj": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", + "integrity": "sha512-7N/q3lyZ+LVCp7PzuxrJr4KMbBE2hW7BT7YNia330OFxIf4d3r5zVpicP2650l7CPN6RM9zOJRl3NGpqSiw3Eg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/conventional-github-releaser/node_modules/meow": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/meow/-/meow-7.1.1.tgz", + "integrity": "sha512-GWHvA5QOcS412WCo8vwKDlTelGLsCGBVevQB5Kva961rmNfun0PCbv5+xta2kUMFJyR8/oWnn7ddeKdosbAPbA==", + "dev": true, + "dependencies": { + "@types/minimist": "^1.2.0", + "camelcase-keys": "^6.2.2", + "decamelize-keys": "^1.1.0", + "hard-rejection": "^2.1.0", + "minimist-options": "4.1.0", + "normalize-package-data": "^2.5.0", + "read-pkg-up": "^7.0.1", + "redent": "^3.0.0", + "trim-newlines": "^3.0.0", + "type-fest": "^0.13.1", + "yargs-parser": "^18.1.3" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/conventional-github-releaser/node_modules/meow/node_modules/yargs-parser": { + "version": "18.1.3", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", + "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", + "dev": true, + "dependencies": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/conventional-github-releaser/node_modules/normalize-package-data": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", + "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", + "dev": true, + "dependencies": { + "hosted-git-info": "^2.1.4", + "resolve": "^1.10.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" + } + }, + "node_modules/conventional-github-releaser/node_modules/p-limit": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", + "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", + "dev": true, + "dependencies": { + "p-try": "^1.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/conventional-github-releaser/node_modules/p-locate": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", + "integrity": "sha512-nQja7m7gSKuewoVRen45CtVfODR3crN3goVQ0DDZ9N3yHxgpkuBhZqsaiotSQRrADUrne346peY7kT3TSACykg==", + "dev": true, + "dependencies": { + "p-limit": "^1.1.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/conventional-github-releaser/node_modules/p-try": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", + "integrity": "sha512-U1etNYuMJoIz3ZXSrrySFjsXQTWOx2/jdi86L+2pRvph/qMKL6sbcCYdH23fqsbm8TH2Gn0OybpT4eSFlCVHww==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/conventional-github-releaser/node_modules/parse-json": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", + "integrity": "sha512-QR/GGaKCkhwk1ePQNYDRKYZ3mwU9ypsKhB0XyFnLQdomyEqk3e8wpW3V5Jp88zbxK4n5ST1nqo+g9juTpownhQ==", + "dev": true, + "dependencies": { + "error-ex": "^1.2.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/conventional-github-releaser/node_modules/path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/conventional-github-releaser/node_modules/path-type": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz", + "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==", + "dev": true, + "dependencies": { + "pify": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/conventional-github-releaser/node_modules/pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/conventional-github-releaser/node_modules/quick-lru": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-1.1.0.tgz", + "integrity": "sha512-tRS7sTgyxMXtLum8L65daJnHUhfDUgboRdcWW2bR9vBfrj2+O5HSMbQOJfJJjIVSPFqbBCF37FpwWXGitDc5tA==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/conventional-github-releaser/node_modules/read-pkg": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz", + "integrity": "sha512-BLq/cCO9two+lBgiTYNqD6GdtK8s4NpaWrl6/rCO9w0TUS8oJl7cmToOZfRYllKTISY6nt1U7jQ53brmKqY6BA==", + "dev": true, + "dependencies": { + "load-json-file": "^4.0.0", + "normalize-package-data": "^2.3.2", + "path-type": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/conventional-github-releaser/node_modules/semver": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", + "dev": true, + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/conventional-github-releaser/node_modules/split2": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/split2/-/split2-2.2.0.tgz", + "integrity": "sha512-RAb22TG39LhI31MbreBgIuKiIKhVsawfTgEGqKHTK87aG+ul/PB8Sqoi3I7kVdRWiCfrKxK3uo4/YUkpNvhPbw==", + "dev": true, + "dependencies": { + "through2": "^2.0.2" + } + }, + "node_modules/conventional-github-releaser/node_modules/strip-bom": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", + "integrity": "sha512-kwrX1y7czp1E69n2ajbG65mIo9dqvJ+8aBQXOGVxqwvNbsXdFM6Lq37dLAY3mknUwru8CfcCbfOLL/gMo+fi3g==", + "dev": true, + "dependencies": { + "is-utf8": "^0.2.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/conventional-github-releaser/node_modules/strip-indent": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-1.0.1.tgz", + "integrity": "sha512-I5iQq6aFMM62fBEAIB/hXzwJD6EEZ0xEGCX2t7oXqaKPIRgt4WruAQ285BISgdkP+HLGWyeGmNJcpIwFeRYRUA==", + "dev": true, + "dependencies": { + "get-stdin": "^4.0.1" + }, + "bin": { + "strip-indent": "cli.js" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/conventional-github-releaser/node_modules/through2": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", + "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", + "dev": true, + "dependencies": { + "readable-stream": "~2.3.6", + "xtend": "~4.0.1" + } + }, + "node_modules/conventional-github-releaser/node_modules/type-fest": { + "version": "0.13.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.13.1.tgz", + "integrity": "sha512-34R7HTnG0XIJcBSn5XhDd7nNFPRcXYRZrBB2O2jdKqYODldSzBAqzsWoZYYvduky73toYS/ESqxPvkDf/F0XMg==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/conventional-github-releaser/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "node_modules/conventional-recommended-bump": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/conventional-recommended-bump/-/conventional-recommended-bump-6.1.0.tgz", + "integrity": "sha512-uiApbSiNGM/kkdL9GTOLAqC4hbptObFo4wW2QRyHsKciGAfQuLU1ShZ1BIVI/+K2BE/W1AWYQMCXAsv4dyKPaw==", + "dev": true, + "dependencies": { + "concat-stream": "^2.0.0", + "conventional-changelog-preset-loader": "^2.3.4", + "conventional-commits-filter": "^2.0.7", + "conventional-commits-parser": "^3.2.0", + "git-raw-commits": "^2.0.8", + "git-semver-tags": "^4.1.1", + "meow": "^8.0.0", + "q": "^1.5.1" + }, + "bin": { + "conventional-recommended-bump": "cli.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/conventional-recommended-bump/node_modules/concat-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-2.0.0.tgz", + "integrity": "sha512-MWufYdFw53ccGjCA+Ol7XJYpAlW6/prSMzuPOTRnJGcGzuhLn4Scrz7qf6o8bROZ514ltazcIFJZevcfbo0x7A==", + "dev": true, + "engines": [ + "node >= 6.0" + ], + "dependencies": { + "buffer-from": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^3.0.2", + "typedarray": "^0.0.6" + } + }, + "node_modules/conventional-recommended-bump/node_modules/readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "dev": true, + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/convert-hex": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/convert-hex/-/convert-hex-0.1.0.tgz", + "integrity": "sha512-w20BOb1PiR/sEJdS6wNrUjF5CSfscZFUp7R9NSlXH8h2wynzXVEPFPJECAnkNylZ+cvf3p7TyRUHggDmrwXT9A==" + }, + "node_modules/convert-source-map": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", + "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", + "dev": true + }, + "node_modules/convert-string": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/convert-string/-/convert-string-0.1.0.tgz", + "integrity": "sha512-1KX9ESmtl8xpT2LN2tFnKSbV4NiarbVi8DVb39ZriijvtTklyrT+4dT1wsGMHKD3CJUjXgvJzstm9qL9ICojGA==" + }, + "node_modules/cookiejar": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/cookiejar/-/cookiejar-2.1.4.tgz", + "integrity": "sha512-LDx6oHrK+PhzLKJU9j5S7/Y3jM/mUHvD/DeI1WQmJn652iPC5Y4TBzC9l+5OMOXlyTTA+SmVUPm0HQUwpD5Jqw==", + "dev": true + }, + "node_modules/cookies": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/cookies/-/cookies-0.8.0.tgz", + "integrity": "sha512-8aPsApQfebXnuI+537McwYsDtjVxGm8gTIzQI3FDW6t5t/DAhERxtnbEPN/8RX+uZthoz4eCOgloXaE5cYyNow==", + "dependencies": { + "depd": "~2.0.0", + "keygrip": "~1.1.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/copy-to": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/copy-to/-/copy-to-2.0.1.tgz", + "integrity": "sha512-3DdaFaU/Zf1AnpLiFDeNCD4TOWe3Zl2RZaTzUvWiIk5ERzcCodOE20Vqq4fzCbNoHURFHT4/us/Lfq+S2zyY4w==" + }, + "node_modules/core-util-is": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", + "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", + "dev": true + }, + "node_modules/cosmiconfig": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-8.0.0.tgz", + "integrity": "sha512-da1EafcpH6b/TD8vDRaWV7xFINlHlF6zKsGwS1TsuVJTZRkquaS5HTMq7uq6h31619QjbsYl21gVDOm32KM1vQ==", + "dev": true, + "dependencies": { + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "parse-json": "^5.0.0", + "path-type": "^4.0.0" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/cosmiconfig-typescript-loader": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/cosmiconfig-typescript-loader/-/cosmiconfig-typescript-loader-4.3.0.tgz", + "integrity": "sha512-NTxV1MFfZDLPiBMjxbHRwSh5LaLcPMwNdCutmnHJCKoVnlvldPWlllonKwrsRJ5pYZBIBGRWWU2tfvzxgeSW5Q==", + "dev": true, + "engines": { + "node": ">=12", + "npm": ">=6" + }, + "peerDependencies": { + "@types/node": "*", + "cosmiconfig": ">=7", + "ts-node": ">=10", + "typescript": ">=3" + } + }, + "node_modules/create-require": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", + "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", + "dev": true + }, + "node_modules/cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dev": true, + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/crypt": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/crypt/-/crypt-0.0.2.tgz", + "integrity": "sha512-mCxBlsHFYh9C+HVpiEacem8FEBnMXgU9gy4zmNC+SXAZNB/1idgp/aulFJ4FgCi7GPEVbfyng092GqL2k2rmow==", + "engines": { + "node": "*" + } + }, + "node_modules/crypto-js": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/crypto-js/-/crypto-js-4.1.1.tgz", + "integrity": "sha512-o2JlM7ydqd3Qk9CA0L4NL6mTzU2sdx96a+oOfPu8Mkl/PK51vSyoi8/rQ8NknZtk44vq15lmhAj9CIAGwgeWKw==" + }, + "node_modules/currently-unhandled": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/currently-unhandled/-/currently-unhandled-0.4.1.tgz", + "integrity": "sha512-/fITjgjGU50vjQ4FH6eUoYu+iUoUKIXws2hL15JJpIR+BbTxaXQsMuuyjtNh2WqsSBS5nsaZHFsFecyw5CCAng==", + "dev": true, + "dependencies": { + "array-find-index": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/cz-conventional-changelog": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/cz-conventional-changelog/-/cz-conventional-changelog-3.3.0.tgz", + "integrity": "sha512-U466fIzU5U22eES5lTNiNbZ+d8dfcHcssH4o7QsdWaCcRs/feIPCxKYSWkYBNs5mny7MvEfwpTLWjvbm94hecw==", + "dev": true, + "dependencies": { + "chalk": "^2.4.1", + "commitizen": "^4.0.3", + "conventional-commit-types": "^3.0.0", + "lodash.map": "^4.5.1", + "longest": "^2.0.1", + "word-wrap": "^1.0.3" + }, + "engines": { + "node": ">= 10" + }, + "optionalDependencies": { + "@commitlint/load": ">6.1.1" + } + }, + "node_modules/cz-conventional-changelog/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/cz-conventional-changelog/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/cz-conventional-changelog/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/cz-conventional-changelog/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "dev": true + }, + "node_modules/cz-conventional-changelog/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/cz-conventional-changelog/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/dargs": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/dargs/-/dargs-7.0.0.tgz", + "integrity": "sha512-2iy1EkLdlBzQGvbweYRFxmFath8+K7+AKB0TlhHWkNuH+TmovaMH/Wp7V7R4u7f4SnX3OgLsU9t1NI9ioDnUpg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/dateformat": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-3.0.3.tgz", + "integrity": "sha512-jyCETtSl3VMZMWeRo7iY1FL19ges1t55hMo5yaam4Jrsm5EPL89UQkoQRyiI+Yf4k8r2ZpdngkV8hr1lIdjb3Q==", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/decamelize": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/decamelize-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/decamelize-keys/-/decamelize-keys-1.1.1.tgz", + "integrity": "sha512-WiPxgEirIV0/eIOMcnFBA3/IJZAZqKnwAwWyvvdi4lsr1WCN22nhdf/3db3DoZcUjTV2SqfzIwNyp6y2xs3nmg==", + "dev": true, + "dependencies": { + "decamelize": "^1.1.0", + "map-obj": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/decamelize-keys/node_modules/map-obj": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", + "integrity": "sha512-7N/q3lyZ+LVCp7PzuxrJr4KMbBE2hW7BT7YNia330OFxIf4d3r5zVpicP2650l7CPN6RM9zOJRl3NGpqSiw3Eg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/decode-uri-component": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.2.tgz", + "integrity": "sha512-FqUYQ+8o158GyGTrMFJms9qh3CqTKvAqgqsTnkLI8sKu0028orqBhxNMFkFen0zGyg6epACD32pjVk58ngIErQ==", + "dev": true, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/decompress-response": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz", + "integrity": "sha512-BzRPQuY1ip+qDonAOz42gRm/pg9F768C+npV/4JOsxRC2sq+Rlk+Q4ZCAsOhnIaMrgarILY+RMUIvMmmX1qAEA==", + "dev": true, + "dependencies": { + "mimic-response": "^1.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/dedent": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/dedent/-/dedent-0.7.0.tgz", + "integrity": "sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA==", + "dev": true + }, + "node_modules/deep-extend": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", + "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", + "dev": true, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/deep-is": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", + "dev": true + }, + "node_modules/deepmerge": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz", + "integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/defaults": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.4.tgz", + "integrity": "sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==", + "dependencies": { + "clone": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/defaults/node_modules/clone": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", + "integrity": "sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==", + "engines": { + "node": ">=0.8" + } + }, + "node_modules/define-properties": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.4.tgz", + "integrity": "sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA==", + "dev": true, + "dependencies": { + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/delay": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/delay/-/delay-5.0.0.tgz", + "integrity": "sha512-ReEBKkIfe4ya47wlPYf/gu5ib6yUG0/Aez0JQZQz94kiWtRQvZIQbTiehsnwHvLSWJnQdhVeqYue7Id1dKr0qw==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/delegates": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", + "integrity": "sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==" + }, + "node_modules/denque": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/denque/-/denque-2.1.0.tgz", + "integrity": "sha512-HVQE3AAb/pxF8fQAoiqpvg9i3evqug3hoiwakOyZAwJm+6vZehbkYXZ0l4JxS+I3QxM97v5aaRNhj8v5oBhekw==", + "engines": { + "node": ">=0.10" + } + }, + "node_modules/depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/dependency-tree": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/dependency-tree/-/dependency-tree-9.0.0.tgz", + "integrity": "sha512-osYHZJ1fBSon3lNLw70amAXsQ+RGzXsPvk9HbBgTLbp/bQBmpH5mOmsUvqXU+YEWVU0ZLewsmzOET/8jWswjDQ==", + "dev": true, + "dependencies": { + "commander": "^2.20.3", + "debug": "^4.3.1", + "filing-cabinet": "^3.0.1", + "precinct": "^9.0.0", + "typescript": "^4.0.0" + }, + "bin": { + "dependency-tree": "bin/cli.js" + }, + "engines": { + "node": "^10.13 || ^12 || >=14" + } + }, + "node_modules/dependency-tree/node_modules/ast-module-types": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/ast-module-types/-/ast-module-types-4.0.0.tgz", + "integrity": "sha512-Kd0o8r6CDazJGCRzs8Ivpn0xj19oNKrULhoJFzhGjRsLpekF2zyZs9Ukz+JvZhWD6smszfepakTFhAaYpsI12g==", + "dev": true, + "engines": { + "node": ">=12.0" + } + }, + "node_modules/dependency-tree/node_modules/commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "dev": true + }, + "node_modules/dependency-tree/node_modules/detective-stylus": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/detective-stylus/-/detective-stylus-3.0.0.tgz", + "integrity": "sha512-1xYTzbrduExqMYmte7Qk99IRA3Aa6oV7PYzd+3yDcQXkmENvyGF/arripri6lxRDdNYEb4fZFuHtNRAXbz3iAA==", + "dev": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/dependency-tree/node_modules/module-definition": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/module-definition/-/module-definition-4.1.0.tgz", + "integrity": "sha512-rHXi/DpMcD2qcKbPCTklDbX9lBKJrUSl971TW5l6nMpqKCIlzJqmQ8cfEF5M923h2OOLHPDVlh5pJxNyV+AJlw==", + "dev": true, + "dependencies": { + "ast-module-types": "^4.0.0", + "node-source-walk": "^5.0.1" + }, + "bin": { + "module-definition": "bin/cli.js" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/dependency-tree/node_modules/node-source-walk": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/node-source-walk/-/node-source-walk-5.0.1.tgz", + "integrity": "sha512-fe5rFjPqkWQb4CLfsOf10fZAJvImfLpcVx+Nqbozaj6PBoAEjyEK1HZGCGvQNyre2HdL1HnZG6mxBf2UHSzr/w==", + "dev": true, + "dependencies": { + "@babel/parser": "^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/dependency-tree/node_modules/precinct": { + "version": "9.2.1", + "resolved": "https://registry.npmjs.org/precinct/-/precinct-9.2.1.tgz", + "integrity": "sha512-uzKHaTyiVejWW7VJtHInb9KBUq9yl9ojxXGujhjhDmPon2wgZPBKQIKR+6csGqSlUeGXAA4MEFnU6DesxZib+A==", + "dev": true, + "dependencies": { + "@dependents/detective-less": "^3.0.1", + "commander": "^9.5.0", + "detective-amd": "^4.1.0", + "detective-cjs": "^4.1.0", + "detective-es6": "^3.0.1", + "detective-postcss": "^6.1.1", + "detective-sass": "^4.1.1", + "detective-scss": "^3.0.1", + "detective-stylus": "^3.0.0", + "detective-typescript": "^9.1.1", + "module-definition": "^4.1.0", + "node-source-walk": "^5.0.1" + }, + "bin": { + "precinct": "bin/cli.js" + }, + "engines": { + "node": "^12.20.0 || ^14.14.0 || >=16.0.0" + } + }, + "node_modules/dependency-tree/node_modules/precinct/node_modules/commander": { + "version": "9.5.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-9.5.0.tgz", + "integrity": "sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ==", + "dev": true, + "engines": { + "node": "^12.20.0 || >=14" + } + }, + "node_modules/dependency-tree/node_modules/typescript": { + "version": "4.9.5", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.5.tgz", + "integrity": "sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==", + "dev": true, + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=4.2.0" + } + }, + "node_modules/destroy": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", + "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "node_modules/detect-file": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/detect-file/-/detect-file-1.0.0.tgz", + "integrity": "sha512-DtCOLG98P007x7wiiOmfI0fi3eIKyWiLTGJ2MDnVi/E04lWGbf+JzrRHMm0rgIIZJGtHpKpbVgLWHrv8xXpc3Q==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/detect-indent": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-6.1.0.tgz", + "integrity": "sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/detect-newline": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz", + "integrity": "sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/detective-amd": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/detective-amd/-/detective-amd-4.1.0.tgz", + "integrity": "sha512-XlQrGjGEnMFjKbep0/S/T7XICxf25LFMP6Ug+Iw/Ww/MHUBzfy8QETCzamO1JlAMYPmkChDh21/NS/csG0FwGg==", + "dev": true, + "dependencies": { + "ast-module-types": "^4.0.0", + "escodegen": "^2.0.0", + "get-amd-module-type": "^4.1.0", + "node-source-walk": "^5.0.1" + }, + "bin": { + "detective-amd": "bin/cli.js" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/detective-amd/node_modules/ast-module-types": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/ast-module-types/-/ast-module-types-4.0.0.tgz", + "integrity": "sha512-Kd0o8r6CDazJGCRzs8Ivpn0xj19oNKrULhoJFzhGjRsLpekF2zyZs9Ukz+JvZhWD6smszfepakTFhAaYpsI12g==", + "dev": true, + "engines": { + "node": ">=12.0" + } + }, + "node_modules/detective-amd/node_modules/node-source-walk": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/node-source-walk/-/node-source-walk-5.0.1.tgz", + "integrity": "sha512-fe5rFjPqkWQb4CLfsOf10fZAJvImfLpcVx+Nqbozaj6PBoAEjyEK1HZGCGvQNyre2HdL1HnZG6mxBf2UHSzr/w==", + "dev": true, + "dependencies": { + "@babel/parser": "^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/detective-cjs": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/detective-cjs/-/detective-cjs-4.1.0.tgz", + "integrity": "sha512-QxzMwt5MfPLwS7mG30zvnmOvHLx5vyVvjsAV6gQOyuMoBR5G1DhS1eJZ4P10AlH+HSnk93mTcrg3l39+24XCtg==", + "dev": true, + "dependencies": { + "ast-module-types": "^4.0.0", + "node-source-walk": "^5.0.1" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/detective-cjs/node_modules/ast-module-types": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/ast-module-types/-/ast-module-types-4.0.0.tgz", + "integrity": "sha512-Kd0o8r6CDazJGCRzs8Ivpn0xj19oNKrULhoJFzhGjRsLpekF2zyZs9Ukz+JvZhWD6smszfepakTFhAaYpsI12g==", + "dev": true, + "engines": { + "node": ">=12.0" + } + }, + "node_modules/detective-cjs/node_modules/node-source-walk": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/node-source-walk/-/node-source-walk-5.0.1.tgz", + "integrity": "sha512-fe5rFjPqkWQb4CLfsOf10fZAJvImfLpcVx+Nqbozaj6PBoAEjyEK1HZGCGvQNyre2HdL1HnZG6mxBf2UHSzr/w==", + "dev": true, + "dependencies": { + "@babel/parser": "^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/detective-es6": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/detective-es6/-/detective-es6-3.0.1.tgz", + "integrity": "sha512-evPeYIEdK1jK3Oji5p0hX4sPV/1vK+o4ihcWZkMQE6voypSW/cIBiynOLxQk5KOOQbdP8oOAsYqouMTYO5l1sw==", + "dev": true, + "dependencies": { + "node-source-walk": "^5.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/detective-es6/node_modules/node-source-walk": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/node-source-walk/-/node-source-walk-5.0.1.tgz", + "integrity": "sha512-fe5rFjPqkWQb4CLfsOf10fZAJvImfLpcVx+Nqbozaj6PBoAEjyEK1HZGCGvQNyre2HdL1HnZG6mxBf2UHSzr/w==", + "dev": true, + "dependencies": { + "@babel/parser": "^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/detective-less": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/detective-less/-/detective-less-1.0.2.tgz", + "integrity": "sha512-Rps1xDkEEBSq3kLdsdnHZL1x2S4NGDcbrjmd4q+PykK5aJwDdP5MBgrJw1Xo+kyUHuv3JEzPqxr+Dj9ryeDRTA==", + "dev": true, + "dependencies": { + "debug": "^4.0.0", + "gonzales-pe": "^4.2.3", + "node-source-walk": "^4.0.0" + }, + "engines": { + "node": ">= 6.0" + } + }, + "node_modules/detective-postcss": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/detective-postcss/-/detective-postcss-6.1.1.tgz", + "integrity": "sha512-mX62A6chiafyFW9AwGF6B/uVU+F3hGMZwXDqCHe+NjmU/M5jlDBazdXb1sMoDE+InTDsoPaX3bUUOH33Yxn5Sw==", + "dev": true, + "dependencies": { + "is-url": "^1.2.4", + "postcss": "^8.4.21", + "postcss-values-parser": "^6.0.2" + }, + "engines": { + "node": "^12.0.0 || ^14.0.0 || >=16.0.0" + } + }, + "node_modules/detective-sass": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/detective-sass/-/detective-sass-4.1.1.tgz", + "integrity": "sha512-KSUoOdrLXxSZFnHpGyXufWUP6VkfSdSNC/uezbJkKIwy2i3px5NQPY5hWOR0k9OFlrBakucymD3Ap4d87zobUQ==", + "dev": true, + "dependencies": { + "gonzales-pe": "^4.3.0", + "node-source-walk": "^5.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/detective-sass/node_modules/node-source-walk": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/node-source-walk/-/node-source-walk-5.0.1.tgz", + "integrity": "sha512-fe5rFjPqkWQb4CLfsOf10fZAJvImfLpcVx+Nqbozaj6PBoAEjyEK1HZGCGvQNyre2HdL1HnZG6mxBf2UHSzr/w==", + "dev": true, + "dependencies": { + "@babel/parser": "^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/detective-scss": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/detective-scss/-/detective-scss-3.0.1.tgz", + "integrity": "sha512-Bv/t1dEKHCPJ9+byha7wKg4zda8IFk7KZpEX+ZJs2k1HsWIE3+FBeVFLtD3y9GYGfi8l7Sim3pULPz4+yLwW9A==", + "dev": true, + "dependencies": { + "gonzales-pe": "^4.3.0", + "node-source-walk": "^5.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/detective-scss/node_modules/node-source-walk": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/node-source-walk/-/node-source-walk-5.0.1.tgz", + "integrity": "sha512-fe5rFjPqkWQb4CLfsOf10fZAJvImfLpcVx+Nqbozaj6PBoAEjyEK1HZGCGvQNyre2HdL1HnZG6mxBf2UHSzr/w==", + "dev": true, + "dependencies": { + "@babel/parser": "^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/detective-stylus": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/detective-stylus/-/detective-stylus-2.0.1.tgz", + "integrity": "sha512-/Tvs1pWLg8eYwwV6kZQY5IslGaYqc/GACxjcaGudiNtN5nKCH6o2WnJK3j0gA3huCnoQcbv8X7oz/c1lnvE3zQ==", + "dev": true, + "engines": { + "node": ">=6.0" + } + }, + "node_modules/detective-typescript": { + "version": "9.1.1", + "resolved": "https://registry.npmjs.org/detective-typescript/-/detective-typescript-9.1.1.tgz", + "integrity": "sha512-Uc1yVutTF0RRm1YJ3g//i1Cn2vx1kwHj15cnzQP6ff5koNzQ0idc1zAC73ryaWEulA0ElRXFTq6wOqe8vUQ3MA==", + "dev": true, + "dependencies": { + "@typescript-eslint/typescript-estree": "^5.55.0", + "ast-module-types": "^4.0.0", + "node-source-walk": "^5.0.1", + "typescript": "^4.9.5" + }, + "engines": { + "node": "^12.20.0 || ^14.14.0 || >=16.0.0" + } + }, + "node_modules/detective-typescript/node_modules/ast-module-types": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/ast-module-types/-/ast-module-types-4.0.0.tgz", + "integrity": "sha512-Kd0o8r6CDazJGCRzs8Ivpn0xj19oNKrULhoJFzhGjRsLpekF2zyZs9Ukz+JvZhWD6smszfepakTFhAaYpsI12g==", + "dev": true, + "engines": { + "node": ">=12.0" + } + }, + "node_modules/detective-typescript/node_modules/node-source-walk": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/node-source-walk/-/node-source-walk-5.0.1.tgz", + "integrity": "sha512-fe5rFjPqkWQb4CLfsOf10fZAJvImfLpcVx+Nqbozaj6PBoAEjyEK1HZGCGvQNyre2HdL1HnZG6mxBf2UHSzr/w==", + "dev": true, + "dependencies": { + "@babel/parser": "^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/detective-typescript/node_modules/typescript": { + "version": "4.9.5", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.5.tgz", + "integrity": "sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==", + "dev": true, + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=4.2.0" + } + }, + "node_modules/dezalgo": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/dezalgo/-/dezalgo-1.0.4.tgz", + "integrity": "sha512-rXSP0bf+5n0Qonsb+SVVfNfIsimO4HEtmnIpPHY8Q1UCzKlQrDMfdobr8nJOOsRgWCyMRqeSBQzmWUMq7zvVig==", + "dev": true, + "dependencies": { + "asap": "^2.0.0", + "wrappy": "1" + } + }, + "node_modules/diff": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", + "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", + "dev": true, + "engines": { + "node": ">=0.3.1" + } + }, + "node_modules/diff-sequences": { + "version": "29.4.3", + "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.4.3.tgz", + "integrity": "sha512-ofrBgwpPhCD85kMKtE9RYFFq6OC1A89oW2vvgWZNCwxrUpRUILopY7lsYyMDSjc8g6U6aiO0Qubg6r4Wgt5ZnA==", + "dev": true, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/dir-glob": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", + "dev": true, + "dependencies": { + "path-type": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/doctrine": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "dev": true, + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/dotenv": { + "version": "16.0.3", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.0.3.tgz", + "integrity": "sha512-7GO6HghkA5fYG9TYnNxi14/7K9f5occMlp3zXAuSxn7CKCxt9xbNWG7yF8hTCSUchlfWSe3uLmlPfigevRItzQ==", + "engines": { + "node": ">=12" + } + }, + "node_modules/dotgitignore": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/dotgitignore/-/dotgitignore-2.1.0.tgz", + "integrity": "sha512-sCm11ak2oY6DglEPpCB8TixLjWAxd3kJTs6UIcSasNYxXdFPV+YKlye92c8H4kKFqV5qYMIh7d+cYecEg0dIkA==", + "dev": true, + "dependencies": { + "find-up": "^3.0.0", + "minimatch": "^3.0.4" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/dotgitignore/node_modules/find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "dev": true, + "dependencies": { + "locate-path": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/dotgitignore/node_modules/locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "dev": true, + "dependencies": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/dotgitignore/node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/dotgitignore/node_modules/p-locate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "dev": true, + "dependencies": { + "p-limit": "^2.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/dotgitignore/node_modules/path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/dreamopt": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/dreamopt/-/dreamopt-0.8.0.tgz", + "integrity": "sha512-vyJTp8+mC+G+5dfgsY+r3ckxlz+QMX40VjPQsZc5gxVAxLmi64TBoVkP54A/pRAXMXsbu2GMMBrZPxNv23waMg==", + "dependencies": { + "wordwrap": ">=0.0.2" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/duplexer3": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.5.tgz", + "integrity": "sha512-1A8za6ws41LQgv9HrE/66jyC5yuSjQ3L/KOpFtoBilsAK2iA2wuS5rTt1OCzIvtS2V7nVmedsUU+DGRcjBmOYA==", + "dev": true + }, + "node_modules/eastasianwidth": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", + "dev": true + }, + "node_modules/ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==" + }, + "node_modules/electron-to-chromium": { + "version": "1.4.450", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.450.tgz", + "integrity": "sha512-BLG5HxSELlrMx7dJ2s+8SFlsCtJp37Zpk2VAxyC6CZtbc+9AJeZHfYHbrlSgdXp6saQ8StMqOTEDaBKgA7u1sw==", + "dev": true + }, + "node_modules/emittery": { + "version": "0.13.1", + "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.13.1.tgz", + "integrity": "sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sindresorhus/emittery?sponsor=1" + } + }, + "node_modules/emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", + "dev": true + }, + "node_modules/empty-dir": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/empty-dir/-/empty-dir-1.0.0.tgz", + "integrity": "sha512-97qcDM6mUA1jAeX6cktw7akc5awIGA+VIkA5MygKOKA+c2Vseo/xwKN0JNJTUhZUtPwZboKVD2p1xu+sV/F4xA==", + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/enabled": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/enabled/-/enabled-2.0.0.tgz", + "integrity": "sha512-AKrN98kuwOzMIdAizXGI86UFBoo26CL21UM763y1h/GMSJ4/OHU9k2YlsmBpyScFo/wbLzWQJBMCW4+IO3/+OQ==" + }, + "node_modules/encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/end-of-stream": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", + "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", + "dependencies": { + "once": "^1.4.0" + } + }, + "node_modules/enhanced-resolve": { + "version": "5.12.0", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.12.0.tgz", + "integrity": "sha512-QHTXI/sZQmko1cbDoNAa3mJ5qhWUUNAq3vR0/YiD379fWQrcfuoX1+HW2S0MTt7XmoPLapdaDKUtelUSPic7hQ==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.2.4", + "tapable": "^2.2.0" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/entities": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-4.3.0.tgz", + "integrity": "sha512-/iP1rZrSEJ0DTlPiX+jbzlA3eVkY/e8L8SozroF395fIqE3TYF/Nz7YOMAawta+vLmyJ/hkGNNPcSbMADCCXbg==", + "dev": true, + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "dependencies": { + "is-arrayish": "^0.2.1" + } + }, + "node_modules/error-stack-parser": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/error-stack-parser/-/error-stack-parser-2.1.4.tgz", + "integrity": "sha512-Sk5V6wVazPhq5MhpO+AUxJn5x7XSXGl1R93Vn7i+zS15KDVxQijejNCrz8340/2bgLBjR9GtEG8ZVKONDjcqGQ==", + "dependencies": { + "stackframe": "^1.3.4" + } + }, + "node_modules/es-abstract": { + "version": "1.21.0", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.21.0.tgz", + "integrity": "sha512-GUGtW7eXQay0c+PRq0sGIKSdaBorfVqsCMhGHo4elP7YVqZu9nCZS4UkK4gv71gOWNMra/PaSKD3ao1oWExO0g==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "es-set-tostringtag": "^2.0.0", + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "function.prototype.name": "^1.1.5", + "get-intrinsic": "^1.1.3", + "get-symbol-description": "^1.0.0", + "globalthis": "^1.0.3", + "gopd": "^1.0.1", + "has": "^1.0.3", + "has-property-descriptors": "^1.0.0", + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3", + "internal-slot": "^1.0.4", + "is-array-buffer": "^3.0.0", + "is-callable": "^1.2.7", + "is-negative-zero": "^2.0.2", + "is-regex": "^1.1.4", + "is-shared-array-buffer": "^1.0.2", + "is-string": "^1.0.7", + "is-typed-array": "^1.1.10", + "is-weakref": "^1.0.2", + "object-inspect": "^1.12.2", + "object-keys": "^1.1.1", + "object.assign": "^4.1.4", + "regexp.prototype.flags": "^1.4.3", + "safe-regex-test": "^1.0.0", + "string.prototype.trimend": "^1.0.6", + "string.prototype.trimstart": "^1.0.6", + "typed-array-length": "^1.0.4", + "unbox-primitive": "^1.0.2", + "which-typed-array": "^1.1.9" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/es-set-tostringtag": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.1.tgz", + "integrity": "sha512-g3OMbtlwY3QewlqAiMLI47KywjWZoEytKr8pf6iTC8uJq5bIAH52Z9pnQ8pVL6whrCto53JZDuUIsifGeLorTg==", + "dev": true, + "dependencies": { + "get-intrinsic": "^1.1.3", + "has": "^1.0.3", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-shim-unscopables": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.0.tgz", + "integrity": "sha512-Jm6GPcCdC30eMLbZ2x8z2WuRwAws3zTBBKuusffYVUrNj/GVSUAZ+xKMaUpfNDR5IbyNA5LJbaecoUVbmUcB1w==", + "dev": true, + "dependencies": { + "has": "^1.0.3" + } + }, + "node_modules/es-to-primitive": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", + "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", + "dev": true, + "dependencies": { + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/es6-promise": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-3.3.1.tgz", + "integrity": "sha512-SOp9Phqvqn7jtEUxPWdWfWoLmyt2VaJ6MpvP9Comy1MceMXqE6bxvaTu4iaxpYYPzhny28Lc+M87/c2cPK6lDg==" + }, + "node_modules/escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==" + }, + "node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/escodegen": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.0.0.tgz", + "integrity": "sha512-mmHKys/C8BFUGI+MAWNcSYoORYLMdPzjrknd2Vc+bUsjN5bXcr8EhrNB+UTqfL1y3I9c4fw2ihgtMPQLBRiQxw==", + "dev": true, + "dependencies": { + "esprima": "^4.0.1", + "estraverse": "^5.2.0", + "esutils": "^2.0.2", + "optionator": "^0.8.1" + }, + "bin": { + "escodegen": "bin/escodegen.js", + "esgenerate": "bin/esgenerate.js" + }, + "engines": { + "node": ">=6.0" + }, + "optionalDependencies": { + "source-map": "~0.6.1" + } + }, + "node_modules/escodegen/node_modules/levn": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", + "integrity": "sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA==", + "dev": true, + "dependencies": { + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/escodegen/node_modules/optionator": { + "version": "0.8.3", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", + "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", + "dev": true, + "dependencies": { + "deep-is": "~0.1.3", + "fast-levenshtein": "~2.0.6", + "levn": "~0.3.0", + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2", + "word-wrap": "~1.2.3" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/escodegen/node_modules/prelude-ls": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", + "integrity": "sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w==", + "dev": true, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/escodegen/node_modules/type-check": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", + "integrity": "sha512-ZCmOJdvOWDBYJlzAoFkC+Q0+bUyEOS1ltgp1MGU03fqHG+dbi9tBFU2Rd9QKiDZFAYrhPh2JUf7rZRIuHRKtOg==", + "dev": true, + "dependencies": { + "prelude-ls": "~1.1.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/eslint": { + "version": "8.41.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.41.0.tgz", + "integrity": "sha512-WQDQpzGBOP5IrXPo4Hc0814r4/v2rrIsB0rhT7jtunIalgg6gYXWhRMOejVO8yH21T/FGaxjmFjBMNqcIlmH1Q==", + "dev": true, + "dependencies": { + "@eslint-community/eslint-utils": "^4.2.0", + "@eslint-community/regexpp": "^4.4.0", + "@eslint/eslintrc": "^2.0.3", + "@eslint/js": "8.41.0", + "@humanwhocodes/config-array": "^0.11.8", + "@humanwhocodes/module-importer": "^1.0.1", + "@nodelib/fs.walk": "^1.2.8", + "ajv": "^6.10.0", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", + "debug": "^4.3.2", + "doctrine": "^3.0.0", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^7.2.0", + "eslint-visitor-keys": "^3.4.1", + "espree": "^9.5.2", + "esquery": "^1.4.2", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^6.0.1", + "find-up": "^5.0.0", + "glob-parent": "^6.0.2", + "globals": "^13.19.0", + "graphemer": "^1.4.0", + "ignore": "^5.2.0", + "import-fresh": "^3.0.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "is-path-inside": "^3.0.3", + "js-yaml": "^4.1.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.4.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.1.2", + "natural-compare": "^1.4.0", + "optionator": "^0.9.1", + "strip-ansi": "^6.0.1", + "strip-json-comments": "^3.1.0", + "text-table": "^0.2.0" + }, + "bin": { + "eslint": "bin/eslint.js" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-config-airbnb-base": { + "version": "15.0.0", + "resolved": "https://registry.npmjs.org/eslint-config-airbnb-base/-/eslint-config-airbnb-base-15.0.0.tgz", + "integrity": "sha512-xaX3z4ZZIcFLvh2oUNvcX5oEofXda7giYmuplVxoOg5A7EXJMrUyqRgR+mhDhPK8LZ4PttFOBvCYDbX3sUoUig==", + "dev": true, + "dependencies": { + "confusing-browser-globals": "^1.0.10", + "object.assign": "^4.1.2", + "object.entries": "^1.1.5", + "semver": "^6.3.0" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + }, + "peerDependencies": { + "eslint": "^7.32.0 || ^8.2.0", + "eslint-plugin-import": "^2.25.2" + } + }, + "node_modules/eslint-config-airbnb-base/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/eslint-config-airbnb-typescript": { + "version": "17.0.0", + "resolved": "https://registry.npmjs.org/eslint-config-airbnb-typescript/-/eslint-config-airbnb-typescript-17.0.0.tgz", + "integrity": "sha512-elNiuzD0kPAPTXjFWg+lE24nMdHMtuxgYoD30OyMD6yrW1AhFZPAg27VX7d3tzOErw+dgJTNWfRSDqEcXb4V0g==", + "dev": true, + "dependencies": { + "eslint-config-airbnb-base": "^15.0.0" + }, + "peerDependencies": { + "@typescript-eslint/eslint-plugin": "^5.13.0", + "@typescript-eslint/parser": "^5.0.0", + "eslint": "^7.32.0 || ^8.2.0", + "eslint-plugin-import": "^2.25.3" + } + }, + "node_modules/eslint-config-prettier": { + "version": "8.8.0", + "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.8.0.tgz", + "integrity": "sha512-wLbQiFre3tdGgpDv67NQKnJuTlcUVYHas3k+DZCc2U2BadthoEY4B7hLPvAxaqdyOGCzuLfii2fqGph10va7oA==", + "dev": true, + "bin": { + "eslint-config-prettier": "bin/cli.js" + }, + "peerDependencies": { + "eslint": ">=7.0.0" + } + }, + "node_modules/eslint-import-resolver-node": { + "version": "0.3.7", + "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.7.tgz", + "integrity": "sha512-gozW2blMLJCeFpBwugLTGyvVjNoeo1knonXAcatC6bjPBZitotxdWf7Gimr25N4c0AAOo4eOUfaG82IJPDpqCA==", + "dev": true, + "dependencies": { + "debug": "^3.2.7", + "is-core-module": "^2.11.0", + "resolve": "^1.22.1" + } + }, + "node_modules/eslint-import-resolver-node/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/eslint-module-utils": { + "version": "2.7.4", + "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.7.4.tgz", + "integrity": "sha512-j4GT+rqzCoRKHwURX7pddtIPGySnX9Si/cgMI5ztrcqOPtk5dDEeZ34CQVPphnqkJytlc97Vuk05Um2mJ3gEQA==", + "dev": true, + "dependencies": { + "debug": "^3.2.7" + }, + "engines": { + "node": ">=4" + }, + "peerDependenciesMeta": { + "eslint": { + "optional": true + } + } + }, + "node_modules/eslint-module-utils/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/eslint-plugin-import": { + "version": "2.27.5", + "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.27.5.tgz", + "integrity": "sha512-LmEt3GVofgiGuiE+ORpnvP+kAm3h6MLZJ4Q5HCyHADofsb4VzXFsRiWj3c0OFiV+3DWFh0qg3v9gcPlfc3zRow==", + "dev": true, + "dependencies": { + "array-includes": "^3.1.6", + "array.prototype.flat": "^1.3.1", + "array.prototype.flatmap": "^1.3.1", + "debug": "^3.2.7", + "doctrine": "^2.1.0", + "eslint-import-resolver-node": "^0.3.7", + "eslint-module-utils": "^2.7.4", + "has": "^1.0.3", + "is-core-module": "^2.11.0", + "is-glob": "^4.0.3", + "minimatch": "^3.1.2", + "object.values": "^1.1.6", + "resolve": "^1.22.1", + "semver": "^6.3.0", + "tsconfig-paths": "^3.14.1" + }, + "engines": { + "node": ">=4" + }, + "peerDependencies": { + "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8" + } + }, + "node_modules/eslint-plugin-import/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/eslint-plugin-import/node_modules/doctrine": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", + "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", + "dev": true, + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/eslint-plugin-import/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/eslint-plugin-json": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-json/-/eslint-plugin-json-3.1.0.tgz", + "integrity": "sha512-MrlG2ynFEHe7wDGwbUuFPsaT2b1uhuEFhJ+W1f1u+1C2EkXmTYJp4B1aAdQQ8M+CC3t//N/oRKiIVw14L2HR1g==", + "dev": true, + "dependencies": { + "lodash": "^4.17.21", + "vscode-json-languageservice": "^4.1.6" + }, + "engines": { + "node": ">=12.0" + } + }, + "node_modules/eslint-plugin-sonarjs": { + "version": "0.19.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-sonarjs/-/eslint-plugin-sonarjs-0.19.0.tgz", + "integrity": "sha512-6+s5oNk5TFtVlbRxqZN7FIGmjdPCYQKaTzFPmqieCmsU1kBYDzndTeQav0xtQNwZJWu5awWfTGe8Srq9xFOGnw==", + "dev": true, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "eslint": "^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/eslint-plugin-unicorn": { + "version": "46.0.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-unicorn/-/eslint-plugin-unicorn-46.0.1.tgz", + "integrity": "sha512-setGhMTiLAddg1asdwjZ3hekIN5zLznNa5zll7pBPwFOka6greCKDQydfqy4fqyUhndi74wpDzClSQMEcmOaew==", + "dev": true, + "dependencies": { + "@babel/helper-validator-identifier": "^7.19.1", + "@eslint-community/eslint-utils": "^4.1.2", + "ci-info": "^3.6.1", + "clean-regexp": "^1.0.0", + "esquery": "^1.4.0", + "indent-string": "^4.0.0", + "is-builtin-module": "^3.2.0", + "jsesc": "^3.0.2", + "lodash": "^4.17.21", + "pluralize": "^8.0.0", + "read-pkg-up": "^7.0.1", + "regexp-tree": "^0.1.24", + "regjsparser": "^0.9.1", + "safe-regex": "^2.1.1", + "semver": "^7.3.8", + "strip-indent": "^3.0.0" + }, + "engines": { + "node": ">=14.18" + }, + "funding": { + "url": "https://github.com/sindresorhus/eslint-plugin-unicorn?sponsor=1" + }, + "peerDependencies": { + "eslint": ">=8.28.0" + } + }, + "node_modules/eslint-plugin-unicorn/node_modules/jsesc": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.0.2.tgz", + "integrity": "sha512-xKqzzWXDttJuOcawBt4KnKHHIf5oQ/Cxax+0PWFG+DFDgHNAdi+TXECADI+RYiFUMmx8792xsMbbgXj4CwnP4g==", + "dev": true, + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/eslint-scope": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.0.tgz", + "integrity": "sha512-DYj5deGlHBfMt15J7rdtyKNq/Nqlv5KfU4iodrQ019XESsRnwXH9KAE0y3cwtUHDo2ob7CypAnCqefh6vioWRw==", + "dev": true, + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-visitor-keys": { + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.1.tgz", + "integrity": "sha512-pZnmmLwYzf+kWaM/Qgrvpen51upAktaaiI01nsJD/Yr3lMOdNtq0cxkrrg16w64VtisN6okbs7Q8AfGqj4c9fA==", + "dev": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint/node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/eslint/node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint/node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true + }, + "node_modules/espree": { + "version": "9.5.2", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.5.2.tgz", + "integrity": "sha512-7OASN1Wma5fum5SrNhFMAMJxOUAbhyfQ8dQ//PJaJbNw0URTPWqIghHWt1MmAANKhHZIYOHruW4Kw4ruUWOdGw==", + "dev": true, + "dependencies": { + "acorn": "^8.8.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^3.4.1" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "dev": true, + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/esquery": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz", + "integrity": "sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==", + "dev": true, + "dependencies": { + "estraverse": "^5.1.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, + "dependencies": { + "estraverse": "^5.2.0" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/eventemitter3": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", + "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==", + "dev": true + }, + "node_modules/events": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", + "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", + "engines": { + "node": ">=0.8.x" + } + }, + "node_modules/execa": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", + "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", + "dev": true, + "dependencies": { + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.0", + "human-signals": "^2.1.0", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.1", + "onetime": "^5.1.2", + "signal-exit": "^3.0.3", + "strip-final-newline": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" + } + }, + "node_modules/exit": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", + "integrity": "sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==", + "dev": true, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/expand-tilde": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/expand-tilde/-/expand-tilde-2.0.2.tgz", + "integrity": "sha512-A5EmesHW6rfnZ9ysHQjPdJRni0SRar0tjtG5MNtm9n5TUvsYU8oozprtRD4AqHxcZWWlVuAmQo2nWKfN9oyjTw==", + "dev": true, + "dependencies": { + "homedir-polyfill": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/expect": { + "version": "29.6.0", + "resolved": "https://registry.npmjs.org/expect/-/expect-29.6.0.tgz", + "integrity": "sha512-AV+HaBtnDJ2YEUhPPo25HyUHBLaetM+y/Dq6pEC8VPQyt1dK+k8MfGkMy46djy2bddcqESc1kl4/K1uLWSfk9g==", + "dev": true, + "dependencies": { + "@jest/expect-utils": "^29.6.0", + "@types/node": "*", + "jest-get-type": "^29.4.3", + "jest-matcher-utils": "^29.6.0", + "jest-message-util": "^29.6.0", + "jest-util": "^29.6.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/expose-gc": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/expose-gc/-/expose-gc-1.0.0.tgz", + "integrity": "sha512-ecOHrdm+zyOCGIwX18/1RHkUWgxDqGGRiGhaNC+42jReTtudbm2ID/DMa/wpaHwqy5YQHPZvsDqRM2F2iZ0uVA==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/external-editor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", + "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==", + "dev": true, + "dependencies": { + "chardet": "^0.7.0", + "iconv-lite": "^0.4.24", + "tmp": "^0.0.33" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" + }, + "node_modules/fast-glob": { + "version": "3.2.12", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.12.tgz", + "integrity": "sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==", + "dev": true, + "dependencies": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" + }, + "engines": { + "node": ">=8.6.0" + } + }, + "node_modules/fast-glob/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true + }, + "node_modules/fast-json-stringify": { + "version": "2.7.13", + "resolved": "https://registry.npmjs.org/fast-json-stringify/-/fast-json-stringify-2.7.13.tgz", + "integrity": "sha512-ar+hQ4+OIurUGjSJD1anvYSDcUflywhKjfxnsW4TBTD7+u0tJufv6DKRWoQk3vI6YBOWMoz0TQtfbe7dxbQmvA==", + "dev": true, + "dependencies": { + "ajv": "^6.11.0", + "deepmerge": "^4.2.2", + "rfdc": "^1.2.0", + "string-similarity": "^4.0.1" + }, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/fast-json-stringify/node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/fast-json-stringify/node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true + }, + "node_modules/fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", + "dev": true + }, + "node_modules/fast-printf": { + "version": "1.6.9", + "resolved": "https://registry.npmjs.org/fast-printf/-/fast-printf-1.6.9.tgz", + "integrity": "sha512-FChq8hbz65WMj4rstcQsFB0O7Cy++nmbNfLYnD9cYv2cRn8EG6k/MGn9kO/tjO66t09DLDugj3yL+V2o6Qftrg==", + "dev": true, + "dependencies": { + "boolean": "^3.1.4" + }, + "engines": { + "node": ">=10.0" + } + }, + "node_modules/fast-safe-stringify": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-2.1.1.tgz", + "integrity": "sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==", + "dev": true + }, + "node_modules/fast-xml-parser": { + "version": "4.2.5", + "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-4.2.5.tgz", + "integrity": "sha512-B9/wizE4WngqQftFPmdaMYlXoJlJOYxGQOanC77fq9k8+Z0v5dDSVh+3glErdIROP//s/jgb7ZuxKfB8nVyo0g==", + "funding": [ + { + "type": "paypal", + "url": "https://paypal.me/naturalintelligence" + }, + { + "type": "github", + "url": "https://github.com/sponsors/NaturalIntelligence" + } + ], + "dependencies": { + "strnum": "^1.0.5" + }, + "bin": { + "fxparser": "src/cli/cli.js" + } + }, + "node_modules/fastq": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz", + "integrity": "sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==", + "dev": true, + "dependencies": { + "reusify": "^1.0.4" + } + }, + "node_modules/fb-watchman": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.2.tgz", + "integrity": "sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==", + "dev": true, + "dependencies": { + "bser": "2.1.1" + } + }, + "node_modules/fecha": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/fecha/-/fecha-4.2.3.tgz", + "integrity": "sha512-OP2IUU6HeYKJi3i0z4A19kHMQoLVs4Hc+DPqqxI2h/DPZHTm/vjsfC6P0b4jCMy14XizLBqvndQ+UilD7707Jw==" + }, + "node_modules/figures": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", + "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", + "dev": true, + "dependencies": { + "escape-string-regexp": "^1.0.5" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/file-entry-cache": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", + "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", + "dev": true, + "dependencies": { + "flat-cache": "^3.0.4" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/filing-cabinet": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/filing-cabinet/-/filing-cabinet-3.3.1.tgz", + "integrity": "sha512-renEK4Hh6DUl9Vl22Y3cxBq1yh8oNvbAdXnhih0wVpmea+uyKjC9K4QeRjUaybIiIewdzfum+Fg15ZqJ/GyCaA==", + "dev": true, + "dependencies": { + "app-module-path": "^2.2.0", + "commander": "^2.20.3", + "debug": "^4.3.3", + "enhanced-resolve": "^5.8.3", + "is-relative-path": "^1.0.2", + "module-definition": "^3.3.1", + "module-lookup-amd": "^7.0.1", + "resolve": "^1.21.0", + "resolve-dependency-path": "^2.0.0", + "sass-lookup": "^3.0.0", + "stylus-lookup": "^3.0.1", + "tsconfig-paths": "^3.10.1", + "typescript": "^3.9.7" + }, + "bin": { + "filing-cabinet": "bin/cli.js" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/filing-cabinet/node_modules/commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "dev": true + }, + "node_modules/filing-cabinet/node_modules/typescript": { + "version": "3.9.10", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.9.10.tgz", + "integrity": "sha512-w6fIxVE/H1PkLKcCPsFqKE7Kv7QUwhU8qQY2MueZXWx5cPZdwFupLgKK3vntcK98BtNHZtAF4LA/yl2a7k8R6Q==", + "dev": true, + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=4.2.0" + } + }, + "node_modules/fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dev": true, + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/find-node-modules": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/find-node-modules/-/find-node-modules-2.1.3.tgz", + "integrity": "sha512-UC2I2+nx1ZuOBclWVNdcnbDR5dlrOdVb7xNjmT/lHE+LsgztWks3dG7boJ37yTS/venXw84B/mAW9uHVoC5QRg==", + "dev": true, + "dependencies": { + "findup-sync": "^4.0.0", + "merge": "^2.1.1" + } + }, + "node_modules/find-root": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/find-root/-/find-root-1.1.0.tgz", + "integrity": "sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng==", + "dev": true + }, + "node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/findup-sync": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-4.0.0.tgz", + "integrity": "sha512-6jvvn/12IC4quLBL1KNokxC7wWTvYncaVUYSoxWw7YykPLuRrnv4qdHcSOywOI5RpkOVGeQRtWM8/q+G6W6qfQ==", + "dev": true, + "dependencies": { + "detect-file": "^1.0.0", + "is-glob": "^4.0.0", + "micromatch": "^4.0.2", + "resolve-dir": "^1.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/flat": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", + "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", + "bin": { + "flat": "cli.js" + } + }, + "node_modules/flat-cache": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", + "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", + "dev": true, + "dependencies": { + "flatted": "^3.1.0", + "rimraf": "^3.0.2" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/flatted": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.7.tgz", + "integrity": "sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==", + "dev": true + }, + "node_modules/flatten": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/flatten/-/flatten-1.0.3.tgz", + "integrity": "sha512-dVsPA/UwQ8+2uoFe5GHtiBMu48dWLTdsuEd7CKGlZlD78r1TTWBvDuFaFGKCo/ZfEr95Uk56vZoX86OsHkUeIg==", + "deprecated": "flatten is deprecated in favor of utility frameworks such as lodash.", + "dev": true + }, + "node_modules/fn.name": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/fn.name/-/fn.name-1.1.0.tgz", + "integrity": "sha512-GRnmB5gPyJpAhTQdSZTSp9uaPSvl09KoYcMQtsB9rQoOmzs9dH6ffeccH+Z+cv6P68Hu5bC6JjRh4Ah/mHSNRw==" + }, + "node_modules/follow-redirects": { + "version": "1.15.2", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.2.tgz", + "integrity": "sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==", + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/RubenVerborgh" + } + ], + "engines": { + "node": ">=4.0" + }, + "peerDependenciesMeta": { + "debug": { + "optional": true + } + } + }, + "node_modules/for-each": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", + "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", + "dev": true, + "dependencies": { + "is-callable": "^1.1.3" + } + }, + "node_modules/foreground-child": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.1.1.tgz", + "integrity": "sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==", + "dev": true, + "dependencies": { + "cross-spawn": "^7.0.0", + "signal-exit": "^4.0.1" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/foreground-child/node_modules/signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "dev": true, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/form-data": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", + "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/formidable": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/formidable/-/formidable-2.1.2.tgz", + "integrity": "sha512-CM3GuJ57US06mlpQ47YcunuUZ9jpm8Vx+P2CGt2j7HpgkKZO/DJYQ0Bobim8G6PFQmK5lOqOOdUXboU+h73A4g==", + "dev": true, + "dependencies": { + "dezalgo": "^1.0.4", + "hexoid": "^1.0.0", + "once": "^1.4.0", + "qs": "^6.11.0" + }, + "funding": { + "url": "https://ko-fi.com/tunnckoCore/commissions" + } + }, + "node_modules/fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/from2": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/from2/-/from2-2.3.0.tgz", + "integrity": "sha512-OMcX/4IC/uqEPVgGeyfN22LJk6AZrMkRZHxcHBMBvHScDGgwTm2GT2Wkgtocyd3JfZffjj2kYUDXXII0Fk9W0g==", + "dev": true, + "dependencies": { + "inherits": "^2.0.1", + "readable-stream": "^2.0.0" + } + }, + "node_modules/fs-extra": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "dev": true, + "dependencies": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==" + }, + "node_modules/fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "dev": true, + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" + }, + "node_modules/function.prototype.name": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.5.tgz", + "integrity": "sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.19.0", + "functions-have-names": "^1.2.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/functions-have-names": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", + "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/get-amd-module-type": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/get-amd-module-type/-/get-amd-module-type-4.1.0.tgz", + "integrity": "sha512-0e/eK6vTGCnSfQ6eYs3wtH05KotJYIP7ZIZEueP/KlA+0dIAEs8bYFvOd/U56w1vfjhJqBagUxVMyy9Tr/cViQ==", + "dev": true, + "dependencies": { + "ast-module-types": "^4.0.0", + "node-source-walk": "^5.0.1" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/get-amd-module-type/node_modules/ast-module-types": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/ast-module-types/-/ast-module-types-4.0.0.tgz", + "integrity": "sha512-Kd0o8r6CDazJGCRzs8Ivpn0xj19oNKrULhoJFzhGjRsLpekF2zyZs9Ukz+JvZhWD6smszfepakTFhAaYpsI12g==", + "dev": true, + "engines": { + "node": ">=12.0" + } + }, + "node_modules/get-amd-module-type/node_modules/node-source-walk": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/node-source-walk/-/node-source-walk-5.0.1.tgz", + "integrity": "sha512-fe5rFjPqkWQb4CLfsOf10fZAJvImfLpcVx+Nqbozaj6PBoAEjyEK1HZGCGvQNyre2HdL1HnZG6mxBf2UHSzr/w==", + "dev": true, + "dependencies": { + "@babel/parser": "^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "dev": true, + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "node_modules/get-intrinsic": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.3.tgz", + "integrity": "sha512-QJVz1Tj7MS099PevUG5jvnt9tSkXN8K14dxQlikJuPt4uD9hHAHjLyLBiLR5zELelBdD9QNRAXZzsJx0WaDL9A==", + "dependencies": { + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-own-enumerable-property-symbols": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.2.tgz", + "integrity": "sha512-I0UBV/XOz1XkIJHEUDMZAbzCThU/H8DxmSfmdGcKPnVhu2VfFqr34jr9777IyaTYvxjedWhqVIilEDsCdP5G6g==", + "dev": true + }, + "node_modules/get-package-type": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", + "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==", + "dev": true, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/get-pkg-repo": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/get-pkg-repo/-/get-pkg-repo-4.2.1.tgz", + "integrity": "sha512-2+QbHjFRfGB74v/pYWjd5OhU3TDIC2Gv/YKUTk/tCvAz0pkn/Mz6P3uByuBimLOcPvN2jYdScl3xGFSrx0jEcA==", + "dev": true, + "dependencies": { + "@hutson/parse-repository-url": "^3.0.0", + "hosted-git-info": "^4.0.0", + "through2": "^2.0.0", + "yargs": "^16.2.0" + }, + "bin": { + "get-pkg-repo": "src/cli.js" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/get-pkg-repo/node_modules/cliui": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", + "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", + "dev": true, + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" + } + }, + "node_modules/get-pkg-repo/node_modules/through2": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", + "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", + "dev": true, + "dependencies": { + "readable-stream": "~2.3.6", + "xtend": "~4.0.1" + } + }, + "node_modules/get-pkg-repo/node_modules/yargs": { + "version": "16.2.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", + "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", + "dev": true, + "dependencies": { + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.0", + "y18n": "^5.0.5", + "yargs-parser": "^20.2.2" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/get-stdin": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-4.0.1.tgz", + "integrity": "sha512-F5aQMywwJ2n85s4hJPTT9RPxGmubonuB10MNYo17/xph174n2MIR33HRguhzVag10O/npM7SPk73LMZNP+FaWw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/get-stream": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/get-symbol-description": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz", + "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-value": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/get-value/-/get-value-3.0.1.tgz", + "integrity": "sha512-mKZj9JLQrwMBtj5wxi6MH8Z5eSKaERpAwjg43dPtlGI1ZVEgH/qC7T8/6R2OBSUA+zzHBZgICsVJaEIV2tKTDA==", + "dependencies": { + "isobject": "^3.0.1" + }, + "engines": { + "node": ">=6.0" + } + }, + "node_modules/gh-got": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/gh-got/-/gh-got-7.1.0.tgz", + "integrity": "sha512-KeWkkhresa7sbpzQLYzITMgez5rMigUsijhmSAHcLDORIMUbdlkdoZyaN1wQvIjmUZnyb/wkAPaXb4MQKX0mdQ==", + "dev": true, + "dependencies": { + "got": "^8.0.0", + "is-plain-obj": "^1.1.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/git-raw-commits": { + "version": "2.0.11", + "resolved": "https://registry.npmjs.org/git-raw-commits/-/git-raw-commits-2.0.11.tgz", + "integrity": "sha512-VnctFhw+xfj8Va1xtfEqCUD2XDrbAPSJx+hSrE5K7fGdjZruW7XV+QOrN7LF/RJyvspRiD2I0asWsxFp0ya26A==", + "dev": true, + "dependencies": { + "dargs": "^7.0.0", + "lodash": "^4.17.15", + "meow": "^8.0.0", + "split2": "^3.0.0", + "through2": "^4.0.0" + }, + "bin": { + "git-raw-commits": "cli.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/git-remote-origin-url": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/git-remote-origin-url/-/git-remote-origin-url-2.0.0.tgz", + "integrity": "sha512-eU+GGrZgccNJcsDH5LkXR3PB9M958hxc7sbA8DFJjrv9j4L2P/eZfKhM+QD6wyzpiv+b1BpK0XrYCxkovtjSLw==", + "dev": true, + "dependencies": { + "gitconfiglocal": "^1.0.0", + "pify": "^2.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/git-remote-origin-url/node_modules/pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/git-semver-tags": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/git-semver-tags/-/git-semver-tags-4.1.1.tgz", + "integrity": "sha512-OWyMt5zBe7xFs8vglMmhM9lRQzCWL3WjHtxNNfJTMngGym7pC1kh8sP6jevfydJ6LP3ZvGxfb6ABYgPUM0mtsA==", + "dev": true, + "dependencies": { + "meow": "^8.0.0", + "semver": "^6.0.0" + }, + "bin": { + "git-semver-tags": "cli.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/git-semver-tags/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/gitconfiglocal": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/gitconfiglocal/-/gitconfiglocal-1.0.0.tgz", + "integrity": "sha512-spLUXeTAVHxDtKsJc8FkFVgFtMdEN9qPGpL23VfSHx4fP4+Ds097IXLvymbnDH8FnmxX5Nr9bPw3A+AQ6mWEaQ==", + "dev": true, + "dependencies": { + "ini": "^1.3.2" + } + }, + "node_modules/glob": { + "version": "10.3.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.3.tgz", + "integrity": "sha512-92vPiMb/iqpmEgsOoIDvTjc50wf9CCCvMzsi6W0JLPeUKE8TWP1a73PgqSrqy7iAZxaSD1YdzU7QZR5LF51MJw==", + "dev": true, + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^2.0.3", + "minimatch": "^9.0.1", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0", + "path-scurry": "^1.10.1" + }, + "bin": { + "glob": "dist/cjs/src/bin.js" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/glob/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/glob/node_modules/minimatch": { + "version": "9.0.3", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", + "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", + "dev": true, + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/global-dirs": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-0.1.1.tgz", + "integrity": "sha512-NknMLn7F2J7aflwFOlGdNIuCDpN3VGoSoB+aap3KABFWbHVn1TCgFC+np23J8W2BiZbjfEw3BFBycSMv1AFblg==", + "dev": true, + "dependencies": { + "ini": "^1.3.4" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/global-modules": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-1.0.0.tgz", + "integrity": "sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg==", + "dev": true, + "dependencies": { + "global-prefix": "^1.0.1", + "is-windows": "^1.0.1", + "resolve-dir": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/global-prefix": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-1.0.2.tgz", + "integrity": "sha512-5lsx1NUDHtSjfg0eHlmYvZKv8/nVqX4ckFbM+FrGcQ+04KWcWFo9P5MxPZYSzUvyzmdTbI7Eix8Q4IbELDqzKg==", + "dev": true, + "dependencies": { + "expand-tilde": "^2.0.2", + "homedir-polyfill": "^1.0.1", + "ini": "^1.3.4", + "is-windows": "^1.0.1", + "which": "^1.2.14" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/global-prefix/node_modules/which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "which": "bin/which" + } + }, + "node_modules/globals": { + "version": "13.20.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.20.0.tgz", + "integrity": "sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ==", + "dev": true, + "dependencies": { + "type-fest": "^0.20.2" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/globals/node_modules/type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/globalthis": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.3.tgz", + "integrity": "sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==", + "dev": true, + "dependencies": { + "define-properties": "^1.1.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/globby": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", + "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", + "dev": true, + "dependencies": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.9", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/gonzales-pe": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/gonzales-pe/-/gonzales-pe-4.3.0.tgz", + "integrity": "sha512-otgSPpUmdWJ43VXyiNgEYE4luzHCL2pz4wQ0OnDluC6Eg4Ko3Vexy/SrSynglw/eR+OhkzmqFCZa/OFa/RgAOQ==", + "dev": true, + "dependencies": { + "minimist": "^1.2.5" + }, + "bin": { + "gonzales": "bin/gonzales.js" + }, + "engines": { + "node": ">=0.6.0" + } + }, + "node_modules/gopd": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", + "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", + "dev": true, + "dependencies": { + "get-intrinsic": "^1.1.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/got": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/got/-/got-8.3.2.tgz", + "integrity": "sha512-qjUJ5U/hawxosMryILofZCkm3C84PLJS/0grRIpjAwu+Lkxxj5cxeCU25BG0/3mDSpXKTyZr8oh8wIgLaH0QCw==", + "dev": true, + "dependencies": { + "@sindresorhus/is": "^0.7.0", + "cacheable-request": "^2.1.1", + "decompress-response": "^3.3.0", + "duplexer3": "^0.1.4", + "get-stream": "^3.0.0", + "into-stream": "^3.1.0", + "is-retry-allowed": "^1.1.0", + "isurl": "^1.0.0-alpha5", + "lowercase-keys": "^1.0.0", + "mimic-response": "^1.0.0", + "p-cancelable": "^0.4.0", + "p-timeout": "^2.0.1", + "pify": "^3.0.0", + "safe-buffer": "^5.1.1", + "timed-out": "^4.0.1", + "url-parse-lax": "^3.0.0", + "url-to-options": "^1.0.1" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/got/node_modules/get-stream": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", + "integrity": "sha512-GlhdIUuVakc8SJ6kK0zAFbiGzRFzNnY4jUuEbV9UROo4Y+0Ny4fjvcZFVTeDA4odpFyOQzaw6hXukJSq/f28sQ==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/got/node_modules/pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.10", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", + "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==", + "dev": true + }, + "node_modules/graphemer": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", + "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", + "dev": true + }, + "node_modules/growly": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/growly/-/growly-1.3.0.tgz", + "integrity": "sha512-+xGQY0YyAWCnqy7Cd++hc2JqMYzlm0dG30Jd0beaA64sROr8C4nt8Yc9V5Ro3avlSUDTN0ulqP/VBKi1/lLygw==", + "dev": true + }, + "node_modules/handlebars": { + "version": "4.7.7", + "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.7.tgz", + "integrity": "sha512-aAcXm5OAfE/8IXkcZvCepKU3VzW1/39Fb5ZuqMtgI/hT8X2YgoMvBY5dLhq/cpOvw7Lk1nK/UF71aLG/ZnVYRA==", + "dependencies": { + "minimist": "^1.2.5", + "neo-async": "^2.6.0", + "source-map": "^0.6.1", + "wordwrap": "^1.0.0" + }, + "bin": { + "handlebars": "bin/handlebars" + }, + "engines": { + "node": ">=0.4.7" + }, + "optionalDependencies": { + "uglify-js": "^3.1.4" + } + }, + "node_modules/hard-rejection": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/hard-rejection/-/hard-rejection-2.1.0.tgz", + "integrity": "sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "dependencies": { + "function-bind": "^1.1.1" + }, + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/has-bigints": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", + "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/has-property-descriptors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz", + "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==", + "dev": true, + "dependencies": { + "get-intrinsic": "^1.1.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz", + "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-symbol-support-x": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/has-symbol-support-x/-/has-symbol-support-x-1.4.2.tgz", + "integrity": "sha512-3ToOva++HaW+eCpgqZrCfN51IPB+7bJNVT6CUATzueB5Heb8o6Nam0V3HG5dlDvZU1Gn5QLcbahiKw/XVk5JJw==", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/has-symbols": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-to-string-tag-x": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/has-to-string-tag-x/-/has-to-string-tag-x-1.4.1.tgz", + "integrity": "sha512-vdbKfmw+3LoOYVr+mtxHaX5a96+0f3DljYd8JOqvOLsf5mw2Otda2qCDT9qRqLAhrjyQ0h7ual5nOiASpsGNFw==", + "dev": true, + "dependencies": { + "has-symbol-support-x": "^1.4.1" + }, + "engines": { + "node": "*" + } + }, + "node_modules/has-tostringtag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", + "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", + "dependencies": { + "has-symbols": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-value": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/has-value/-/has-value-2.0.2.tgz", + "integrity": "sha512-ybKOlcRsK2MqrM3Hmz/lQxXHZ6ejzSPzpNabKB45jb5qDgJvKPa3SdapTsTLwEb9WltgWpOmNax7i+DzNOk4TA==", + "dependencies": { + "get-value": "^3.0.0", + "has-values": "^2.0.1" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/has-values": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/has-values/-/has-values-2.0.1.tgz", + "integrity": "sha512-+QdH3jOmq9P8GfdjFg0eJudqx1FqU62NQJ4P16rOEHeRdl7ckgwn6uqQjzYE0ZoHVV/e5E2esuJ5Gl5+HUW19w==", + "dependencies": { + "kind-of": "^6.0.2" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/heap": { + "version": "0.2.7", + "resolved": "https://registry.npmjs.org/heap/-/heap-0.2.7.tgz", + "integrity": "sha512-2bsegYkkHO+h/9MGbn6KWcE45cHZgPANo5LXF7EvWdT0yT2EguSVO1nDgU5c8+ZOPwp2vMNa7YFsJhVcDR9Sdg==" + }, + "node_modules/hexoid": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/hexoid/-/hexoid-1.0.0.tgz", + "integrity": "sha512-QFLV0taWQOZtvIRIAdBChesmogZrtuXvVWsFHZTk2SU+anspqZ2vMnoLg7IE1+Uk16N19APic1BuF8bC8c2m5g==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/homedir-polyfill": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz", + "integrity": "sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA==", + "dev": true, + "dependencies": { + "parse-passwd": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/hosted-git-info": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz", + "integrity": "sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/hosted-git-info/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/hosted-git-info/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "node_modules/html-escaper": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", + "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", + "dev": true + }, + "node_modules/http-assert": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/http-assert/-/http-assert-1.5.0.tgz", + "integrity": "sha512-uPpH7OKX4H25hBmU6G1jWNaqJGpTXxey+YOUizJUAgu0AjLUeC8D73hTrhvDS5D+GJN1DN1+hhc/eF/wpxtp0w==", + "dependencies": { + "deep-equal": "~1.0.1", + "http-errors": "~1.8.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/http-assert/node_modules/deep-equal": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.0.1.tgz", + "integrity": "sha512-bHtC0iYvWhyaTzvV3CZgPeZQqCOBGyGsVV7v4eevpdkLHfiSrXUdBG+qAuSz4RI70sszvjQ1QSZ98An1yNwpSw==" + }, + "node_modules/http-cache-semantics": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz", + "integrity": "sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==", + "dev": true + }, + "node_modules/http-errors": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.8.1.tgz", + "integrity": "sha512-Kpk9Sm7NmI+RHhnj6OIWDI1d6fIoFAtFt9RLaTMRlg/8w49juAStsrBgp0Dp4OdxdVbRIeKhtCUvoi/RuAhO4g==", + "dependencies": { + "depd": "~1.1.2", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": ">= 1.5.0 < 2", + "toidentifier": "1.0.1" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/http-errors/node_modules/depd": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/http-graceful-shutdown": { + "version": "3.1.13", + "resolved": "https://registry.npmjs.org/http-graceful-shutdown/-/http-graceful-shutdown-3.1.13.tgz", + "integrity": "sha512-Ci5LRufQ8AtrQ1U26AevS8QoMXDOhnAHCJI3eZu1com7mZGHxREmw3dNj85ftpQokQCvak8nI2pnFS8zyM1M+Q==", + "dependencies": { + "debug": "^4.3.4" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/http-terminator": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/http-terminator/-/http-terminator-3.2.0.tgz", + "integrity": "sha512-JLjck1EzPaWjsmIf8bziM3p9fgR1Y3JoUKAkyYEbZmFrIvJM6I8vVJfBGWlEtV9IWOvzNnaTtjuwZeBY2kwB4g==", + "dev": true, + "dependencies": { + "delay": "^5.0.0", + "p-wait-for": "^3.2.0", + "roarr": "^7.0.4", + "type-fest": "^2.3.3" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/http-terminator/node_modules/type-fest": { + "version": "2.19.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-2.19.0.tgz", + "integrity": "sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==", + "dev": true, + "engines": { + "node": ">=12.20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/https-proxy-agent": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", + "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", + "dependencies": { + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/human-format": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/human-format/-/human-format-1.0.0.tgz", + "integrity": "sha512-ZfSxF/LHVDb5Un52AguYkZArbiuMbJQwpOpZ0MBuj3pYDmLt7pkCEws9L8xKbgnaKrfMgGd6qc+PHBbKO97AaA==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/human-signals": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", + "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", + "dev": true, + "engines": { + "node": ">=10.17.0" + } + }, + "node_modules/husky": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/husky/-/husky-8.0.3.tgz", + "integrity": "sha512-+dQSyqPh4x1hlO1swXBiNb2HzTDN1I2IGLQx1GrBuiqFJfoMrnZWwVmatvSiO+Iz8fBUnf+lekwNo4c2LlXItg==", + "dev": true, + "bin": { + "husky": "lib/bin.js" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/typicode" + } + }, + "node_modules/iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/ignore": { + "version": "5.2.4", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz", + "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==", + "dev": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/import-fresh": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "dev": true, + "dependencies": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/import-fresh/node_modules/resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/import-local": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.1.0.tgz", + "integrity": "sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==", + "dev": true, + "dependencies": { + "pkg-dir": "^4.2.0", + "resolve-cwd": "^3.0.0" + }, + "bin": { + "import-local-fixture": "fixtures/cli.js" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "dev": true, + "engines": { + "node": ">=0.8.19" + } + }, + "node_modules/indent-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", + "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/indexes-of": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/indexes-of/-/indexes-of-1.0.1.tgz", + "integrity": "sha512-bup+4tap3Hympa+JBJUG7XuOsdNQ6fxt0MHyXMKuLBKn0OqsTfvUxkUrroEX1+B2VsSHvCjiIcZVxRtYa4nllA==", + "dev": true + }, + "node_modules/inflation": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/inflation/-/inflation-2.0.0.tgz", + "integrity": "sha512-m3xv4hJYR2oXw4o4Y5l6P5P16WYmazYof+el6Al3f+YlggGj6qT9kImBAnzDelRALnP5d3h4jGBPKzYCizjZZw==", + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + }, + "node_modules/ini": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", + "dev": true + }, + "node_modules/inquirer": { + "version": "8.2.4", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-8.2.4.tgz", + "integrity": "sha512-nn4F01dxU8VeKfq192IjLsxu0/OmMZ4Lg3xKAns148rCaXP6ntAoEkVYZThWjwON8AlzdZZi6oqnhNbxUG9hVg==", + "dev": true, + "dependencies": { + "ansi-escapes": "^4.2.1", + "chalk": "^4.1.1", + "cli-cursor": "^3.1.0", + "cli-width": "^3.0.0", + "external-editor": "^3.0.3", + "figures": "^3.0.0", + "lodash": "^4.17.21", + "mute-stream": "0.0.8", + "ora": "^5.4.1", + "run-async": "^2.4.0", + "rxjs": "^7.5.5", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0", + "through": "^2.3.6", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/internal-slot": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.4.tgz", + "integrity": "sha512-tA8URYccNzMo94s5MQZgH8NB/XTa6HsOo0MLfXTKKEnHVVdegzaQoFZ7Jp44bdvLvY2waT5dc+j5ICEswhi7UQ==", + "dev": true, + "dependencies": { + "get-intrinsic": "^1.1.3", + "has": "^1.0.3", + "side-channel": "^1.0.4" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/into-stream": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/into-stream/-/into-stream-3.1.0.tgz", + "integrity": "sha512-TcdjPibTksa1NQximqep2r17ISRiNE9fwlfbg3F8ANdvP5/yrFTew86VcO//jk4QTaMlbjypPBq76HN2zaKfZQ==", + "dev": true, + "dependencies": { + "from2": "^2.1.1", + "p-is-promise": "^1.1.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/ioredis": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/ioredis/-/ioredis-5.3.2.tgz", + "integrity": "sha512-1DKMMzlIHM02eBBVOFQ1+AolGjs6+xEcM4PDL7NqOS6szq7H9jSaEkIUH6/a5Hl241LzW6JLSiAbNvTQjUupUA==", + "dependencies": { + "@ioredis/commands": "^1.1.1", + "cluster-key-slot": "^1.1.0", + "debug": "^4.3.4", + "denque": "^2.1.0", + "lodash.defaults": "^4.2.0", + "lodash.isarguments": "^3.1.0", + "redis-errors": "^1.2.0", + "redis-parser": "^3.0.0", + "standard-as-callback": "^2.1.0" + }, + "engines": { + "node": ">=12.22.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/ioredis" + } + }, + "node_modules/ip-regex": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ip-regex/-/ip-regex-4.3.0.tgz", + "integrity": "sha512-B9ZWJxHHOHUhUjCPrMpLD4xEq35bUTClHM1S6CBU5ixQnkZmwipwgc96vAd7AAGM9TGHvJR+Uss+/Ak6UphK+Q==", + "engines": { + "node": ">=8" + } + }, + "node_modules/is": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/is/-/is-3.3.0.tgz", + "integrity": "sha512-nW24QBoPcFGGHJGUwnfpI7Yc5CdqWNdsyHQszVE/z2pKHXzh7FZ5GWhJqSyaQ9wMkQnsTx+kAI8bHlCX4tKdbg==", + "engines": { + "node": "*" + } + }, + "node_modules/is-array-buffer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.1.tgz", + "integrity": "sha512-ASfLknmY8Xa2XtB4wmbz13Wu202baeA18cJBCeCy0wXUHZF0IPyVEXqKEcd+t2fNSLLL1vC6k7lxZEojNbISXQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.3", + "is-typed-array": "^1.1.10" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==" + }, + "node_modules/is-bigint": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", + "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", + "dev": true, + "dependencies": { + "has-bigints": "^1.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-boolean-object": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", + "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" + }, + "node_modules/is-builtin-module": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-3.2.1.tgz", + "integrity": "sha512-BSLE3HnV2syZ0FK0iMA/yUGplUeMmNz4AW5fnTunbCIqZi4vG3WjJT9FHMy5D69xmAYBHXQhJdALdpwVxV501A==", + "dev": true, + "dependencies": { + "builtin-modules": "^3.3.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-callable": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", + "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-core-module": { + "version": "2.11.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.11.0.tgz", + "integrity": "sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw==", + "dependencies": { + "has": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-date-object": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", + "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", + "dev": true, + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-docker": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", + "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", + "dev": true, + "bin": { + "is-docker": "cli.js" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-finite": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.1.0.tgz", + "integrity": "sha512-cdyMtqX/BOqqNBBiKlIVkytNHm49MtMlYyn1zxzvJKWmFMlGzm+ry5BBfYyeY9YmNKbRSo/o7OX9w9ale0wg3w==", + "dev": true, + "engines": { + "node": ">=0.10.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-4.0.0.tgz", + "integrity": "sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-generator-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-2.1.0.tgz", + "integrity": "sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/is-generator-function": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.10.tgz", + "integrity": "sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==", + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-interactive": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz", + "integrity": "sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-ip": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/is-ip/-/is-ip-3.1.0.tgz", + "integrity": "sha512-35vd5necO7IitFPjd/YBeqwWnyDWbuLH9ZXQdMfDA8TEo7pv5X8yfrvVO3xbJbLUlERCMvf6X0hTUamQxCYJ9Q==", + "dependencies": { + "ip-regex": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-negative-zero": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz", + "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true, + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-number-object": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", + "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", + "dev": true, + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-object": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-object/-/is-object-1.0.2.tgz", + "integrity": "sha512-2rRIahhZr2UWb45fIOuvZGpFtz0TyOZLf32KxBbSoUCeZR495zCKlWUKKUByk3geS2eAs7ZAABt0Y/Rx0GiQGA==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-path-inside": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", + "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-plain-obj": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", + "integrity": "sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-plain-object": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", + "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", + "dependencies": { + "isobject": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-primitive": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/is-primitive/-/is-primitive-3.0.1.tgz", + "integrity": "sha512-GljRxhWvlCNRfZyORiH77FwdFwGcMO620o37EOYC0ORWdq+WYNVqW0w2Juzew4M+L81l6/QS3t5gkkihyRqv9w==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-regex": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", + "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-regexp": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-regexp/-/is-regexp-1.0.0.tgz", + "integrity": "sha512-7zjFAPO4/gwyQAAgRRmqeEeyIICSdmCqa3tsVHMdBzaXXRiqopZL4Cyghg/XulGWrtABTpbnYYzzIRffLkP4oA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-relative-path": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-relative-path/-/is-relative-path-1.0.2.tgz", + "integrity": "sha512-i1h+y50g+0hRbBD+dbnInl3JlJ702aar58snAeX+MxBAPvzXGej7sYoPMhlnykabt0ZzCJNBEyzMlekuQZN7fA==", + "dev": true + }, + "node_modules/is-retry-allowed": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/is-retry-allowed/-/is-retry-allowed-1.2.0.tgz", + "integrity": "sha512-RUbUeKwvm3XG2VYamhJL1xFktgjvPzL0Hq8C+6yrWIswDy3BIXGqCxhxkc30N9jqK311gVU137K8Ei55/zVJRg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-shared-array-buffer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz", + "integrity": "sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-string": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", + "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", + "dev": true, + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-symbol": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", + "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", + "dev": true, + "dependencies": { + "has-symbols": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-text-path": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-text-path/-/is-text-path-1.0.1.tgz", + "integrity": "sha512-xFuJpne9oFz5qDaodwmmG08e3CawH/2ZV8Qqza1Ko7Sk8POWbkRdwIoAWVhqvq0XeUzANEhKo2n0IXUGBm7A/w==", + "dev": true, + "dependencies": { + "text-extensions": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-typed-array": { + "version": "1.1.10", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.10.tgz", + "integrity": "sha512-PJqgEHiWZvMpaFZ3uTc8kHPM4+4ADTlDniuQL7cU/UDA0Ql7F70yGfHph3cLNe+c9toaigv+DFzTJKhc2CtO6A==", + "dev": true, + "dependencies": { + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-unicode-supported": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", + "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-url": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/is-url/-/is-url-1.2.4.tgz", + "integrity": "sha512-ITvGim8FhRiYe4IQ5uHSkj7pVaPDrCTkNd3yq3cV7iZAcJdHTUMPMEHcqSOy9xZ9qFenQCvi+2wjH9a1nXqHww==", + "dev": true + }, + "node_modules/is-url-superb": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-url-superb/-/is-url-superb-4.0.0.tgz", + "integrity": "sha512-GI+WjezhPPcbM+tqE9LnmsY5qqjwHzTvjJ36wxYX5ujNXefSUJ/T17r5bqDV8yLhcgB59KTPNOc9O9cmHTPWsA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-utf8": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz", + "integrity": "sha512-rMYPYvCzsXywIsldgLaSoPlw5PfoB/ssr7hY4pLfcodrA5M/eArza1a9VmTiNIBNMjOGr1Ow9mTyU2o69U6U9Q==", + "dev": true + }, + "node_modules/is-weakref": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", + "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-windows": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", + "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-wsl": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", + "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", + "dev": true, + "dependencies": { + "is-docker": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "dev": true + }, + "node_modules/iserror": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/iserror/-/iserror-0.0.2.tgz", + "integrity": "sha512-oKGGrFVaWwETimP3SiWwjDeY27ovZoyZPHtxblC4hCq9fXxed/jasx+ATWFFjCVSRZng8VTMsN1nDnGo6zMBSw==" + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true + }, + "node_modules/isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/isolated-vm": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/isolated-vm/-/isolated-vm-4.5.0.tgz", + "integrity": "sha512-Kse0m5t+B9wZQVeTDqzPoX1SIFNTNfyaUxhnCuFgpXL1+5GYJ9GUAN3mpD+ainixGmUXgeYaVBX+QPDjEBBu0w==", + "hasInstallScript": true, + "engines": { + "node": ">=10.4.0" + } + }, + "node_modules/istanbul-lib-coverage": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz", + "integrity": "sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-instrument": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz", + "integrity": "sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==", + "dev": true, + "dependencies": { + "@babel/core": "^7.12.3", + "@babel/parser": "^7.14.7", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-coverage": "^3.2.0", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-instrument/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/istanbul-lib-report": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", + "integrity": "sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw==", + "dev": true, + "dependencies": { + "istanbul-lib-coverage": "^3.0.0", + "make-dir": "^3.0.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-source-maps": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz", + "integrity": "sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==", + "dev": true, + "dependencies": { + "debug": "^4.1.1", + "istanbul-lib-coverage": "^3.0.0", + "source-map": "^0.6.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/istanbul-reports": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.5.tgz", + "integrity": "sha512-nUsEMa9pBt/NOHqbcbeJEgqIlY/K7rVWUX6Lql2orY5e9roQOthbR3vtY4zzf2orPELg80fnxxk9zUyPlgwD1w==", + "dev": true, + "dependencies": { + "html-escaper": "^2.0.0", + "istanbul-lib-report": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/isurl": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isurl/-/isurl-1.0.0.tgz", + "integrity": "sha512-1P/yWsxPlDtn7QeRD+ULKQPaIaN6yF368GZ2vDfv0AL0NwpStafjWCDDdn0k8wgFMWpVAqG7oJhxHnlud42i9w==", + "dev": true, + "dependencies": { + "has-to-string-tag-x": "^1.2.0", + "is-object": "^1.0.1" + }, + "engines": { + "node": ">= 4" + } + }, + "node_modules/jackspeak": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-2.2.2.tgz", + "integrity": "sha512-mgNtVv4vUuaKA97yxUHoA3+FkuhtxkjdXEWOyB/N76fjy0FjezEt34oy3epBtvCvS+7DyKwqCFWx/oJLV5+kCg==", + "dev": true, + "dependencies": { + "@isaacs/cliui": "^8.0.2" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + }, + "optionalDependencies": { + "@pkgjs/parseargs": "^0.11.0" + } + }, + "node_modules/jest": { + "version": "29.6.0", + "resolved": "https://registry.npmjs.org/jest/-/jest-29.6.0.tgz", + "integrity": "sha512-do1J9gGrQ68E4UfMz/4OM71p9qCqQxu32N/9ZfeYFSSlx0uUOuxeyZxtJZNaUTW12ZA11ERhmBjBhy1Ho96R4g==", + "dev": true, + "dependencies": { + "@jest/core": "^29.6.0", + "@jest/types": "^29.6.0", + "import-local": "^3.0.2", + "jest-cli": "^29.6.0" + }, + "bin": { + "jest": "bin/jest.js" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } + } + }, + "node_modules/jest-changed-files": { + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-29.5.0.tgz", + "integrity": "sha512-IFG34IUMUaNBIxjQXF/iu7g6EcdMrGRRxaUSw92I/2g2YC6vCdTltl4nHvt7Ci5nSJwXIkCu8Ka1DKF+X7Z1Ag==", + "dev": true, + "dependencies": { + "execa": "^5.0.0", + "p-limit": "^3.1.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-circus": { + "version": "29.6.0", + "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-29.6.0.tgz", + "integrity": "sha512-LtG45qEKhse2Ws5zNR4DnZATReLGQXzBZGZnJ0DU37p6d4wDhu41vvczCQ3Ou+llR6CRYDBshsubV7H4jZvIkw==", + "dev": true, + "dependencies": { + "@jest/environment": "^29.6.0", + "@jest/expect": "^29.6.0", + "@jest/test-result": "^29.6.0", + "@jest/types": "^29.6.0", + "@types/node": "*", + "chalk": "^4.0.0", + "co": "^4.6.0", + "dedent": "^0.7.0", + "is-generator-fn": "^2.0.0", + "jest-each": "^29.6.0", + "jest-matcher-utils": "^29.6.0", + "jest-message-util": "^29.6.0", + "jest-runtime": "^29.6.0", + "jest-snapshot": "^29.6.0", + "jest-util": "^29.6.0", + "p-limit": "^3.1.0", + "pretty-format": "^29.6.0", + "pure-rand": "^6.0.0", + "slash": "^3.0.0", + "stack-utils": "^2.0.3" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-cli": { + "version": "29.6.0", + "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-29.6.0.tgz", + "integrity": "sha512-WvZIaanK/abkw6s01924DQ2QLwM5Q4Y4iPbSDb9Zg6smyXGqqcPQ7ft9X8D7B0jICz312eSzM6UlQNxuZJBrMw==", + "dev": true, + "dependencies": { + "@jest/core": "^29.6.0", + "@jest/test-result": "^29.6.0", + "@jest/types": "^29.6.0", + "chalk": "^4.0.0", + "exit": "^0.1.2", + "graceful-fs": "^4.2.9", + "import-local": "^3.0.2", + "jest-config": "^29.6.0", + "jest-util": "^29.6.0", + "jest-validate": "^29.6.0", + "prompts": "^2.0.1", + "yargs": "^17.3.1" + }, + "bin": { + "jest": "bin/jest.js" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } + } + }, + "node_modules/jest-config": { + "version": "29.6.0", + "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-29.6.0.tgz", + "integrity": "sha512-fKA4jM91PDqWVkMpb1FVKxIuhg3hC6hgaen57cr1rRZkR96dCatvJZsk3ik7/GNu9ERj9wgAspOmyvkFoGsZhA==", + "dev": true, + "dependencies": { + "@babel/core": "^7.11.6", + "@jest/test-sequencer": "^29.6.0", + "@jest/types": "^29.6.0", + "babel-jest": "^29.6.0", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "deepmerge": "^4.2.2", + "glob": "^7.1.3", + "graceful-fs": "^4.2.9", + "jest-circus": "^29.6.0", + "jest-environment-node": "^29.6.0", + "jest-get-type": "^29.4.3", + "jest-regex-util": "^29.4.3", + "jest-resolve": "^29.6.0", + "jest-runner": "^29.6.0", + "jest-util": "^29.6.0", + "jest-validate": "^29.6.0", + "micromatch": "^4.0.4", + "parse-json": "^5.2.0", + "pretty-format": "^29.6.0", + "slash": "^3.0.0", + "strip-json-comments": "^3.1.1" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "@types/node": "*", + "ts-node": ">=9.0.0" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "ts-node": { + "optional": true + } + } + }, + "node_modules/jest-config/node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/jest-diff": { + "version": "29.6.0", + "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-29.6.0.tgz", + "integrity": "sha512-ZRm7cd2m9YyZ0N3iMyuo1iUiprxQ/MFpYWXzEEj7hjzL3WnDffKW8192XBDcrAI8j7hnrM1wed3bL/oEnYF/8w==", + "dev": true, + "dependencies": { + "chalk": "^4.0.0", + "diff-sequences": "^29.4.3", + "jest-get-type": "^29.4.3", + "pretty-format": "^29.6.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-docblock": { + "version": "29.4.3", + "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-29.4.3.tgz", + "integrity": "sha512-fzdTftThczeSD9nZ3fzA/4KkHtnmllawWrXO69vtI+L9WjEIuXWs4AmyME7lN5hU7dB0sHhuPfcKofRsUb/2Fg==", + "dev": true, + "dependencies": { + "detect-newline": "^3.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-each": { + "version": "29.6.0", + "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-29.6.0.tgz", + "integrity": "sha512-d0Jem4RBAlFUyV6JSXPSHVUpNo5RleSj+iJEy1G3+ZCrzHDjWs/1jUfrbnJKHdJdAx5BCEce/Ju379WqHhQk4w==", + "dev": true, + "dependencies": { + "@jest/types": "^29.6.0", + "chalk": "^4.0.0", + "jest-get-type": "^29.4.3", + "jest-util": "^29.6.0", + "pretty-format": "^29.6.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-environment-node": { + "version": "29.6.0", + "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-29.6.0.tgz", + "integrity": "sha512-BOf5Q2/nFCdBOnyBM5c5/6DbdQYgc+0gyUQ8l8qhUAB8O7pM+4QJXIXJsRZJaxd5SHV6y5VArTVhOfogoqcP8Q==", + "dev": true, + "dependencies": { + "@jest/environment": "^29.6.0", + "@jest/fake-timers": "^29.6.0", + "@jest/types": "^29.6.0", + "@types/node": "*", + "jest-mock": "^29.6.0", + "jest-util": "^29.6.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-get-type": { + "version": "29.4.3", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.4.3.tgz", + "integrity": "sha512-J5Xez4nRRMjk8emnTpWrlkyb9pfRQQanDrvWHhsR1+VUfbwxi30eVcZFlcdGInRibU4G5LwHXpI7IRHU0CY+gg==", + "dev": true, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-haste-map": { + "version": "29.6.0", + "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-29.6.0.tgz", + "integrity": "sha512-dY1DKufptj7hcJSuhpqlYPGcnN3XjlOy/g0jinpRTMsbb40ivZHiuIPzeminOZkrek8C+oDxC54ILGO3vMLojg==", + "dev": true, + "dependencies": { + "@jest/types": "^29.6.0", + "@types/graceful-fs": "^4.1.3", + "@types/node": "*", + "anymatch": "^3.0.3", + "fb-watchman": "^2.0.0", + "graceful-fs": "^4.2.9", + "jest-regex-util": "^29.4.3", + "jest-util": "^29.6.0", + "jest-worker": "^29.6.0", + "micromatch": "^4.0.4", + "walker": "^1.0.8" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "optionalDependencies": { + "fsevents": "^2.3.2" + } + }, + "node_modules/jest-leak-detector": { + "version": "29.6.0", + "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-29.6.0.tgz", + "integrity": "sha512-JdV6EZOPxHR1gd6ccxjNowuROkT2jtGU5G/g58RcJX1xe5mrtLj0g6/ZkyMoXF4cs+tTkHMFX6pcIrB1QPQwCw==", + "dev": true, + "dependencies": { + "jest-get-type": "^29.4.3", + "pretty-format": "^29.6.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-matcher-utils": { + "version": "29.6.0", + "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-29.6.0.tgz", + "integrity": "sha512-oSlqfGN+sbkB2Q5um/zL7z80w84FEAcLKzXBZIPyRk2F2Srg1ubhrHVKW68JCvb2+xKzAeGw35b+6gciS24PHw==", + "dev": true, + "dependencies": { + "chalk": "^4.0.0", + "jest-diff": "^29.6.0", + "jest-get-type": "^29.4.3", + "pretty-format": "^29.6.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-message-util": { + "version": "29.6.0", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-29.6.0.tgz", + "integrity": "sha512-mkCp56cETbpoNtsaeWVy6SKzk228mMi9FPHSObaRIhbR2Ujw9PqjW/yqVHD2tN1bHbC8ol6h3UEo7dOPmIYwIA==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.12.13", + "@jest/types": "^29.6.0", + "@types/stack-utils": "^2.0.0", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "micromatch": "^4.0.4", + "pretty-format": "^29.6.0", + "slash": "^3.0.0", + "stack-utils": "^2.0.3" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-mock": { + "version": "29.6.0", + "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-29.6.0.tgz", + "integrity": "sha512-2Pb7R2w24Q0aUVn+2/vdRDL6CqGqpheDZy7zrXav8FotOpSGw/4bS2hyVoKHMEx4xzOn6EyCAGwc5czWxXeN7w==", + "dev": true, + "dependencies": { + "@jest/types": "^29.6.0", + "@types/node": "*", + "jest-util": "^29.6.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-pnp-resolver": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.3.tgz", + "integrity": "sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==", + "dev": true, + "engines": { + "node": ">=6" + }, + "peerDependencies": { + "jest-resolve": "*" + }, + "peerDependenciesMeta": { + "jest-resolve": { + "optional": true + } + } + }, + "node_modules/jest-regex-util": { + "version": "29.4.3", + "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-29.4.3.tgz", + "integrity": "sha512-O4FglZaMmWXbGHSQInfXewIsd1LMn9p3ZXB/6r4FOkyhX2/iP/soMG98jGvk/A3HAN78+5VWcBGO0BJAPRh4kg==", + "dev": true, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-resolve": { + "version": "29.6.0", + "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-29.6.0.tgz", + "integrity": "sha512-+hrpY4LzAONoZA/rvB6rnZLkOSA6UgJLpdCWrOZNSgGxWMumzRLu7dLUSCabAHzoHIDQ9qXfr3th1zYNJ0E8sQ==", + "dev": true, + "dependencies": { + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^29.6.0", + "jest-pnp-resolver": "^1.2.2", + "jest-util": "^29.6.0", + "jest-validate": "^29.6.0", + "resolve": "^1.20.0", + "resolve.exports": "^2.0.0", + "slash": "^3.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-resolve-dependencies": { + "version": "29.6.0", + "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-29.6.0.tgz", + "integrity": "sha512-eOfPog9K3hJdJk/3i6O6bQhXS+3uXhMDkLJGX+xmMPp7T1d/zdcFofbDnHgNoEkhD/mSimC5IagLEP7lpLLu/A==", + "dev": true, + "dependencies": { + "jest-regex-util": "^29.4.3", + "jest-snapshot": "^29.6.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-runner": { + "version": "29.6.0", + "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-29.6.0.tgz", + "integrity": "sha512-4fZuGV2lOxS2BiqEG9/AI8E6O+jo+QZjMVcgi1x5E6aDql0Gd/EFIbUQ0pSS09y8cya1vJB/qC2xsE468jqtSg==", + "dev": true, + "dependencies": { + "@jest/console": "^29.6.0", + "@jest/environment": "^29.6.0", + "@jest/test-result": "^29.6.0", + "@jest/transform": "^29.6.0", + "@jest/types": "^29.6.0", + "@types/node": "*", + "chalk": "^4.0.0", + "emittery": "^0.13.1", + "graceful-fs": "^4.2.9", + "jest-docblock": "^29.4.3", + "jest-environment-node": "^29.6.0", + "jest-haste-map": "^29.6.0", + "jest-leak-detector": "^29.6.0", + "jest-message-util": "^29.6.0", + "jest-resolve": "^29.6.0", + "jest-runtime": "^29.6.0", + "jest-util": "^29.6.0", + "jest-watcher": "^29.6.0", + "jest-worker": "^29.6.0", + "p-limit": "^3.1.0", + "source-map-support": "0.5.13" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-runtime": { + "version": "29.6.0", + "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-29.6.0.tgz", + "integrity": "sha512-5FavYo3EeXLHIvnJf+r7Cj0buePAbe4mzRB9oeVxDS0uVmouSBjWeGgyRjZkw7ArxOoZI8gO6f8SGMJ2HFlwwg==", + "dev": true, + "dependencies": { + "@jest/environment": "^29.6.0", + "@jest/fake-timers": "^29.6.0", + "@jest/globals": "^29.6.0", + "@jest/source-map": "^29.6.0", + "@jest/test-result": "^29.6.0", + "@jest/transform": "^29.6.0", + "@jest/types": "^29.6.0", + "@types/node": "*", + "chalk": "^4.0.0", + "cjs-module-lexer": "^1.0.0", + "collect-v8-coverage": "^1.0.0", + "glob": "^7.1.3", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^29.6.0", + "jest-message-util": "^29.6.0", + "jest-mock": "^29.6.0", + "jest-regex-util": "^29.4.3", + "jest-resolve": "^29.6.0", + "jest-snapshot": "^29.6.0", + "jest-util": "^29.6.0", + "slash": "^3.0.0", + "strip-bom": "^4.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-runtime/node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/jest-snapshot": { + "version": "29.6.0", + "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-29.6.0.tgz", + "integrity": "sha512-H3kUE9NwWDEDoutcOSS921IqdlkdjgnMdj1oMyxAHNflscdLc9dB8OudZHV6kj4OHJxbMxL8CdI5DlwYrs4wQg==", + "dev": true, + "dependencies": { + "@babel/core": "^7.11.6", + "@babel/generator": "^7.7.2", + "@babel/plugin-syntax-jsx": "^7.7.2", + "@babel/plugin-syntax-typescript": "^7.7.2", + "@babel/types": "^7.3.3", + "@jest/expect-utils": "^29.6.0", + "@jest/transform": "^29.6.0", + "@jest/types": "^29.6.0", + "@types/prettier": "^2.1.5", + "babel-preset-current-node-syntax": "^1.0.0", + "chalk": "^4.0.0", + "expect": "^29.6.0", + "graceful-fs": "^4.2.9", + "jest-diff": "^29.6.0", + "jest-get-type": "^29.4.3", + "jest-matcher-utils": "^29.6.0", + "jest-message-util": "^29.6.0", + "jest-util": "^29.6.0", + "natural-compare": "^1.4.0", + "pretty-format": "^29.6.0", + "semver": "^7.5.3" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-sonar": { + "version": "0.2.16", + "resolved": "https://registry.npmjs.org/jest-sonar/-/jest-sonar-0.2.16.tgz", + "integrity": "sha512-ES6Z9BbIVDELtbz+/b6pv41B2qOfp38cQpoCLqei21FtlkG/GzhyQ0M3egEIM+erpJOkpRKM8Tc8/YQtHdiTXA==", + "dev": true, + "dependencies": { + "entities": "4.3.0", + "strip-ansi": "6.0.1" + } + }, + "node_modules/jest-util": { + "version": "29.6.0", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.6.0.tgz", + "integrity": "sha512-S0USx9YwcvEm4pQ5suisVm/RVxBmi0GFR7ocJhIeaCuW5AXnAnffXbaVKvIFodyZNOc9ygzVtTxmBf40HsHXaA==", + "dev": true, + "dependencies": { + "@jest/types": "^29.6.0", + "@types/node": "*", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "graceful-fs": "^4.2.9", + "picomatch": "^2.2.3" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-validate": { + "version": "29.6.0", + "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-29.6.0.tgz", + "integrity": "sha512-MLTrAJsb1+W7svbeZ+A7pAnyXMaQrjvPDKCy7OlfsfB6TMVc69v7WjUWfiR6r3snULFWZASiKgvNVDuATta1dg==", + "dev": true, + "dependencies": { + "@jest/types": "^29.6.0", + "camelcase": "^6.2.0", + "chalk": "^4.0.0", + "jest-get-type": "^29.4.3", + "leven": "^3.1.0", + "pretty-format": "^29.6.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-validate/node_modules/camelcase": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/jest-watcher": { + "version": "29.6.0", + "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-29.6.0.tgz", + "integrity": "sha512-LdsQqFNX60mRdRRe+zsELnYRH1yX6KL+ukbh+u6WSQeTheZZe1TlLJNKRQiZ7e0VbvMkywmMWL/KV35noOJCcw==", + "dev": true, + "dependencies": { + "@jest/test-result": "^29.6.0", + "@jest/types": "^29.6.0", + "@types/node": "*", + "ansi-escapes": "^4.2.1", + "chalk": "^4.0.0", + "emittery": "^0.13.1", + "jest-util": "^29.6.0", + "string-length": "^4.0.1" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-when": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/jest-when/-/jest-when-3.5.2.tgz", + "integrity": "sha512-4rDvnhaWh08RcPsoEVXgxRnUIE9wVIbZtGqZ5x2Wm9Ziz9aQs89PipQFmOK0ycbEhVAgiV3MUeTXp3Ar4s2FcQ==", + "dev": true, + "peerDependencies": { + "jest": ">= 25" + } + }, + "node_modules/jest-worker": { + "version": "29.6.0", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.6.0.tgz", + "integrity": "sha512-oiQHH1SnKmZIwwPnpOrXTq4kHBk3lKGY/07DpnH0sAu+x7J8rXlbLDROZsU6vy9GwB0hPiZeZpu6YlJ48QoKcA==", + "dev": true, + "dependencies": { + "@types/node": "*", + "jest-util": "^29.6.0", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-worker/node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/joi": { + "version": "17.9.2", + "resolved": "https://registry.npmjs.org/joi/-/joi-17.9.2.tgz", + "integrity": "sha512-Itk/r+V4Dx0V3c7RLFdRh12IOjySm2/WGPMubBT92cQvRfYZhPM2W0hZlctjj72iES8jsRCwp7S/cRmWBnJ4nw==", + "dependencies": { + "@hapi/hoek": "^9.0.0", + "@hapi/topo": "^5.0.0", + "@sideway/address": "^4.1.3", + "@sideway/formula": "^3.0.1", + "@sideway/pinpoint": "^2.0.0" + } + }, + "node_modules/js-sha1": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/js-sha1/-/js-sha1-0.6.0.tgz", + "integrity": "sha512-01gwBFreYydzmU9BmZxpVk6svJJHrVxEN3IOiGl6VO93bVKYETJ0sIth6DASI6mIFdt7NmfX9UiByRzsYHGU9w==" + }, + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" + }, + "node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/jsesc": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", + "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", + "dev": true, + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/json-buffer": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.0.tgz", + "integrity": "sha512-CuUqjv0FUZIdXkHPI8MezCnFCdaTAacej1TZYulLoAg1h/PhwkdXFN4V/gzY4g+fMBCOV2xF+rp7t2XD2ns/NQ==", + "dev": true + }, + "node_modules/json-diff": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/json-diff/-/json-diff-1.0.3.tgz", + "integrity": "sha512-W0yk/xzjz7bag9v9eS4qthvPG4O07uxNeXwirhvcOqmX4w8HLtB/Pw76o5Z7Pblwvf4vpCi4+iHOlHDnmav/rA==", + "dependencies": { + "@ewoudenberg/difflib": "0.1.0", + "colors": "^1.4.0", + "dreamopt": "~0.8.0" + }, + "bin": { + "json-diff": "bin/json-diff.js" + }, + "engines": { + "node": "*" + } + }, + "node_modules/json-parse-better-errors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", + "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", + "dev": true + }, + "node_modules/json-parse-even-better-errors": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==" + }, + "node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" + }, + "node_modules/json-size": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-size/-/json-size-1.0.0.tgz", + "integrity": "sha512-sh8Ff4sNVI3FU1LjFXiNpcG9Er9bsn8WbeR79mGj4Ljd+/NBmxqYCV1sPzndUTGsWXa3LVUx3aLlZxpq1DzCBA==", + "dependencies": { + "utf8-length": "0.0.1" + } + }, + "node_modules/json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", + "dev": true + }, + "node_modules/json-stringify-safe": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", + "integrity": "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==", + "dev": true + }, + "node_modules/json5": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "dev": true, + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/jsonata": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/jsonata/-/jsonata-2.0.3.tgz", + "integrity": "sha512-Up2H81MUtjqI/dWwWX7p4+bUMfMrQJVMN/jW6clFMTiYP528fBOBNtRu944QhKTs3+IsVWbgMeUTny5fw2VMUA==", + "engines": { + "node": ">= 8" + } + }, + "node_modules/jsonc-parser": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.2.0.tgz", + "integrity": "sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w==", + "dev": true + }, + "node_modules/jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "dev": true, + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/jsonparse": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz", + "integrity": "sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==", + "dev": true, + "engines": [ + "node >= 0.2.0" + ] + }, + "node_modules/JSONStream": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.5.tgz", + "integrity": "sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==", + "dev": true, + "dependencies": { + "jsonparse": "^1.2.0", + "through": ">=2.2.7 <3" + }, + "bin": { + "JSONStream": "bin.js" + }, + "engines": { + "node": "*" + } + }, + "node_modules/jsontoxml": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/jsontoxml/-/jsontoxml-1.0.1.tgz", + "integrity": "sha512-dtKGq0K8EWQBRqcAaePSgKR4Hyjfsz/LkurHSV3Cxk4H+h2fWDeaN2jzABz+ZmOJylgXS7FGeWmbZ6jgYUMdJQ==", + "engines": { + "node": ">=0.2.0" + } + }, + "node_modules/keygrip": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/keygrip/-/keygrip-1.1.0.tgz", + "integrity": "sha512-iYSchDJ+liQ8iwbSI2QqsQOvqv58eJCEanyJPJi+Khyu8smkcKSFUCbPwzFcL7YVtZ6eONjqRX/38caJ7QjRAQ==", + "dependencies": { + "tsscmp": "1.0.6" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/keyv": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-3.0.0.tgz", + "integrity": "sha512-eguHnq22OE3uVoSYG0LVWNP+4ppamWr9+zWBe1bsNcovIMy6huUJFPgy4mGwCd/rnl3vOLGW1MTlu4c57CT1xA==", + "dev": true, + "dependencies": { + "json-buffer": "3.0.0" + } + }, + "node_modules/kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/kleur": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", + "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/koa": { + "version": "2.14.1", + "resolved": "https://registry.npmjs.org/koa/-/koa-2.14.1.tgz", + "integrity": "sha512-USJFyZgi2l0wDgqkfD27gL4YGno7TfUkcmOe6UOLFOVuN+J7FwnNu4Dydl4CUQzraM1lBAiGed0M9OVJoT0Kqw==", + "dependencies": { + "accepts": "^1.3.5", + "cache-content-type": "^1.0.0", + "content-disposition": "~0.5.2", + "content-type": "^1.0.4", + "cookies": "~0.8.0", + "debug": "^4.3.2", + "delegates": "^1.0.0", + "depd": "^2.0.0", + "destroy": "^1.0.4", + "encodeurl": "^1.0.2", + "escape-html": "^1.0.3", + "fresh": "~0.5.2", + "http-assert": "^1.3.0", + "http-errors": "^1.6.3", + "is-generator-function": "^1.0.7", + "koa-compose": "^4.1.0", + "koa-convert": "^2.0.0", + "on-finished": "^2.3.0", + "only": "~0.0.2", + "parseurl": "^1.3.2", + "statuses": "^1.5.0", + "type-is": "^1.6.16", + "vary": "^1.1.2" + }, + "engines": { + "node": "^4.8.4 || ^6.10.1 || ^7.10.1 || >= 8.1.4" + } + }, + "node_modules/koa-bodyparser": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/koa-bodyparser/-/koa-bodyparser-4.4.0.tgz", + "integrity": "sha512-AXPY7wwKZUmbgb8VkTEUFoRNOlx6aWRJwEnQD+zfNf33/7KSAkN4Oo9BqlIk80D+5TvuqlhpQT5dPVcyxl5Zsw==", + "dependencies": { + "co-body": "^6.0.0", + "copy-to": "^2.0.1" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/koa-compose": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/koa-compose/-/koa-compose-4.1.0.tgz", + "integrity": "sha512-8ODW8TrDuMYvXRwra/Kh7/rJo9BtOfPc6qO8eAfC80CnCvSjSl0bkRM24X6/XBBEyj0v1nRUQ1LyOy3dbqOWXw==" + }, + "node_modules/koa-convert": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/koa-convert/-/koa-convert-2.0.0.tgz", + "integrity": "sha512-asOvN6bFlSnxewce2e/DK3p4tltyfC4VM7ZwuTuepI7dEQVcvpyFuBcEARu1+Hxg8DIwytce2n7jrZtRlPrARA==", + "dependencies": { + "co": "^4.6.0", + "koa-compose": "^4.1.0" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/koa2-swagger-ui": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/koa2-swagger-ui/-/koa2-swagger-ui-5.8.0.tgz", + "integrity": "sha512-uVHh2hajX5Q/6+BkRrK0Rrf84Duc6dB73WIU1mb3cLfellMR1klAIYEX1p1bOsNjB97uqCwyn/cz3Sfi1/IxcQ==", + "dependencies": { + "@types/koa": "^2.13.6", + "handlebars": "^4.7.7", + "lodash": "^4.17.21", + "read-pkg-up": "^7.0.1" + } + }, + "node_modules/kuler": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/kuler/-/kuler-2.0.0.tgz", + "integrity": "sha512-Xq9nH7KlWZmXAtodXDDRE7vs6DU1gTU8zYDHDiWLSip45Egwq3plLHzPn27NgvzL2r1LMPC1vdqh98sQxtqj4A==" + }, + "node_modules/lazy-ass": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/lazy-ass/-/lazy-ass-1.6.0.tgz", + "integrity": "sha512-cc8oEVoctTvsFZ/Oje/kGnHbpWHYBe8IAJe4C0QNc3t8uM/0Y8+erSz/7Y1ALuXTEZTMvxXwO6YbX1ey3ujiZw==", + "dev": true, + "engines": { + "node": "> 0.8" + } + }, + "node_modules/leven": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", + "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/levn": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "dev": true, + "dependencies": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/lilconfig": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.1.0.tgz", + "integrity": "sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/lines-and-columns": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==" + }, + "node_modules/lint-staged": { + "version": "13.2.2", + "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-13.2.2.tgz", + "integrity": "sha512-71gSwXKy649VrSU09s10uAT0rWCcY3aewhMaHyl2N84oBk4Xs9HgxvUp3AYu+bNsK4NrOYYxvSgg7FyGJ+jGcA==", + "dev": true, + "dependencies": { + "chalk": "5.2.0", + "cli-truncate": "^3.1.0", + "commander": "^10.0.0", + "debug": "^4.3.4", + "execa": "^7.0.0", + "lilconfig": "2.1.0", + "listr2": "^5.0.7", + "micromatch": "^4.0.5", + "normalize-path": "^3.0.0", + "object-inspect": "^1.12.3", + "pidtree": "^0.6.0", + "string-argv": "^0.3.1", + "yaml": "^2.2.2" + }, + "bin": { + "lint-staged": "bin/lint-staged.js" + }, + "engines": { + "node": "^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/lint-staged" + } + }, + "node_modules/lint-staged/node_modules/chalk": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.2.0.tgz", + "integrity": "sha512-ree3Gqw/nazQAPuJJEy+avdl7QfZMcUvmHIKgEZkGL+xOBzRvup5Hxo6LHuMceSxOabuJLJm5Yp/92R9eMmMvA==", + "dev": true, + "engines": { + "node": "^12.17.0 || ^14.13 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/lint-staged/node_modules/execa": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-7.1.1.tgz", + "integrity": "sha512-wH0eMf/UXckdUYnO21+HDztteVv05rq2GXksxT4fCGeHkBhw1DROXh40wcjMcRqDOWE7iPJ4n3M7e2+YFP+76Q==", + "dev": true, + "dependencies": { + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.1", + "human-signals": "^4.3.0", + "is-stream": "^3.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^5.1.0", + "onetime": "^6.0.0", + "signal-exit": "^3.0.7", + "strip-final-newline": "^3.0.0" + }, + "engines": { + "node": "^14.18.0 || ^16.14.0 || >=18.0.0" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" + } + }, + "node_modules/lint-staged/node_modules/human-signals": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-4.3.1.tgz", + "integrity": "sha512-nZXjEF2nbo7lIw3mgYjItAfgQXog3OjJogSbKa2CQIIvSGWcKgeJnQlNXip6NglNzYH45nSRiEVimMvYL8DDqQ==", + "dev": true, + "engines": { + "node": ">=14.18.0" + } + }, + "node_modules/lint-staged/node_modules/is-stream": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz", + "integrity": "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==", + "dev": true, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/lint-staged/node_modules/mimic-fn": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-4.0.0.tgz", + "integrity": "sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/lint-staged/node_modules/npm-run-path": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.1.0.tgz", + "integrity": "sha512-sJOdmRGrY2sjNTRMbSvluQqg+8X7ZK61yvzBEIDhz4f8z1TZFYABsqjjCBd/0PUNE9M6QDgHJXQkGUEm7Q+l9Q==", + "dev": true, + "dependencies": { + "path-key": "^4.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/lint-staged/node_modules/object-inspect": { + "version": "1.12.3", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.3.tgz", + "integrity": "sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/lint-staged/node_modules/onetime": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-6.0.0.tgz", + "integrity": "sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==", + "dev": true, + "dependencies": { + "mimic-fn": "^4.0.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/lint-staged/node_modules/path-key": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-4.0.0.tgz", + "integrity": "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/lint-staged/node_modules/strip-final-newline": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-3.0.0.tgz", + "integrity": "sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/listr2": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/listr2/-/listr2-5.0.8.tgz", + "integrity": "sha512-mC73LitKHj9w6v30nLNGPetZIlfpUniNSsxxrbaPcWOjDb92SHPzJPi/t+v1YC/lxKz/AJ9egOjww0qUuFxBpA==", + "dev": true, + "dependencies": { + "cli-truncate": "^2.1.0", + "colorette": "^2.0.19", + "log-update": "^4.0.0", + "p-map": "^4.0.0", + "rfdc": "^1.3.0", + "rxjs": "^7.8.0", + "through": "^2.3.8", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": "^14.13.1 || >=16.0.0" + }, + "peerDependencies": { + "enquirer": ">= 2.3.0 < 3" + }, + "peerDependenciesMeta": { + "enquirer": { + "optional": true + } + } + }, + "node_modules/listr2/node_modules/cli-truncate": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-2.1.0.tgz", + "integrity": "sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg==", + "dev": true, + "dependencies": { + "slice-ansi": "^3.0.0", + "string-width": "^4.2.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/listr2/node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/listr2/node_modules/slice-ansi": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-3.0.0.tgz", + "integrity": "sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "astral-regex": "^2.0.0", + "is-fullwidth-code-point": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/load-json-file": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz", + "integrity": "sha512-Kx8hMakjX03tiGTLAIdJ+lL0htKnXjEZN6hk/tozf/WOuYGdZBJrZ+rCJRbVCugsjB3jMLn9746NsQIf5VjBMw==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.1.2", + "parse-json": "^4.0.0", + "pify": "^3.0.0", + "strip-bom": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/load-json-file/node_modules/parse-json": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", + "integrity": "sha512-aOIos8bujGN93/8Ox/jPLh7RwVnPEysynVFE+fQZyg6jKELEHwzgKdLRFHUgXJL6kylijVSBC4BvN9OmsB48Rw==", + "dev": true, + "dependencies": { + "error-ex": "^1.3.1", + "json-parse-better-errors": "^1.0.1" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/load-json-file/node_modules/pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/load-json-file/node_modules/strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, + "dependencies": { + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" + }, + "node_modules/lodash._reinterpolate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz", + "integrity": "sha512-xYHt68QRoYGjeeM/XOE1uJtvXQAgvszfBhjV4yvsQH0u2i9I6cI6c6/eG4Hh3UAOVn0y/xAXwmTzEay49Q//HA==", + "dev": true + }, + "node_modules/lodash.camelcase": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz", + "integrity": "sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==", + "dev": true + }, + "node_modules/lodash.defaults": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/lodash.defaults/-/lodash.defaults-4.2.0.tgz", + "integrity": "sha512-qjxPLHd3r5DnsdGacqOMU6pb/avJzdh9tFX2ymgoZE27BmjXrNy/y4LoaiTeAb+O3gL8AfpJGtqfX/ae2leYYQ==" + }, + "node_modules/lodash.isarguments": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz", + "integrity": "sha512-chi4NHZlZqZD18a0imDHnZPrDeBbTtVN7GXMwuGdRH9qotxAjYs3aVLKc7zNOG9eddR5Ksd8rvFEBc9SsggPpg==" + }, + "node_modules/lodash.isfunction": { + "version": "3.0.9", + "resolved": "https://registry.npmjs.org/lodash.isfunction/-/lodash.isfunction-3.0.9.tgz", + "integrity": "sha512-AirXNj15uRIMMPihnkInB4i3NHeb4iBtNg9WRWuK2o31S+ePwwNmDPaTL3o7dTJ+VXNZim7rFs4rxN4YU1oUJw==", + "dev": true + }, + "node_modules/lodash.ismatch": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/lodash.ismatch/-/lodash.ismatch-4.4.0.tgz", + "integrity": "sha512-fPMfXjGQEV9Xsq/8MTSgUf255gawYRbjwMyDbcvDhXgV7enSZA0hynz6vMPnpAb5iONEzBHBPsT+0zes5Z301g==", + "dev": true + }, + "node_modules/lodash.isplainobject": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", + "integrity": "sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==", + "dev": true + }, + "node_modules/lodash.kebabcase": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/lodash.kebabcase/-/lodash.kebabcase-4.1.1.tgz", + "integrity": "sha512-N8XRTIMMqqDgSy4VLKPnJ/+hpGZN+PHQiJnSenYqPaVV/NCqEogTnAdZLQiGKhxX+JCs8waWq2t1XHWKOmlY8g==", + "dev": true + }, + "node_modules/lodash.map": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/lodash.map/-/lodash.map-4.6.0.tgz", + "integrity": "sha512-worNHGKLDetmcEYDvh2stPCrrQRkP20E4l0iIS7F8EvzMqBBi7ltvFN5m1HvTf1P7Jk1txKhvFcmYsCr8O2F1Q==", + "dev": true + }, + "node_modules/lodash.memoize": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", + "integrity": "sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==", + "dev": true + }, + "node_modules/lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", + "dev": true + }, + "node_modules/lodash.mergewith": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.mergewith/-/lodash.mergewith-4.6.2.tgz", + "integrity": "sha512-GK3g5RPZWTRSeLSpgP8Xhra+pnjBC56q9FZYe1d5RN3TJ35dbkGy3YqBSMbyCrlbi+CM9Z3Jk5yTL7RCsqboyQ==", + "dev": true + }, + "node_modules/lodash.snakecase": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/lodash.snakecase/-/lodash.snakecase-4.1.1.tgz", + "integrity": "sha512-QZ1d4xoBHYUeuouhEq3lk3Uq7ldgyFXGBhg04+oRLnIz8o9T65Eh+8YdroUwn846zchkA9yDsDl5CVVaV2nqYw==", + "dev": true + }, + "node_modules/lodash.startcase": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/lodash.startcase/-/lodash.startcase-4.4.0.tgz", + "integrity": "sha512-+WKqsK294HMSc2jEbNgpHpd0JfIBhp7rEV4aqXWqFr6AlXov+SlcgB1Fv01y2kGe3Gc8nMW7VA0SrGuSkRfIEg==", + "dev": true + }, + "node_modules/lodash.template": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.template/-/lodash.template-4.5.0.tgz", + "integrity": "sha512-84vYFxIkmidUiFxidA/KjjH9pAycqW+h980j7Fuz5qxRtO9pgB7MDFTdys1N7A5mcucRiDyEq4fusljItR1T/A==", + "dev": true, + "dependencies": { + "lodash._reinterpolate": "^3.0.0", + "lodash.templatesettings": "^4.0.0" + } + }, + "node_modules/lodash.templatesettings": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/lodash.templatesettings/-/lodash.templatesettings-4.2.0.tgz", + "integrity": "sha512-stgLz+i3Aa9mZgnjr/O+v9ruKZsPsndy7qPZOchbqk2cnTU1ZaldKK+v7m54WoKIyxiuMZTKT2H81F8BeAc3ZQ==", + "dev": true, + "dependencies": { + "lodash._reinterpolate": "^3.0.0" + } + }, + "node_modules/lodash.uniq": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz", + "integrity": "sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==" + }, + "node_modules/lodash.upperfirst": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/lodash.upperfirst/-/lodash.upperfirst-4.3.1.tgz", + "integrity": "sha512-sReKOYJIJf74dhJONhU4e0/shzi1trVbSWDOhKYE5XV2O+H7Sb2Dihwuc7xWxVl+DgFPyTqIN3zMfT9cq5iWDg==", + "dev": true + }, + "node_modules/log-symbols": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", + "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", + "dev": true, + "dependencies": { + "chalk": "^4.1.0", + "is-unicode-supported": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/log-update": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/log-update/-/log-update-4.0.0.tgz", + "integrity": "sha512-9fkkDevMefjg0mmzWFBW8YkFP91OrizzkW3diF7CpG+S2EYdy4+TVfGwz1zeF8x7hCx1ovSPTOE9Ngib74qqUg==", + "dev": true, + "dependencies": { + "ansi-escapes": "^4.3.0", + "cli-cursor": "^3.1.0", + "slice-ansi": "^4.0.0", + "wrap-ansi": "^6.2.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/log-update/node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/log-update/node_modules/slice-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", + "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "astral-regex": "^2.0.0", + "is-fullwidth-code-point": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/slice-ansi?sponsor=1" + } + }, + "node_modules/log-update/node_modules/wrap-ansi": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", + "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/logform": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/logform/-/logform-2.4.2.tgz", + "integrity": "sha512-W4c9himeAwXEdZ05dQNerhFz2XG80P9Oj0loPUMV23VC2it0orMHQhJm4hdnnor3rd1HsGf6a2lPwBM1zeXHGw==", + "dependencies": { + "@colors/colors": "1.5.0", + "fecha": "^4.2.0", + "ms": "^2.1.1", + "safe-stable-stringify": "^2.3.1", + "triple-beam": "^1.3.0" + } + }, + "node_modules/longest": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/longest/-/longest-2.0.1.tgz", + "integrity": "sha512-Ajzxb8CM6WAnFjgiloPsI3bF+WCxcvhdIG3KNA2KN962+tdBsHcuQ4k4qX/EcS/2CRkcc0iAkR956Nib6aXU/Q==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/loud-rejection": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/loud-rejection/-/loud-rejection-1.6.0.tgz", + "integrity": "sha512-RPNliZOFkqFumDhvYqOaNY4Uz9oJM2K9tC6JWsJJsNdhuONW4LQHRBpb0qf4pJApVffI5N39SwzWZJuEhfd7eQ==", + "dev": true, + "dependencies": { + "currently-unhandled": "^0.4.1", + "signal-exit": "^3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/lowercase-keys": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz", + "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "dev": true, + "dependencies": { + "yallist": "^3.0.2" + } + }, + "node_modules/madge": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/madge/-/madge-6.1.0.tgz", + "integrity": "sha512-irWhT5RpFOc6lkzGHKLihonCVgM0YtfNUh4IrFeW3EqHpnt/JHUG3z26j8PeJEktCGB4tmGOOOJi1Rl/ACWucQ==", + "dev": true, + "dependencies": { + "chalk": "^4.1.1", + "commander": "^7.2.0", + "commondir": "^1.0.1", + "debug": "^4.3.1", + "dependency-tree": "^9.0.0", + "detective-amd": "^4.0.1", + "detective-cjs": "^4.0.0", + "detective-es6": "^3.0.0", + "detective-less": "^1.0.2", + "detective-postcss": "^6.1.0", + "detective-sass": "^4.0.1", + "detective-scss": "^3.0.0", + "detective-stylus": "^2.0.1", + "detective-typescript": "^9.0.0", + "ora": "^5.4.1", + "pluralize": "^8.0.0", + "precinct": "^8.1.0", + "pretty-ms": "^7.0.1", + "rc": "^1.2.7", + "stream-to-array": "^2.3.0", + "ts-graphviz": "^1.5.0", + "walkdir": "^0.4.1" + }, + "bin": { + "madge": "bin/cli.js" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "type": "individual", + "url": "https://www.paypal.me/pahen" + }, + "peerDependencies": { + "typescript": "^3.9.5 || ^4.9.5 || ^5" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/madge/node_modules/commander": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", + "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", + "dev": true, + "engines": { + "node": ">= 10" + } + }, + "node_modules/make-dir": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", + "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", + "dev": true, + "dependencies": { + "semver": "^6.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/make-dir/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/make-error": { + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", + "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", + "dev": true + }, + "node_modules/makeerror": { + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.12.tgz", + "integrity": "sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==", + "dev": true, + "dependencies": { + "tmpl": "1.0.5" + } + }, + "node_modules/map-obj": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-4.3.0.tgz", + "integrity": "sha512-hdN1wVrZbb29eBGiGjJbeP8JbKjq1urkHJ/LIP/NY48MZ1QVXUsQBV1G1zvYFHn1XE06cwjBsOI2K3Ulnj1YXQ==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/match-json": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/match-json/-/match-json-1.3.5.tgz", + "integrity": "sha512-V5Jw1rIdjt37vfQRqvKtXW4dKbSTpvgwyEPKOBikY90xQ5Wr5yOmfpjcTm12d0Kqq+TfMqlXJkETf4yOF9JhUw==" + }, + "node_modules/md5": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/md5/-/md5-2.3.0.tgz", + "integrity": "sha512-T1GITYmFaKuO91vxyoQMFETst+O71VUPEU3ze5GNzDm0OWdP8v1ziTaAEPUr/3kLsY3Sftgz242A1SetQiDL7g==", + "dependencies": { + "charenc": "0.0.2", + "crypt": "0.0.2", + "is-buffer": "~1.1.6" + } + }, + "node_modules/media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/meow": { + "version": "8.1.2", + "resolved": "https://registry.npmjs.org/meow/-/meow-8.1.2.tgz", + "integrity": "sha512-r85E3NdZ+mpYk1C6RjPFEMSE+s1iZMuHtsHAqY0DT3jZczl0diWUZ8g6oU7h0M9cD2EL+PzaYghhCLzR0ZNn5Q==", + "dev": true, + "dependencies": { + "@types/minimist": "^1.2.0", + "camelcase-keys": "^6.2.2", + "decamelize-keys": "^1.1.0", + "hard-rejection": "^2.1.0", + "minimist-options": "4.1.0", + "normalize-package-data": "^3.0.0", + "read-pkg-up": "^7.0.1", + "redent": "^3.0.0", + "trim-newlines": "^3.0.0", + "type-fest": "^0.18.0", + "yargs-parser": "^20.2.3" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/meow/node_modules/type-fest": { + "version": "0.18.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.18.1.tgz", + "integrity": "sha512-OIAYXk8+ISY+qTOwkHtKqzAuxchoMiD9Udx+FSGQDuiRR+PJKJHc2NJAXlbhkGwTt/4/nKZxELY1w3ReWOL8mw==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/merge": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/merge/-/merge-2.1.1.tgz", + "integrity": "sha512-jz+Cfrg9GWOZbQAnDQ4hlVnQky+341Yk5ru8bZSe6sIDTCIg8n9i/u7hSQGSVOF3C7lH6mGtqjkiT9G4wFLL0w==", + "dev": true + }, + "node_modules/merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", + "dev": true + }, + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/methods": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", + "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/micromatch": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", + "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "dev": true, + "dependencies": { + "braces": "^3.0.2", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/mime": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-2.6.0.tgz", + "integrity": "sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==", + "dev": true, + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/mimic-response": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", + "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/min-indent": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz", + "integrity": "sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/minimist": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz", + "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==" + }, + "node_modules/minimist-options": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/minimist-options/-/minimist-options-4.1.0.tgz", + "integrity": "sha512-Q4r8ghd80yhO/0j1O3B2BjweX3fiHg9cdOwjJd2J76Q135c+NDxGCqdYKQ1SKBuFfgWbAUzBfvYjPUEeNgqN1A==", + "dev": true, + "dependencies": { + "arrify": "^1.0.1", + "is-plain-obj": "^1.1.0", + "kind-of": "^6.0.3" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/minipass": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.2.tgz", + "integrity": "sha512-eL79dXrE1q9dBbDCLg7xfn/vl7MS4F1gvJAgjJrQli/jbQWdUttuVawphqpffoIYfRdq78LHx6GP4bU/EQ2ATA==", + "dev": true, + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/mocked-env": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/mocked-env/-/mocked-env-1.3.5.tgz", + "integrity": "sha512-GyYY6ynVOdEoRlaGpaq8UYwdWkvrsU2xRme9B+WPSuJcNjh17+3QIxSYU6zwee0SbehhV6f06VZ4ahjG+9zdrA==", + "dev": true, + "dependencies": { + "check-more-types": "2.24.0", + "debug": "4.3.2", + "lazy-ass": "1.6.0", + "ramda": "0.27.1" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/mocked-env/node_modules/debug": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", + "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", + "dev": true, + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/modclean": { + "version": "3.0.0-beta.1", + "resolved": "https://registry.npmjs.org/modclean/-/modclean-3.0.0-beta.1.tgz", + "integrity": "sha512-NyJpuqXMUI190sZePU+dBcwlGaqhfFC+UL5WyNSxmNLOHATg9cVSgRpbY+mUbwUj7t5trb4vYscgXArKevYsdA==", + "dependencies": { + "await-handler": "^1.1.0", + "chalk": "^2.4.1", + "commander": "^2.9.0", + "empty-dir": "^1.0.0", + "glob": "^7.1.2", + "lodash.uniq": "^4.5.0", + "modclean-patterns-default": "latest", + "ora": "^2.1.0", + "progress": "^2.0.0", + "rimraf": "^2.5.4", + "subdirs": "^1.0.1" + }, + "bin": { + "modclean": "bin/modclean.js" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/modclean-patterns-default": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/modclean-patterns-default/-/modclean-patterns-default-1.1.2.tgz", + "integrity": "sha512-h2+ES3SKl+JOtfptJjwJz5fdogFI0byYssw3lXoESNkOcXCnjCvvW6IbMagAKFmfWOx+n9esyomxWP1w4edZjg==" + }, + "node_modules/modclean/node_modules/ansi-regex": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.1.tgz", + "integrity": "sha512-+O9Jct8wf++lXxxFc4hc8LsjaSq0HFzzL7cVsw8pRDIPdjKD2mT4ytDZlLuSBZ4cLKZFXIrMGO7DbQCtMJJMKw==", + "engines": { + "node": ">=4" + } + }, + "node_modules/modclean/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/modclean/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/modclean/node_modules/cli-cursor": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz", + "integrity": "sha512-8lgKz8LmCRYZZQDpRyT2m5rKJ08TnU4tR9FFFW2rxpxR1FzWi4PQ/NfyODchAatHaUgnSPVcx/R5w6NuTBzFiw==", + "dependencies": { + "restore-cursor": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/modclean/node_modules/cli-spinners": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-1.3.1.tgz", + "integrity": "sha512-1QL4544moEsDVH9T/l6Cemov/37iv1RtoKf7NJ04A60+4MREXNfx/QvavbH6QoGdsD4N4Mwy49cmaINR/o2mdg==", + "engines": { + "node": ">=4" + } + }, + "node_modules/modclean/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/modclean/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" + }, + "node_modules/modclean/node_modules/commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==" + }, + "node_modules/modclean/node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/modclean/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "engines": { + "node": ">=4" + } + }, + "node_modules/modclean/node_modules/log-symbols": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-2.2.0.tgz", + "integrity": "sha512-VeIAFslyIerEJLXHziedo2basKbMKtTw3vfn5IzG0XTjhAVEJyNHnL2p7vc+wBDSdQuUpNw3M2u6xb9QsAY5Eg==", + "dependencies": { + "chalk": "^2.0.1" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/modclean/node_modules/mimic-fn": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz", + "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==", + "engines": { + "node": ">=4" + } + }, + "node_modules/modclean/node_modules/onetime": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz", + "integrity": "sha512-oyyPpiMaKARvvcgip+JV+7zci5L8D1W9RZIz2l1o08AM3pfspitVWnPt3mzHcBPp12oYMTy0pqrFs/C+m3EwsQ==", + "dependencies": { + "mimic-fn": "^1.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/modclean/node_modules/ora": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/ora/-/ora-2.1.0.tgz", + "integrity": "sha512-hNNlAd3gfv/iPmsNxYoAPLvxg7HuPozww7fFonMZvL84tP6Ox5igfk5j/+a9rtJJwqMgKK+JgWsAQik5o0HTLA==", + "dependencies": { + "chalk": "^2.3.1", + "cli-cursor": "^2.1.0", + "cli-spinners": "^1.1.0", + "log-symbols": "^2.2.0", + "strip-ansi": "^4.0.0", + "wcwidth": "^1.0.1" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/modclean/node_modules/restore-cursor": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz", + "integrity": "sha512-6IzJLuGi4+R14vwagDHX+JrXmPVtPpn4mffDJ1UdR7/Edm87fl6yi8mMBIVvFtJaNTUvjughmW4hwLhRG7gC1Q==", + "dependencies": { + "onetime": "^2.0.0", + "signal-exit": "^3.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/modclean/node_modules/rimraf": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + } + }, + "node_modules/modclean/node_modules/strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha512-4XaJ2zQdCzROZDivEVIDPkcQn8LMFSa8kj8Gxb/Lnwzv9A8VctNZ+lfivC/sV3ivW8ElJTERXZoPBRrZKkNKow==", + "dependencies": { + "ansi-regex": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/modclean/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/modify-values": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/modify-values/-/modify-values-1.0.1.tgz", + "integrity": "sha512-xV2bxeN6F7oYjZWTe/YPAy6MN2M+sL4u/Rlm2AHCIVGfo2p1yGmBHQ6vHehl4bRTZBdHu3TSkWdYgkwpYzAGSw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/module-definition": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/module-definition/-/module-definition-3.4.0.tgz", + "integrity": "sha512-XxJ88R1v458pifaSkPNLUTdSPNVGMP2SXVncVmApGO+gAfrLANiYe6JofymCzVceGOMwQE2xogxBSc8uB7XegA==", + "dev": true, + "dependencies": { + "ast-module-types": "^3.0.0", + "node-source-walk": "^4.0.0" + }, + "bin": { + "module-definition": "bin/cli.js" + }, + "engines": { + "node": ">=6.0" + } + }, + "node_modules/module-lookup-amd": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/module-lookup-amd/-/module-lookup-amd-7.0.1.tgz", + "integrity": "sha512-w9mCNlj0S8qviuHzpakaLVc+/7q50jl9a/kmJ/n8bmXQZgDPkQHnPBb8MUOYh3WpAYkXuNc2c+khsozhIp/amQ==", + "dev": true, + "dependencies": { + "commander": "^2.8.1", + "debug": "^4.1.0", + "glob": "^7.1.6", + "requirejs": "^2.3.5", + "requirejs-config-file": "^4.0.0" + }, + "bin": { + "lookup-amd": "bin/cli.js" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/module-lookup-amd/node_modules/commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "dev": true + }, + "node_modules/module-lookup-amd/node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/moment": { + "version": "2.29.4", + "resolved": "https://registry.npmjs.org/moment/-/moment-2.29.4.tgz", + "integrity": "sha512-5LC9SOxjSc2HF6vO2CyuTDNivEdoz2IvyJJGj6X8DJ0eFyfszE0QiEd+iXmBvUP3WHxSjFH/vIsA0EN00cgr8w==", + "engines": { + "node": "*" + } + }, + "node_modules/moment-timezone": { + "version": "0.5.43", + "resolved": "https://registry.npmjs.org/moment-timezone/-/moment-timezone-0.5.43.tgz", + "integrity": "sha512-72j3aNyuIsDxdF1i7CEgV2FfxM1r6aaqJyLB2vwb33mXYyoyLly+F1zbWqhA3/bVIoJ4szlUoMbUnVdid32NUQ==", + "dependencies": { + "moment": "^2.29.4" + }, + "engines": { + "node": "*" + } + }, + "node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, + "node_modules/mute-stream": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz", + "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==", + "dev": true + }, + "node_modules/nanoid": { + "version": "3.3.4", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.4.tgz", + "integrity": "sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==", + "dev": true, + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", + "dev": true + }, + "node_modules/natural-compare-lite": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare-lite/-/natural-compare-lite-1.4.0.tgz", + "integrity": "sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==", + "dev": true + }, + "node_modules/negotiator": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", + "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/neo-async": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", + "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==" + }, + "node_modules/node-cache": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/node-cache/-/node-cache-5.1.2.tgz", + "integrity": "sha512-t1QzWwnk4sjLWaQAS8CHgOJ+RAfmHpxFWmc36IWTiWHQfs0w5JDMBS1b1ZxQteo0vVVuWJvIUKHDkkeK7vIGCg==", + "dependencies": { + "clone": "2.x" + }, + "engines": { + "node": ">= 8.0.0" + } + }, + "node_modules/node-fetch": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.9.tgz", + "integrity": "sha512-DJm/CJkZkRjKKj4Zi4BsKVZh3ValV5IR5s7LVZnW+6YMh0W1BfNA8XSs6DLMGYlId5F3KnA70uu2qepcR08Qqg==", + "dependencies": { + "whatwg-url": "^5.0.0" + }, + "engines": { + "node": "4.x || >=6.0.0" + }, + "peerDependencies": { + "encoding": "^0.1.0" + }, + "peerDependenciesMeta": { + "encoding": { + "optional": true + } + } + }, + "node_modules/node-fetch/node_modules/tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" + }, + "node_modules/node-fetch/node_modules/webidl-conversions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" + }, + "node_modules/node-fetch/node_modules/whatwg-url": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", + "dependencies": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } + }, + "node_modules/node-gyp-build": { + "version": "3.9.0", + "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-3.9.0.tgz", + "integrity": "sha512-zLcTg6P4AbcHPq465ZMFNXx7XpKKJh+7kkN699NiQWisR2uWYOWNWqRHAmbnmKiL4e9aLSlmy5U7rEMUXV59+A==", + "bin": { + "node-gyp-build": "bin.js", + "node-gyp-build-optional": "optional.js", + "node-gyp-build-test": "build-test.js" + } + }, + "node_modules/node-int64": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", + "integrity": "sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==", + "dev": true + }, + "node_modules/node-notifier": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/node-notifier/-/node-notifier-10.0.1.tgz", + "integrity": "sha512-YX7TSyDukOZ0g+gmzjB6abKu+hTGvO8+8+gIFDsRCU2t8fLV/P2unmt+LGFaIa4y64aX98Qksa97rgz4vMNeLQ==", + "dev": true, + "dependencies": { + "growly": "^1.3.0", + "is-wsl": "^2.2.0", + "semver": "^7.3.5", + "shellwords": "^0.1.1", + "uuid": "^8.3.2", + "which": "^2.0.2" + } + }, + "node_modules/node-notifier/node_modules/uuid": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", + "dev": true, + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "node_modules/node-releases": { + "version": "2.0.12", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.12.tgz", + "integrity": "sha512-QzsYKWhXTWx8h1kIvqfnC++o0pEmpRQA/aenALsL2F4pqNVr7YzcdMlDij5WBnwftRbJCNJL/O7zdKaxKPHqgQ==", + "dev": true + }, + "node_modules/node-source-walk": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/node-source-walk/-/node-source-walk-4.3.0.tgz", + "integrity": "sha512-8Q1hXew6ETzqKRAs3jjLioSxNfT1cx74ooiF8RlAONwVMcfq+UdzLC2eB5qcPldUxaE5w3ytLkrmV1TGddhZTA==", + "dev": true, + "dependencies": { + "@babel/parser": "^7.0.0" + }, + "engines": { + "node": ">=6.0" + } + }, + "node_modules/normalize-package-data": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-3.0.3.tgz", + "integrity": "sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA==", + "dev": true, + "dependencies": { + "hosted-git-info": "^4.0.1", + "is-core-module": "^2.5.0", + "semver": "^7.3.4", + "validate-npm-package-license": "^3.0.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/normalize-url": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-2.0.1.tgz", + "integrity": "sha512-D6MUW4K/VzoJ4rJ01JFKxDrtY1v9wrgzCX5f2qj/lzH1m/lW6MhUZFKerVsnyjOhOsYzI9Kqqak+10l4LvLpMw==", + "dev": true, + "dependencies": { + "prepend-http": "^2.0.0", + "query-string": "^5.0.1", + "sort-keys": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/npm-run-path": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", + "dev": true, + "dependencies": { + "path-key": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/number-is-nan": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", + "integrity": "sha512-4jbtZXNAsfZbAHiiqjLPBiCl16dES1zI4Hpzzxw61Tk+loF+sBDBKx1ICKKKwIqQ7M0mFn1TmkN7euSncWgHiQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/oauth-1.0a": { + "version": "2.2.6", + "resolved": "https://registry.npmjs.org/oauth-1.0a/-/oauth-1.0a-2.2.6.tgz", + "integrity": "sha512-6bkxv3N4Gu5lty4viIcIAnq5GbxECviMBeKR3WX/q87SPQ8E8aursPZUtsXDnxCs787af09WPRBLqYrf/lwoYQ==" + }, + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-hash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-3.0.0.tgz", + "integrity": "sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==", + "engines": { + "node": ">= 6" + } + }, + "node_modules/object-inspect": { + "version": "1.12.2", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.2.tgz", + "integrity": "sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "dev": true, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object.assign": { + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.4.tgz", + "integrity": "sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "has-symbols": "^1.0.3", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object.entries": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.6.tgz", + "integrity": "sha512-leTPzo4Zvg3pmbQ3rDK69Rl8GQvIqMWubrkxONG9/ojtFE2rD9fjMKfSI5BxW3osRH1m6VdzmqK8oAY9aT4x5w==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object.values": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.6.tgz", + "integrity": "sha512-FVVTkD1vENCsAcwNs9k6jea2uHC/X0+JcjG8YA60FN5CMaJmG95wT9jek/xX9nornqGRrBkKtzuAu2wuHpKqvw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/on-finished": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", + "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", + "dependencies": { + "ee-first": "1.1.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/one-time": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/one-time/-/one-time-1.0.0.tgz", + "integrity": "sha512-5DXOiRKwuSEcQ/l0kGCF6Q3jcADFv5tSmRaJck/OqkVFcOzutB134KRSfF0xDrL39MNnqxbHBbUUcjZIhTgb2g==", + "dependencies": { + "fn.name": "1.x.x" + } + }, + "node_modules/onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "dev": true, + "dependencies": { + "mimic-fn": "^2.1.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/only": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/only/-/only-0.0.2.tgz", + "integrity": "sha512-Fvw+Jemq5fjjyWz6CpKx6w9s7xxqo3+JCyM0WXWeCSOboZ8ABkyvP8ID4CZuChA/wxSx+XSJmdOm8rGVyJ1hdQ==" + }, + "node_modules/openapi-types": { + "version": "12.1.3", + "resolved": "https://registry.npmjs.org/openapi-types/-/openapi-types-12.1.3.tgz", + "integrity": "sha512-N4YtSYJqghVu4iek2ZUvcN/0aqH1kRDuNqzcycDxhOUpg7GdvLa2F3DgS6yBNhInhv2r/6I0Flkn7CqL8+nIcw==", + "dev": true, + "peer": true + }, + "node_modules/optionator": { + "version": "0.9.3", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.3.tgz", + "integrity": "sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==", + "dev": true, + "dependencies": { + "@aashutoshrathi/word-wrap": "^1.2.3", + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/ora": { + "version": "5.4.1", + "resolved": "https://registry.npmjs.org/ora/-/ora-5.4.1.tgz", + "integrity": "sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==", + "dev": true, + "dependencies": { + "bl": "^4.1.0", + "chalk": "^4.1.0", + "cli-cursor": "^3.1.0", + "cli-spinners": "^2.5.0", + "is-interactive": "^1.0.0", + "is-unicode-supported": "^0.1.0", + "log-symbols": "^4.1.0", + "strip-ansi": "^6.0.0", + "wcwidth": "^1.0.1" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/os-tmpdir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", + "integrity": "sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/p-cancelable": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-0.4.1.tgz", + "integrity": "sha512-HNa1A8LvB1kie7cERyy21VNeHb2CWJJYqyyC2o3klWFfMGlFmWv2Z7sFgZH8ZiaYL95ydToKTFVXgMV/Os0bBQ==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/p-finally": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", + "integrity": "sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/p-is-promise": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/p-is-promise/-/p-is-promise-1.1.0.tgz", + "integrity": "sha512-zL7VE4JVS2IFSkR2GQKDSPEVxkoH43/p7oEnwpdCndKYJO0HVeRB7fA8TJwuLOTBREtK0ea8eHaxdwcpob5dmg==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, + "dependencies": { + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-map": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", + "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", + "dev": true, + "dependencies": { + "aggregate-error": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-timeout": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-2.0.1.tgz", + "integrity": "sha512-88em58dDVB/KzPEx1X0N3LwFfYZPyDc4B6eF38M1rk9VTZMbxXXgjugz8mmwpS9Ox4BDZ+t6t3QP5+/gazweIA==", + "dev": true, + "dependencies": { + "p-finally": "^1.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "engines": { + "node": ">=6" + } + }, + "node_modules/p-wait-for": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/p-wait-for/-/p-wait-for-3.2.0.tgz", + "integrity": "sha512-wpgERjNkLrBiFmkMEjuZJEWKKDrNfHCKA1OhyN1wg1FrLkULbviEy6py1AyJUgZ72YWFbZ38FIpnqvVqAlDUwA==", + "dev": true, + "dependencies": { + "p-timeout": "^3.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-wait-for/node_modules/p-timeout": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-3.2.0.tgz", + "integrity": "sha512-rhIwUycgwwKcP9yTOOFK/AKsAopjjCakVqLHePO3CC6Mir1Z99xT+R63jZxAT5lFZLa2inS5h+ZS2GvR99/FBg==", + "dev": true, + "dependencies": { + "p-finally": "^1.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dev": true, + "dependencies": { + "callsites": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/parse-github-repo-url": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/parse-github-repo-url/-/parse-github-repo-url-1.4.1.tgz", + "integrity": "sha512-bSWyzBKqcSL4RrncTpGsEKoJ7H8a4L3++ifTAbTFeMHyq2wRV+42DGmQcHIrJIvdcacjIOxEuKH/w4tthF17gg==", + "dev": true + }, + "node_modules/parse-json": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", + "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", + "dependencies": { + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-even-better-errors": "^2.3.0", + "lines-and-columns": "^1.1.6" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/parse-ms": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/parse-ms/-/parse-ms-2.1.0.tgz", + "integrity": "sha512-kHt7kzLoS9VBZfUsiKjv43mr91ea+U05EyKkEtqp7vNbHxmaVuEqN7XxeEVnGrMtYOAxGrDElSi96K7EgO1zCA==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/parse-passwd": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/parse-passwd/-/parse-passwd-1.0.0.tgz", + "integrity": "sha512-1Y1A//QUXEZK7YKz+rD9WydcE1+EuPr6ZBgKecAB8tmoW6UFv0NREVJe1p+jRxtThkcbbKkfwIbWJe/IeE6m2Q==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/parse-static-imports": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/parse-static-imports/-/parse-static-imports-1.1.0.tgz", + "integrity": "sha512-HlxrZcISCblEV0lzXmAHheH/8qEkKgmqkdxyHTPbSqsTUV8GzqmN1L+SSti+VbNPfbBO3bYLPHDiUs2avbAdbA==" + }, + "node_modules/parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "engines": { + "node": ">=8" + } + }, + "node_modules/path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" + }, + "node_modules/path-scurry": { + "version": "1.10.1", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.10.1.tgz", + "integrity": "sha512-MkhCqzzBEpPvxxQ71Md0b1Kk51W01lrYvlMzSUaIzNsODdd7mqhiimSZlr+VegAz5Z6Vzt9Xg2ttE//XBhH3EQ==", + "dev": true, + "dependencies": { + "lru-cache": "^9.1.1 || ^10.0.0", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/path-scurry/node_modules/lru-cache": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.0.0.tgz", + "integrity": "sha512-svTf/fzsKHffP42sujkO/Rjs37BCIsQVRCeNYIm9WN8rgT7ffoUnRtZCqU+6BqcSBdv8gwJeTz8knJpgACeQMw==", + "dev": true, + "engines": { + "node": "14 || >=16.14" + } + }, + "node_modules/path-to-regexp": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-6.2.1.tgz", + "integrity": "sha512-JLyh7xT1kizaEvcaXOQwOc2/Yhw6KZOvPf1S8401UyLk86CU79LN3vl7ztXGm/pZ+YjoyAJ4rxmHwbkBXJX+yw==" + }, + "node_modules/path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/picocolors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", + "dev": true + }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/pidtree": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/pidtree/-/pidtree-0.6.0.tgz", + "integrity": "sha512-eG2dWTVw5bzqGRztnHExczNxt5VGsE6OwTeCG3fdUf9KBsZzO3R5OIIIzWR+iZA0NtZ+RDVdaoE2dK1cn6jH4g==", + "dev": true, + "bin": { + "pidtree": "bin/pidtree.js" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/pinkie": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", + "integrity": "sha512-MnUuEycAemtSaeFSjXKW/aroV7akBbY+Sv+RkyqFjgAe73F+MR0TBWKBRDkmfWq/HiFmdavfZ1G7h4SPZXaCSg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/pinkie-promise": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", + "integrity": "sha512-0Gni6D4UcLTbv9c57DfxDGdr41XfgUjqWZu492f0cIGr16zDU06BWP/RAEvOuo7CQ0CNjHaLlM59YJJFm3NWlw==", + "dev": true, + "dependencies": { + "pinkie": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/pirates": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.5.tgz", + "integrity": "sha512-8V9+HQPupnaXMA23c5hvl69zXvTwTzyAYasnkb0Tts4XvO4CliqONMOnvlq26rkhLC3nWDFBJf73LU1e1VZLaQ==", + "dev": true, + "engines": { + "node": ">= 6" + } + }, + "node_modules/pkg-dir": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", + "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", + "dev": true, + "dependencies": { + "find-up": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/pkg-dir/node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/pkg-dir/node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/pkg-dir/node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/pkg-dir/node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/pluralize": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/pluralize/-/pluralize-8.0.0.tgz", + "integrity": "sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss": { + "version": "8.4.21", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.21.tgz", + "integrity": "sha512-tP7u/Sn/dVxK2NnruI4H9BG+x+Wxz6oeZ1cJ8P6G/PZY0IKk4k/63TDsQf2kQq3+qoJeLm2kIBUNlZe3zgb4Zg==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + } + ], + "dependencies": { + "nanoid": "^3.3.4", + "picocolors": "^1.0.0", + "source-map-js": "^1.0.2" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/postcss-values-parser": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/postcss-values-parser/-/postcss-values-parser-6.0.2.tgz", + "integrity": "sha512-YLJpK0N1brcNJrs9WatuJFtHaV9q5aAOj+S4DI5S7jgHlRfm0PIbDCAFRYMQD5SHq7Fy6xsDhyutgS0QOAs0qw==", + "dev": true, + "dependencies": { + "color-name": "^1.1.4", + "is-url-superb": "^4.0.0", + "quote-unquote": "^1.0.0" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "postcss": "^8.2.9" + } + }, + "node_modules/pprof-format": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/pprof-format/-/pprof-format-2.0.7.tgz", + "integrity": "sha512-1qWaGAzwMpaXJP9opRa23nPnt2Egi7RMNoNBptEE/XwHbcn4fC2b/4U4bKc5arkGkIh2ZabpF2bEb+c5GNHEKA==" + }, + "node_modules/precinct": { + "version": "8.3.1", + "resolved": "https://registry.npmjs.org/precinct/-/precinct-8.3.1.tgz", + "integrity": "sha512-pVppfMWLp2wF68rwHqBIpPBYY8Kd12lDhk8LVQzOwqllifVR15qNFyod43YLyFpurKRZQKnE7E4pofAagDOm2Q==", + "dev": true, + "dependencies": { + "commander": "^2.20.3", + "debug": "^4.3.3", + "detective-amd": "^3.1.0", + "detective-cjs": "^3.1.1", + "detective-es6": "^2.2.1", + "detective-less": "^1.0.2", + "detective-postcss": "^4.0.0", + "detective-sass": "^3.0.1", + "detective-scss": "^2.0.1", + "detective-stylus": "^1.0.0", + "detective-typescript": "^7.0.0", + "module-definition": "^3.3.1", + "node-source-walk": "^4.2.0" + }, + "bin": { + "precinct": "bin/cli.js" + }, + "engines": { + "node": "^10.13 || ^12 || >=14" + } + }, + "node_modules/precinct/node_modules/@typescript-eslint/types": { + "version": "4.33.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-4.33.0.tgz", + "integrity": "sha512-zKp7CjQzLQImXEpLt2BUw1tvOMPfNoTAfb8l51evhYbOEEzdWyQNmHWWGPR6hwKJDAi+1VXSBmnhL9kyVTTOuQ==", + "dev": true, + "engines": { + "node": "^8.10.0 || ^10.13.0 || >=11.10.1" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/precinct/node_modules/@typescript-eslint/typescript-estree": { + "version": "4.33.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-4.33.0.tgz", + "integrity": "sha512-rkWRY1MPFzjwnEVHsxGemDzqqddw2QbTJlICPD9p9I9LfsO8fdmfQPOX3uKfUaGRDFJbfrtm/sXhVXN4E+bzCA==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "4.33.0", + "@typescript-eslint/visitor-keys": "4.33.0", + "debug": "^4.3.1", + "globby": "^11.0.3", + "is-glob": "^4.0.1", + "semver": "^7.3.5", + "tsutils": "^3.21.0" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/precinct/node_modules/@typescript-eslint/visitor-keys": { + "version": "4.33.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-4.33.0.tgz", + "integrity": "sha512-uqi/2aSz9g2ftcHWf8uLPJA70rUv6yuMW5Bohw+bwcuzaxQIHaKFZCKGoGXIrc9vkTJ3+0txM73K0Hq3d5wgIg==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "4.33.0", + "eslint-visitor-keys": "^2.0.0" + }, + "engines": { + "node": "^8.10.0 || ^10.13.0 || >=11.10.1" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/precinct/node_modules/commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "dev": true + }, + "node_modules/precinct/node_modules/detective-amd": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/detective-amd/-/detective-amd-3.1.2.tgz", + "integrity": "sha512-jffU26dyqJ37JHR/o44La6CxtrDf3Rt9tvd2IbImJYxWKTMdBjctp37qoZ6ZcY80RHg+kzWz4bXn39e4P7cctQ==", + "dev": true, + "dependencies": { + "ast-module-types": "^3.0.0", + "escodegen": "^2.0.0", + "get-amd-module-type": "^3.0.0", + "node-source-walk": "^4.2.0" + }, + "bin": { + "detective-amd": "bin/cli.js" + }, + "engines": { + "node": ">=6.0" + } + }, + "node_modules/precinct/node_modules/detective-cjs": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/detective-cjs/-/detective-cjs-3.1.3.tgz", + "integrity": "sha512-ljs7P0Yj9MK64B7G0eNl0ThWSYjhAaSYy+fQcpzaKalYl/UoQBOzOeLCSFEY1qEBhziZ3w7l46KG/nH+s+L7BQ==", + "dev": true, + "dependencies": { + "ast-module-types": "^3.0.0", + "node-source-walk": "^4.0.0" + }, + "engines": { + "node": ">=6.0" + } + }, + "node_modules/precinct/node_modules/detective-es6": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/detective-es6/-/detective-es6-2.2.2.tgz", + "integrity": "sha512-eZUKCUsbHm8xoeoCM0z6JFwvDfJ5Ww5HANo+jPR7AzkFpW9Mun3t/TqIF2jjeWa2TFbAiGaWESykf2OQp3oeMw==", + "dev": true, + "dependencies": { + "node-source-walk": "^4.0.0" + }, + "engines": { + "node": ">=6.0" + } + }, + "node_modules/precinct/node_modules/detective-postcss": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/detective-postcss/-/detective-postcss-4.0.0.tgz", + "integrity": "sha512-Fwc/g9VcrowODIAeKRWZfVA/EufxYL7XfuqJQFroBKGikKX83d2G7NFw6kDlSYGG3LNQIyVa+eWv1mqre+v4+A==", + "dev": true, + "dependencies": { + "debug": "^4.1.1", + "is-url": "^1.2.4", + "postcss": "^8.1.7", + "postcss-values-parser": "^2.0.1" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/precinct/node_modules/detective-sass": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/detective-sass/-/detective-sass-3.0.2.tgz", + "integrity": "sha512-DNVYbaSlmti/eztFGSfBw4nZvwsTaVXEQ4NsT/uFckxhJrNRFUh24d76KzoCC3aarvpZP9m8sC2L1XbLej4F7g==", + "dev": true, + "dependencies": { + "gonzales-pe": "^4.3.0", + "node-source-walk": "^4.0.0" + }, + "engines": { + "node": ">=6.0" + } + }, + "node_modules/precinct/node_modules/detective-scss": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/detective-scss/-/detective-scss-2.0.2.tgz", + "integrity": "sha512-hDWnWh/l0tht/7JQltumpVea/inmkBaanJUcXRB9kEEXVwVUMuZd6z7eusQ6GcBFrfifu3pX/XPyD7StjbAiBg==", + "dev": true, + "dependencies": { + "gonzales-pe": "^4.3.0", + "node-source-walk": "^4.0.0" + }, + "engines": { + "node": ">=6.0" + } + }, + "node_modules/precinct/node_modules/detective-stylus": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/detective-stylus/-/detective-stylus-1.0.3.tgz", + "integrity": "sha512-4/bfIU5kqjwugymoxLXXLltzQNeQfxGoLm2eIaqtnkWxqbhap9puDVpJPVDx96hnptdERzS5Cy6p9N8/08A69Q==", + "dev": true + }, + "node_modules/precinct/node_modules/detective-typescript": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/detective-typescript/-/detective-typescript-7.0.2.tgz", + "integrity": "sha512-unqovnhxzvkCz3m1/W4QW4qGsvXCU06aU2BAm8tkza+xLnp9SOFnob2QsTxUv5PdnQKfDvWcv9YeOeFckWejwA==", + "dev": true, + "dependencies": { + "@typescript-eslint/typescript-estree": "^4.33.0", + "ast-module-types": "^2.7.1", + "node-source-walk": "^4.2.0", + "typescript": "^3.9.10" + }, + "engines": { + "node": "^10.13 || >=12.0.0" + } + }, + "node_modules/precinct/node_modules/detective-typescript/node_modules/ast-module-types": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/ast-module-types/-/ast-module-types-2.7.1.tgz", + "integrity": "sha512-Rnnx/4Dus6fn7fTqdeLEAn5vUll5w7/vts0RN608yFa6si/rDOUonlIIiwugHBFWjylHjxm9owoSZn71KwG4gw==", + "dev": true + }, + "node_modules/precinct/node_modules/eslint-visitor-keys": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", + "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/precinct/node_modules/get-amd-module-type": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/get-amd-module-type/-/get-amd-module-type-3.0.2.tgz", + "integrity": "sha512-PcuKwB8ouJnKuAPn6Hk3UtdfKoUV3zXRqVEvj8XGIXqjWfgd1j7QGdXy5Z9OdQfzVt1Sk29HVe/P+X74ccOuqw==", + "dev": true, + "dependencies": { + "ast-module-types": "^3.0.0", + "node-source-walk": "^4.2.2" + }, + "engines": { + "node": ">=6.0" + } + }, + "node_modules/precinct/node_modules/postcss-values-parser": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/postcss-values-parser/-/postcss-values-parser-2.0.1.tgz", + "integrity": "sha512-2tLuBsA6P4rYTNKCXYG/71C7j1pU6pK503suYOmn4xYrQIzW+opD+7FAFNuGSdZC/3Qfy334QbeMu7MEb8gOxg==", + "dev": true, + "dependencies": { + "flatten": "^1.0.2", + "indexes-of": "^1.0.1", + "uniq": "^1.0.1" + }, + "engines": { + "node": ">=6.14.4" + } + }, + "node_modules/precinct/node_modules/typescript": { + "version": "3.9.10", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.9.10.tgz", + "integrity": "sha512-w6fIxVE/H1PkLKcCPsFqKE7Kv7QUwhU8qQY2MueZXWx5cPZdwFupLgKK3vntcK98BtNHZtAF4LA/yl2a7k8R6Q==", + "dev": true, + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=4.2.0" + } + }, + "node_modules/prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "dev": true, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/prepend-http": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz", + "integrity": "sha512-ravE6m9Atw9Z/jjttRUZ+clIXogdghyZAuWJ3qEzjT+jI/dL1ifAqhZeC5VHzQp1MSt1+jxKkFNemj/iO7tVUA==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/prettier": { + "version": "2.8.8", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.8.tgz", + "integrity": "sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==", + "dev": true, + "bin": { + "prettier": "bin-prettier.js" + }, + "engines": { + "node": ">=10.13.0" + }, + "funding": { + "url": "https://github.com/prettier/prettier?sponsor=1" + } + }, + "node_modules/pretty-bytes": { + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-5.6.0.tgz", + "integrity": "sha512-FFw039TmrBqFK8ma/7OL3sDz/VytdtJr044/QUJtH0wK9lb9jLq9tJyIxUwtQJHwar2BqtiA4iCWSwo9JLkzFg==", + "dev": true, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/pretty-format": { + "version": "29.6.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.6.0.tgz", + "integrity": "sha512-XH+D4n7Ey0iSR6PdAnBs99cWMZdGsdKrR33iUHQNr79w1szKTCIZDVdXuccAsHVwDBp0XeWPfNEoaxP9EZgRmQ==", + "dev": true, + "dependencies": { + "@jest/schemas": "^29.6.0", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/pretty-format/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/pretty-format/node_modules/react-is": { + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", + "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==", + "dev": true + }, + "node_modules/pretty-ms": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/pretty-ms/-/pretty-ms-7.0.1.tgz", + "integrity": "sha512-973driJZvxiGOQ5ONsFhOF/DtzPMOMtgC11kCpUrPGMTgqp2q/1gwzCquocrN33is0VZ5GFHXZYMM9l6h67v2Q==", + "dev": true, + "dependencies": { + "parse-ms": "^2.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", + "dev": true + }, + "node_modules/progress": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", + "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/prom-client": { + "version": "14.2.0", + "resolved": "https://registry.npmjs.org/prom-client/-/prom-client-14.2.0.tgz", + "integrity": "sha512-sF308EhTenb/pDRPakm+WgiN+VdM/T1RaHj1x+MvAuT8UiQP8JmOEbxVqtkbfR4LrvOg5n7ic01kRBDGXjYikA==", + "dependencies": { + "tdigest": "^0.1.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/prompts": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", + "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==", + "dev": true, + "dependencies": { + "kleur": "^3.0.3", + "sisteransi": "^1.0.5" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/proxy-from-env": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", + "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==" + }, + "node_modules/pump": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", + "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", + "dependencies": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "node_modules/punycode": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", + "engines": { + "node": ">=6" + } + }, + "node_modules/pure-rand": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/pure-rand/-/pure-rand-6.0.2.tgz", + "integrity": "sha512-6Yg0ekpKICSjPswYOuC5sku/TSWaRYlA0qsXqJgM/d/4pLPHPuTxK7Nbf7jFKzAeedUhR8C7K9Uv63FBsSo8xQ==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/dubzzz" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/fast-check" + } + ] + }, + "node_modules/q": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz", + "integrity": "sha512-kV/CThkXo6xyFEZUugw/+pIOywXcDbFYgSct5cT3gqlbkBE1SJdwy6UQoZvodiWF/ckQLZyDE/Bu1M6gVu5lVw==", + "dev": true, + "engines": { + "node": ">=0.6.0", + "teleport": ">=0.2.0" + } + }, + "node_modules/qs": { + "version": "6.11.1", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.1.tgz", + "integrity": "sha512-0wsrzgTz/kAVIeuxSjnpGC56rzYtr6JT/2BwEvMaPhFIoYa1aGO8LbzuU1R0uUYQkLpWBTOj0l/CLAJB64J6nQ==", + "dependencies": { + "side-channel": "^1.0.4" + }, + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/query-string": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/query-string/-/query-string-5.1.1.tgz", + "integrity": "sha512-gjWOsm2SoGlgLEdAGt7a6slVOk9mGiXmPFMqrEhLQ68rhQuBnpfs3+EmlvqKyxnCo9/PPlF+9MtY02S1aFg+Jw==", + "dev": true, + "dependencies": { + "decode-uri-component": "^0.2.0", + "object-assign": "^4.1.0", + "strict-uri-encode": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/quick-lru": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-4.0.1.tgz", + "integrity": "sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/quote-unquote": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/quote-unquote/-/quote-unquote-1.0.0.tgz", + "integrity": "sha512-twwRO/ilhlG/FIgYeKGFqyHhoEhqgnKVkcmqMKi2r524gz3ZbDTcyFt38E9xjJI2vT+KbRNHVbnJ/e0I25Azwg==", + "dev": true + }, + "node_modules/ramda": { + "version": "0.27.1", + "resolved": "https://registry.npmjs.org/ramda/-/ramda-0.27.1.tgz", + "integrity": "sha512-PgIdVpn5y5Yns8vqb8FzBUEYn98V3xcPgawAkkgj0YJ0qDsnHCiNmZYfOGMgOvoB0eWFLpYbhxUR3mxfDIMvpw==", + "dev": true + }, + "node_modules/raw-body": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz", + "integrity": "sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==", + "dependencies": { + "bytes": "3.1.2", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/raw-body/node_modules/http-errors": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", + "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", + "dependencies": { + "depd": "2.0.0", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "toidentifier": "1.0.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/raw-body/node_modules/statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/rc": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", + "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", + "dev": true, + "dependencies": { + "deep-extend": "^0.6.0", + "ini": "~1.3.0", + "minimist": "^1.2.0", + "strip-json-comments": "~2.0.1" + }, + "bin": { + "rc": "cli.js" + } + }, + "node_modules/rc/node_modules/strip-json-comments": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", + "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/read-pkg": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz", + "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==", + "dependencies": { + "@types/normalize-package-data": "^2.4.0", + "normalize-package-data": "^2.5.0", + "parse-json": "^5.0.0", + "type-fest": "^0.6.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/read-pkg-up": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz", + "integrity": "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==", + "dependencies": { + "find-up": "^4.1.0", + "read-pkg": "^5.2.0", + "type-fest": "^0.8.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/read-pkg-up/node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/read-pkg-up/node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/read-pkg-up/node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/read-pkg-up/node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/read-pkg/node_modules/hosted-git-info": { + "version": "2.8.9", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", + "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==" + }, + "node_modules/read-pkg/node_modules/normalize-package-data": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", + "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", + "dependencies": { + "hosted-git-info": "^2.1.4", + "resolve": "^1.10.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" + } + }, + "node_modules/read-pkg/node_modules/semver": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/read-pkg/node_modules/type-fest": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz", + "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==", + "engines": { + "node": ">=8" + } + }, + "node_modules/readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "dev": true, + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/readable-stream/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + }, + "node_modules/redent": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/redent/-/redent-3.0.0.tgz", + "integrity": "sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==", + "dev": true, + "dependencies": { + "indent-string": "^4.0.0", + "strip-indent": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/redis-errors": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/redis-errors/-/redis-errors-1.2.0.tgz", + "integrity": "sha512-1qny3OExCf0UvUV/5wpYKf2YwPcOqXzkwKKSmKHiE6ZMQs5heeE/c8eXK+PNllPvmjgAbfnsbpkGZWy8cBpn9w==", + "engines": { + "node": ">=4" + } + }, + "node_modules/redis-parser": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/redis-parser/-/redis-parser-3.0.0.tgz", + "integrity": "sha512-DJnGAeenTdpMEH6uAJRK/uiyEIH9WVsUmoLwzudwGJUwZPp80PDBWPHXSAGNPwNvIXAbe7MSUB1zQFugFml66A==", + "dependencies": { + "redis-errors": "^1.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/regexp-tree": { + "version": "0.1.24", + "resolved": "https://registry.npmjs.org/regexp-tree/-/regexp-tree-0.1.24.tgz", + "integrity": "sha512-s2aEVuLhvnVJW6s/iPgEGK6R+/xngd2jNQ+xy4bXNDKxZKJH6jpPHY6kVeVv1IeLCHgswRj+Kl3ELaDjG6V1iw==", + "dev": true, + "bin": { + "regexp-tree": "bin/regexp-tree" + } + }, + "node_modules/regexp.prototype.flags": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.4.3.tgz", + "integrity": "sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "functions-have-names": "^1.2.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/regjsparser": { + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.9.1.tgz", + "integrity": "sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ==", + "dev": true, + "dependencies": { + "jsesc": "~0.5.0" + }, + "bin": { + "regjsparser": "bin/parser" + } + }, + "node_modules/regjsparser/node_modules/jsesc": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", + "integrity": "sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==", + "dev": true, + "bin": { + "jsesc": "bin/jsesc" + } + }, + "node_modules/repeating": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz", + "integrity": "sha512-ZqtSMuVybkISo2OWvqvm7iHSWngvdaW3IpsT9/uP8v4gMi591LY6h35wdOfvQdWCKFWZWm2Y1Opp4kV7vQKT6A==", + "dev": true, + "dependencies": { + "is-finite": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/require-from-string": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/require-main-filename": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", + "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", + "dev": true + }, + "node_modules/requirejs": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/requirejs/-/requirejs-2.3.6.tgz", + "integrity": "sha512-ipEzlWQe6RK3jkzikgCupiTbTvm4S0/CAU5GlgptkN5SO6F3u0UD0K18wy6ErDqiCyP4J4YYe1HuAShvsxePLg==", + "dev": true, + "bin": { + "r_js": "bin/r.js", + "r.js": "bin/r.js" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/requirejs-config-file": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/requirejs-config-file/-/requirejs-config-file-4.0.0.tgz", + "integrity": "sha512-jnIre8cbWOyvr8a5F2KuqBnY+SDA4NXr/hzEZJG79Mxm2WiFQz2dzhC8ibtPJS7zkmBEl1mxSwp5HhC1W4qpxw==", + "dev": true, + "dependencies": { + "esprima": "^4.0.0", + "stringify-object": "^3.2.1" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/resolve": { + "version": "1.22.1", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz", + "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==", + "dependencies": { + "is-core-module": "^2.9.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/resolve-cwd": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", + "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==", + "dev": true, + "dependencies": { + "resolve-from": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/resolve-dependency-path": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/resolve-dependency-path/-/resolve-dependency-path-2.0.0.tgz", + "integrity": "sha512-DIgu+0Dv+6v2XwRaNWnumKu7GPufBBOr5I1gRPJHkvghrfCGOooJODFvgFimX/KRxk9j0whD2MnKHzM1jYvk9w==", + "dev": true, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/resolve-dir": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/resolve-dir/-/resolve-dir-1.0.1.tgz", + "integrity": "sha512-R7uiTjECzvOsWSfdM0QKFNBVFcK27aHOUwdvK53BcW8zqnGdYp0Fbj82cy54+2A4P2tFM22J5kRfe1R+lM/1yg==", + "dev": true, + "dependencies": { + "expand-tilde": "^2.0.0", + "global-modules": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/resolve-global": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/resolve-global/-/resolve-global-1.0.0.tgz", + "integrity": "sha512-zFa12V4OLtT5XUX/Q4VLvTfBf+Ok0SPc1FNGM/z9ctUdiU618qwKpWnd0CHs3+RqROfyEg/DhuHbMWYqcgljEw==", + "dev": true, + "dependencies": { + "global-dirs": "^0.1.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/resolve.exports": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-2.0.2.tgz", + "integrity": "sha512-X2UW6Nw3n/aMgDVy+0rSqgHlv39WZAlZrXCdnbyEiKm17DSqHX4MmQMaST3FbeWR5FTuRcUwYAziZajji0Y7mg==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/responselike": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/responselike/-/responselike-1.0.2.tgz", + "integrity": "sha512-/Fpe5guzJk1gPqdJLJR5u7eG/gNY4nImjbRDaVWVMRhne55TCmj2i9Q+54PBRfatRC8v/rIiv9BN0pMd9OV5EQ==", + "dev": true, + "dependencies": { + "lowercase-keys": "^1.0.0" + } + }, + "node_modules/restore-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", + "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", + "dev": true, + "dependencies": { + "onetime": "^5.1.0", + "signal-exit": "^3.0.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "dev": true, + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, + "node_modules/rfdc": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.3.0.tgz", + "integrity": "sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA==", + "dev": true + }, + "node_modules/right-pad": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/right-pad/-/right-pad-1.0.1.tgz", + "integrity": "sha512-bYBjgxmkvTAfgIYy328fmkwhp39v8lwVgWhhrzxPV3yHtcSqyYKe9/XOhvW48UFjATg3VuJbpsp5822ACNvkmw==", + "dev": true, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dev": true, + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/rimraf/node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/roarr": { + "version": "7.15.0", + "resolved": "https://registry.npmjs.org/roarr/-/roarr-7.15.0.tgz", + "integrity": "sha512-CV9WefQfUXTX6wr8CrEMhfNef3sjIt9wNhE/5PNu4tNWsaoDNDXqq+OGn/RW9A1UPb0qc7FQlswXRaJJJsqn8A==", + "dev": true, + "dependencies": { + "boolean": "^3.1.4", + "fast-json-stringify": "^2.7.10", + "fast-printf": "^1.6.9", + "globalthis": "^1.0.2", + "safe-stable-stringify": "^2.4.1", + "semver-compare": "^1.0.0" + }, + "engines": { + "node": ">=12.0" + } + }, + "node_modules/rudder-json-template-engine": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/rudder-json-template-engine/-/rudder-json-template-engine-0.5.1.tgz", + "integrity": "sha512-D8zCcTXbhbFd2EhDmmgZKxw5uky6+DfikV/EW8I8HWdutMiyzdxgVMyH1dPo3feLgj3/0g2WNO9t4iPaegw4PQ==" + }, + "node_modules/rudder-transformer-cdk": { + "version": "1.4.11", + "resolved": "https://registry.npmjs.org/rudder-transformer-cdk/-/rudder-transformer-cdk-1.4.11.tgz", + "integrity": "sha512-u2t/L47tNe9wyzSpQptLkiECT0/P5Xx8BLmZisfuXQx3lXco57oaDX/Ii1ZhEiHM2zht+NiyrGkvhBKMt1IAyA==", + "dependencies": { + "get-value": "^3.0.1", + "handlebars": "^4.7.7", + "joi": "^17.9.2", + "js-yaml": "^4.1.0", + "lodash": "^4.17.21", + "moment-timezone": "^0.5.43", + "set-value": "^4.1.0", + "sha256": "^0.2.0", + "unset-value": "^2.0.1", + "winston": "^3.8.1" + } + }, + "node_modules/rudder-workflow-engine": { + "version": "0.4.7", + "resolved": "https://registry.npmjs.org/rudder-workflow-engine/-/rudder-workflow-engine-0.4.7.tgz", + "integrity": "sha512-USJ/h4XGxtUmAhaTJgtz1MrICpiju6GTubaFyPS+5hgpjdIsZx/iOOishjrNcOrwHvxcfblccA8wv5JTC8eSpg==", + "dependencies": { + "@aws-crypto/sha256-js": "^4.0.0", + "js-yaml": "^4.1.0", + "jsonata": "^2.0.3", + "lodash": "^4.17.21", + "rudder-json-template-engine": "^0.5.1" + } + }, + "node_modules/rudder-workflow-engine/node_modules/@aws-crypto/sha256-js": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/sha256-js/-/sha256-js-4.0.0.tgz", + "integrity": "sha512-MHGJyjE7TX9aaqXj7zk2ppnFUOhaDs5sP+HtNS0evOxn72c+5njUmyJmpGd7TfyoDznZlHMmdo/xGUdu2NIjNQ==", + "dependencies": { + "@aws-crypto/util": "^4.0.0", + "@aws-sdk/types": "^3.222.0", + "tslib": "^1.11.1" + } + }, + "node_modules/rudder-workflow-engine/node_modules/@aws-crypto/util": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/util/-/util-4.0.0.tgz", + "integrity": "sha512-2EnmPy2gsFZ6m8bwUQN4jq+IyXV3quHAcwPOS6ZA3k+geujiqI8aRokO2kFJe+idJ/P3v4qWI186rVMo0+zLDQ==", + "dependencies": { + "@aws-sdk/types": "^3.222.0", + "@aws-sdk/util-utf8-browser": "^3.0.0", + "tslib": "^1.11.1" + } + }, + "node_modules/rudder-workflow-engine/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + }, + "node_modules/run-async": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz", + "integrity": "sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==", + "dev": true, + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "queue-microtask": "^1.2.2" + } + }, + "node_modules/rxjs": { + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.0.tgz", + "integrity": "sha512-F2+gxDshqmIub1KdvZkaEfGDwLNpPvk9Fs6LD/MyQxNgMds/WH9OdDDXOmxUZpME+iSK3rQCctkL0DYyytUqMg==", + "dev": true, + "dependencies": { + "tslib": "^2.1.0" + } + }, + "node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/safe-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-2.1.1.tgz", + "integrity": "sha512-rx+x8AMzKb5Q5lQ95Zoi6ZbJqwCLkqi3XuJXp5P3rT8OEc6sZCJG5AE5dU3lsgRr/F4Bs31jSlVN+j5KrsGu9A==", + "dev": true, + "dependencies": { + "regexp-tree": "~0.1.1" + } + }, + "node_modules/safe-regex-test": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.0.tgz", + "integrity": "sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.3", + "is-regex": "^1.1.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/safe-stable-stringify": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/safe-stable-stringify/-/safe-stable-stringify-2.4.2.tgz", + "integrity": "sha512-gMxvPJYhP0O9n2pvcfYfIuYgbledAOJFcqRThtPRmjscaipiwcwPPKLytpVzMkG2HAN87Qmo2d4PtGiri1dSLA==", + "engines": { + "node": ">=10" + } + }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" + }, + "node_modules/sass-lookup": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/sass-lookup/-/sass-lookup-3.0.0.tgz", + "integrity": "sha512-TTsus8CfFRn1N44bvdEai1no6PqdmDiQUiqW5DlpmtT+tYnIt1tXtDIph5KA1efC+LmioJXSnCtUVpcK9gaKIg==", + "dev": true, + "dependencies": { + "commander": "^2.16.0" + }, + "bin": { + "sass-lookup": "bin/cli.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/sass-lookup/node_modules/commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "dev": true + }, + "node_modules/semver": { + "version": "7.5.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.3.tgz", + "integrity": "sha512-QBlUtyVk/5EeHbi7X0fw6liDZc7BBmEaSYn01fMU1OUYbf6GPsbTtd8WmnqbI20SeycoHSeiybkE/q1Q+qlThQ==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/semver-compare": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/semver-compare/-/semver-compare-1.0.0.tgz", + "integrity": "sha512-YM3/ITh2MJ5MtzaM429anh+x2jiLVjqILF4m4oyQB18W7Ggea7BfqdH/wGMK7dDiMghv/6WG7znWMwUDzJiXow==", + "dev": true + }, + "node_modules/semver-regex": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/semver-regex/-/semver-regex-3.1.4.tgz", + "integrity": "sha512-6IiqeZNgq01qGf0TId0t3NvKzSvUsjcpdEO3AQNeIjR6A2+ckTnQlDpl4qu1bjRv0RzN3FP9hzFmws3lKqRWkA==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/semver/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/semver/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "node_modules/set-blocking": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==", + "dev": true + }, + "node_modules/set-value": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/set-value/-/set-value-4.1.0.tgz", + "integrity": "sha512-zTEg4HL0RwVrqcWs3ztF+x1vkxfm0lP+MQQFPiMJTKVceBwEV0A569Ou8l9IYQG8jOZdMVI1hGsc0tmeD2o/Lw==", + "funding": [ + "https://github.com/sponsors/jonschlinkert", + "https://paypal.me/jonathanschlinkert", + "https://jonschlinkert.dev/sponsor" + ], + "dependencies": { + "is-plain-object": "^2.0.4", + "is-primitive": "^3.0.1" + }, + "engines": { + "node": ">=11.0" + } + }, + "node_modules/setprototypeof": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" + }, + "node_modules/sha256": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/sha256/-/sha256-0.2.0.tgz", + "integrity": "sha512-kTWMJUaez5iiT9CcMv8jSq6kMhw3ST0uRdcIWl3D77s6AsLXNXRp3heeqqfu5+Dyfu4hwpQnMzhqHh8iNQxw0w==", + "dependencies": { + "convert-hex": "~0.1.0", + "convert-string": "~0.1.0" + } + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/shellwords": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/shellwords/-/shellwords-0.1.1.tgz", + "integrity": "sha512-vFwSUfQvqybiICwZY5+DAWIPLKsWO31Q91JSKl3UYv+K5c2QRPzn0qzec6QPu1Qc9eHYItiP3NdJqNVqetYAww==", + "dev": true + }, + "node_modules/side-channel": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", + "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", + "dependencies": { + "call-bind": "^1.0.0", + "get-intrinsic": "^1.0.2", + "object-inspect": "^1.9.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==" + }, + "node_modules/simple-swizzle": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz", + "integrity": "sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==", + "dependencies": { + "is-arrayish": "^0.3.1" + } + }, + "node_modules/simple-swizzle/node_modules/is-arrayish": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz", + "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==" + }, + "node_modules/sisteransi": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", + "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==", + "dev": true + }, + "node_modules/slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/slice-ansi": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-5.0.0.tgz", + "integrity": "sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^6.0.0", + "is-fullwidth-code-point": "^4.0.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/slice-ansi?sponsor=1" + } + }, + "node_modules/slice-ansi/node_modules/ansi-styles": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/sort-keys": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/sort-keys/-/sort-keys-2.0.0.tgz", + "integrity": "sha512-/dPCrG1s3ePpWm6yBbxZq5Be1dXGLyLn9Z791chDC3NFrpkVbWGzkBwPN1knaciexFXgRJ7hzdnwZ4stHSDmjg==", + "dev": true, + "dependencies": { + "is-plain-obj": "^1.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-js": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", + "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-support": { + "version": "0.5.13", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.13.tgz", + "integrity": "sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==", + "dev": true, + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "node_modules/spdx-correct": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz", + "integrity": "sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==", + "dependencies": { + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" + } + }, + "node_modules/spdx-exceptions": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", + "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==" + }, + "node_modules/spdx-expression-parse": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", + "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", + "dependencies": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + }, + "node_modules/spdx-license-ids": { + "version": "3.0.12", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.12.tgz", + "integrity": "sha512-rr+VVSXtRhO4OHbXUiAF7xW3Bo9DuuF6C5jH+q/x15j2jniycgKbxU09Hr0WqlSLUs4i4ltHGXqTe7VHclYWyA==" + }, + "node_modules/split": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/split/-/split-1.0.1.tgz", + "integrity": "sha512-mTyOoPbrivtXnwnIxZRFYRrPNtEFKlpB2fvjSnCQUiAA6qAZzqwna5envK4uk6OIeP17CsdF3rSBGYVBsU0Tkg==", + "dev": true, + "dependencies": { + "through": "2" + }, + "engines": { + "node": "*" + } + }, + "node_modules/split2": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/split2/-/split2-3.2.2.tgz", + "integrity": "sha512-9NThjpgZnifTkJpzTZ7Eue85S49QwpNhZTq6GRJwObb6jnLFNGB7Qm73V5HewTROPyxD0C29xqmaI68bQtV+hg==", + "dev": true, + "dependencies": { + "readable-stream": "^3.0.0" + } + }, + "node_modules/split2/node_modules/readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "dev": true, + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", + "dev": true + }, + "node_modules/stack-generator": { + "version": "2.0.10", + "resolved": "https://registry.npmjs.org/stack-generator/-/stack-generator-2.0.10.tgz", + "integrity": "sha512-mwnua/hkqM6pF4k8SnmZ2zfETsRUpWXREfA/goT8SLCV4iOFa4bzOX2nDipWAZFPTjLvQB82f5yaodMVhK0yJQ==", + "dependencies": { + "stackframe": "^1.3.4" + } + }, + "node_modules/stack-trace": { + "version": "0.0.10", + "resolved": "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.10.tgz", + "integrity": "sha512-KGzahc7puUKkzyMt+IqAep+TVNbKP+k2Lmwhub39m1AsTSkaDutx56aDCo+HLDzf/D26BIHTJWNiTG1KAJiQCg==", + "engines": { + "node": "*" + } + }, + "node_modules/stack-utils": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.6.tgz", + "integrity": "sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==", + "dev": true, + "dependencies": { + "escape-string-regexp": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/stack-utils/node_modules/escape-string-regexp": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", + "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/stackframe": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/stackframe/-/stackframe-1.3.4.tgz", + "integrity": "sha512-oeVtt7eWQS+Na6F//S4kJ2K2VbRlS9D43mAlMyVpVWovy9o+jfgH8O9agzANzaiLjclA0oYzUXEM4PurhSUChw==" + }, + "node_modules/stacktrace-parser": { + "version": "0.1.10", + "resolved": "https://registry.npmjs.org/stacktrace-parser/-/stacktrace-parser-0.1.10.tgz", + "integrity": "sha512-KJP1OCML99+8fhOHxwwzyWrlUuVX5GQ0ZpJTd1DFXhdkrvg1szxfHhawXUZ3g9TkXORQd4/WG68jMlQZ2p8wlg==", + "dependencies": { + "type-fest": "^0.7.1" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/stacktrace-parser/node_modules/type-fest": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.7.1.tgz", + "integrity": "sha512-Ne2YiiGN8bmrmJJEuTWTLJR32nh/JdL1+PSicowtNb0WFpn59GK8/lfD61bVtzguz7b3PBt74nxpv/Pw5po5Rg==", + "engines": { + "node": ">=8" + } + }, + "node_modules/standard-as-callback": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/standard-as-callback/-/standard-as-callback-2.1.0.tgz", + "integrity": "sha512-qoRRSyROncaz1z0mvYqIE4lCd9p2R90i6GxW3uZv5ucSu8tU7B5HXUP1gG8pVZsYNVaXjk8ClXHPttLyxAL48A==" + }, + "node_modules/standard-version": { + "version": "9.5.0", + "resolved": "https://registry.npmjs.org/standard-version/-/standard-version-9.5.0.tgz", + "integrity": "sha512-3zWJ/mmZQsOaO+fOlsa0+QK90pwhNd042qEcw6hKFNoLFs7peGyvPffpEBbK/DSGPbyOvli0mUIFv5A4qTjh2Q==", + "dev": true, + "dependencies": { + "chalk": "^2.4.2", + "conventional-changelog": "3.1.25", + "conventional-changelog-config-spec": "2.1.0", + "conventional-changelog-conventionalcommits": "4.6.3", + "conventional-recommended-bump": "6.1.0", + "detect-indent": "^6.0.0", + "detect-newline": "^3.1.0", + "dotgitignore": "^2.1.0", + "figures": "^3.1.0", + "find-up": "^5.0.0", + "git-semver-tags": "^4.0.0", + "semver": "^7.1.1", + "stringify-package": "^1.0.1", + "yargs": "^16.0.0" + }, + "bin": { + "standard-version": "bin/cli.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/standard-version/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/standard-version/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/standard-version/node_modules/cliui": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", + "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", + "dev": true, + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" + } + }, + "node_modules/standard-version/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/standard-version/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "dev": true + }, + "node_modules/standard-version/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/standard-version/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/standard-version/node_modules/yargs": { + "version": "16.2.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", + "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", + "dev": true, + "dependencies": { + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.0", + "y18n": "^5.0.5", + "yargs-parser": "^20.2.2" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/stats-accumulator": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/stats-accumulator/-/stats-accumulator-1.1.3.tgz", + "integrity": "sha512-ys8OR2RWx4Y9xC/fkFUKI3t2ElHpR4Xdp8rIWVCTl4DWmfS80gvxl0LwNKYUio/ibBUpsoMaUYbWldonVfPBFQ==", + "dev": true, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/statsd-client": { + "version": "0.4.7", + "resolved": "https://registry.npmjs.org/statsd-client/-/statsd-client-0.4.7.tgz", + "integrity": "sha512-+sGCE6FednJ/vI7vywErOg/mhVqmf6Zlktz7cdGRnF/cQWXD9ifMgtqU1CIIXmhSwm11SCk4zDN+bwNCvIR/Kg==", + "deprecated": "Package no longer supported. Contact Support at https://www.npmjs.com/support for more info." + }, + "node_modules/statuses": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", + "integrity": "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/stream-browserify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-3.0.0.tgz", + "integrity": "sha512-H73RAHsVBapbim0tU2JwwOiXUj+fikfiaoYAKHF3VJfA0pe2BCzkhAHBlLG6REzE+2WNZcxOXjK7lkso+9euLA==", + "dependencies": { + "inherits": "~2.0.4", + "readable-stream": "^3.5.0" + } + }, + "node_modules/stream-browserify/node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/stream-to-array": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/stream-to-array/-/stream-to-array-2.3.0.tgz", + "integrity": "sha512-UsZtOYEn4tWU2RGLOXr/o/xjRBftZRlG3dEWoaHr8j4GuypJ3isitGbVyjQKAuMu+xbiop8q224TjiZWc4XTZA==", + "dev": true, + "dependencies": { + "any-promise": "^1.1.0" + } + }, + "node_modules/strict-uri-encode": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz", + "integrity": "sha512-R3f198pcvnB+5IpnBlRkphuE9n46WyVl8I39W/ZUTZLz4nqSP/oLYUrcnJrw462Ds8he4YKMov2efsTIw1BDGQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/string_decoder/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + }, + "node_modules/string-argv": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/string-argv/-/string-argv-0.3.1.tgz", + "integrity": "sha512-a1uQGz7IyVy9YwhqjZIZu1c8JO8dNIe20xBmSS6qu9kv++k3JGzCVmprbNN5Kn+BgzD5E7YYwg1CcjuJMRNsvg==", + "dev": true, + "engines": { + "node": ">=0.6.19" + } + }, + "node_modules/string-length": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz", + "integrity": "sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==", + "dev": true, + "dependencies": { + "char-regex": "^1.0.2", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/string-similarity": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/string-similarity/-/string-similarity-4.0.4.tgz", + "integrity": "sha512-/q/8Q4Bl4ZKAPjj8WerIBJWALKkaPRfrvhfF8k/B23i4nzrlRj2/go1m90In7nG/3XDSbOo0+pu6RvCTM9RGMQ==", + "deprecated": "Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.", + "dev": true + }, + "node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/string-width-cjs": { + "name": "string-width", + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/string-width-cjs/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "node_modules/string-width-cjs/node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/string-width/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "node_modules/string-width/node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/string.prototype.trimend": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.6.tgz", + "integrity": "sha512-JySq+4mrPf9EsDBEDYMOb/lM7XQLulwg5R/m1r0PXEFqrV0qHvl58sdTilSXtKOflCsK2E8jxf+GKC0T07RWwQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trimstart": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.6.tgz", + "integrity": "sha512-omqjMDaY92pbn5HOX7f9IccLA+U1tA9GvtU4JrodiXFfYB7jPzzHpRzpglLAjtUV6bB557zwClJezTqnAiYnQA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/stringify-object": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/stringify-object/-/stringify-object-3.3.0.tgz", + "integrity": "sha512-rHqiFh1elqCQ9WPLIC8I0Q/g/wj5J1eMkyoiD6eoQApWHP0FtlK7rqnhmabL5VUY9JQCcqwwvlOaSuutekgyrw==", + "dev": true, + "dependencies": { + "get-own-enumerable-property-symbols": "^3.0.0", + "is-obj": "^1.0.1", + "is-regexp": "^1.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/stringify-object/node_modules/is-obj": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz", + "integrity": "sha512-l4RyHgRqGN4Y3+9JHVrNqO+tN0rV5My76uW5/nuO4K1b6vw5G8d/cmFjP9tRfEsdhZNt0IFdZuK/c2Vr4Nb+Qg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/stringify-package": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/stringify-package/-/stringify-package-1.0.1.tgz", + "integrity": "sha512-sa4DUQsYciMP1xhKWGuFM04fB0LG/9DlluZoSVywUMRNvzid6XucHK0/90xGxRoHrAaROrcHK1aPKaijCtSrhg==", + "deprecated": "This module is not used anymore, and has been replaced by @npmcli/package-json", + "dev": true + }, + "node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi-cjs": { + "name": "strip-ansi", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-bom": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", + "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-final-newline": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", + "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/strip-indent": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-3.0.0.tgz", + "integrity": "sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==", + "dev": true, + "dependencies": { + "min-indent": "^1.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/strnum": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/strnum/-/strnum-1.0.5.tgz", + "integrity": "sha512-J8bbNyKKXl5qYcR36TIO8W3mVGVHrmmxsd5PAItGkmyzwJvybiw2IVq5nqd0i4LSNSkB/sx9VHllbfFdr9k1JA==" + }, + "node_modules/stylus-lookup": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/stylus-lookup/-/stylus-lookup-3.0.2.tgz", + "integrity": "sha512-oEQGHSjg/AMaWlKe7gqsnYzan8DLcGIHe0dUaFkucZZ14z4zjENRlQMCHT4FNsiWnJf17YN9OvrCfCoi7VvOyg==", + "dev": true, + "dependencies": { + "commander": "^2.8.1", + "debug": "^4.1.0" + }, + "bin": { + "stylus-lookup": "bin/cli.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/stylus-lookup/node_modules/commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "dev": true + }, + "node_modules/subdirs": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/subdirs/-/subdirs-1.0.1.tgz", + "integrity": "sha512-KSbUKpwQIRcb5Th+l4EzxEZYpCwV/g0pQ348EV7CIM5YEEgzz2L1KJD8FCeTckTiE/TKn2u09DCxpdAL6/iFbg==", + "dependencies": { + "es6-promise": "^3.0.2" + } + }, + "node_modules/superagent": { + "version": "8.0.9", + "resolved": "https://registry.npmjs.org/superagent/-/superagent-8.0.9.tgz", + "integrity": "sha512-4C7Bh5pyHTvU33KpZgwrNKh/VQnvgtCSqPRfJAUdmrtSYePVzVg4E4OzsrbkhJj9O7SO6Bnv75K/F8XVZT8YHA==", + "dev": true, + "dependencies": { + "component-emitter": "^1.3.0", + "cookiejar": "^2.1.4", + "debug": "^4.3.4", + "fast-safe-stringify": "^2.1.1", + "form-data": "^4.0.0", + "formidable": "^2.1.2", + "methods": "^1.1.2", + "mime": "2.6.0", + "qs": "^6.11.0", + "semver": "^7.3.8" + }, + "engines": { + "node": ">=6.4.0 <13 || >=14" + } + }, + "node_modules/supertest": { + "version": "6.3.3", + "resolved": "https://registry.npmjs.org/supertest/-/supertest-6.3.3.tgz", + "integrity": "sha512-EMCG6G8gDu5qEqRQ3JjjPs6+FYT1a7Hv5ApHvtSghmOFJYtsU5S+pSb6Y2EUeCEY3CmEL3mmQ8YWlPOzQomabA==", + "dev": true, + "dependencies": { + "methods": "^1.1.2", + "superagent": "^8.0.5" + }, + "engines": { + "node": ">=6.4.0" + } + }, + "node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/swagger-cli": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/swagger-cli/-/swagger-cli-4.0.4.tgz", + "integrity": "sha512-Cp8YYuLny3RJFQ4CvOBTaqmOOgYsem52dPx1xM5S4EUWFblIh2Q8atppMZvXKUr1e9xH5RwipYpmdUzdPcxWcA==", + "dev": true, + "dependencies": { + "@apidevtools/swagger-cli": "4.0.4" + }, + "bin": { + "swagger-cli": "swagger-cli.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/swagger-cli/node_modules/@apidevtools/swagger-cli": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/@apidevtools/swagger-cli/-/swagger-cli-4.0.4.tgz", + "integrity": "sha512-hdDT3B6GLVovCsRZYDi3+wMcB1HfetTU20l2DC8zD3iFRNMC6QNAZG5fo/6PYeHWBEv7ri4MvnlKodhNB0nt7g==", + "dev": true, + "dependencies": { + "@apidevtools/swagger-parser": "^10.0.1", + "chalk": "^4.1.0", + "js-yaml": "^3.14.0", + "yargs": "^15.4.1" + }, + "bin": { + "swagger-cli": "bin/swagger-cli.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/swagger-cli/node_modules/argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, + "dependencies": { + "sprintf-js": "~1.0.2" + } + }, + "node_modules/swagger-cli/node_modules/cliui": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", + "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==", + "dev": true, + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^6.2.0" + } + }, + "node_modules/swagger-cli/node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/swagger-cli/node_modules/js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "dev": true, + "dependencies": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/swagger-cli/node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/swagger-cli/node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/swagger-cli/node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/swagger-cli/node_modules/wrap-ansi": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", + "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/swagger-cli/node_modules/y18n": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", + "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==", + "dev": true + }, + "node_modules/swagger-cli/node_modules/yargs": { + "version": "15.4.1", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz", + "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==", + "dev": true, + "dependencies": { + "cliui": "^6.0.0", + "decamelize": "^1.2.0", + "find-up": "^4.1.0", + "get-caller-file": "^2.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^2.0.0", + "set-blocking": "^2.0.0", + "string-width": "^4.2.0", + "which-module": "^2.0.0", + "y18n": "^4.0.0", + "yargs-parser": "^18.1.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/swagger-cli/node_modules/yargs-parser": { + "version": "18.1.3", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", + "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", + "dev": true, + "dependencies": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/tapable": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", + "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/tdigest": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/tdigest/-/tdigest-0.1.2.tgz", + "integrity": "sha512-+G0LLgjjo9BZX2MfdvPfH+MKLCrxlXSYec5DaPYP1fe6Iyhf0/fSmJ0bFiZ1F8BT6cGXl2LpltQptzjXKWEkKA==", + "dependencies": { + "bintrees": "1.0.2" + } + }, + "node_modules/test-exclude": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", + "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", + "dev": true, + "dependencies": { + "@istanbuljs/schema": "^0.1.2", + "glob": "^7.1.4", + "minimatch": "^3.0.4" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/test-exclude/node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/text-extensions": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/text-extensions/-/text-extensions-1.9.0.tgz", + "integrity": "sha512-wiBrwC1EhBelW12Zy26JeOUkQ5mRu+5o8rpsJk5+2t+Y5vE7e842qtZDQ2g1NpX/29HdyFeJ4nSIhI47ENSxlQ==", + "dev": true, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/text-hex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/text-hex/-/text-hex-1.0.0.tgz", + "integrity": "sha512-uuVGNWzgJ4yhRaNSiubPY7OjISw4sw4E5Uv0wbjp+OzcbmVU/rsT8ujgcXJhn9ypzsgr5vlzpPqP+MBBKcGvbg==" + }, + "node_modules/text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", + "dev": true + }, + "node_modules/through": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", + "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==", + "dev": true + }, + "node_modules/through2": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/through2/-/through2-4.0.2.tgz", + "integrity": "sha512-iOqSav00cVxEEICeD7TjLB1sueEL+81Wpzp2bY17uZjZN0pWZPuo4suZ/61VujxmqSGFfgOcNuTZ85QJwNZQpw==", + "dev": true, + "dependencies": { + "readable-stream": "3" + } + }, + "node_modules/through2/node_modules/readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "dev": true, + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/timed-out": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/timed-out/-/timed-out-4.0.1.tgz", + "integrity": "sha512-G7r3AhovYtr5YKOWQkta8RKAPb+J9IsO4uVmzjl8AZwfhs8UcUwTiD6gcJYSgOtzyjvQKrKYn41syHbUWMkafA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/tmp": { + "version": "0.0.33", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", + "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", + "dev": true, + "dependencies": { + "os-tmpdir": "~1.0.2" + }, + "engines": { + "node": ">=0.6.0" + } + }, + "node_modules/tmpl": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz", + "integrity": "sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==", + "dev": true + }, + "node_modules/to-fast-properties": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", + "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/to-function": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/to-function/-/to-function-2.0.6.tgz", + "integrity": "sha512-LWfUmW851x5T8+78Nl82CA2j6w0trhoFj4rpS6pFUMgfUMUySDAKPgTvQkUqlWuH3Lihlk5sPyDHSVwmKDSc5Q==", + "dependencies": { + "component-props": "*" + } + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/toidentifier": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", + "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", + "engines": { + "node": ">=0.6" + } + }, + "node_modules/trim-newlines": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-3.0.1.tgz", + "integrity": "sha512-c1PTsA3tYrIsLGkJkzHF+w9F2EyxfXGo4UyJc4pFL++FMjnq0HJS69T3M7d//gKrFKwy429bouPescbjecU+Zw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/triple-beam": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/triple-beam/-/triple-beam-1.3.0.tgz", + "integrity": "sha512-XrHUvV5HpdLmIj4uVMxHggLbFSZYIn7HEWsqePZcI50pco+MPqJ50wMGY794X7AOOhxOBAjbkqfAbEe/QMp2Lw==" + }, + "node_modules/truncate-utf8-bytes": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/truncate-utf8-bytes/-/truncate-utf8-bytes-1.0.2.tgz", + "integrity": "sha512-95Pu1QXQvruGEhv62XCMO3Mm90GscOCClvrIUwCM0PYOXK3kaF3l3sIHxx71ThJfcbM2O5Au6SO3AWCSEfW4mQ==", + "dependencies": { + "utf8-byte-length": "^1.0.1" + } + }, + "node_modules/ts-graphviz": { + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/ts-graphviz/-/ts-graphviz-1.5.5.tgz", + "integrity": "sha512-abon0Tlcgvxcqr8x+p8QH1fTbR2R4cEXKGZfT4OJONZWah2YfqkmERb6hrr82omAc1IHwk5PlF8g4BS/ECYvwQ==", + "dev": true, + "engines": { + "node": ">=14.16" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/kamiazya" + } + }, + "node_modules/ts-jest": { + "version": "29.1.1", + "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-29.1.1.tgz", + "integrity": "sha512-D6xjnnbP17cC85nliwGiL+tpoKN0StpgE0TeOjXQTU6MVCfsB4v7aW05CgQ/1OywGb0x/oy9hHFnN+sczTiRaA==", + "dev": true, + "dependencies": { + "bs-logger": "0.x", + "fast-json-stable-stringify": "2.x", + "jest-util": "^29.0.0", + "json5": "^2.2.3", + "lodash.memoize": "4.x", + "make-error": "1.x", + "semver": "^7.5.3", + "yargs-parser": "^21.0.1" + }, + "bin": { + "ts-jest": "cli.js" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "@babel/core": ">=7.0.0-beta.0 <8", + "@jest/types": "^29.0.0", + "babel-jest": "^29.0.0", + "jest": "^29.0.0", + "typescript": ">=4.3 <6" + }, + "peerDependenciesMeta": { + "@babel/core": { + "optional": true + }, + "@jest/types": { + "optional": true + }, + "babel-jest": { + "optional": true + }, + "esbuild": { + "optional": true + } + } + }, + "node_modules/ts-jest/node_modules/yargs-parser": { + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "dev": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/ts-node": { + "version": "10.9.1", + "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.1.tgz", + "integrity": "sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==", + "dev": true, + "dependencies": { + "@cspotcode/source-map-support": "^0.8.0", + "@tsconfig/node10": "^1.0.7", + "@tsconfig/node12": "^1.0.7", + "@tsconfig/node14": "^1.0.0", + "@tsconfig/node16": "^1.0.2", + "acorn": "^8.4.1", + "acorn-walk": "^8.1.1", + "arg": "^4.1.0", + "create-require": "^1.1.0", + "diff": "^4.0.1", + "make-error": "^1.1.1", + "v8-compile-cache-lib": "^3.0.1", + "yn": "3.1.1" + }, + "bin": { + "ts-node": "dist/bin.js", + "ts-node-cwd": "dist/bin-cwd.js", + "ts-node-esm": "dist/bin-esm.js", + "ts-node-script": "dist/bin-script.js", + "ts-node-transpile-only": "dist/bin-transpile.js", + "ts-script": "dist/bin-script-deprecated.js" + }, + "peerDependencies": { + "@swc/core": ">=1.2.50", + "@swc/wasm": ">=1.2.50", + "@types/node": "*", + "typescript": ">=2.7" + }, + "peerDependenciesMeta": { + "@swc/core": { + "optional": true + }, + "@swc/wasm": { + "optional": true + } + } + }, + "node_modules/ts-node/node_modules/acorn-walk": { + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz", + "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==", + "dev": true, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/tsconfig-paths": { + "version": "3.14.2", + "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.14.2.tgz", + "integrity": "sha512-o/9iXgCYc5L/JxCHPe3Hvh8Q/2xm5Z+p18PESBU6Ff33695QnCHBEjcytY2q19ua7Mbl/DavtBOLq+oG0RCL+g==", + "dev": true, + "dependencies": { + "@types/json5": "^0.0.29", + "json5": "^1.0.2", + "minimist": "^1.2.6", + "strip-bom": "^3.0.0" + } + }, + "node_modules/tsconfig-paths/node_modules/json5": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz", + "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==", + "dev": true, + "dependencies": { + "minimist": "^1.2.0" + }, + "bin": { + "json5": "lib/cli.js" + } + }, + "node_modules/tsconfig-paths/node_modules/strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/tslib": { + "version": "2.5.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.3.tgz", + "integrity": "sha512-mSxlJJwl3BMEQCUNnxXBU9jP4JBktcEGhURcPR6VQVlnP0FdDEsIaz0C35dXNGLyRfrATNofF0F5p2KPxQgB+w==" + }, + "node_modules/tsscmp": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/tsscmp/-/tsscmp-1.0.6.tgz", + "integrity": "sha512-LxhtAkPDTkVCMQjt2h6eBVY28KCjikZqZfMcC15YBeNjkgUpdCfBu5HoiOTDu86v6smE8yOjyEktJ8hlbANHQA==", + "engines": { + "node": ">=0.6.x" + } + }, + "node_modules/tsutils": { + "version": "3.21.0", + "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", + "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", + "dev": true, + "dependencies": { + "tslib": "^1.8.1" + }, + "engines": { + "node": ">= 6" + }, + "peerDependencies": { + "typescript": ">=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta" + } + }, + "node_modules/tsutils/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + }, + "node_modules/type-check": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "dev": true, + "dependencies": { + "prelude-ls": "^1.2.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/type-detect": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", + "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/type-fest": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", + "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", + "engines": { + "node": ">=8" + } + }, + "node_modules/type-is": { + "version": "1.6.18", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", + "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", + "dependencies": { + "media-typer": "0.3.0", + "mime-types": "~2.1.24" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/typed-array-length": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.4.tgz", + "integrity": "sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "is-typed-array": "^1.1.9" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typedarray": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", + "integrity": "sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==", + "dev": true + }, + "node_modules/typescript": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.0.4.tgz", + "integrity": "sha512-cW9T5W9xY37cc+jfEnaUvX91foxtHkza3Nw3wkoF4sSlKn0MONdkdEndig/qPBWXNkmplh3NzayQzCiHM4/hqw==", + "dev": true, + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=12.20" + } + }, + "node_modules/ua-parser-js": { + "version": "1.0.35", + "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-1.0.35.tgz", + "integrity": "sha512-fKnGuqmTBnIE+/KXSzCn4db8RTigUzw1AN0DmdU6hJovUTbYJKyqj+8Mt1c4VfRDnOVJnENmfYkIPZ946UrSAA==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/ua-parser-js" + }, + { + "type": "paypal", + "url": "https://paypal.me/faisalman" + } + ], + "engines": { + "node": "*" + } + }, + "node_modules/uglify-js": { + "version": "3.17.4", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.17.4.tgz", + "integrity": "sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g==", + "optional": true, + "bin": { + "uglifyjs": "bin/uglifyjs" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/unbox-primitive": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", + "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "has-bigints": "^1.0.2", + "has-symbols": "^1.0.3", + "which-boxed-primitive": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/uniq": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/uniq/-/uniq-1.0.1.tgz", + "integrity": "sha512-Gw+zz50YNKPDKXs+9d+aKAjVwpjNwqzvNpLigIruT4HA9lMZNdMqs9x07kKHB/L9WRzqp4+DlTU5s4wG2esdoA==", + "dev": true + }, + "node_modules/universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", + "dev": true, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/unset-value": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-2.0.1.tgz", + "integrity": "sha512-2hvrBfjUE00PkqN+q0XP6yRAOGrR06uSiUoIQGZkc7GxvQ9H7v8quUPNtZjMg4uux69i8HWpIjLPUKwCuRGyNg==", + "dependencies": { + "has-value": "^2.0.2", + "isobject": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/unset-value/node_modules/isobject": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-4.0.0.tgz", + "integrity": "sha512-S/2fF5wH8SJA/kmwr6HYhK/RI/OkhD84k8ntalo0iJjZikgq1XFvR5M8NPT1x5F7fBwCG3qHfnzeP/Vh/ZxCUA==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/update-browserslist-db": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.11.tgz", + "integrity": "sha512-dCwEFf0/oT85M1fHBg4F0jtLwJrutGoHSQXCh7u4o2t1drG+c0a9Flnqww6XUKSfQMPpJBRjU8d4RXB09qtvaA==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "escalade": "^3.1.1", + "picocolors": "^1.0.0" + }, + "bin": { + "update-browserslist-db": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" + } + }, + "node_modules/uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/url-parse-lax": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-3.0.0.tgz", + "integrity": "sha512-NjFKA0DidqPa5ciFcSrXnAltTtzz84ogy+NebPvfEgAck0+TNg4UJ4IN+fB7zRZfbgUf0syOo9MDxFkDSMuFaQ==", + "dev": true, + "dependencies": { + "prepend-http": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/url-to-options": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/url-to-options/-/url-to-options-1.0.1.tgz", + "integrity": "sha512-0kQLIzG4fdk/G5NONku64rSH/x32NOA39LVQqlK8Le6lvTF6GGRJpqaQFGgU+CLwySIqBSMdwYM0sYcW9f6P4A==", + "dev": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/utf8-byte-length": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/utf8-byte-length/-/utf8-byte-length-1.0.4.tgz", + "integrity": "sha512-4+wkEYLBbWxqTahEsWrhxepcoVOJ+1z5PGIjPZxRkytcdSUaNjIjBM7Xn8E+pdSuV7SzvWovBFA54FO0JSoqhA==" + }, + "node_modules/utf8-length": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/utf8-length/-/utf8-length-0.0.1.tgz", + "integrity": "sha512-j/XH2ftofBiobnyApxlN/J6j/ixwT89WEjDcjT66d2i0+GIn9RZfzt8lpEXXE4jUe4NsjBSUq70kS2euQ4nnMw==" + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" + }, + "node_modules/uuid": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.0.tgz", + "integrity": "sha512-MXcSTerfPa4uqyzStbRoTgt5XIe3x5+42+q1sDuy3R5MDk66URdLMOZe5aPX/SQd+kuYAh0FdP/pO28IkQyTeg==", + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "node_modules/v8-compile-cache-lib": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz", + "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==", + "dev": true + }, + "node_modules/v8-to-istanbul": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.1.0.tgz", + "integrity": "sha512-6z3GW9x8G1gd+JIIgQQQxXuiJtCXeAjp6RaPEPLv62mH3iPHPxV6W3robxtCzNErRo6ZwTmzWhsbNvjyEBKzKA==", + "dev": true, + "dependencies": { + "@jridgewell/trace-mapping": "^0.3.12", + "@types/istanbul-lib-coverage": "^2.0.1", + "convert-source-map": "^1.6.0" + }, + "engines": { + "node": ">=10.12.0" + } + }, + "node_modules/valid-url": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/valid-url/-/valid-url-1.0.9.tgz", + "integrity": "sha512-QQDsV8OnSf5Uc30CKSwG9lnhMPe6exHtTXLRYX8uMwKENy640pU+2BgBL0LRbDh/eYRahNCS7aewCx0wf3NYVA==" + }, + "node_modules/validate-npm-package-license": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", + "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", + "dependencies": { + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" + } + }, + "node_modules/vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/vscode-json-languageservice": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/vscode-json-languageservice/-/vscode-json-languageservice-4.2.1.tgz", + "integrity": "sha512-xGmv9QIWs2H8obGbWg+sIPI/3/pFgj/5OWBhNzs00BkYQ9UaB2F6JJaGB/2/YOZJ3BvLXQTC4Q7muqU25QgAhA==", + "dev": true, + "dependencies": { + "jsonc-parser": "^3.0.0", + "vscode-languageserver-textdocument": "^1.0.3", + "vscode-languageserver-types": "^3.16.0", + "vscode-nls": "^5.0.0", + "vscode-uri": "^3.0.3" + } + }, + "node_modules/vscode-languageserver-textdocument": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/vscode-languageserver-textdocument/-/vscode-languageserver-textdocument-1.0.8.tgz", + "integrity": "sha512-1bonkGqQs5/fxGT5UchTgjGVnfysL0O8v1AYMBjqTbWQTFn721zaPGDYFkOKtfDgFiSgXM3KwaG3FMGfW4Ed9Q==", + "dev": true + }, + "node_modules/vscode-languageserver-types": { + "version": "3.17.2", + "resolved": "https://registry.npmjs.org/vscode-languageserver-types/-/vscode-languageserver-types-3.17.2.tgz", + "integrity": "sha512-zHhCWatviizPIq9B7Vh9uvrH6x3sK8itC84HkamnBWoDFJtzBf7SWlpLCZUit72b3os45h6RWQNC9xHRDF8dRA==", + "dev": true + }, + "node_modules/vscode-nls": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/vscode-nls/-/vscode-nls-5.2.0.tgz", + "integrity": "sha512-RAaHx7B14ZU04EU31pT+rKz2/zSl7xMsfIZuo8pd+KZO6PXtQmpevpq3vxvWNcrGbdmhM/rr5Uw5Mz+NBfhVng==", + "dev": true + }, + "node_modules/vscode-uri": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/vscode-uri/-/vscode-uri-3.0.7.tgz", + "integrity": "sha512-eOpPHogvorZRobNqJGhapa0JdwaxpjVvyBp0QIUMRMSf8ZAlqOdEquKuRmw9Qwu0qXtJIWqFtMkmvJjUZmMjVA==", + "dev": true + }, + "node_modules/walkdir": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/walkdir/-/walkdir-0.4.1.tgz", + "integrity": "sha512-3eBwRyEln6E1MSzcxcVpQIhRG8Q1jLvEqRmCZqS3dsfXEDR/AhOF4d+jHg1qvDCpYaVRZjENPQyrVxAkQqxPgQ==", + "dev": true, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/walker": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.8.tgz", + "integrity": "sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==", + "dev": true, + "dependencies": { + "makeerror": "1.0.12" + } + }, + "node_modules/wcwidth": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", + "integrity": "sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==", + "dependencies": { + "defaults": "^1.0.3" + } + }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/which-boxed-primitive": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", + "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", + "dev": true, + "dependencies": { + "is-bigint": "^1.0.1", + "is-boolean-object": "^1.1.0", + "is-number-object": "^1.0.4", + "is-string": "^1.0.5", + "is-symbol": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-module": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.1.tgz", + "integrity": "sha512-iBdZ57RDvnOR9AGBhML2vFZf7h8vmBjhoaZqODJBFWHVtKkDmKuHai3cx5PgVMrX5YDNp27AofYbAwctSS+vhQ==", + "dev": true + }, + "node_modules/which-typed-array": { + "version": "1.1.9", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.9.tgz", + "integrity": "sha512-w9c4xkx6mPidwp7180ckYWfMmvxpjlZuIudNtDf4N/tTAUB8VJbX25qZoAsrtGuYNnGw3pa0AXgbGKRB8/EceA==", + "dev": true, + "dependencies": { + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-tostringtag": "^1.0.0", + "is-typed-array": "^1.1.10" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/widest-line": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-3.1.0.tgz", + "integrity": "sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg==", + "dev": true, + "dependencies": { + "string-width": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/winston": { + "version": "3.8.2", + "resolved": "https://registry.npmjs.org/winston/-/winston-3.8.2.tgz", + "integrity": "sha512-MsE1gRx1m5jdTTO9Ld/vND4krP2To+lgDoMEHGGa4HIlAUyXJtfc7CxQcGXVyz2IBpw5hbFkj2b/AtUdQwyRew==", + "dependencies": { + "@colors/colors": "1.5.0", + "@dabh/diagnostics": "^2.0.2", + "async": "^3.2.3", + "is-stream": "^2.0.0", + "logform": "^2.4.0", + "one-time": "^1.0.0", + "readable-stream": "^3.4.0", + "safe-stable-stringify": "^2.3.1", + "stack-trace": "0.0.x", + "triple-beam": "^1.3.0", + "winston-transport": "^4.5.0" + }, + "engines": { + "node": ">= 12.0.0" + } + }, + "node_modules/winston-transport": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/winston-transport/-/winston-transport-4.5.0.tgz", + "integrity": "sha512-YpZzcUzBedhlTAfJg6vJDlyEai/IFMIVcaEZZyl3UXIl4gmqRpU7AE89AHLkbzLUsv0NVmw7ts+iztqKxxPW1Q==", + "dependencies": { + "logform": "^2.3.2", + "readable-stream": "^3.6.0", + "triple-beam": "^1.3.0" + }, + "engines": { + "node": ">= 6.4.0" + } + }, + "node_modules/winston-transport/node_modules/readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/winston/node_modules/readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/word-wrap": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", + "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/wordwrap": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", + "integrity": "sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==" + }, + "node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrap-ansi-cjs": { + "name": "wrap-ansi", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" + }, + "node_modules/xtend": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", + "dev": true, + "engines": { + "node": ">=0.4" + } + }, + "node_modules/y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true + }, + "node_modules/yaml": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.3.1.tgz", + "integrity": "sha512-2eHWfjaoXgTBC2jNM1LRef62VQa0umtvRiDSk6HSzW7RvS5YtkabJrwYLLEKWBc8a5U2PTSCs+dJjUTJdlHsWQ==", + "dev": true, + "engines": { + "node": ">= 14" + } + }, + "node_modules/yargs": { + "version": "17.7.1", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.1.tgz", + "integrity": "sha512-cwiTb08Xuv5fqF4AovYacTFNxk62th7LKJ6BL9IGUpTJrWoU7/7WdQGTP2SjKf1dUNBGzDd28p/Yfs/GI6JrLw==", + "dev": true, + "dependencies": { + "cliui": "^8.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.1.1" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/yargs-parser": { + "version": "20.2.9", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", + "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/yargs/node_modules/yargs-parser": { + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "dev": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/ylru": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/ylru/-/ylru-1.3.2.tgz", + "integrity": "sha512-RXRJzMiK6U2ye0BlGGZnmpwJDPgakn6aNQ0A7gHRbD4I0uvK4TW6UqkK1V0pp9jskjJBAXd3dRrbzWkqJ+6cxA==", + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/yn": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", + "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + } + } +} diff --git a/package.json b/package.json index 55aeecf425..eeff18fe40 100644 --- a/package.json +++ b/package.json @@ -51,7 +51,7 @@ }, "dependencies": { "@amplitude/ua-parser-js": "^0.7.24", - "@aws-sdk/client-personalize": "^3.363.0", + "@aws-sdk/client-personalize": "^3.391.0", "@aws-sdk/client-s3": "^3.370.0", "@aws-sdk/credential-providers": "^3.391.0", "@aws-sdk/lib-storage": "^3.391.0", From 57951b6874f379eb126090dcf89b79582d50a77c Mon Sep 17 00:00:00 2001 From: snyk-bot Date: Fri, 8 Sep 2023 03:19:13 +0000 Subject: [PATCH 04/37] fix: upgrade node-fetch from 2.6.9 to 2.6.12 Snyk has created this PR to upgrade node-fetch from 2.6.9 to 2.6.12. See this package in npm: https://www.npmjs.com/package/node-fetch See this project in Snyk: https://app.snyk.io/org/datamanagement/project/39f686fe-9e69-4343-a9ce-129e22bff288?utm_source=github&utm_medium=referral&page=upgrade-pr --- package-lock.json | 8 ++++---- package.json | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package-lock.json b/package-lock.json index 28d9321b2d..dfe7e5b025 100644 --- a/package-lock.json +++ b/package-lock.json @@ -50,7 +50,7 @@ "moment": "^2.29.4", "moment-timezone": "^0.5.43", "node-cache": "^5.1.2", - "node-fetch": "^2.6.9", + "node-fetch": "^2.6.12", "oauth-1.0a": "^2.2.6", "object-hash": "^3.0.0", "parse-static-imports": "^1.1.0", @@ -16346,9 +16346,9 @@ } }, "node_modules/node-fetch": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.9.tgz", - "integrity": "sha512-DJm/CJkZkRjKKj4Zi4BsKVZh3ValV5IR5s7LVZnW+6YMh0W1BfNA8XSs6DLMGYlId5F3KnA70uu2qepcR08Qqg==", + "version": "2.6.12", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.12.tgz", + "integrity": "sha512-C/fGU2E8ToujUivIO0H+tpQ6HWo4eEmchoPIoXtxCrVghxdKq+QOHqEZW7tuP3KlV3bC8FRMO5nMCC7Zm1VP6g==", "dependencies": { "whatwg-url": "^5.0.0" }, diff --git a/package.json b/package.json index eeff18fe40..11054b66b2 100644 --- a/package.json +++ b/package.json @@ -91,7 +91,7 @@ "moment": "^2.29.4", "moment-timezone": "^0.5.43", "node-cache": "^5.1.2", - "node-fetch": "^2.6.9", + "node-fetch": "^2.6.12", "oauth-1.0a": "^2.2.6", "object-hash": "^3.0.0", "parse-static-imports": "^1.1.0", From 90edb64c4bc846758fc6215e3312406b4443ab1f Mon Sep 17 00:00:00 2001 From: devops-github-rudderstack <88187154+devops-github-rudderstack@users.noreply.github.com> Date: Wed, 6 Sep 2023 12:49:59 -0500 Subject: [PATCH 05/37] chore(release): pull hotfix-release/v1.40.2 into main (#2560) * fix: marketo bulk upload import issue (#2559) * chore(release): 1.40.2 --------- Co-authored-by: shrouti1507 <60211312+shrouti1507@users.noreply.github.com> Co-authored-by: GitHub Actions --- CHANGELOG.md | 7 +++++++ package-lock.json | 4 ++-- package.json | 2 +- src/v0/destinations/marketo_bulk_upload/fileUpload.js | 5 +++-- 4 files changed, 13 insertions(+), 5 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 1da774dc3e..552026d41b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,13 @@ All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines. +### [1.40.2](https://github.com/rudderlabs/rudder-transformer/compare/v1.40.1...v1.40.2) (2023-09-06) + + +### Bug Fixes + +* marketo bulk upload import issue ([#2559](https://github.com/rudderlabs/rudder-transformer/issues/2559)) ([752f351](https://github.com/rudderlabs/rudder-transformer/commit/752f351f02b7f7611c702d7dbcb4804972bb0970)) + ### [1.40.1](https://github.com/rudderlabs/rudder-transformer/compare/v1.40.0...v1.40.1) (2023-09-06) diff --git a/package-lock.json b/package-lock.json index dfe7e5b025..c3035fff22 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "rudder-transformer", - "version": "1.40.1", + "version": "1.40.2", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "rudder-transformer", - "version": "1.40.1", + "version": "1.40.2", "license": "ISC", "dependencies": { "@amplitude/ua-parser-js": "^0.7.24", diff --git a/package.json b/package.json index 11054b66b2..1e8442e12a 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "rudder-transformer", - "version": "1.40.1", + "version": "1.40.2", "description": "", "homepage": "https://github.com/rudderlabs/rudder-transformer#readme", "bugs": { diff --git a/src/v0/destinations/marketo_bulk_upload/fileUpload.js b/src/v0/destinations/marketo_bulk_upload/fileUpload.js index 40b3c64a20..2c77cd6e29 100644 --- a/src/v0/destinations/marketo_bulk_upload/fileUpload.js +++ b/src/v0/destinations/marketo_bulk_upload/fileUpload.js @@ -6,8 +6,9 @@ const { getMarketoFilePath, handleFileUploadResponse, getFieldSchemaMap, + hydrateStatusForServer, } = require('./util'); -const { isHttpStatusSuccess, hydrateStatusForServer } = require('../../util'); +const { isHttpStatusSuccess } = require('../../util'); const { MARKETO_FILE_SIZE, UPLOAD_FILE } = require('./config'); const { getHashFromArray, @@ -249,7 +250,7 @@ const responseHandler = async (input, config) => { const response = { statusCode: 200, importId, - metadata + metadata, }; return response; } From d2619f966694fba0bc099aaa881215678e5fcabd Mon Sep 17 00:00:00 2001 From: Yashasvi Bajpai <33063622+yashasvibajpai@users.noreply.github.com> Date: Mon, 11 Sep 2023 11:42:32 +0530 Subject: [PATCH 06/37] chore: improve error message for HS (#2576) chore: improce error message for HS --- src/v0/destinations/hs/util.js | 4 +++- test/__tests__/data/hs_output.json | 2 +- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/src/v0/destinations/hs/util.js b/src/v0/destinations/hs/util.js index 63c3eb118f..11f7a892d5 100644 --- a/src/v0/destinations/hs/util.js +++ b/src/v0/destinations/hs/util.js @@ -429,7 +429,9 @@ const getEventAndPropertiesFromConfig = (message, destination, payload) => { }); if (!hubspotEventFound) { - throw new ConfigurationError(`'${event}' event name not found`); + throw new ConfigurationError( + `Event name '${event}' mappings are not configured in the destination`, + ); } // 2. fetch event properties from webapp config diff --git a/test/__tests__/data/hs_output.json b/test/__tests__/data/hs_output.json index f26bfe8432..6167ea69f3 100644 --- a/test/__tests__/data/hs_output.json +++ b/test/__tests__/data/hs_output.json @@ -716,7 +716,7 @@ }, { "statusCode": 400, - "error": "'temp event' event name not found" + "error": "Event name 'temp event' mappings are not configured in the destination" }, { "statusCode": 400, From 1e4a606a12ef7b61b8149673e238399e732e026d Mon Sep 17 00:00:00 2001 From: mihir-4116 Date: Fri, 8 Sep 2023 11:26:24 +0530 Subject: [PATCH 07/37] feat(tiktok_ads): messageId to event_id mapping support --- src/v0/destinations/tiktok_ads/data/TikTokTrack.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/v0/destinations/tiktok_ads/data/TikTokTrack.json b/src/v0/destinations/tiktok_ads/data/TikTokTrack.json index 05709af27a..b15223b999 100644 --- a/src/v0/destinations/tiktok_ads/data/TikTokTrack.json +++ b/src/v0/destinations/tiktok_ads/data/TikTokTrack.json @@ -1,7 +1,7 @@ [ { "destKey": "event_id", - "sourceKeys": "properties.eventId", + "sourceKeys": ["properties.eventId", "properties.event_id", "messageId"], "required": false }, { From b47219de67a77d166e8d21c7b2d135c2a3e2a7c6 Mon Sep 17 00:00:00 2001 From: Akash Chetty Date: Fri, 8 Sep 2023 20:28:29 +0530 Subject: [PATCH 08/37] fix: json paths for non tracks events for warehouse (#2571) --- src/warehouse/index.js | 114 ++- src/warehouse/util.js | 64 +- .../integrations/jsonpaths/legacy/aliases.js | 427 +++++++++ .../integrations/jsonpaths/legacy/extract.js | 278 ++++++ .../integrations/jsonpaths/legacy/groups.js | 432 +++++++++ .../jsonpaths/legacy/identifies.js | 850 ++++++++++++++++++ .../integrations/jsonpaths/legacy/pages.js | 405 +++++++++ .../integrations/jsonpaths/legacy/screens.js | 405 +++++++++ .../integrations/jsonpaths/legacy/tracks.js | 830 +++++++++++++++++ .../integrations/jsonpaths/new/aliases.js | 415 +++++++++ .../integrations/jsonpaths/new/extract.js | 278 ++++++ .../integrations/jsonpaths/new/groups.js | 420 +++++++++ .../integrations/jsonpaths/new/identifies.js | 850 ++++++++++++++++++ .../integrations/jsonpaths/new/pages.js | 393 ++++++++ .../integrations/jsonpaths/new/screens.js | 393 ++++++++ .../integrations/jsonpaths/new/tracks.js | 830 +++++++++++++++++ test/__tests__/flatten_events.test.js | 44 +- test/__tests__/warehouse.test.js | 71 +- 18 files changed, 7426 insertions(+), 73 deletions(-) create mode 100644 test/__tests__/data/warehouse/integrations/jsonpaths/legacy/aliases.js create mode 100644 test/__tests__/data/warehouse/integrations/jsonpaths/legacy/extract.js create mode 100644 test/__tests__/data/warehouse/integrations/jsonpaths/legacy/groups.js create mode 100644 test/__tests__/data/warehouse/integrations/jsonpaths/legacy/identifies.js create mode 100644 test/__tests__/data/warehouse/integrations/jsonpaths/legacy/pages.js create mode 100644 test/__tests__/data/warehouse/integrations/jsonpaths/legacy/screens.js create mode 100644 test/__tests__/data/warehouse/integrations/jsonpaths/legacy/tracks.js create mode 100644 test/__tests__/data/warehouse/integrations/jsonpaths/new/aliases.js create mode 100644 test/__tests__/data/warehouse/integrations/jsonpaths/new/extract.js create mode 100644 test/__tests__/data/warehouse/integrations/jsonpaths/new/groups.js create mode 100644 test/__tests__/data/warehouse/integrations/jsonpaths/new/identifies.js create mode 100644 test/__tests__/data/warehouse/integrations/jsonpaths/new/pages.js create mode 100644 test/__tests__/data/warehouse/integrations/jsonpaths/new/screens.js create mode 100644 test/__tests__/data/warehouse/integrations/jsonpaths/new/tracks.js diff --git a/src/warehouse/index.js b/src/warehouse/index.js index dd5116f00e..244605613f 100644 --- a/src/warehouse/index.js +++ b/src/warehouse/index.js @@ -7,7 +7,8 @@ const { isObject, isBlank, isValidJsonPathKey, - getKeysFromJsonPaths, + isValidLegacyJsonPathKey, + keysFromJsonPaths, validTimestamp, getVersionedUtils, isRudderSourcesEvent, @@ -195,45 +196,51 @@ function setDataFromColumnMappingAndComputeColumnTypes( columnTypes = {context_library_name: 'string', context_library_version: 'string'} */ - function setDataFromInputAndComputeColumnTypes( - utils, - eventType, - output, - input, - columnTypes, - options, - prefix = '', - level = 0, + utils, + eventType, + output, + input, + columnTypes, + options, + completePrefix = '', + completeLevel = 0, + prefix = '', + level = 0, ) { if (!input || !isObject(input)) return; Object.keys(input).forEach((key) => { - if (isValidJsonPathKey(eventType, `${prefix + key}`, input[key], level, options.jsonKeys)) { + const isValidLegacyJSONPath = isValidLegacyJsonPathKey(eventType, `${prefix + key}`, level, options.jsonLegacyPathKeys); + const isValidJSONPath = isValidJsonPathKey(`${completePrefix + key}`, completeLevel, options.jsonPathKeys); + + if (isValidJSONPath || isValidLegacyJSONPath) { if (isBlank(input[key])) { return; } const val = JSON.stringify(input[key]); appendColumnNameAndType( - utils, - eventType, - `${prefix + key}`, - val, - output, - columnTypes, - options, - true, + utils, + eventType, + `${prefix + key}`, + val, + output, + columnTypes, + options, + true, ); } else if (isObject(input[key]) && (options.sourceCategory !== 'cloud' || level < 3)) { setDataFromInputAndComputeColumnTypes( - utils, - eventType, - output, - input[key], - columnTypes, - options, - `${prefix + key}_`, - level + 1, + utils, + eventType, + output, + input[key], + columnTypes, + options, + `${completePrefix + key}_`, + completeLevel + 1, + `${prefix + key}_`, + level + 1, ); } else { let val = input[key]; @@ -245,13 +252,13 @@ function setDataFromInputAndComputeColumnTypes( val = JSON.stringify(val); } appendColumnNameAndType( - utils, - eventType, - `${prefix + key}`, - val, - output, - columnTypes, - options, + utils, + eventType, + `${prefix + key}`, + val, + output, + columnTypes, + options, ); } }); @@ -316,12 +323,15 @@ function storeRudderEvent(utils, message, output, columnTypes, options) { function addJsonKeysToOptions(options) { // Add json key paths from integration options and destination config const jsonPaths = Array.isArray(options.integrationOptions?.jsonPaths) - ? options.integrationOptions.jsonPaths - : []; + ? options.integrationOptions.jsonPaths + : []; if (options.destJsonPaths) { jsonPaths.push(...options.destJsonPaths.split(',')); } - options.jsonKeys = getKeysFromJsonPaths(jsonPaths); + + const keys = keysFromJsonPaths(jsonPaths); + options.jsonPathKeys = keys.jsonPathKeys; + options.jsonLegacyPathKeys = keys.jsonLegacyPathKeys; } /* @@ -583,6 +593,8 @@ function processWarehouseMessage(message, options) { message.context, commonColumnTypes, options, + `${eventType + '_context_'}`, + 2, 'context_', ); @@ -605,6 +617,8 @@ function processWarehouseMessage(message, options) { message.properties, eventTableColumnTypes, options, + `${eventType + '_properties_'}`, + 2, ); setDataFromColumnMappingAndComputeColumnTypes( utils, @@ -658,6 +672,8 @@ function processWarehouseMessage(message, options) { message.context, commonColumnTypes, options, + `${eventType + '_context_'}`, + 2, 'context_', ); setDataFromColumnMappingAndComputeColumnTypes( @@ -732,6 +748,8 @@ function processWarehouseMessage(message, options) { message.properties, eventTableColumnTypes, options, + `${eventType + '_properties_'}`, + 2, ); setDataFromInputAndComputeColumnTypes( utils, @@ -740,6 +758,8 @@ function processWarehouseMessage(message, options) { message.userProperties, eventTableColumnTypes, options, + `${eventType + '_userProperties_'}`, + 2, ); setDataFromColumnMappingAndComputeColumnTypes( utils, @@ -794,6 +814,8 @@ function processWarehouseMessage(message, options) { message.userProperties, commonColumnTypes, options, + `${eventType + '_userProperties_'}`, + 2, ); setDataFromInputAndComputeColumnTypes( utils, @@ -802,6 +824,8 @@ function processWarehouseMessage(message, options) { message.context ? message.context.traits : {}, commonColumnTypes, options, + `${eventType + '_context_traits_'}`, + 3, ); setDataFromInputAndComputeColumnTypes( utils, @@ -810,6 +834,8 @@ function processWarehouseMessage(message, options) { message.traits, commonColumnTypes, options, + `${eventType + '_traits_'}`, + 2, '', ); @@ -821,6 +847,8 @@ function processWarehouseMessage(message, options) { message.context, commonColumnTypes, options, + `${eventType + '_context_'}`, + 2, 'context_', ); @@ -925,6 +953,8 @@ function processWarehouseMessage(message, options) { message.properties, columnTypes, options, + `${eventType + '_properties_'}`, + 2, ); // set rudder properties after user set properties to prevent overwriting setDataFromInputAndComputeColumnTypes( @@ -934,6 +964,8 @@ function processWarehouseMessage(message, options) { message.context, columnTypes, options, + `${eventType + '_context_'}`, + 2, 'context_', ); setDataFromColumnMappingAndComputeColumnTypes( @@ -992,6 +1024,8 @@ function processWarehouseMessage(message, options) { message.traits, columnTypes, options, + `${eventType + '_traits_'}`, + 2, ); setDataFromInputAndComputeColumnTypes( utils, @@ -1000,6 +1034,8 @@ function processWarehouseMessage(message, options) { message.context, columnTypes, options, + `${eventType + '_context_'}`, + 2, 'context_', ); setDataFromColumnMappingAndComputeColumnTypes( @@ -1046,6 +1082,8 @@ function processWarehouseMessage(message, options) { message.traits, columnTypes, options, + `${eventType + '_traits_'}`, + 2, ); setDataFromInputAndComputeColumnTypes( utils, @@ -1054,6 +1092,8 @@ function processWarehouseMessage(message, options) { message.context, columnTypes, options, + `${eventType + '_context_'}`, + 2, 'context_', ); setDataFromColumnMappingAndComputeColumnTypes( diff --git a/src/warehouse/util.js b/src/warehouse/util.js index b965ecb029..db81d11cbd 100644 --- a/src/warehouse/util.js +++ b/src/warehouse/util.js @@ -15,26 +15,69 @@ const isObject = (value) => { return value != null && (type === 'object' || type === 'function') && !Array.isArray(value); }; -const isValidJsonPathKey = (eventType, key, val, level, jsonKeys = {}) => { +const isValidJsonPathKey = (key, level, jsonKeys = {}) => { + return jsonKeys[key] === level; +}; +const isValidLegacyJsonPathKey = (eventType, key, level, jsonKeys = {}) => { return eventType === 'track' && jsonKeys[key] === level; }; const isBlank = (value) => { return _.isEmpty(_.toString(value)); }; + /* - * input => ["a", "b.c"] - * output => { "a": 0, "b_c": 1} +This function takes in an array of json paths and returns an object with keys as the json path and value as the position of the key in the json path +Example: +Input: +[ + "a", + "b.c" +] +Output: +{ + "a": 0, + "b_c": 1 +} + +Input: +[ + "track.context.a", + "track.properties.b", + "pages.properties.c.d", + "groups.traits.e.f" +] +Output: +{ + "track_context_a": 2, + "track_properties_b": 2, + "pages_properties_c_d": 3, + "groups_traits_e_f": 3 +} */ -const getKeysFromJsonPaths = (jsonPaths) => { - const jsonKeys = {}; +const keysFromJsonPaths = (jsonPaths) => { + const jsonPathKeys = {}; + const jsonLegacyPathKeys = {}; + + const supportedEventPrefixes = ['track.', 'identify.', 'page.', 'screen.', 'alias.', 'group.', 'extract.']; + jsonPaths.forEach((jsonPath) => { - if (jsonPath.trim()) { - const paths = jsonPath.trim().split('.'); - jsonKeys[paths.join('_')] = paths.length - 1; + const trimmedJSONPath = jsonPath.trim(); + if (!trimmedJSONPath) { + return; + } + + const paths = trimmedJSONPath.split('.'); + const key = paths.join('_'); + const pos = paths.length - 1; + + if (supportedEventPrefixes.some(prefix => trimmedJSONPath.startsWith(prefix))) { + jsonPathKeys[key] = pos; + return; } + jsonLegacyPathKeys[key] = pos; }); - return jsonKeys; + return {jsonPathKeys, jsonLegacyPathKeys}; }; // https://www.myintervals.com/blog/2009/05/20/iso-8601-date-validation-that-doesnt-suck/ @@ -98,7 +141,8 @@ module.exports = { isObject, isBlank, isValidJsonPathKey, - getKeysFromJsonPaths, + isValidLegacyJsonPathKey, + keysFromJsonPaths, timestampRegex, validTimestamp, getVersionedUtils, diff --git a/test/__tests__/data/warehouse/integrations/jsonpaths/legacy/aliases.js b/test/__tests__/data/warehouse/integrations/jsonpaths/legacy/aliases.js new file mode 100644 index 0000000000..ee748a1a2b --- /dev/null +++ b/test/__tests__/data/warehouse/integrations/jsonpaths/legacy/aliases.js @@ -0,0 +1,427 @@ +module.exports = { + input: { + destination: { + Config: {} + }, + message: { + anonymousId: "e6ab2c5e-2cda-44a9-a962-e2f67df78bca", + channel: "web", + traits: { + city: "Disney", + country: "USA", + email: "mickey@disney.com", + firstname: "Mickey", + testMap: { + nestedMap: { + n1: "nested prop 1" + } + }, + }, + context: { + app: { + build: "1.0.0", + name: "RudderLabs JavaScript SDK", + namespace: "com.rudderlabs.javascript", + version: "1.0.5" + }, + ip: "0.0.0.0", + library: { + name: "RudderLabs JavaScript SDK", + version: "1.0.5" + }, + ctestMap: { + cnestedMap: { + n1: "context nested prop 1" + } + }, + locale: "en-GB", + screen: { + density: 2 + }, + userAgent: + "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.117 Safari/537.36" + }, + integrations: { + All: true, + RS: { + options: { + jsonPaths: [ + "testMap.nestedMap", + "ctestMap.cnestedMap", + ] + } + }, + BQ: { + options: { + jsonPaths: [ + "testMap.nestedMap", + "ctestMap.cnestedMap", + ] + } + }, + POSTGRES: { + options: { + jsonPaths: [ + "testMap.nestedMap", + "ctestMap.cnestedMap", + ] + } + }, + SNOWFLAKE: { + options: { + jsonPaths: [ + "testMap.nestedMap", + "ctestMap.cnestedMap", + ] + } + }, + S3_DATALAKE: { + options: { + skipReservedKeywordsEscaping: true + } + }, + }, + messageId: "a6a0ad5a-bd26-4f19-8f75-38484e580fc7", + originalTimestamp: "2020-01-24T06:29:02.364Z", + receivedAt: "2020-01-24T11:59:02.403+05:30", + request_ip: "[::1]:53708", + sentAt: "2020-01-24T06:29:02.364Z", + timestamp: "2020-01-24T11:59:02.403+05:30", + type: "alias", + userId: "9bb5d4c2-a7aa-4a36-9efb-dd2b1aec5d33" + }, + request: { + query: { + whSchemaVersion: "v1" + } + } + }, + output: { + default: [ + { + "data": { + "anonymous_id": "e6ab2c5e-2cda-44a9-a962-e2f67df78bca", + "channel": "web", + "city": "Disney", + "context_app_build": "1.0.0", + "context_app_name": "RudderLabs JavaScript SDK", + "context_app_namespace": "com.rudderlabs.javascript", + "context_app_version": "1.0.5", + "context_ctest_map_cnested_map_n_1": "context nested prop 1", + "context_ip": "0.0.0.0", + "context_library_name": "RudderLabs JavaScript SDK", + "context_library_version": "1.0.5", + "context_locale": "en-GB", + "context_passed_ip": "0.0.0.0", + "context_request_ip": "[::1]:53708", + "context_screen_density": 2, + "context_user_agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.117 Safari/537.36", + "country": "USA", + "email": "mickey@disney.com", + "firstname": "Mickey", + "id": "a6a0ad5a-bd26-4f19-8f75-38484e580fc7", + "original_timestamp": "2020-01-24T06:29:02.364Z", + "received_at": "2020-01-24T06:29:02.403Z", + "sent_at": "2020-01-24T06:29:02.364Z", + "test_map_nested_map_n_1": "nested prop 1", + "timestamp": "2020-01-24T06:29:02.403Z", + "user_id": "9bb5d4c2-a7aa-4a36-9efb-dd2b1aec5d33" + }, + "metadata": { + "columns": { + "anonymous_id": "string", + "channel": "string", + "city": "string", + "context_app_build": "string", + "context_app_name": "string", + "context_app_namespace": "string", + "context_app_version": "string", + "context_ctest_map_cnested_map_n_1": "string", + "context_ip": "string", + "context_library_name": "string", + "context_library_version": "string", + "context_locale": "string", + "context_passed_ip": "string", + "context_request_ip": "string", + "context_screen_density": "int", + "context_user_agent": "string", + "country": "string", + "email": "string", + "firstname": "string", + "id": "string", + "original_timestamp": "datetime", + "received_at": "datetime", + "sent_at": "datetime", + "test_map_nested_map_n_1": "string", + "timestamp": "datetime", + "user_id": "string", + "uuid_ts": "datetime" + }, + "receivedAt": "2020-01-24T11:59:02.403+05:30", + "table": "aliases" + } + } + ], + rs: [ + { + "data": { + "anonymous_id": "e6ab2c5e-2cda-44a9-a962-e2f67df78bca", + "channel": "web", + "city": "Disney", + "context_app_build": "1.0.0", + "context_app_name": "RudderLabs JavaScript SDK", + "context_app_namespace": "com.rudderlabs.javascript", + "context_app_version": "1.0.5", + "context_ctest_map_cnested_map_n_1": "context nested prop 1", + "context_ip": "0.0.0.0", + "context_library_name": "RudderLabs JavaScript SDK", + "context_library_version": "1.0.5", + "context_locale": "en-GB", + "context_passed_ip": "0.0.0.0", + "context_request_ip": "[::1]:53708", + "context_screen_density": 2, + "context_user_agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.117 Safari/537.36", + "country": "USA", + "email": "mickey@disney.com", + "firstname": "Mickey", + "id": "a6a0ad5a-bd26-4f19-8f75-38484e580fc7", + "original_timestamp": "2020-01-24T06:29:02.364Z", + "received_at": "2020-01-24T06:29:02.403Z", + "sent_at": "2020-01-24T06:29:02.364Z", + "test_map_nested_map_n_1": "nested prop 1", + "timestamp": "2020-01-24T06:29:02.403Z", + "user_id": "9bb5d4c2-a7aa-4a36-9efb-dd2b1aec5d33" + }, + "metadata": { + "columns": { + "anonymous_id": "string", + "channel": "string", + "city": "string", + "context_app_build": "string", + "context_app_name": "string", + "context_app_namespace": "string", + "context_app_version": "string", + "context_ctest_map_cnested_map_n_1": "string", + "context_ip": "string", + "context_library_name": "string", + "context_library_version": "string", + "context_locale": "string", + "context_passed_ip": "string", + "context_request_ip": "string", + "context_screen_density": "int", + "context_user_agent": "string", + "country": "string", + "email": "string", + "firstname": "string", + "id": "string", + "original_timestamp": "datetime", + "received_at": "datetime", + "sent_at": "datetime", + "test_map_nested_map_n_1": "string", + "timestamp": "datetime", + "user_id": "string", + "uuid_ts": "datetime" + }, + "receivedAt": "2020-01-24T11:59:02.403+05:30", + "table": "aliases" + } + } + ], + bq: [ + { + "data": { + "anonymous_id": "e6ab2c5e-2cda-44a9-a962-e2f67df78bca", + "channel": "web", + "city": "Disney", + "context_app_build": "1.0.0", + "context_app_name": "RudderLabs JavaScript SDK", + "context_app_namespace": "com.rudderlabs.javascript", + "context_app_version": "1.0.5", + "context_ctest_map_cnested_map_n_1": "context nested prop 1", + "context_ip": "0.0.0.0", + "context_library_name": "RudderLabs JavaScript SDK", + "context_library_version": "1.0.5", + "context_locale": "en-GB", + "context_passed_ip": "0.0.0.0", + "context_request_ip": "[::1]:53708", + "context_screen_density": 2, + "context_user_agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.117 Safari/537.36", + "country": "USA", + "email": "mickey@disney.com", + "firstname": "Mickey", + "id": "a6a0ad5a-bd26-4f19-8f75-38484e580fc7", + "original_timestamp": "2020-01-24T06:29:02.364Z", + "received_at": "2020-01-24T06:29:02.403Z", + "sent_at": "2020-01-24T06:29:02.364Z", + "test_map_nested_map_n_1": "nested prop 1", + "timestamp": "2020-01-24T06:29:02.403Z", + "user_id": "9bb5d4c2-a7aa-4a36-9efb-dd2b1aec5d33" + }, + "metadata": { + "columns": { + "anonymous_id": "string", + "channel": "string", + "city": "string", + "context_app_build": "string", + "context_app_name": "string", + "context_app_namespace": "string", + "context_app_version": "string", + "context_ctest_map_cnested_map_n_1": "string", + "context_ip": "string", + "context_library_name": "string", + "context_library_version": "string", + "context_locale": "string", + "context_passed_ip": "string", + "context_request_ip": "string", + "context_screen_density": "int", + "context_user_agent": "string", + "country": "string", + "email": "string", + "firstname": "string", + "id": "string", + "loaded_at": "datetime", + "original_timestamp": "datetime", + "received_at": "datetime", + "sent_at": "datetime", + "test_map_nested_map_n_1": "string", + "timestamp": "datetime", + "user_id": "string", + "uuid_ts": "datetime" + }, + "receivedAt": "2020-01-24T11:59:02.403+05:30", + "table": "aliases" + } + } + ], + postgres: [ + { + "data": { + "anonymous_id": "e6ab2c5e-2cda-44a9-a962-e2f67df78bca", + "channel": "web", + "city": "Disney", + "context_app_build": "1.0.0", + "context_app_name": "RudderLabs JavaScript SDK", + "context_app_namespace": "com.rudderlabs.javascript", + "context_app_version": "1.0.5", + "context_ctest_map_cnested_map_n_1": "context nested prop 1", + "context_ip": "0.0.0.0", + "context_library_name": "RudderLabs JavaScript SDK", + "context_library_version": "1.0.5", + "context_locale": "en-GB", + "context_passed_ip": "0.0.0.0", + "context_request_ip": "[::1]:53708", + "context_screen_density": 2, + "context_user_agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.117 Safari/537.36", + "country": "USA", + "email": "mickey@disney.com", + "firstname": "Mickey", + "id": "a6a0ad5a-bd26-4f19-8f75-38484e580fc7", + "original_timestamp": "2020-01-24T06:29:02.364Z", + "received_at": "2020-01-24T06:29:02.403Z", + "sent_at": "2020-01-24T06:29:02.364Z", + "test_map_nested_map_n_1": "nested prop 1", + "timestamp": "2020-01-24T06:29:02.403Z", + "user_id": "9bb5d4c2-a7aa-4a36-9efb-dd2b1aec5d33" + }, + "metadata": { + "columns": { + "anonymous_id": "string", + "channel": "string", + "city": "string", + "context_app_build": "string", + "context_app_name": "string", + "context_app_namespace": "string", + "context_app_version": "string", + "context_ctest_map_cnested_map_n_1": "string", + "context_ip": "string", + "context_library_name": "string", + "context_library_version": "string", + "context_locale": "string", + "context_passed_ip": "string", + "context_request_ip": "string", + "context_screen_density": "int", + "context_user_agent": "string", + "country": "string", + "email": "string", + "firstname": "string", + "id": "string", + "original_timestamp": "datetime", + "received_at": "datetime", + "sent_at": "datetime", + "test_map_nested_map_n_1": "string", + "timestamp": "datetime", + "user_id": "string", + "uuid_ts": "datetime" + }, + "receivedAt": "2020-01-24T11:59:02.403+05:30", + "table": "aliases" + } + } + ], + snowflake: [ + { + "data": { + "ANONYMOUS_ID": "e6ab2c5e-2cda-44a9-a962-e2f67df78bca", + "CHANNEL": "web", + "CITY": "Disney", + "CONTEXT_APP_BUILD": "1.0.0", + "CONTEXT_APP_NAME": "RudderLabs JavaScript SDK", + "CONTEXT_APP_NAMESPACE": "com.rudderlabs.javascript", + "CONTEXT_APP_VERSION": "1.0.5", + "CONTEXT_CTEST_MAP_CNESTED_MAP_N_1": "context nested prop 1", + "CONTEXT_IP": "0.0.0.0", + "CONTEXT_LIBRARY_NAME": "RudderLabs JavaScript SDK", + "CONTEXT_LIBRARY_VERSION": "1.0.5", + "CONTEXT_LOCALE": "en-GB", + "CONTEXT_PASSED_IP": "0.0.0.0", + "CONTEXT_REQUEST_IP": "[::1]:53708", + "CONTEXT_SCREEN_DENSITY": 2, + "CONTEXT_USER_AGENT": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.117 Safari/537.36", + "COUNTRY": "USA", + "EMAIL": "mickey@disney.com", + "FIRSTNAME": "Mickey", + "ID": "a6a0ad5a-bd26-4f19-8f75-38484e580fc7", + "ORIGINAL_TIMESTAMP": "2020-01-24T06:29:02.364Z", + "RECEIVED_AT": "2020-01-24T06:29:02.403Z", + "SENT_AT": "2020-01-24T06:29:02.364Z", + "TEST_MAP_NESTED_MAP_N_1": "nested prop 1", + "TIMESTAMP": "2020-01-24T06:29:02.403Z", + "USER_ID": "9bb5d4c2-a7aa-4a36-9efb-dd2b1aec5d33" + }, + "metadata": { + "columns": { + "ANONYMOUS_ID": "string", + "CHANNEL": "string", + "CITY": "string", + "CONTEXT_APP_BUILD": "string", + "CONTEXT_APP_NAME": "string", + "CONTEXT_APP_NAMESPACE": "string", + "CONTEXT_APP_VERSION": "string", + "CONTEXT_CTEST_MAP_CNESTED_MAP_N_1": "string", + "CONTEXT_IP": "string", + "CONTEXT_LIBRARY_NAME": "string", + "CONTEXT_LIBRARY_VERSION": "string", + "CONTEXT_LOCALE": "string", + "CONTEXT_PASSED_IP": "string", + "CONTEXT_REQUEST_IP": "string", + "CONTEXT_SCREEN_DENSITY": "int", + "CONTEXT_USER_AGENT": "string", + "COUNTRY": "string", + "EMAIL": "string", + "FIRSTNAME": "string", + "ID": "string", + "ORIGINAL_TIMESTAMP": "datetime", + "RECEIVED_AT": "datetime", + "SENT_AT": "datetime", + "TEST_MAP_NESTED_MAP_N_1": "string", + "TIMESTAMP": "datetime", + "USER_ID": "string", + "UUID_TS": "datetime" + }, + "receivedAt": "2020-01-24T11:59:02.403+05:30", + "table": "ALIASES" + } + } + ], + } +} diff --git a/test/__tests__/data/warehouse/integrations/jsonpaths/legacy/extract.js b/test/__tests__/data/warehouse/integrations/jsonpaths/legacy/extract.js new file mode 100644 index 0000000000..906c3ada23 --- /dev/null +++ b/test/__tests__/data/warehouse/integrations/jsonpaths/legacy/extract.js @@ -0,0 +1,278 @@ +module.exports = { + input: { + destination: { + Config: {} + }, + message: { + anonymousId: "e6ab2c5e-2cda-44a9-a962-e2f67df78bca", + channel: "web", + context: { + sources: { + job_id: "djfhksdjhfkjdhfkjahkf", + version: "1169/merge", + job_run_id: "job_run_id", + task_run_id: "task_run_id" + }, + CMap: { + nestedMap: { + n1: "context nested prop 1" + } + }, + userAgent: + "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.117 Safari/537.36" + }, + event: "Product Added", + integrations: { + All: true, + RS: { + options: { + jsonPaths: [ + "PMap.nestedMap", + "CMap.nestedMap", + ] + } + }, + BQ: { + options: { + jsonPaths: [ + "PMap.nestedMap", + "CMap.nestedMap", + ] + } + }, + POSTGRES: { + options: { + jsonPaths: [ + "PMap.nestedMap", + "CMap.nestedMap", + ] + } + }, + SNOWFLAKE: { + options: { + jsonPaths: [ + "PMap.nestedMap", + "CMap.nestedMap", + ] + } + }, + S3_DATALAKE: { + options: { + skipReservedKeywordsEscaping: true + } + }, + }, + recordId: "a6a0ad5a-bd26-4f19-8f75-38484e580fc7", + messageId: "a6a0ad5a-bd26-4f19-8f75-38484e580fc7", + originalTimestamp: "2020-01-24T06:29:02.364Z", + properties: { + currency: "USD", + revenue: 50, + PMap: { + nestedMap: { + n1: "nested prop 1" + } + }, + }, + type: "extract", + receivedAt: "2020-01-24T11:59:02.403+05:30", + request_ip: "[::1]:53708", + sentAt: "2020-01-24T06:29:02.364Z", + timestamp: "2020-01-24T11:59:02.403+05:30", + userId: "9bb5d4c2-a7aa-4a36-9efb-dd2b1aec5d33" + }, + request: { + query: { + whSchemaVersion: "v1" + } + } + }, + output: { + default: [ + { + "data": { + "context_c_map_nested_map_n_1": "context nested prop 1", + "context_sources_job_id": "djfhksdjhfkjdhfkjahkf", + "context_sources_job_run_id": "job_run_id", + "context_sources_task_run_id": "task_run_id", + "context_sources_version": "1169/merge", + "context_user_agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.117 Safari/537.36", + "currency": "USD", + "event": "Product Added", + "id": "a6a0ad5a-bd26-4f19-8f75-38484e580fc7", + "p_map_nested_map_n_1": "nested prop 1", + "received_at": "2020-01-24T06:29:02.403Z", + "revenue": 50 + }, + "metadata": { + "columns": { + "context_c_map_nested_map_n_1": "string", + "context_sources_job_id": "string", + "context_sources_job_run_id": "string", + "context_sources_task_run_id": "string", + "context_sources_version": "string", + "context_user_agent": "string", + "currency": "string", + "event": "string", + "id": "string", + "p_map_nested_map_n_1": "string", + "received_at": "datetime", + "revenue": "int", + "uuid_ts": "datetime" + }, + "receivedAt": "2020-01-24T11:59:02.403+05:30", + "table": "product_added" + } + } + ], + rs: [ + { + "data": { + "context_c_map_nested_map_n_1": "context nested prop 1", + "context_sources_job_id": "djfhksdjhfkjdhfkjahkf", + "context_sources_job_run_id": "job_run_id", + "context_sources_task_run_id": "task_run_id", + "context_sources_version": "1169/merge", + "context_user_agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.117 Safari/537.36", + "currency": "USD", + "event": "Product Added", + "id": "a6a0ad5a-bd26-4f19-8f75-38484e580fc7", + "p_map_nested_map_n_1": "nested prop 1", + "received_at": "2020-01-24T06:29:02.403Z", + "revenue": 50 + }, + "metadata": { + "columns": { + "context_c_map_nested_map_n_1": "string", + "context_sources_job_id": "string", + "context_sources_job_run_id": "string", + "context_sources_task_run_id": "string", + "context_sources_version": "string", + "context_user_agent": "string", + "currency": "string", + "event": "string", + "id": "string", + "p_map_nested_map_n_1": "string", + "received_at": "datetime", + "revenue": "int", + "uuid_ts": "datetime" + }, + "receivedAt": "2020-01-24T11:59:02.403+05:30", + "table": "product_added" + } + } + ], + bq: [ + { + "data": { + "context_c_map_nested_map_n_1": "context nested prop 1", + "context_sources_job_id": "djfhksdjhfkjdhfkjahkf", + "context_sources_job_run_id": "job_run_id", + "context_sources_task_run_id": "task_run_id", + "context_sources_version": "1169/merge", + "context_user_agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.117 Safari/537.36", + "currency": "USD", + "event": "Product Added", + "id": "a6a0ad5a-bd26-4f19-8f75-38484e580fc7", + "p_map_nested_map_n_1": "nested prop 1", + "received_at": "2020-01-24T06:29:02.403Z", + "revenue": 50 + }, + "metadata": { + "columns": { + "context_c_map_nested_map_n_1": "string", + "context_sources_job_id": "string", + "context_sources_job_run_id": "string", + "context_sources_task_run_id": "string", + "context_sources_version": "string", + "context_user_agent": "string", + "currency": "string", + "event": "string", + "id": "string", + "loaded_at": "datetime", + "p_map_nested_map_n_1": "string", + "received_at": "datetime", + "revenue": "int", + "uuid_ts": "datetime" + }, + "receivedAt": "2020-01-24T11:59:02.403+05:30", + "table": "product_added" + } + } + ], + postgres: [ + { + "data": { + "context_c_map_nested_map_n_1": "context nested prop 1", + "context_sources_job_id": "djfhksdjhfkjdhfkjahkf", + "context_sources_job_run_id": "job_run_id", + "context_sources_task_run_id": "task_run_id", + "context_sources_version": "1169/merge", + "context_user_agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.117 Safari/537.36", + "currency": "USD", + "event": "Product Added", + "id": "a6a0ad5a-bd26-4f19-8f75-38484e580fc7", + "p_map_nested_map_n_1": "nested prop 1", + "received_at": "2020-01-24T06:29:02.403Z", + "revenue": 50 + }, + "metadata": { + "columns": { + "context_c_map_nested_map_n_1": "string", + "context_sources_job_id": "string", + "context_sources_job_run_id": "string", + "context_sources_task_run_id": "string", + "context_sources_version": "string", + "context_user_agent": "string", + "currency": "string", + "event": "string", + "id": "string", + "p_map_nested_map_n_1": "string", + "received_at": "datetime", + "revenue": "int", + "uuid_ts": "datetime" + }, + "receivedAt": "2020-01-24T11:59:02.403+05:30", + "table": "product_added" + } + } + ], + snowflake: [ + { + "data": { + "CONTEXT_C_MAP_NESTED_MAP_N_1": "context nested prop 1", + "CONTEXT_SOURCES_JOB_ID": "djfhksdjhfkjdhfkjahkf", + "CONTEXT_SOURCES_JOB_RUN_ID": "job_run_id", + "CONTEXT_SOURCES_TASK_RUN_ID": "task_run_id", + "CONTEXT_SOURCES_VERSION": "1169/merge", + "CONTEXT_USER_AGENT": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.117 Safari/537.36", + "CURRENCY": "USD", + "EVENT": "Product Added", + "ID": "a6a0ad5a-bd26-4f19-8f75-38484e580fc7", + "P_MAP_NESTED_MAP_N_1": "nested prop 1", + "RECEIVED_AT": "2020-01-24T06:29:02.403Z", + "REVENUE": 50 + }, + "metadata": { + "columns": { + "CONTEXT_C_MAP_NESTED_MAP_N_1": "string", + "CONTEXT_SOURCES_JOB_ID": "string", + "CONTEXT_SOURCES_JOB_RUN_ID": "string", + "CONTEXT_SOURCES_TASK_RUN_ID": "string", + "CONTEXT_SOURCES_VERSION": "string", + "CONTEXT_USER_AGENT": "string", + "CURRENCY": "string", + "EVENT": "string", + "ID": "string", + "P_MAP_NESTED_MAP_N_1": "string", + "RECEIVED_AT": "datetime", + "REVENUE": "int", + "UUID_TS": "datetime" + }, + "receivedAt": "2020-01-24T11:59:02.403+05:30", + "table": "PRODUCT_ADDED" + } + } + ] + } +} diff --git a/test/__tests__/data/warehouse/integrations/jsonpaths/legacy/groups.js b/test/__tests__/data/warehouse/integrations/jsonpaths/legacy/groups.js new file mode 100644 index 0000000000..13b243f3a7 --- /dev/null +++ b/test/__tests__/data/warehouse/integrations/jsonpaths/legacy/groups.js @@ -0,0 +1,432 @@ +module.exports = { + input: { + destination: { + Config: {} + }, + message: { + anonymousId: "e6ab2c5e-2cda-44a9-a962-e2f67df78bca", + channel: "web", + traits: { + city: "Disney", + country: "USA", + email: "mickey@disney.com", + firstname: "Mickey", + testMap: { + nestedMap: { + n1: "nested prop 1" + } + }, + }, + context: { + app: { + build: "1.0.0", + name: "RudderLabs JavaScript SDK", + namespace: "com.rudderlabs.javascript", + version: "1.0.5" + }, + ip: "0.0.0.0", + library: { + name: "RudderLabs JavaScript SDK", + version: "1.0.5" + }, + ctestMap: { + cnestedMap: { + n1: "context nested prop 1" + } + }, + locale: "en-GB", + screen: { + density: 2 + }, + userAgent: + "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.117 Safari/537.36" + }, + integrations: { + All: true, + RS: { + options: { + jsonPaths: [ + "testMap.nestedMap", + "ctestMap.cnestedMap", + ] + } + }, + BQ: { + options: { + jsonPaths: [ + "testMap.nestedMap", + "ctestMap.cnestedMap", + ] + } + }, + POSTGRES: { + options: { + jsonPaths: [ + "testMap.nestedMap", + "ctestMap.cnestedMap", + ] + } + }, + SNOWFLAKE: { + options: { + jsonPaths: [ + "testMap.nestedMap", + "ctestMap.cnestedMap", + ] + } + }, + GCS_DATALAKE: { + options: { + skipReservedKeywordsEscaping: true + } + }, + S3_DATALAKE: { + options: { + skipReservedKeywordsEscaping: true + } + }, + }, + messageId: "a6a0ad5a-bd26-4f19-8f75-38484e580fc7", + originalTimestamp: "2020-01-24T06:29:02.364Z", + receivedAt: "2020-01-24T11:59:02.403+05:30", + request_ip: "[::1]:53708", + sentAt: "2020-01-24T06:29:02.364Z", + timestamp: "2020-01-24T11:59:02.403+05:30", + type: "group", + userId: "9bb5d4c2-a7aa-4a36-9efb-dd2b1aec5d33" + }, + request: { + query: { + whSchemaVersion: "v1" + } + } + }, + output: { + default: [ + { + "data": { + "anonymous_id": "e6ab2c5e-2cda-44a9-a962-e2f67df78bca", + "channel": "web", + "city": "Disney", + "context_app_build": "1.0.0", + "context_app_name": "RudderLabs JavaScript SDK", + "context_app_namespace": "com.rudderlabs.javascript", + "context_app_version": "1.0.5", + "context_ctest_map_cnested_map_n_1": "context nested prop 1", + "context_ip": "0.0.0.0", + "context_library_name": "RudderLabs JavaScript SDK", + "context_library_version": "1.0.5", + "context_locale": "en-GB", + "context_passed_ip": "0.0.0.0", + "context_request_ip": "[::1]:53708", + "context_screen_density": 2, + "context_user_agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.117 Safari/537.36", + "country": "USA", + "email": "mickey@disney.com", + "firstname": "Mickey", + "id": "a6a0ad5a-bd26-4f19-8f75-38484e580fc7", + "original_timestamp": "2020-01-24T06:29:02.364Z", + "received_at": "2020-01-24T06:29:02.403Z", + "sent_at": "2020-01-24T06:29:02.364Z", + "test_map_nested_map_n_1": "nested prop 1", + "timestamp": "2020-01-24T06:29:02.403Z", + "user_id": "9bb5d4c2-a7aa-4a36-9efb-dd2b1aec5d33" + }, + "metadata": { + "columns": { + "anonymous_id": "string", + "channel": "string", + "city": "string", + "context_app_build": "string", + "context_app_name": "string", + "context_app_namespace": "string", + "context_app_version": "string", + "context_ctest_map_cnested_map_n_1": "string", + "context_ip": "string", + "context_library_name": "string", + "context_library_version": "string", + "context_locale": "string", + "context_passed_ip": "string", + "context_request_ip": "string", + "context_screen_density": "int", + "context_user_agent": "string", + "country": "string", + "email": "string", + "firstname": "string", + "id": "string", + "original_timestamp": "datetime", + "received_at": "datetime", + "sent_at": "datetime", + "test_map_nested_map_n_1": "string", + "timestamp": "datetime", + "user_id": "string", + "uuid_ts": "datetime" + }, + "receivedAt": "2020-01-24T11:59:02.403+05:30", + "table": "groups" + } + } + ], + rs: [ + { + "data": { + "anonymous_id": "e6ab2c5e-2cda-44a9-a962-e2f67df78bca", + "channel": "web", + "city": "Disney", + "context_app_build": "1.0.0", + "context_app_name": "RudderLabs JavaScript SDK", + "context_app_namespace": "com.rudderlabs.javascript", + "context_app_version": "1.0.5", + "context_ctest_map_cnested_map_n_1": "context nested prop 1", + "context_ip": "0.0.0.0", + "context_library_name": "RudderLabs JavaScript SDK", + "context_library_version": "1.0.5", + "context_locale": "en-GB", + "context_passed_ip": "0.0.0.0", + "context_request_ip": "[::1]:53708", + "context_screen_density": 2, + "context_user_agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.117 Safari/537.36", + "country": "USA", + "email": "mickey@disney.com", + "firstname": "Mickey", + "id": "a6a0ad5a-bd26-4f19-8f75-38484e580fc7", + "original_timestamp": "2020-01-24T06:29:02.364Z", + "received_at": "2020-01-24T06:29:02.403Z", + "sent_at": "2020-01-24T06:29:02.364Z", + "test_map_nested_map_n_1": "nested prop 1", + "timestamp": "2020-01-24T06:29:02.403Z", + "user_id": "9bb5d4c2-a7aa-4a36-9efb-dd2b1aec5d33" + }, + "metadata": { + "columns": { + "anonymous_id": "string", + "channel": "string", + "city": "string", + "context_app_build": "string", + "context_app_name": "string", + "context_app_namespace": "string", + "context_app_version": "string", + "context_ctest_map_cnested_map_n_1": "string", + "context_ip": "string", + "context_library_name": "string", + "context_library_version": "string", + "context_locale": "string", + "context_passed_ip": "string", + "context_request_ip": "string", + "context_screen_density": "int", + "context_user_agent": "string", + "country": "string", + "email": "string", + "firstname": "string", + "id": "string", + "original_timestamp": "datetime", + "received_at": "datetime", + "sent_at": "datetime", + "test_map_nested_map_n_1": "string", + "timestamp": "datetime", + "user_id": "string", + "uuid_ts": "datetime" + }, + "receivedAt": "2020-01-24T11:59:02.403+05:30", + "table": "groups" + } + } + ], + bq: [ + { + "data": { + "anonymous_id": "e6ab2c5e-2cda-44a9-a962-e2f67df78bca", + "channel": "web", + "city": "Disney", + "context_app_build": "1.0.0", + "context_app_name": "RudderLabs JavaScript SDK", + "context_app_namespace": "com.rudderlabs.javascript", + "context_app_version": "1.0.5", + "context_ctest_map_cnested_map_n_1": "context nested prop 1", + "context_ip": "0.0.0.0", + "context_library_name": "RudderLabs JavaScript SDK", + "context_library_version": "1.0.5", + "context_locale": "en-GB", + "context_passed_ip": "0.0.0.0", + "context_request_ip": "[::1]:53708", + "context_screen_density": 2, + "context_user_agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.117 Safari/537.36", + "country": "USA", + "email": "mickey@disney.com", + "firstname": "Mickey", + "id": "a6a0ad5a-bd26-4f19-8f75-38484e580fc7", + "original_timestamp": "2020-01-24T06:29:02.364Z", + "received_at": "2020-01-24T06:29:02.403Z", + "sent_at": "2020-01-24T06:29:02.364Z", + "test_map_nested_map_n_1": "nested prop 1", + "timestamp": "2020-01-24T06:29:02.403Z", + "user_id": "9bb5d4c2-a7aa-4a36-9efb-dd2b1aec5d33" + }, + "metadata": { + "columns": { + "anonymous_id": "string", + "channel": "string", + "city": "string", + "context_app_build": "string", + "context_app_name": "string", + "context_app_namespace": "string", + "context_app_version": "string", + "context_ctest_map_cnested_map_n_1": "string", + "context_ip": "string", + "context_library_name": "string", + "context_library_version": "string", + "context_locale": "string", + "context_passed_ip": "string", + "context_request_ip": "string", + "context_screen_density": "int", + "context_user_agent": "string", + "country": "string", + "email": "string", + "firstname": "string", + "id": "string", + "loaded_at": "datetime", + "original_timestamp": "datetime", + "received_at": "datetime", + "sent_at": "datetime", + "test_map_nested_map_n_1": "string", + "timestamp": "datetime", + "user_id": "string", + "uuid_ts": "datetime" + }, + "receivedAt": "2020-01-24T11:59:02.403+05:30", + "table": "_groups" + } + } + ], + postgres: [ + { + "data": { + "anonymous_id": "e6ab2c5e-2cda-44a9-a962-e2f67df78bca", + "channel": "web", + "city": "Disney", + "context_app_build": "1.0.0", + "context_app_name": "RudderLabs JavaScript SDK", + "context_app_namespace": "com.rudderlabs.javascript", + "context_app_version": "1.0.5", + "context_ctest_map_cnested_map_n_1": "context nested prop 1", + "context_ip": "0.0.0.0", + "context_library_name": "RudderLabs JavaScript SDK", + "context_library_version": "1.0.5", + "context_locale": "en-GB", + "context_passed_ip": "0.0.0.0", + "context_request_ip": "[::1]:53708", + "context_screen_density": 2, + "context_user_agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.117 Safari/537.36", + "country": "USA", + "email": "mickey@disney.com", + "firstname": "Mickey", + "id": "a6a0ad5a-bd26-4f19-8f75-38484e580fc7", + "original_timestamp": "2020-01-24T06:29:02.364Z", + "received_at": "2020-01-24T06:29:02.403Z", + "sent_at": "2020-01-24T06:29:02.364Z", + "test_map_nested_map_n_1": "nested prop 1", + "timestamp": "2020-01-24T06:29:02.403Z", + "user_id": "9bb5d4c2-a7aa-4a36-9efb-dd2b1aec5d33" + }, + "metadata": { + "columns": { + "anonymous_id": "string", + "channel": "string", + "city": "string", + "context_app_build": "string", + "context_app_name": "string", + "context_app_namespace": "string", + "context_app_version": "string", + "context_ctest_map_cnested_map_n_1": "string", + "context_ip": "string", + "context_library_name": "string", + "context_library_version": "string", + "context_locale": "string", + "context_passed_ip": "string", + "context_request_ip": "string", + "context_screen_density": "int", + "context_user_agent": "string", + "country": "string", + "email": "string", + "firstname": "string", + "id": "string", + "original_timestamp": "datetime", + "received_at": "datetime", + "sent_at": "datetime", + "test_map_nested_map_n_1": "string", + "timestamp": "datetime", + "user_id": "string", + "uuid_ts": "datetime" + }, + "receivedAt": "2020-01-24T11:59:02.403+05:30", + "table": "groups" + } + } + ], + snowflake: [ + { + "data": { + "ANONYMOUS_ID": "e6ab2c5e-2cda-44a9-a962-e2f67df78bca", + "CHANNEL": "web", + "CITY": "Disney", + "CONTEXT_APP_BUILD": "1.0.0", + "CONTEXT_APP_NAME": "RudderLabs JavaScript SDK", + "CONTEXT_APP_NAMESPACE": "com.rudderlabs.javascript", + "CONTEXT_APP_VERSION": "1.0.5", + "CONTEXT_CTEST_MAP_CNESTED_MAP_N_1": "context nested prop 1", + "CONTEXT_IP": "0.0.0.0", + "CONTEXT_LIBRARY_NAME": "RudderLabs JavaScript SDK", + "CONTEXT_LIBRARY_VERSION": "1.0.5", + "CONTEXT_LOCALE": "en-GB", + "CONTEXT_PASSED_IP": "0.0.0.0", + "CONTEXT_REQUEST_IP": "[::1]:53708", + "CONTEXT_SCREEN_DENSITY": 2, + "CONTEXT_USER_AGENT": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.117 Safari/537.36", + "COUNTRY": "USA", + "EMAIL": "mickey@disney.com", + "FIRSTNAME": "Mickey", + "ID": "a6a0ad5a-bd26-4f19-8f75-38484e580fc7", + "ORIGINAL_TIMESTAMP": "2020-01-24T06:29:02.364Z", + "RECEIVED_AT": "2020-01-24T06:29:02.403Z", + "SENT_AT": "2020-01-24T06:29:02.364Z", + "TEST_MAP_NESTED_MAP_N_1": "nested prop 1", + "TIMESTAMP": "2020-01-24T06:29:02.403Z", + "USER_ID": "9bb5d4c2-a7aa-4a36-9efb-dd2b1aec5d33" + }, + "metadata": { + "columns": { + "ANONYMOUS_ID": "string", + "CHANNEL": "string", + "CITY": "string", + "CONTEXT_APP_BUILD": "string", + "CONTEXT_APP_NAME": "string", + "CONTEXT_APP_NAMESPACE": "string", + "CONTEXT_APP_VERSION": "string", + "CONTEXT_CTEST_MAP_CNESTED_MAP_N_1": "string", + "CONTEXT_IP": "string", + "CONTEXT_LIBRARY_NAME": "string", + "CONTEXT_LIBRARY_VERSION": "string", + "CONTEXT_LOCALE": "string", + "CONTEXT_PASSED_IP": "string", + "CONTEXT_REQUEST_IP": "string", + "CONTEXT_SCREEN_DENSITY": "int", + "CONTEXT_USER_AGENT": "string", + "COUNTRY": "string", + "EMAIL": "string", + "FIRSTNAME": "string", + "ID": "string", + "ORIGINAL_TIMESTAMP": "datetime", + "RECEIVED_AT": "datetime", + "SENT_AT": "datetime", + "TEST_MAP_NESTED_MAP_N_1": "string", + "TIMESTAMP": "datetime", + "USER_ID": "string", + "UUID_TS": "datetime" + }, + "receivedAt": "2020-01-24T11:59:02.403+05:30", + "table": "GROUPS" + } + } + ], + } +} diff --git a/test/__tests__/data/warehouse/integrations/jsonpaths/legacy/identifies.js b/test/__tests__/data/warehouse/integrations/jsonpaths/legacy/identifies.js new file mode 100644 index 0000000000..47b7f1209a --- /dev/null +++ b/test/__tests__/data/warehouse/integrations/jsonpaths/legacy/identifies.js @@ -0,0 +1,850 @@ +module.exports = { + input: { + destination: { + Config: {} + }, + message: { + type: "identify", + sentAt: "2021-01-03T17:02:53.195Z", + userId: "user123", + channel: "web", + integrations: { + All: true, + RS: { + options: { + jsonPaths: [ + "UPMap.nestedMap", + "CTMap.nestedMap", + "TMap.nestedMap", + "CMap.nestedMap", + ] + } + }, + BQ: { + options: { + jsonPaths: [ + "UPMap.nestedMap", + "CTMap.nestedMap", + "TMap.nestedMap", + "CMap.nestedMap", + ] + } + }, + POSTGRES: { + options: { + jsonPaths: [ + "UPMap.nestedMap", + "CTMap.nestedMap", + "TMap.nestedMap", + "CMap.nestedMap", + ] + } + }, + SNOWFLAKE: { + options: { + jsonPaths: [ + "UPMap.nestedMap", + "CTMap.nestedMap", + "TMap.nestedMap", + "CMap.nestedMap", + ] + } + }, + S3_DATALAKE: { + options: { + skipReservedKeywordsEscaping: true + } + }, + }, + userProperties: { + email: "test@gmail.com", + UPMap: { + nestedMap: { + n1: "nested prop 1" + } + }, + }, + traits: { + TMap: { + nestedMap: { + n1: "nested prop 1" + } + }, + }, + context: { + os: { + "name": "android", + "version": "1.12.3" + }, + app: { + name: "RudderLabs JavaScript SDK", + build: "1.0.0", + version: "1.1.11", + namespace: "com.rudderlabs.javascript" + }, + traits: { + email: "user123@email.com", + phone: "+917836362334", + userId: "user123", + CTMap: { + nestedMap: { + n1: "nested prop 1" + } + }, + }, + CMap: { + nestedMap: { + n1: "context nested prop 1" + } + }, + locale: "en-US", + device: { + token: "token", + id: "id", + type: "ios" + }, + library: { + name: "RudderLabs JavaScript SDK", + version: "1.1.11" + }, + userAgent: "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.16; rv:84.0) Gecko/20100101 Firefox/84.0" + }, + rudderId: "8f8fa6b5-8e24-489c-8e22-61f23f2e364f", + messageId: "2116ef8c-efc3-4ca4-851b-02ee60dad6ff", + anonymousId: "97c46c81-3140-456d-b2a9-690d70aaca35", + originalTimestamp: "2020-01-24T06:29:02.364Z", + receivedAt: "2020-01-24T11:59:02.403+05:30", + request_ip: "[::1]:53708", + timestamp: "2020-01-24T11:59:02.403+05:30" + }, + request: { + query: { + whSchemaVersion: "v1" + } + } + }, + output: { + default: [ + { + "data": { + "anonymous_id": "97c46c81-3140-456d-b2a9-690d70aaca35", + "channel": "web", + "context_app_build": "1.0.0", + "context_app_name": "RudderLabs JavaScript SDK", + "context_app_namespace": "com.rudderlabs.javascript", + "context_app_version": "1.1.11", + "context_c_map_nested_map_n_1": "context nested prop 1", + "context_device_id": "id", + "context_device_token": "token", + "context_device_type": "ios", + "context_ip": "[::1]:53708", + "context_library_name": "RudderLabs JavaScript SDK", + "context_library_version": "1.1.11", + "context_locale": "en-US", + "context_os_name": "android", + "context_os_version": "1.12.3", + "context_request_ip": "[::1]:53708", + "context_traits_ct_map_nested_map_n_1": "nested prop 1", + "context_traits_email": "user123@email.com", + "context_traits_phone": "+917836362334", + "context_traits_user_id": "user123", + "context_user_agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.16; rv:84.0) Gecko/20100101 Firefox/84.0", + "ct_map_nested_map_n_1": "nested prop 1", + "email": "user123@email.com", + "id": "2116ef8c-efc3-4ca4-851b-02ee60dad6ff", + "original_timestamp": "2020-01-24T06:29:02.364Z", + "phone": "+917836362334", + "received_at": "2020-01-24T06:29:02.403Z", + "sent_at": "2021-01-03T17:02:53.195Z", + "t_map_nested_map_n_1": "nested prop 1", + "timestamp": "2020-01-24T06:29:02.403Z", + "up_map_nested_map_n_1": "nested prop 1", + "user_id": "user123" + }, + "metadata": { + "columns": { + "anonymous_id": "string", + "channel": "string", + "context_app_build": "string", + "context_app_name": "string", + "context_app_namespace": "string", + "context_app_version": "string", + "context_c_map_nested_map_n_1": "string", + "context_device_id": "string", + "context_device_token": "string", + "context_device_type": "string", + "context_ip": "string", + "context_library_name": "string", + "context_library_version": "string", + "context_locale": "string", + "context_os_name": "string", + "context_os_version": "string", + "context_request_ip": "string", + "context_traits_ct_map_nested_map_n_1": "string", + "context_traits_email": "string", + "context_traits_phone": "string", + "context_traits_user_id": "string", + "context_user_agent": "string", + "ct_map_nested_map_n_1": "string", + "email": "string", + "id": "string", + "original_timestamp": "datetime", + "phone": "string", + "received_at": "datetime", + "sent_at": "datetime", + "t_map_nested_map_n_1": "string", + "timestamp": "datetime", + "up_map_nested_map_n_1": "string", + "user_id": "string", + "uuid_ts": "datetime" + }, + "receivedAt": "2020-01-24T11:59:02.403+05:30", + "table": "identifies" + } + }, + { + "data": { + "context_app_build": "1.0.0", + "context_app_name": "RudderLabs JavaScript SDK", + "context_app_namespace": "com.rudderlabs.javascript", + "context_app_version": "1.1.11", + "context_c_map_nested_map_n_1": "context nested prop 1", + "context_device_id": "id", + "context_device_token": "token", + "context_device_type": "ios", + "context_ip": "[::1]:53708", + "context_library_name": "RudderLabs JavaScript SDK", + "context_library_version": "1.1.11", + "context_locale": "en-US", + "context_os_name": "android", + "context_os_version": "1.12.3", + "context_request_ip": "[::1]:53708", + "context_traits_ct_map_nested_map_n_1": "nested prop 1", + "context_traits_email": "user123@email.com", + "context_traits_phone": "+917836362334", + "context_traits_user_id": "user123", + "context_user_agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.16; rv:84.0) Gecko/20100101 Firefox/84.0", + "ct_map_nested_map_n_1": "nested prop 1", + "email": "user123@email.com", + "id": "user123", + "phone": "+917836362334", + "received_at": "2020-01-24T06:29:02.403Z", + "t_map_nested_map_n_1": "nested prop 1", + "up_map_nested_map_n_1": "nested prop 1" + }, + "metadata": { + "columns": { + "context_app_build": "string", + "context_app_name": "string", + "context_app_namespace": "string", + "context_app_version": "string", + "context_c_map_nested_map_n_1": "string", + "context_device_id": "string", + "context_device_token": "string", + "context_device_type": "string", + "context_ip": "string", + "context_library_name": "string", + "context_library_version": "string", + "context_locale": "string", + "context_os_name": "string", + "context_os_version": "string", + "context_request_ip": "string", + "context_traits_ct_map_nested_map_n_1": "string", + "context_traits_email": "string", + "context_traits_phone": "string", + "context_traits_user_id": "string", + "context_user_agent": "string", + "ct_map_nested_map_n_1": "string", + "email": "string", + "id": "string", + "phone": "string", + "received_at": "datetime", + "t_map_nested_map_n_1": "string", + "up_map_nested_map_n_1": "string", + "uuid_ts": "datetime" + }, + "receivedAt": "2020-01-24T11:59:02.403+05:30", + "table": "users" + } + } + ], + rs: [ + { + "data": { + "anonymous_id": "97c46c81-3140-456d-b2a9-690d70aaca35", + "channel": "web", + "context_app_build": "1.0.0", + "context_app_name": "RudderLabs JavaScript SDK", + "context_app_namespace": "com.rudderlabs.javascript", + "context_app_version": "1.1.11", + "context_c_map_nested_map_n_1": "context nested prop 1", + "context_device_id": "id", + "context_device_token": "token", + "context_device_type": "ios", + "context_ip": "[::1]:53708", + "context_library_name": "RudderLabs JavaScript SDK", + "context_library_version": "1.1.11", + "context_locale": "en-US", + "context_os_name": "android", + "context_os_version": "1.12.3", + "context_request_ip": "[::1]:53708", + "context_traits_ct_map_nested_map_n_1": "nested prop 1", + "context_traits_email": "user123@email.com", + "context_traits_phone": "+917836362334", + "context_traits_user_id": "user123", + "context_user_agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.16; rv:84.0) Gecko/20100101 Firefox/84.0", + "ct_map_nested_map_n_1": "nested prop 1", + "email": "user123@email.com", + "id": "2116ef8c-efc3-4ca4-851b-02ee60dad6ff", + "original_timestamp": "2020-01-24T06:29:02.364Z", + "phone": "+917836362334", + "received_at": "2020-01-24T06:29:02.403Z", + "sent_at": "2021-01-03T17:02:53.195Z", + "t_map_nested_map_n_1": "nested prop 1", + "timestamp": "2020-01-24T06:29:02.403Z", + "up_map_nested_map_n_1": "nested prop 1", + "user_id": "user123" + }, + "metadata": { + "columns": { + "anonymous_id": "string", + "channel": "string", + "context_app_build": "string", + "context_app_name": "string", + "context_app_namespace": "string", + "context_app_version": "string", + "context_c_map_nested_map_n_1": "string", + "context_device_id": "string", + "context_device_token": "string", + "context_device_type": "string", + "context_ip": "string", + "context_library_name": "string", + "context_library_version": "string", + "context_locale": "string", + "context_os_name": "string", + "context_os_version": "string", + "context_request_ip": "string", + "context_traits_ct_map_nested_map_n_1": "string", + "context_traits_email": "string", + "context_traits_phone": "string", + "context_traits_user_id": "string", + "context_user_agent": "string", + "ct_map_nested_map_n_1": "string", + "email": "string", + "id": "string", + "original_timestamp": "datetime", + "phone": "string", + "received_at": "datetime", + "sent_at": "datetime", + "t_map_nested_map_n_1": "string", + "timestamp": "datetime", + "up_map_nested_map_n_1": "string", + "user_id": "string", + "uuid_ts": "datetime" + }, + "receivedAt": "2020-01-24T11:59:02.403+05:30", + "table": "identifies" + } + }, + { + "data": { + "context_app_build": "1.0.0", + "context_app_name": "RudderLabs JavaScript SDK", + "context_app_namespace": "com.rudderlabs.javascript", + "context_app_version": "1.1.11", + "context_c_map_nested_map_n_1": "context nested prop 1", + "context_device_id": "id", + "context_device_token": "token", + "context_device_type": "ios", + "context_ip": "[::1]:53708", + "context_library_name": "RudderLabs JavaScript SDK", + "context_library_version": "1.1.11", + "context_locale": "en-US", + "context_os_name": "android", + "context_os_version": "1.12.3", + "context_request_ip": "[::1]:53708", + "context_traits_ct_map_nested_map_n_1": "nested prop 1", + "context_traits_email": "user123@email.com", + "context_traits_phone": "+917836362334", + "context_traits_user_id": "user123", + "context_user_agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.16; rv:84.0) Gecko/20100101 Firefox/84.0", + "ct_map_nested_map_n_1": "nested prop 1", + "email": "user123@email.com", + "id": "user123", + "phone": "+917836362334", + "received_at": "2020-01-24T06:29:02.403Z", + "t_map_nested_map_n_1": "nested prop 1", + "up_map_nested_map_n_1": "nested prop 1" + }, + "metadata": { + "columns": { + "context_app_build": "string", + "context_app_name": "string", + "context_app_namespace": "string", + "context_app_version": "string", + "context_c_map_nested_map_n_1": "string", + "context_device_id": "string", + "context_device_token": "string", + "context_device_type": "string", + "context_ip": "string", + "context_library_name": "string", + "context_library_version": "string", + "context_locale": "string", + "context_os_name": "string", + "context_os_version": "string", + "context_request_ip": "string", + "context_traits_ct_map_nested_map_n_1": "string", + "context_traits_email": "string", + "context_traits_phone": "string", + "context_traits_user_id": "string", + "context_user_agent": "string", + "ct_map_nested_map_n_1": "string", + "email": "string", + "id": "string", + "phone": "string", + "received_at": "datetime", + "t_map_nested_map_n_1": "string", + "up_map_nested_map_n_1": "string", + "uuid_ts": "datetime" + }, + "receivedAt": "2020-01-24T11:59:02.403+05:30", + "table": "users" + } + } + ], + bq: [ + { + "data": { + "anonymous_id": "97c46c81-3140-456d-b2a9-690d70aaca35", + "channel": "web", + "context_app_build": "1.0.0", + "context_app_name": "RudderLabs JavaScript SDK", + "context_app_namespace": "com.rudderlabs.javascript", + "context_app_version": "1.1.11", + "context_c_map_nested_map_n_1": "context nested prop 1", + "context_device_id": "id", + "context_device_token": "token", + "context_device_type": "ios", + "context_ip": "[::1]:53708", + "context_library_name": "RudderLabs JavaScript SDK", + "context_library_version": "1.1.11", + "context_locale": "en-US", + "context_os_name": "android", + "context_os_version": "1.12.3", + "context_request_ip": "[::1]:53708", + "context_traits_ct_map_nested_map_n_1": "nested prop 1", + "context_traits_email": "user123@email.com", + "context_traits_phone": "+917836362334", + "context_traits_user_id": "user123", + "context_user_agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.16; rv:84.0) Gecko/20100101 Firefox/84.0", + "ct_map_nested_map_n_1": "nested prop 1", + "email": "user123@email.com", + "id": "2116ef8c-efc3-4ca4-851b-02ee60dad6ff", + "original_timestamp": "2020-01-24T06:29:02.364Z", + "phone": "+917836362334", + "received_at": "2020-01-24T06:29:02.403Z", + "sent_at": "2021-01-03T17:02:53.195Z", + "t_map_nested_map_n_1": "nested prop 1", + "timestamp": "2020-01-24T06:29:02.403Z", + "up_map_nested_map_n_1": "nested prop 1", + "user_id": "user123" + }, + "metadata": { + "columns": { + "anonymous_id": "string", + "channel": "string", + "context_app_build": "string", + "context_app_name": "string", + "context_app_namespace": "string", + "context_app_version": "string", + "context_c_map_nested_map_n_1": "string", + "context_device_id": "string", + "context_device_token": "string", + "context_device_type": "string", + "context_ip": "string", + "context_library_name": "string", + "context_library_version": "string", + "context_locale": "string", + "context_os_name": "string", + "context_os_version": "string", + "context_request_ip": "string", + "context_traits_ct_map_nested_map_n_1": "string", + "context_traits_email": "string", + "context_traits_phone": "string", + "context_traits_user_id": "string", + "context_user_agent": "string", + "ct_map_nested_map_n_1": "string", + "email": "string", + "id": "string", + "loaded_at": "datetime", + "original_timestamp": "datetime", + "phone": "string", + "received_at": "datetime", + "sent_at": "datetime", + "t_map_nested_map_n_1": "string", + "timestamp": "datetime", + "up_map_nested_map_n_1": "string", + "user_id": "string", + "uuid_ts": "datetime" + }, + "receivedAt": "2020-01-24T11:59:02.403+05:30", + "table": "identifies" + } + }, + { + "data": { + "context_app_build": "1.0.0", + "context_app_name": "RudderLabs JavaScript SDK", + "context_app_namespace": "com.rudderlabs.javascript", + "context_app_version": "1.1.11", + "context_c_map_nested_map_n_1": "context nested prop 1", + "context_device_id": "id", + "context_device_token": "token", + "context_device_type": "ios", + "context_ip": "[::1]:53708", + "context_library_name": "RudderLabs JavaScript SDK", + "context_library_version": "1.1.11", + "context_locale": "en-US", + "context_os_name": "android", + "context_os_version": "1.12.3", + "context_request_ip": "[::1]:53708", + "context_traits_ct_map_nested_map_n_1": "nested prop 1", + "context_traits_email": "user123@email.com", + "context_traits_phone": "+917836362334", + "context_traits_user_id": "user123", + "context_user_agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.16; rv:84.0) Gecko/20100101 Firefox/84.0", + "ct_map_nested_map_n_1": "nested prop 1", + "email": "user123@email.com", + "id": "user123", + "phone": "+917836362334", + "received_at": "2020-01-24T06:29:02.403Z", + "t_map_nested_map_n_1": "nested prop 1", + "up_map_nested_map_n_1": "nested prop 1" + }, + "metadata": { + "columns": { + "context_app_build": "string", + "context_app_name": "string", + "context_app_namespace": "string", + "context_app_version": "string", + "context_c_map_nested_map_n_1": "string", + "context_device_id": "string", + "context_device_token": "string", + "context_device_type": "string", + "context_ip": "string", + "context_library_name": "string", + "context_library_version": "string", + "context_locale": "string", + "context_os_name": "string", + "context_os_version": "string", + "context_request_ip": "string", + "context_traits_ct_map_nested_map_n_1": "string", + "context_traits_email": "string", + "context_traits_phone": "string", + "context_traits_user_id": "string", + "context_user_agent": "string", + "ct_map_nested_map_n_1": "string", + "email": "string", + "id": "string", + "loaded_at": "datetime", + "phone": "string", + "received_at": "datetime", + "t_map_nested_map_n_1": "string", + "up_map_nested_map_n_1": "string", + "uuid_ts": "datetime" + }, + "receivedAt": "2020-01-24T11:59:02.403+05:30", + "table": "users" + } + } + ], + postgres: [ + { + "data": { + "anonymous_id": "97c46c81-3140-456d-b2a9-690d70aaca35", + "channel": "web", + "context_app_build": "1.0.0", + "context_app_name": "RudderLabs JavaScript SDK", + "context_app_namespace": "com.rudderlabs.javascript", + "context_app_version": "1.1.11", + "context_c_map_nested_map_n_1": "context nested prop 1", + "context_device_id": "id", + "context_device_token": "token", + "context_device_type": "ios", + "context_ip": "[::1]:53708", + "context_library_name": "RudderLabs JavaScript SDK", + "context_library_version": "1.1.11", + "context_locale": "en-US", + "context_os_name": "android", + "context_os_version": "1.12.3", + "context_request_ip": "[::1]:53708", + "context_traits_ct_map_nested_map_n_1": "nested prop 1", + "context_traits_email": "user123@email.com", + "context_traits_phone": "+917836362334", + "context_traits_user_id": "user123", + "context_user_agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.16; rv:84.0) Gecko/20100101 Firefox/84.0", + "ct_map_nested_map_n_1": "nested prop 1", + "email": "user123@email.com", + "id": "2116ef8c-efc3-4ca4-851b-02ee60dad6ff", + "original_timestamp": "2020-01-24T06:29:02.364Z", + "phone": "+917836362334", + "received_at": "2020-01-24T06:29:02.403Z", + "sent_at": "2021-01-03T17:02:53.195Z", + "t_map_nested_map_n_1": "nested prop 1", + "timestamp": "2020-01-24T06:29:02.403Z", + "up_map_nested_map_n_1": "nested prop 1", + "user_id": "user123" + }, + "metadata": { + "columns": { + "anonymous_id": "string", + "channel": "string", + "context_app_build": "string", + "context_app_name": "string", + "context_app_namespace": "string", + "context_app_version": "string", + "context_c_map_nested_map_n_1": "string", + "context_device_id": "string", + "context_device_token": "string", + "context_device_type": "string", + "context_ip": "string", + "context_library_name": "string", + "context_library_version": "string", + "context_locale": "string", + "context_os_name": "string", + "context_os_version": "string", + "context_request_ip": "string", + "context_traits_ct_map_nested_map_n_1": "string", + "context_traits_email": "string", + "context_traits_phone": "string", + "context_traits_user_id": "string", + "context_user_agent": "string", + "ct_map_nested_map_n_1": "string", + "email": "string", + "id": "string", + "original_timestamp": "datetime", + "phone": "string", + "received_at": "datetime", + "sent_at": "datetime", + "t_map_nested_map_n_1": "string", + "timestamp": "datetime", + "up_map_nested_map_n_1": "string", + "user_id": "string", + "uuid_ts": "datetime" + }, + "receivedAt": "2020-01-24T11:59:02.403+05:30", + "table": "identifies" + } + }, + { + "data": { + "context_app_build": "1.0.0", + "context_app_name": "RudderLabs JavaScript SDK", + "context_app_namespace": "com.rudderlabs.javascript", + "context_app_version": "1.1.11", + "context_c_map_nested_map_n_1": "context nested prop 1", + "context_device_id": "id", + "context_device_token": "token", + "context_device_type": "ios", + "context_ip": "[::1]:53708", + "context_library_name": "RudderLabs JavaScript SDK", + "context_library_version": "1.1.11", + "context_locale": "en-US", + "context_os_name": "android", + "context_os_version": "1.12.3", + "context_request_ip": "[::1]:53708", + "context_traits_ct_map_nested_map_n_1": "nested prop 1", + "context_traits_email": "user123@email.com", + "context_traits_phone": "+917836362334", + "context_traits_user_id": "user123", + "context_user_agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.16; rv:84.0) Gecko/20100101 Firefox/84.0", + "ct_map_nested_map_n_1": "nested prop 1", + "email": "user123@email.com", + "id": "user123", + "phone": "+917836362334", + "received_at": "2020-01-24T06:29:02.403Z", + "t_map_nested_map_n_1": "nested prop 1", + "up_map_nested_map_n_1": "nested prop 1" + }, + "metadata": { + "columns": { + "context_app_build": "string", + "context_app_name": "string", + "context_app_namespace": "string", + "context_app_version": "string", + "context_c_map_nested_map_n_1": "string", + "context_device_id": "string", + "context_device_token": "string", + "context_device_type": "string", + "context_ip": "string", + "context_library_name": "string", + "context_library_version": "string", + "context_locale": "string", + "context_os_name": "string", + "context_os_version": "string", + "context_request_ip": "string", + "context_traits_ct_map_nested_map_n_1": "string", + "context_traits_email": "string", + "context_traits_phone": "string", + "context_traits_user_id": "string", + "context_user_agent": "string", + "ct_map_nested_map_n_1": "string", + "email": "string", + "id": "string", + "phone": "string", + "received_at": "datetime", + "t_map_nested_map_n_1": "string", + "up_map_nested_map_n_1": "string", + "uuid_ts": "datetime" + }, + "receivedAt": "2020-01-24T11:59:02.403+05:30", + "table": "users" + } + } + ], + snowflake: [ + { + "data": { + "ANONYMOUS_ID": "97c46c81-3140-456d-b2a9-690d70aaca35", + "CHANNEL": "web", + "CONTEXT_APP_BUILD": "1.0.0", + "CONTEXT_APP_NAME": "RudderLabs JavaScript SDK", + "CONTEXT_APP_NAMESPACE": "com.rudderlabs.javascript", + "CONTEXT_APP_VERSION": "1.1.11", + "CONTEXT_C_MAP_NESTED_MAP_N_1": "context nested prop 1", + "CONTEXT_DEVICE_ID": "id", + "CONTEXT_DEVICE_TOKEN": "token", + "CONTEXT_DEVICE_TYPE": "ios", + "CONTEXT_IP": "[::1]:53708", + "CONTEXT_LIBRARY_NAME": "RudderLabs JavaScript SDK", + "CONTEXT_LIBRARY_VERSION": "1.1.11", + "CONTEXT_LOCALE": "en-US", + "CONTEXT_OS_NAME": "android", + "CONTEXT_OS_VERSION": "1.12.3", + "CONTEXT_REQUEST_IP": "[::1]:53708", + "CONTEXT_TRAITS_CT_MAP_NESTED_MAP_N_1": "nested prop 1", + "CONTEXT_TRAITS_EMAIL": "user123@email.com", + "CONTEXT_TRAITS_PHONE": "+917836362334", + "CONTEXT_TRAITS_USER_ID": "user123", + "CONTEXT_USER_AGENT": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.16; rv:84.0) Gecko/20100101 Firefox/84.0", + "CT_MAP_NESTED_MAP_N_1": "nested prop 1", + "EMAIL": "user123@email.com", + "ID": "2116ef8c-efc3-4ca4-851b-02ee60dad6ff", + "ORIGINAL_TIMESTAMP": "2020-01-24T06:29:02.364Z", + "PHONE": "+917836362334", + "RECEIVED_AT": "2020-01-24T06:29:02.403Z", + "SENT_AT": "2021-01-03T17:02:53.195Z", + "TIMESTAMP": "2020-01-24T06:29:02.403Z", + "T_MAP_NESTED_MAP_N_1": "nested prop 1", + "UP_MAP_NESTED_MAP_N_1": "nested prop 1", + "USER_ID": "user123" + }, + "metadata": { + "columns": { + "ANONYMOUS_ID": "string", + "CHANNEL": "string", + "CONTEXT_APP_BUILD": "string", + "CONTEXT_APP_NAME": "string", + "CONTEXT_APP_NAMESPACE": "string", + "CONTEXT_APP_VERSION": "string", + "CONTEXT_C_MAP_NESTED_MAP_N_1": "string", + "CONTEXT_DEVICE_ID": "string", + "CONTEXT_DEVICE_TOKEN": "string", + "CONTEXT_DEVICE_TYPE": "string", + "CONTEXT_IP": "string", + "CONTEXT_LIBRARY_NAME": "string", + "CONTEXT_LIBRARY_VERSION": "string", + "CONTEXT_LOCALE": "string", + "CONTEXT_OS_NAME": "string", + "CONTEXT_OS_VERSION": "string", + "CONTEXT_REQUEST_IP": "string", + "CONTEXT_TRAITS_CT_MAP_NESTED_MAP_N_1": "string", + "CONTEXT_TRAITS_EMAIL": "string", + "CONTEXT_TRAITS_PHONE": "string", + "CONTEXT_TRAITS_USER_ID": "string", + "CONTEXT_USER_AGENT": "string", + "CT_MAP_NESTED_MAP_N_1": "string", + "EMAIL": "string", + "ID": "string", + "ORIGINAL_TIMESTAMP": "datetime", + "PHONE": "string", + "RECEIVED_AT": "datetime", + "SENT_AT": "datetime", + "TIMESTAMP": "datetime", + "T_MAP_NESTED_MAP_N_1": "string", + "UP_MAP_NESTED_MAP_N_1": "string", + "USER_ID": "string", + "UUID_TS": "datetime" + }, + "receivedAt": "2020-01-24T11:59:02.403+05:30", + "table": "IDENTIFIES" + } + }, + { + "data": { + "CONTEXT_APP_BUILD": "1.0.0", + "CONTEXT_APP_NAME": "RudderLabs JavaScript SDK", + "CONTEXT_APP_NAMESPACE": "com.rudderlabs.javascript", + "CONTEXT_APP_VERSION": "1.1.11", + "CONTEXT_C_MAP_NESTED_MAP_N_1": "context nested prop 1", + "CONTEXT_DEVICE_ID": "id", + "CONTEXT_DEVICE_TOKEN": "token", + "CONTEXT_DEVICE_TYPE": "ios", + "CONTEXT_IP": "[::1]:53708", + "CONTEXT_LIBRARY_NAME": "RudderLabs JavaScript SDK", + "CONTEXT_LIBRARY_VERSION": "1.1.11", + "CONTEXT_LOCALE": "en-US", + "CONTEXT_OS_NAME": "android", + "CONTEXT_OS_VERSION": "1.12.3", + "CONTEXT_REQUEST_IP": "[::1]:53708", + "CONTEXT_TRAITS_CT_MAP_NESTED_MAP_N_1": "nested prop 1", + "CONTEXT_TRAITS_EMAIL": "user123@email.com", + "CONTEXT_TRAITS_PHONE": "+917836362334", + "CONTEXT_TRAITS_USER_ID": "user123", + "CONTEXT_USER_AGENT": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.16; rv:84.0) Gecko/20100101 Firefox/84.0", + "CT_MAP_NESTED_MAP_N_1": "nested prop 1", + "EMAIL": "user123@email.com", + "ID": "user123", + "PHONE": "+917836362334", + "RECEIVED_AT": "2020-01-24T06:29:02.403Z", + "T_MAP_NESTED_MAP_N_1": "nested prop 1", + "UP_MAP_NESTED_MAP_N_1": "nested prop 1" + }, + "metadata": { + "columns": { + "CONTEXT_APP_BUILD": "string", + "CONTEXT_APP_NAME": "string", + "CONTEXT_APP_NAMESPACE": "string", + "CONTEXT_APP_VERSION": "string", + "CONTEXT_C_MAP_NESTED_MAP_N_1": "string", + "CONTEXT_DEVICE_ID": "string", + "CONTEXT_DEVICE_TOKEN": "string", + "CONTEXT_DEVICE_TYPE": "string", + "CONTEXT_IP": "string", + "CONTEXT_LIBRARY_NAME": "string", + "CONTEXT_LIBRARY_VERSION": "string", + "CONTEXT_LOCALE": "string", + "CONTEXT_OS_NAME": "string", + "CONTEXT_OS_VERSION": "string", + "CONTEXT_REQUEST_IP": "string", + "CONTEXT_TRAITS_CT_MAP_NESTED_MAP_N_1": "string", + "CONTEXT_TRAITS_EMAIL": "string", + "CONTEXT_TRAITS_PHONE": "string", + "CONTEXT_TRAITS_USER_ID": "string", + "CONTEXT_USER_AGENT": "string", + "CT_MAP_NESTED_MAP_N_1": "string", + "EMAIL": "string", + "ID": "string", + "PHONE": "string", + "RECEIVED_AT": "datetime", + "T_MAP_NESTED_MAP_N_1": "string", + "UP_MAP_NESTED_MAP_N_1": "string", + "UUID_TS": "datetime" + }, + "receivedAt": "2020-01-24T11:59:02.403+05:30", + "table": "USERS" + } + } + ], + } +} diff --git a/test/__tests__/data/warehouse/integrations/jsonpaths/legacy/pages.js b/test/__tests__/data/warehouse/integrations/jsonpaths/legacy/pages.js new file mode 100644 index 0000000000..0aac8a3c23 --- /dev/null +++ b/test/__tests__/data/warehouse/integrations/jsonpaths/legacy/pages.js @@ -0,0 +1,405 @@ +module.exports = { + input: { + destination: { + Config: {} + }, + message: { + anonymousId: "e6ab2c5e-2cda-44a9-a962-e2f67df78bca", + channel: "web", + context: { + app: { + build: "1.0.0", + name: "RudderLabs JavaScript SDK", + namespace: "com.rudderlabs.javascript", + version: "1.0.5" + }, + ip: "0.0.0.0", + library: { + name: "RudderLabs JavaScript SDK", + version: "1.0.5" + }, + ctestMap: { + cnestedMap: { + n1: "context nested prop 1" + } + }, + locale: "en-GB", + screen: { + density: 2 + }, + userAgent: + "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.117 Safari/537.36" + }, + integrations: { + All: true, + RS: { + options: { + jsonPaths: [ + "testMap.nestedMap", + "ctestMap.cnestedMap", + ] + } + }, + BQ: { + options: { + jsonPaths: [ + "testMap.nestedMap", + "ctestMap.cnestedMap", + ] + } + }, + POSTGRES: { + options: { + jsonPaths: [ + "testMap.nestedMap", + "ctestMap.cnestedMap", + ] + } + }, + SNOWFLAKE: { + options: { + jsonPaths: [ + "testMap.nestedMap", + "ctestMap.cnestedMap", + ] + } + }, + S3_DATALAKE: { + options: { + skipReservedKeywordsEscaping: true + } + }, + }, + messageId: "a6a0ad5a-bd26-4f19-8f75-38484e580fc7", + originalTimestamp: "2020-01-24T06:29:02.364Z", + properties: { + currency: "USD", + revenue: 50, + testMap: { + nestedMap: { + n1: "nested prop 1" + } + }, + }, + receivedAt: "2020-01-24T11:59:02.403+05:30", + request_ip: "[::1]:53708", + sentAt: "2020-01-24T06:29:02.364Z", + timestamp: "2020-01-24T11:59:02.403+05:30", + type: "page", + userId: "9bb5d4c2-a7aa-4a36-9efb-dd2b1aec5d33" + }, + request: { + query: { + whSchemaVersion: "v1" + } + } + }, + output: { + default: [ + { + "data": { + "anonymous_id": "e6ab2c5e-2cda-44a9-a962-e2f67df78bca", + "channel": "web", + "context_app_build": "1.0.0", + "context_app_name": "RudderLabs JavaScript SDK", + "context_app_namespace": "com.rudderlabs.javascript", + "context_app_version": "1.0.5", + "context_ctest_map_cnested_map_n_1": "context nested prop 1", + "context_ip": "0.0.0.0", + "context_library_name": "RudderLabs JavaScript SDK", + "context_library_version": "1.0.5", + "context_locale": "en-GB", + "context_passed_ip": "0.0.0.0", + "context_request_ip": "[::1]:53708", + "context_screen_density": 2, + "context_user_agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.117 Safari/537.36", + "currency": "USD", + "id": "a6a0ad5a-bd26-4f19-8f75-38484e580fc7", + "original_timestamp": "2020-01-24T06:29:02.364Z", + "received_at": "2020-01-24T06:29:02.403Z", + "revenue": 50, + "sent_at": "2020-01-24T06:29:02.364Z", + "test_map_nested_map_n_1": "nested prop 1", + "timestamp": "2020-01-24T06:29:02.403Z", + "user_id": "9bb5d4c2-a7aa-4a36-9efb-dd2b1aec5d33" + }, + "metadata": { + "columns": { + "anonymous_id": "string", + "channel": "string", + "context_app_build": "string", + "context_app_name": "string", + "context_app_namespace": "string", + "context_app_version": "string", + "context_ctest_map_cnested_map_n_1": "string", + "context_ip": "string", + "context_library_name": "string", + "context_library_version": "string", + "context_locale": "string", + "context_passed_ip": "string", + "context_request_ip": "string", + "context_screen_density": "int", + "context_user_agent": "string", + "currency": "string", + "id": "string", + "original_timestamp": "datetime", + "received_at": "datetime", + "revenue": "int", + "sent_at": "datetime", + "test_map_nested_map_n_1": "string", + "timestamp": "datetime", + "user_id": "string", + "uuid_ts": "datetime" + }, + "receivedAt": "2020-01-24T11:59:02.403+05:30", + "table": "pages" + } + } + ], + rs: [ + { + "data": { + "anonymous_id": "e6ab2c5e-2cda-44a9-a962-e2f67df78bca", + "channel": "web", + "context_app_build": "1.0.0", + "context_app_name": "RudderLabs JavaScript SDK", + "context_app_namespace": "com.rudderlabs.javascript", + "context_app_version": "1.0.5", + "context_ctest_map_cnested_map_n_1": "context nested prop 1", + "context_ip": "0.0.0.0", + "context_library_name": "RudderLabs JavaScript SDK", + "context_library_version": "1.0.5", + "context_locale": "en-GB", + "context_passed_ip": "0.0.0.0", + "context_request_ip": "[::1]:53708", + "context_screen_density": 2, + "context_user_agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.117 Safari/537.36", + "currency": "USD", + "id": "a6a0ad5a-bd26-4f19-8f75-38484e580fc7", + "original_timestamp": "2020-01-24T06:29:02.364Z", + "received_at": "2020-01-24T06:29:02.403Z", + "revenue": 50, + "sent_at": "2020-01-24T06:29:02.364Z", + "test_map_nested_map_n_1": "nested prop 1", + "timestamp": "2020-01-24T06:29:02.403Z", + "user_id": "9bb5d4c2-a7aa-4a36-9efb-dd2b1aec5d33" + }, + "metadata": { + "columns": { + "anonymous_id": "string", + "channel": "string", + "context_app_build": "string", + "context_app_name": "string", + "context_app_namespace": "string", + "context_app_version": "string", + "context_ctest_map_cnested_map_n_1": "string", + "context_ip": "string", + "context_library_name": "string", + "context_library_version": "string", + "context_locale": "string", + "context_passed_ip": "string", + "context_request_ip": "string", + "context_screen_density": "int", + "context_user_agent": "string", + "currency": "string", + "id": "string", + "original_timestamp": "datetime", + "received_at": "datetime", + "revenue": "int", + "sent_at": "datetime", + "test_map_nested_map_n_1": "string", + "timestamp": "datetime", + "user_id": "string", + "uuid_ts": "datetime" + }, + "receivedAt": "2020-01-24T11:59:02.403+05:30", + "table": "pages" + } + } + ], + bq: [ + { + "data": { + "anonymous_id": "e6ab2c5e-2cda-44a9-a962-e2f67df78bca", + "channel": "web", + "context_app_build": "1.0.0", + "context_app_name": "RudderLabs JavaScript SDK", + "context_app_namespace": "com.rudderlabs.javascript", + "context_app_version": "1.0.5", + "context_ctest_map_cnested_map_n_1": "context nested prop 1", + "context_ip": "0.0.0.0", + "context_library_name": "RudderLabs JavaScript SDK", + "context_library_version": "1.0.5", + "context_locale": "en-GB", + "context_passed_ip": "0.0.0.0", + "context_request_ip": "[::1]:53708", + "context_screen_density": 2, + "context_user_agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.117 Safari/537.36", + "currency": "USD", + "id": "a6a0ad5a-bd26-4f19-8f75-38484e580fc7", + "original_timestamp": "2020-01-24T06:29:02.364Z", + "received_at": "2020-01-24T06:29:02.403Z", + "revenue": 50, + "sent_at": "2020-01-24T06:29:02.364Z", + "test_map_nested_map_n_1": "nested prop 1", + "timestamp": "2020-01-24T06:29:02.403Z", + "user_id": "9bb5d4c2-a7aa-4a36-9efb-dd2b1aec5d33" + }, + "metadata": { + "columns": { + "anonymous_id": "string", + "channel": "string", + "context_app_build": "string", + "context_app_name": "string", + "context_app_namespace": "string", + "context_app_version": "string", + "context_ctest_map_cnested_map_n_1": "string", + "context_ip": "string", + "context_library_name": "string", + "context_library_version": "string", + "context_locale": "string", + "context_passed_ip": "string", + "context_request_ip": "string", + "context_screen_density": "int", + "context_user_agent": "string", + "currency": "string", + "id": "string", + "loaded_at": "datetime", + "original_timestamp": "datetime", + "received_at": "datetime", + "revenue": "int", + "sent_at": "datetime", + "test_map_nested_map_n_1": "string", + "timestamp": "datetime", + "user_id": "string", + "uuid_ts": "datetime" + }, + "receivedAt": "2020-01-24T11:59:02.403+05:30", + "table": "pages" + } + } + ], + postgres: [ + { + "data": { + "anonymous_id": "e6ab2c5e-2cda-44a9-a962-e2f67df78bca", + "channel": "web", + "context_app_build": "1.0.0", + "context_app_name": "RudderLabs JavaScript SDK", + "context_app_namespace": "com.rudderlabs.javascript", + "context_app_version": "1.0.5", + "context_ctest_map_cnested_map_n_1": "context nested prop 1", + "context_ip": "0.0.0.0", + "context_library_name": "RudderLabs JavaScript SDK", + "context_library_version": "1.0.5", + "context_locale": "en-GB", + "context_passed_ip": "0.0.0.0", + "context_request_ip": "[::1]:53708", + "context_screen_density": 2, + "context_user_agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.117 Safari/537.36", + "currency": "USD", + "id": "a6a0ad5a-bd26-4f19-8f75-38484e580fc7", + "original_timestamp": "2020-01-24T06:29:02.364Z", + "received_at": "2020-01-24T06:29:02.403Z", + "revenue": 50, + "sent_at": "2020-01-24T06:29:02.364Z", + "test_map_nested_map_n_1": "nested prop 1", + "timestamp": "2020-01-24T06:29:02.403Z", + "user_id": "9bb5d4c2-a7aa-4a36-9efb-dd2b1aec5d33" + }, + "metadata": { + "columns": { + "anonymous_id": "string", + "channel": "string", + "context_app_build": "string", + "context_app_name": "string", + "context_app_namespace": "string", + "context_app_version": "string", + "context_ctest_map_cnested_map_n_1": "string", + "context_ip": "string", + "context_library_name": "string", + "context_library_version": "string", + "context_locale": "string", + "context_passed_ip": "string", + "context_request_ip": "string", + "context_screen_density": "int", + "context_user_agent": "string", + "currency": "string", + "id": "string", + "original_timestamp": "datetime", + "received_at": "datetime", + "revenue": "int", + "sent_at": "datetime", + "test_map_nested_map_n_1": "string", + "timestamp": "datetime", + "user_id": "string", + "uuid_ts": "datetime" + }, + "receivedAt": "2020-01-24T11:59:02.403+05:30", + "table": "pages" + } + } + ], + snowflake: [ + { + "data": { + "ANONYMOUS_ID": "e6ab2c5e-2cda-44a9-a962-e2f67df78bca", + "CHANNEL": "web", + "CONTEXT_APP_BUILD": "1.0.0", + "CONTEXT_APP_NAME": "RudderLabs JavaScript SDK", + "CONTEXT_APP_NAMESPACE": "com.rudderlabs.javascript", + "CONTEXT_APP_VERSION": "1.0.5", + "CONTEXT_CTEST_MAP_CNESTED_MAP_N_1": "context nested prop 1", + "CONTEXT_IP": "0.0.0.0", + "CONTEXT_LIBRARY_NAME": "RudderLabs JavaScript SDK", + "CONTEXT_LIBRARY_VERSION": "1.0.5", + "CONTEXT_LOCALE": "en-GB", + "CONTEXT_PASSED_IP": "0.0.0.0", + "CONTEXT_REQUEST_IP": "[::1]:53708", + "CONTEXT_SCREEN_DENSITY": 2, + "CONTEXT_USER_AGENT": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.117 Safari/537.36", + "CURRENCY": "USD", + "ID": "a6a0ad5a-bd26-4f19-8f75-38484e580fc7", + "ORIGINAL_TIMESTAMP": "2020-01-24T06:29:02.364Z", + "RECEIVED_AT": "2020-01-24T06:29:02.403Z", + "REVENUE": 50, + "SENT_AT": "2020-01-24T06:29:02.364Z", + "TEST_MAP_NESTED_MAP_N_1": "nested prop 1", + "TIMESTAMP": "2020-01-24T06:29:02.403Z", + "USER_ID": "9bb5d4c2-a7aa-4a36-9efb-dd2b1aec5d33" + }, + "metadata": { + "columns": { + "ANONYMOUS_ID": "string", + "CHANNEL": "string", + "CONTEXT_APP_BUILD": "string", + "CONTEXT_APP_NAME": "string", + "CONTEXT_APP_NAMESPACE": "string", + "CONTEXT_APP_VERSION": "string", + "CONTEXT_CTEST_MAP_CNESTED_MAP_N_1": "string", + "CONTEXT_IP": "string", + "CONTEXT_LIBRARY_NAME": "string", + "CONTEXT_LIBRARY_VERSION": "string", + "CONTEXT_LOCALE": "string", + "CONTEXT_PASSED_IP": "string", + "CONTEXT_REQUEST_IP": "string", + "CONTEXT_SCREEN_DENSITY": "int", + "CONTEXT_USER_AGENT": "string", + "CURRENCY": "string", + "ID": "string", + "ORIGINAL_TIMESTAMP": "datetime", + "RECEIVED_AT": "datetime", + "REVENUE": "int", + "SENT_AT": "datetime", + "TEST_MAP_NESTED_MAP_N_1": "string", + "TIMESTAMP": "datetime", + "USER_ID": "string", + "UUID_TS": "datetime" + }, + "receivedAt": "2020-01-24T11:59:02.403+05:30", + "table": "PAGES" + } + } + ], + } +} diff --git a/test/__tests__/data/warehouse/integrations/jsonpaths/legacy/screens.js b/test/__tests__/data/warehouse/integrations/jsonpaths/legacy/screens.js new file mode 100644 index 0000000000..bad325c908 --- /dev/null +++ b/test/__tests__/data/warehouse/integrations/jsonpaths/legacy/screens.js @@ -0,0 +1,405 @@ +module.exports = { + input: { + destination: { + Config: {} + }, + message: { + anonymousId: "e6ab2c5e-2cda-44a9-a962-e2f67df78bca", + channel: "web", + context: { + app: { + build: "1.0.0", + name: "RudderLabs JavaScript SDK", + namespace: "com.rudderlabs.javascript", + version: "1.0.5" + }, + ip: "0.0.0.0", + library: { + name: "RudderLabs JavaScript SDK", + version: "1.0.5" + }, + ctestMap: { + cnestedMap: { + n1: "context nested prop 1" + } + }, + locale: "en-GB", + screen: { + density: 2 + }, + userAgent: + "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.117 Safari/537.36" + }, + integrations: { + All: true, + RS: { + options: { + jsonPaths: [ + "testMap.nestedMap", + ".ctestMap.cnestedMap", + ] + } + }, + BQ: { + options: { + jsonPaths: [ + "testMap.nestedMap", + ".ctestMap.cnestedMap", + ] + } + }, + POSTGRES: { + options: { + jsonPaths: [ + "testMap.nestedMap", + ".ctestMap.cnestedMap", + ] + } + }, + SNOWFLAKE: { + options: { + jsonPaths: [ + "testMap.nestedMap", + ".ctestMap.cnestedMap", + ] + } + }, + S3_DATALAKE: { + options: { + skipReservedKeywordsEscaping: true + } + }, + }, + messageId: "a6a0ad5a-bd26-4f19-8f75-38484e580fc7", + originalTimestamp: "2020-01-24T06:29:02.364Z", + properties: { + currency: "USD", + revenue: 50, + testMap: { + nestedMap: { + n1: "nested prop 1" + } + }, + }, + receivedAt: "2020-01-24T11:59:02.403+05:30", + request_ip: "[::1]:53708", + sentAt: "2020-01-24T06:29:02.364Z", + timestamp: "2020-01-24T11:59:02.403+05:30", + type: "screen", + userId: "9bb5d4c2-a7aa-4a36-9efb-dd2b1aec5d33" + }, + request: { + query: { + whSchemaVersion: "v1" + } + } + }, + output: { + default: [ + { + "data": { + "anonymous_id": "e6ab2c5e-2cda-44a9-a962-e2f67df78bca", + "channel": "web", + "context_app_build": "1.0.0", + "context_app_name": "RudderLabs JavaScript SDK", + "context_app_namespace": "com.rudderlabs.javascript", + "context_app_version": "1.0.5", + "context_ctest_map_cnested_map_n_1": "context nested prop 1", + "context_ip": "0.0.0.0", + "context_library_name": "RudderLabs JavaScript SDK", + "context_library_version": "1.0.5", + "context_locale": "en-GB", + "context_passed_ip": "0.0.0.0", + "context_request_ip": "[::1]:53708", + "context_screen_density": 2, + "context_user_agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.117 Safari/537.36", + "currency": "USD", + "id": "a6a0ad5a-bd26-4f19-8f75-38484e580fc7", + "original_timestamp": "2020-01-24T06:29:02.364Z", + "received_at": "2020-01-24T06:29:02.403Z", + "revenue": 50, + "sent_at": "2020-01-24T06:29:02.364Z", + "test_map_nested_map_n_1": "nested prop 1", + "timestamp": "2020-01-24T06:29:02.403Z", + "user_id": "9bb5d4c2-a7aa-4a36-9efb-dd2b1aec5d33" + }, + "metadata": { + "columns": { + "anonymous_id": "string", + "channel": "string", + "context_app_build": "string", + "context_app_name": "string", + "context_app_namespace": "string", + "context_app_version": "string", + "context_ctest_map_cnested_map_n_1": "string", + "context_ip": "string", + "context_library_name": "string", + "context_library_version": "string", + "context_locale": "string", + "context_passed_ip": "string", + "context_request_ip": "string", + "context_screen_density": "int", + "context_user_agent": "string", + "currency": "string", + "id": "string", + "original_timestamp": "datetime", + "received_at": "datetime", + "revenue": "int", + "sent_at": "datetime", + "test_map_nested_map_n_1": "string", + "timestamp": "datetime", + "user_id": "string", + "uuid_ts": "datetime" + }, + "receivedAt": "2020-01-24T11:59:02.403+05:30", + "table": "screens" + } + } + ], + rs: [ + { + "data": { + "anonymous_id": "e6ab2c5e-2cda-44a9-a962-e2f67df78bca", + "channel": "web", + "context_app_build": "1.0.0", + "context_app_name": "RudderLabs JavaScript SDK", + "context_app_namespace": "com.rudderlabs.javascript", + "context_app_version": "1.0.5", + "context_ctest_map_cnested_map_n_1": "context nested prop 1", + "context_ip": "0.0.0.0", + "context_library_name": "RudderLabs JavaScript SDK", + "context_library_version": "1.0.5", + "context_locale": "en-GB", + "context_passed_ip": "0.0.0.0", + "context_request_ip": "[::1]:53708", + "context_screen_density": 2, + "context_user_agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.117 Safari/537.36", + "currency": "USD", + "id": "a6a0ad5a-bd26-4f19-8f75-38484e580fc7", + "original_timestamp": "2020-01-24T06:29:02.364Z", + "received_at": "2020-01-24T06:29:02.403Z", + "revenue": 50, + "sent_at": "2020-01-24T06:29:02.364Z", + "test_map_nested_map_n_1": "nested prop 1", + "timestamp": "2020-01-24T06:29:02.403Z", + "user_id": "9bb5d4c2-a7aa-4a36-9efb-dd2b1aec5d33" + }, + "metadata": { + "columns": { + "anonymous_id": "string", + "channel": "string", + "context_app_build": "string", + "context_app_name": "string", + "context_app_namespace": "string", + "context_app_version": "string", + "context_ctest_map_cnested_map_n_1": "string", + "context_ip": "string", + "context_library_name": "string", + "context_library_version": "string", + "context_locale": "string", + "context_passed_ip": "string", + "context_request_ip": "string", + "context_screen_density": "int", + "context_user_agent": "string", + "currency": "string", + "id": "string", + "original_timestamp": "datetime", + "received_at": "datetime", + "revenue": "int", + "sent_at": "datetime", + "test_map_nested_map_n_1": "string", + "timestamp": "datetime", + "user_id": "string", + "uuid_ts": "datetime" + }, + "receivedAt": "2020-01-24T11:59:02.403+05:30", + "table": "screens" + } + } + ], + bq: [ + { + "data": { + "anonymous_id": "e6ab2c5e-2cda-44a9-a962-e2f67df78bca", + "channel": "web", + "context_app_build": "1.0.0", + "context_app_name": "RudderLabs JavaScript SDK", + "context_app_namespace": "com.rudderlabs.javascript", + "context_app_version": "1.0.5", + "context_ctest_map_cnested_map_n_1": "context nested prop 1", + "context_ip": "0.0.0.0", + "context_library_name": "RudderLabs JavaScript SDK", + "context_library_version": "1.0.5", + "context_locale": "en-GB", + "context_passed_ip": "0.0.0.0", + "context_request_ip": "[::1]:53708", + "context_screen_density": 2, + "context_user_agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.117 Safari/537.36", + "currency": "USD", + "id": "a6a0ad5a-bd26-4f19-8f75-38484e580fc7", + "original_timestamp": "2020-01-24T06:29:02.364Z", + "received_at": "2020-01-24T06:29:02.403Z", + "revenue": 50, + "sent_at": "2020-01-24T06:29:02.364Z", + "test_map_nested_map_n_1": "nested prop 1", + "timestamp": "2020-01-24T06:29:02.403Z", + "user_id": "9bb5d4c2-a7aa-4a36-9efb-dd2b1aec5d33" + }, + "metadata": { + "columns": { + "anonymous_id": "string", + "channel": "string", + "context_app_build": "string", + "context_app_name": "string", + "context_app_namespace": "string", + "context_app_version": "string", + "context_ctest_map_cnested_map_n_1": "string", + "context_ip": "string", + "context_library_name": "string", + "context_library_version": "string", + "context_locale": "string", + "context_passed_ip": "string", + "context_request_ip": "string", + "context_screen_density": "int", + "context_user_agent": "string", + "currency": "string", + "id": "string", + "loaded_at": "datetime", + "original_timestamp": "datetime", + "received_at": "datetime", + "revenue": "int", + "sent_at": "datetime", + "test_map_nested_map_n_1": "string", + "timestamp": "datetime", + "user_id": "string", + "uuid_ts": "datetime" + }, + "receivedAt": "2020-01-24T11:59:02.403+05:30", + "table": "screens" + } + } + ], + postgres: [ + { + "data": { + "anonymous_id": "e6ab2c5e-2cda-44a9-a962-e2f67df78bca", + "channel": "web", + "context_app_build": "1.0.0", + "context_app_name": "RudderLabs JavaScript SDK", + "context_app_namespace": "com.rudderlabs.javascript", + "context_app_version": "1.0.5", + "context_ctest_map_cnested_map_n_1": "context nested prop 1", + "context_ip": "0.0.0.0", + "context_library_name": "RudderLabs JavaScript SDK", + "context_library_version": "1.0.5", + "context_locale": "en-GB", + "context_passed_ip": "0.0.0.0", + "context_request_ip": "[::1]:53708", + "context_screen_density": 2, + "context_user_agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.117 Safari/537.36", + "currency": "USD", + "id": "a6a0ad5a-bd26-4f19-8f75-38484e580fc7", + "original_timestamp": "2020-01-24T06:29:02.364Z", + "received_at": "2020-01-24T06:29:02.403Z", + "revenue": 50, + "sent_at": "2020-01-24T06:29:02.364Z", + "test_map_nested_map_n_1": "nested prop 1", + "timestamp": "2020-01-24T06:29:02.403Z", + "user_id": "9bb5d4c2-a7aa-4a36-9efb-dd2b1aec5d33" + }, + "metadata": { + "columns": { + "anonymous_id": "string", + "channel": "string", + "context_app_build": "string", + "context_app_name": "string", + "context_app_namespace": "string", + "context_app_version": "string", + "context_ctest_map_cnested_map_n_1": "string", + "context_ip": "string", + "context_library_name": "string", + "context_library_version": "string", + "context_locale": "string", + "context_passed_ip": "string", + "context_request_ip": "string", + "context_screen_density": "int", + "context_user_agent": "string", + "currency": "string", + "id": "string", + "original_timestamp": "datetime", + "received_at": "datetime", + "revenue": "int", + "sent_at": "datetime", + "test_map_nested_map_n_1": "string", + "timestamp": "datetime", + "user_id": "string", + "uuid_ts": "datetime" + }, + "receivedAt": "2020-01-24T11:59:02.403+05:30", + "table": "screens" + } + } + ], + snowflake: [ + { + "data": { + "ANONYMOUS_ID": "e6ab2c5e-2cda-44a9-a962-e2f67df78bca", + "CHANNEL": "web", + "CONTEXT_APP_BUILD": "1.0.0", + "CONTEXT_APP_NAME": "RudderLabs JavaScript SDK", + "CONTEXT_APP_NAMESPACE": "com.rudderlabs.javascript", + "CONTEXT_APP_VERSION": "1.0.5", + "CONTEXT_CTEST_MAP_CNESTED_MAP_N_1": "context nested prop 1", + "CONTEXT_IP": "0.0.0.0", + "CONTEXT_LIBRARY_NAME": "RudderLabs JavaScript SDK", + "CONTEXT_LIBRARY_VERSION": "1.0.5", + "CONTEXT_LOCALE": "en-GB", + "CONTEXT_PASSED_IP": "0.0.0.0", + "CONTEXT_REQUEST_IP": "[::1]:53708", + "CONTEXT_SCREEN_DENSITY": 2, + "CONTEXT_USER_AGENT": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.117 Safari/537.36", + "CURRENCY": "USD", + "ID": "a6a0ad5a-bd26-4f19-8f75-38484e580fc7", + "ORIGINAL_TIMESTAMP": "2020-01-24T06:29:02.364Z", + "RECEIVED_AT": "2020-01-24T06:29:02.403Z", + "REVENUE": 50, + "SENT_AT": "2020-01-24T06:29:02.364Z", + "TEST_MAP_NESTED_MAP_N_1": "nested prop 1", + "TIMESTAMP": "2020-01-24T06:29:02.403Z", + "USER_ID": "9bb5d4c2-a7aa-4a36-9efb-dd2b1aec5d33" + }, + "metadata": { + "columns": { + "ANONYMOUS_ID": "string", + "CHANNEL": "string", + "CONTEXT_APP_BUILD": "string", + "CONTEXT_APP_NAME": "string", + "CONTEXT_APP_NAMESPACE": "string", + "CONTEXT_APP_VERSION": "string", + "CONTEXT_CTEST_MAP_CNESTED_MAP_N_1": "string", + "CONTEXT_IP": "string", + "CONTEXT_LIBRARY_NAME": "string", + "CONTEXT_LIBRARY_VERSION": "string", + "CONTEXT_LOCALE": "string", + "CONTEXT_PASSED_IP": "string", + "CONTEXT_REQUEST_IP": "string", + "CONTEXT_SCREEN_DENSITY": "int", + "CONTEXT_USER_AGENT": "string", + "CURRENCY": "string", + "ID": "string", + "ORIGINAL_TIMESTAMP": "datetime", + "RECEIVED_AT": "datetime", + "REVENUE": "int", + "SENT_AT": "datetime", + "TEST_MAP_NESTED_MAP_N_1": "string", + "TIMESTAMP": "datetime", + "USER_ID": "string", + "UUID_TS": "datetime" + }, + "receivedAt": "2020-01-24T11:59:02.403+05:30", + "table": "SCREENS" + } + } + ], + } +} diff --git a/test/__tests__/data/warehouse/integrations/jsonpaths/legacy/tracks.js b/test/__tests__/data/warehouse/integrations/jsonpaths/legacy/tracks.js new file mode 100644 index 0000000000..5070284e99 --- /dev/null +++ b/test/__tests__/data/warehouse/integrations/jsonpaths/legacy/tracks.js @@ -0,0 +1,830 @@ +module.exports = { + input: { + destination: { + Config: {} + }, + message: { + anonymousId: "e6ab2c5e-2cda-44a9-a962-e2f67df78bca", + channel: "web", + context: { + app: { + build: "1.0.0", + name: "RudderLabs JavaScript SDK", + namespace: "com.rudderlabs.javascript", + version: "1.0.5" + }, + ip: "0.0.0.0", + library: { + name: "RudderLabs JavaScript SDK", + version: "1.0.5" + }, + locale: "en-GB", + screen: { + density: 2 + }, + traits: { + city: "Disney", + country: "USA", + email: "mickey@disney.com", + firstname: "Mickey" + }, + CMap: { + nestedMap: { + n1: "context nested prop 1" + } + }, + userAgent: + "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.117 Safari/537.36" + }, + event: "Product Added", + integrations: { + All: true, + RS: { + options: { + jsonPaths: [ + "UPMap.nestedMap", + "PMap.nestedMap", + "CMap.nestedMap", + ] + } + }, + BQ: { + options: { + jsonPaths: [ + "UPMap.nestedMap", + "PMap.nestedMap", + "CMap.nestedMap", + ] + } + }, + POSTGRES: { + options: { + jsonPaths: [ + "UPMap.nestedMap", + "PMap.nestedMap", + "CMap.nestedMap", + ] + } + }, + SNOWFLAKE: { + options: { + jsonPaths: [ + "UPMap.nestedMap", + "PMap.nestedMap", + "CMap.nestedMap", + ] + } + }, + S3_DATALAKE: { + options: { + skipReservedKeywordsEscaping: true + } + }, + }, + messageId: "a6a0ad5a-bd26-4f19-8f75-38484e580fc7", + originalTimestamp: "2020-01-24T06:29:02.364Z", + userProperties: { + email: "test@gmail.com", + UPMap: { + nestedMap: { + n1: "nested prop 1" + } + }, + }, + properties: { + currency: "USD", + revenue: 50, + PMap: { + nestedMap: { + n1: "nested prop 1" + } + }, + }, + receivedAt: "2020-01-24T11:59:02.403+05:30", + request_ip: "[::1]:53708", + sentAt: "2020-01-24T06:29:02.364Z", + timestamp: "2020-01-24T11:59:02.403+05:30", + type: "track", + userId: "9bb5d4c2-a7aa-4a36-9efb-dd2b1aec5d33" + }, + request: { + query: { + whSchemaVersion: "v1" + } + } + }, + output: { + default: [ + { + "data": { + "anonymous_id": "e6ab2c5e-2cda-44a9-a962-e2f67df78bca", + "channel": "web", + "context_app_build": "1.0.0", + "context_app_name": "RudderLabs JavaScript SDK", + "context_app_namespace": "com.rudderlabs.javascript", + "context_app_version": "1.0.5", + "context_c_map_nested_map_n_1": "context nested prop 1", + "context_ip": "0.0.0.0", + "context_library_name": "RudderLabs JavaScript SDK", + "context_library_version": "1.0.5", + "context_locale": "en-GB", + "context_passed_ip": "0.0.0.0", + "context_request_ip": "[::1]:53708", + "context_screen_density": 2, + "context_traits_city": "Disney", + "context_traits_country": "USA", + "context_traits_email": "mickey@disney.com", + "context_traits_firstname": "Mickey", + "context_user_agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.117 Safari/537.36", + "event": "product_added", + "event_text": "Product Added", + "id": "a6a0ad5a-bd26-4f19-8f75-38484e580fc7", + "original_timestamp": "2020-01-24T06:29:02.364Z", + "received_at": "2020-01-24T06:29:02.403Z", + "sent_at": "2020-01-24T06:29:02.364Z", + "timestamp": "2020-01-24T06:29:02.403Z", + "user_id": "9bb5d4c2-a7aa-4a36-9efb-dd2b1aec5d33" + }, + "metadata": { + "columns": { + "anonymous_id": "string", + "channel": "string", + "context_app_build": "string", + "context_app_name": "string", + "context_app_namespace": "string", + "context_app_version": "string", + "context_c_map_nested_map_n_1": "string", + "context_ip": "string", + "context_library_name": "string", + "context_library_version": "string", + "context_locale": "string", + "context_passed_ip": "string", + "context_request_ip": "string", + "context_screen_density": "int", + "context_traits_city": "string", + "context_traits_country": "string", + "context_traits_email": "string", + "context_traits_firstname": "string", + "context_user_agent": "string", + "event": "string", + "event_text": "string", + "id": "string", + "original_timestamp": "datetime", + "received_at": "datetime", + "sent_at": "datetime", + "timestamp": "datetime", + "user_id": "string", + "uuid_ts": "datetime" + }, + "receivedAt": "2020-01-24T11:59:02.403+05:30", + "table": "tracks" + } + }, + { + "data": { + "anonymous_id": "e6ab2c5e-2cda-44a9-a962-e2f67df78bca", + "channel": "web", + "context_app_build": "1.0.0", + "context_app_name": "RudderLabs JavaScript SDK", + "context_app_namespace": "com.rudderlabs.javascript", + "context_app_version": "1.0.5", + "context_c_map_nested_map_n_1": "context nested prop 1", + "context_ip": "0.0.0.0", + "context_library_name": "RudderLabs JavaScript SDK", + "context_library_version": "1.0.5", + "context_locale": "en-GB", + "context_passed_ip": "0.0.0.0", + "context_request_ip": "[::1]:53708", + "context_screen_density": 2, + "context_traits_city": "Disney", + "context_traits_country": "USA", + "context_traits_email": "mickey@disney.com", + "context_traits_firstname": "Mickey", + "context_user_agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.117 Safari/537.36", + "currency": "USD", + "email": "test@gmail.com", + "event": "product_added", + "event_text": "Product Added", + "id": "a6a0ad5a-bd26-4f19-8f75-38484e580fc7", + "original_timestamp": "2020-01-24T06:29:02.364Z", + "p_map_nested_map_n_1": "nested prop 1", + "received_at": "2020-01-24T06:29:02.403Z", + "revenue": 50, + "sent_at": "2020-01-24T06:29:02.364Z", + "timestamp": "2020-01-24T06:29:02.403Z", + "up_map_nested_map_n_1": "nested prop 1", + "user_id": "9bb5d4c2-a7aa-4a36-9efb-dd2b1aec5d33" + }, + "metadata": { + "columns": { + "anonymous_id": "string", + "channel": "string", + "context_app_build": "string", + "context_app_name": "string", + "context_app_namespace": "string", + "context_app_version": "string", + "context_c_map_nested_map_n_1": "string", + "context_ip": "string", + "context_library_name": "string", + "context_library_version": "string", + "context_locale": "string", + "context_passed_ip": "string", + "context_request_ip": "string", + "context_screen_density": "int", + "context_traits_city": "string", + "context_traits_country": "string", + "context_traits_email": "string", + "context_traits_firstname": "string", + "context_user_agent": "string", + "currency": "string", + "email": "string", + "event": "string", + "event_text": "string", + "id": "string", + "original_timestamp": "datetime", + "p_map_nested_map_n_1": "string", + "received_at": "datetime", + "revenue": "int", + "sent_at": "datetime", + "timestamp": "datetime", + "up_map_nested_map_n_1": "string", + "user_id": "string", + "uuid_ts": "datetime" + }, + "receivedAt": "2020-01-24T11:59:02.403+05:30", + "table": "product_added" + } + } + ], + rs: [ + { + "data": { + "anonymous_id": "e6ab2c5e-2cda-44a9-a962-e2f67df78bca", + "channel": "web", + "context_app_build": "1.0.0", + "context_app_name": "RudderLabs JavaScript SDK", + "context_app_namespace": "com.rudderlabs.javascript", + "context_app_version": "1.0.5", + "context_c_map_nested_map_n_1": "context nested prop 1", + "context_ip": "0.0.0.0", + "context_library_name": "RudderLabs JavaScript SDK", + "context_library_version": "1.0.5", + "context_locale": "en-GB", + "context_passed_ip": "0.0.0.0", + "context_request_ip": "[::1]:53708", + "context_screen_density": 2, + "context_traits_city": "Disney", + "context_traits_country": "USA", + "context_traits_email": "mickey@disney.com", + "context_traits_firstname": "Mickey", + "context_user_agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.117 Safari/537.36", + "event": "product_added", + "event_text": "Product Added", + "id": "a6a0ad5a-bd26-4f19-8f75-38484e580fc7", + "original_timestamp": "2020-01-24T06:29:02.364Z", + "received_at": "2020-01-24T06:29:02.403Z", + "sent_at": "2020-01-24T06:29:02.364Z", + "timestamp": "2020-01-24T06:29:02.403Z", + "user_id": "9bb5d4c2-a7aa-4a36-9efb-dd2b1aec5d33" + }, + "metadata": { + "columns": { + "anonymous_id": "string", + "channel": "string", + "context_app_build": "string", + "context_app_name": "string", + "context_app_namespace": "string", + "context_app_version": "string", + "context_c_map_nested_map_n_1": "string", + "context_ip": "string", + "context_library_name": "string", + "context_library_version": "string", + "context_locale": "string", + "context_passed_ip": "string", + "context_request_ip": "string", + "context_screen_density": "int", + "context_traits_city": "string", + "context_traits_country": "string", + "context_traits_email": "string", + "context_traits_firstname": "string", + "context_user_agent": "string", + "event": "string", + "event_text": "string", + "id": "string", + "original_timestamp": "datetime", + "received_at": "datetime", + "sent_at": "datetime", + "timestamp": "datetime", + "user_id": "string", + "uuid_ts": "datetime" + }, + "receivedAt": "2020-01-24T11:59:02.403+05:30", + "table": "tracks" + } + }, + { + "data": { + "anonymous_id": "e6ab2c5e-2cda-44a9-a962-e2f67df78bca", + "channel": "web", + "context_app_build": "1.0.0", + "context_app_name": "RudderLabs JavaScript SDK", + "context_app_namespace": "com.rudderlabs.javascript", + "context_app_version": "1.0.5", + "context_c_map_nested_map_n_1": "context nested prop 1", + "context_ip": "0.0.0.0", + "context_library_name": "RudderLabs JavaScript SDK", + "context_library_version": "1.0.5", + "context_locale": "en-GB", + "context_passed_ip": "0.0.0.0", + "context_request_ip": "[::1]:53708", + "context_screen_density": 2, + "context_traits_city": "Disney", + "context_traits_country": "USA", + "context_traits_email": "mickey@disney.com", + "context_traits_firstname": "Mickey", + "context_user_agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.117 Safari/537.36", + "currency": "USD", + "email": "test@gmail.com", + "event": "product_added", + "event_text": "Product Added", + "id": "a6a0ad5a-bd26-4f19-8f75-38484e580fc7", + "original_timestamp": "2020-01-24T06:29:02.364Z", + "p_map_nested_map": "{\"n1\":\"nested prop 1\"}", + "received_at": "2020-01-24T06:29:02.403Z", + "revenue": 50, + "sent_at": "2020-01-24T06:29:02.364Z", + "timestamp": "2020-01-24T06:29:02.403Z", + "up_map_nested_map": "{\"n1\":\"nested prop 1\"}", + "user_id": "9bb5d4c2-a7aa-4a36-9efb-dd2b1aec5d33" + }, + "metadata": { + "columns": { + "anonymous_id": "string", + "channel": "string", + "context_app_build": "string", + "context_app_name": "string", + "context_app_namespace": "string", + "context_app_version": "string", + "context_c_map_nested_map_n_1": "string", + "context_ip": "string", + "context_library_name": "string", + "context_library_version": "string", + "context_locale": "string", + "context_passed_ip": "string", + "context_request_ip": "string", + "context_screen_density": "int", + "context_traits_city": "string", + "context_traits_country": "string", + "context_traits_email": "string", + "context_traits_firstname": "string", + "context_user_agent": "string", + "currency": "string", + "email": "string", + "event": "string", + "event_text": "string", + "id": "string", + "original_timestamp": "datetime", + "p_map_nested_map": "json", + "received_at": "datetime", + "revenue": "int", + "sent_at": "datetime", + "timestamp": "datetime", + "up_map_nested_map": "json", + "user_id": "string", + "uuid_ts": "datetime" + }, + "receivedAt": "2020-01-24T11:59:02.403+05:30", + "table": "product_added" + } + } + ], + bq: [ + { + "data": { + "anonymous_id": "e6ab2c5e-2cda-44a9-a962-e2f67df78bca", + "channel": "web", + "context_app_build": "1.0.0", + "context_app_name": "RudderLabs JavaScript SDK", + "context_app_namespace": "com.rudderlabs.javascript", + "context_app_version": "1.0.5", + "context_c_map_nested_map_n_1": "context nested prop 1", + "context_ip": "0.0.0.0", + "context_library_name": "RudderLabs JavaScript SDK", + "context_library_version": "1.0.5", + "context_locale": "en-GB", + "context_passed_ip": "0.0.0.0", + "context_request_ip": "[::1]:53708", + "context_screen_density": 2, + "context_traits_city": "Disney", + "context_traits_country": "USA", + "context_traits_email": "mickey@disney.com", + "context_traits_firstname": "Mickey", + "context_user_agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.117 Safari/537.36", + "event": "product_added", + "event_text": "Product Added", + "id": "a6a0ad5a-bd26-4f19-8f75-38484e580fc7", + "original_timestamp": "2020-01-24T06:29:02.364Z", + "received_at": "2020-01-24T06:29:02.403Z", + "sent_at": "2020-01-24T06:29:02.364Z", + "timestamp": "2020-01-24T06:29:02.403Z", + "user_id": "9bb5d4c2-a7aa-4a36-9efb-dd2b1aec5d33" + }, + "metadata": { + "columns": { + "anonymous_id": "string", + "channel": "string", + "context_app_build": "string", + "context_app_name": "string", + "context_app_namespace": "string", + "context_app_version": "string", + "context_c_map_nested_map_n_1": "string", + "context_ip": "string", + "context_library_name": "string", + "context_library_version": "string", + "context_locale": "string", + "context_passed_ip": "string", + "context_request_ip": "string", + "context_screen_density": "int", + "context_traits_city": "string", + "context_traits_country": "string", + "context_traits_email": "string", + "context_traits_firstname": "string", + "context_user_agent": "string", + "event": "string", + "event_text": "string", + "id": "string", + "loaded_at": "datetime", + "original_timestamp": "datetime", + "received_at": "datetime", + "sent_at": "datetime", + "timestamp": "datetime", + "user_id": "string", + "uuid_ts": "datetime" + }, + "receivedAt": "2020-01-24T11:59:02.403+05:30", + "table": "tracks" + } + }, + { + "data": { + "anonymous_id": "e6ab2c5e-2cda-44a9-a962-e2f67df78bca", + "channel": "web", + "context_app_build": "1.0.0", + "context_app_name": "RudderLabs JavaScript SDK", + "context_app_namespace": "com.rudderlabs.javascript", + "context_app_version": "1.0.5", + "context_c_map_nested_map_n_1": "context nested prop 1", + "context_ip": "0.0.0.0", + "context_library_name": "RudderLabs JavaScript SDK", + "context_library_version": "1.0.5", + "context_locale": "en-GB", + "context_passed_ip": "0.0.0.0", + "context_request_ip": "[::1]:53708", + "context_screen_density": 2, + "context_traits_city": "Disney", + "context_traits_country": "USA", + "context_traits_email": "mickey@disney.com", + "context_traits_firstname": "Mickey", + "context_user_agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.117 Safari/537.36", + "currency": "USD", + "email": "test@gmail.com", + "event": "product_added", + "event_text": "Product Added", + "id": "a6a0ad5a-bd26-4f19-8f75-38484e580fc7", + "original_timestamp": "2020-01-24T06:29:02.364Z", + "p_map_nested_map": "{\"n1\":\"nested prop 1\"}", + "received_at": "2020-01-24T06:29:02.403Z", + "revenue": 50, + "sent_at": "2020-01-24T06:29:02.364Z", + "timestamp": "2020-01-24T06:29:02.403Z", + "up_map_nested_map": "{\"n1\":\"nested prop 1\"}", + "user_id": "9bb5d4c2-a7aa-4a36-9efb-dd2b1aec5d33" + }, + "metadata": { + "columns": { + "anonymous_id": "string", + "channel": "string", + "context_app_build": "string", + "context_app_name": "string", + "context_app_namespace": "string", + "context_app_version": "string", + "context_c_map_nested_map_n_1": "string", + "context_ip": "string", + "context_library_name": "string", + "context_library_version": "string", + "context_locale": "string", + "context_passed_ip": "string", + "context_request_ip": "string", + "context_screen_density": "int", + "context_traits_city": "string", + "context_traits_country": "string", + "context_traits_email": "string", + "context_traits_firstname": "string", + "context_user_agent": "string", + "currency": "string", + "email": "string", + "event": "string", + "event_text": "string", + "id": "string", + "loaded_at": "datetime", + "original_timestamp": "datetime", + "p_map_nested_map": "string", + "received_at": "datetime", + "revenue": "int", + "sent_at": "datetime", + "timestamp": "datetime", + "up_map_nested_map": "string", + "user_id": "string", + "uuid_ts": "datetime" + }, + "receivedAt": "2020-01-24T11:59:02.403+05:30", + "table": "product_added" + } + } + ], + postgres: [ + { + "data": { + "anonymous_id": "e6ab2c5e-2cda-44a9-a962-e2f67df78bca", + "channel": "web", + "context_app_build": "1.0.0", + "context_app_name": "RudderLabs JavaScript SDK", + "context_app_namespace": "com.rudderlabs.javascript", + "context_app_version": "1.0.5", + "context_c_map_nested_map_n_1": "context nested prop 1", + "context_ip": "0.0.0.0", + "context_library_name": "RudderLabs JavaScript SDK", + "context_library_version": "1.0.5", + "context_locale": "en-GB", + "context_passed_ip": "0.0.0.0", + "context_request_ip": "[::1]:53708", + "context_screen_density": 2, + "context_traits_city": "Disney", + "context_traits_country": "USA", + "context_traits_email": "mickey@disney.com", + "context_traits_firstname": "Mickey", + "context_user_agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.117 Safari/537.36", + "event": "product_added", + "event_text": "Product Added", + "id": "a6a0ad5a-bd26-4f19-8f75-38484e580fc7", + "original_timestamp": "2020-01-24T06:29:02.364Z", + "received_at": "2020-01-24T06:29:02.403Z", + "sent_at": "2020-01-24T06:29:02.364Z", + "timestamp": "2020-01-24T06:29:02.403Z", + "user_id": "9bb5d4c2-a7aa-4a36-9efb-dd2b1aec5d33" + }, + "metadata": { + "columns": { + "anonymous_id": "string", + "channel": "string", + "context_app_build": "string", + "context_app_name": "string", + "context_app_namespace": "string", + "context_app_version": "string", + "context_c_map_nested_map_n_1": "string", + "context_ip": "string", + "context_library_name": "string", + "context_library_version": "string", + "context_locale": "string", + "context_passed_ip": "string", + "context_request_ip": "string", + "context_screen_density": "int", + "context_traits_city": "string", + "context_traits_country": "string", + "context_traits_email": "string", + "context_traits_firstname": "string", + "context_user_agent": "string", + "event": "string", + "event_text": "string", + "id": "string", + "original_timestamp": "datetime", + "received_at": "datetime", + "sent_at": "datetime", + "timestamp": "datetime", + "user_id": "string", + "uuid_ts": "datetime" + }, + "receivedAt": "2020-01-24T11:59:02.403+05:30", + "table": "tracks" + } + }, + { + "data": { + "anonymous_id": "e6ab2c5e-2cda-44a9-a962-e2f67df78bca", + "channel": "web", + "context_app_build": "1.0.0", + "context_app_name": "RudderLabs JavaScript SDK", + "context_app_namespace": "com.rudderlabs.javascript", + "context_app_version": "1.0.5", + "context_c_map_nested_map_n_1": "context nested prop 1", + "context_ip": "0.0.0.0", + "context_library_name": "RudderLabs JavaScript SDK", + "context_library_version": "1.0.5", + "context_locale": "en-GB", + "context_passed_ip": "0.0.0.0", + "context_request_ip": "[::1]:53708", + "context_screen_density": 2, + "context_traits_city": "Disney", + "context_traits_country": "USA", + "context_traits_email": "mickey@disney.com", + "context_traits_firstname": "Mickey", + "context_user_agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.117 Safari/537.36", + "currency": "USD", + "email": "test@gmail.com", + "event": "product_added", + "event_text": "Product Added", + "id": "a6a0ad5a-bd26-4f19-8f75-38484e580fc7", + "original_timestamp": "2020-01-24T06:29:02.364Z", + "p_map_nested_map": "{\"n1\":\"nested prop 1\"}", + "received_at": "2020-01-24T06:29:02.403Z", + "revenue": 50, + "sent_at": "2020-01-24T06:29:02.364Z", + "timestamp": "2020-01-24T06:29:02.403Z", + "up_map_nested_map": "{\"n1\":\"nested prop 1\"}", + "user_id": "9bb5d4c2-a7aa-4a36-9efb-dd2b1aec5d33" + }, + "metadata": { + "columns": { + "anonymous_id": "string", + "channel": "string", + "context_app_build": "string", + "context_app_name": "string", + "context_app_namespace": "string", + "context_app_version": "string", + "context_c_map_nested_map_n_1": "string", + "context_ip": "string", + "context_library_name": "string", + "context_library_version": "string", + "context_locale": "string", + "context_passed_ip": "string", + "context_request_ip": "string", + "context_screen_density": "int", + "context_traits_city": "string", + "context_traits_country": "string", + "context_traits_email": "string", + "context_traits_firstname": "string", + "context_user_agent": "string", + "currency": "string", + "email": "string", + "event": "string", + "event_text": "string", + "id": "string", + "original_timestamp": "datetime", + "p_map_nested_map": "json", + "received_at": "datetime", + "revenue": "int", + "sent_at": "datetime", + "timestamp": "datetime", + "up_map_nested_map": "json", + "user_id": "string", + "uuid_ts": "datetime" + }, + "receivedAt": "2020-01-24T11:59:02.403+05:30", + "table": "product_added" + } + } + ], + snowflake: [ + { + "data": { + "ANONYMOUS_ID": "e6ab2c5e-2cda-44a9-a962-e2f67df78bca", + "CHANNEL": "web", + "CONTEXT_APP_BUILD": "1.0.0", + "CONTEXT_APP_NAME": "RudderLabs JavaScript SDK", + "CONTEXT_APP_NAMESPACE": "com.rudderlabs.javascript", + "CONTEXT_APP_VERSION": "1.0.5", + "CONTEXT_C_MAP_NESTED_MAP_N_1": "context nested prop 1", + "CONTEXT_IP": "0.0.0.0", + "CONTEXT_LIBRARY_NAME": "RudderLabs JavaScript SDK", + "CONTEXT_LIBRARY_VERSION": "1.0.5", + "CONTEXT_LOCALE": "en-GB", + "CONTEXT_PASSED_IP": "0.0.0.0", + "CONTEXT_REQUEST_IP": "[::1]:53708", + "CONTEXT_SCREEN_DENSITY": 2, + "CONTEXT_TRAITS_CITY": "Disney", + "CONTEXT_TRAITS_COUNTRY": "USA", + "CONTEXT_TRAITS_EMAIL": "mickey@disney.com", + "CONTEXT_TRAITS_FIRSTNAME": "Mickey", + "CONTEXT_USER_AGENT": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.117 Safari/537.36", + "EVENT": "product_added", + "EVENT_TEXT": "Product Added", + "ID": "a6a0ad5a-bd26-4f19-8f75-38484e580fc7", + "ORIGINAL_TIMESTAMP": "2020-01-24T06:29:02.364Z", + "RECEIVED_AT": "2020-01-24T06:29:02.403Z", + "SENT_AT": "2020-01-24T06:29:02.364Z", + "TIMESTAMP": "2020-01-24T06:29:02.403Z", + "USER_ID": "9bb5d4c2-a7aa-4a36-9efb-dd2b1aec5d33" + }, + "metadata": { + "columns": { + "ANONYMOUS_ID": "string", + "CHANNEL": "string", + "CONTEXT_APP_BUILD": "string", + "CONTEXT_APP_NAME": "string", + "CONTEXT_APP_NAMESPACE": "string", + "CONTEXT_APP_VERSION": "string", + "CONTEXT_C_MAP_NESTED_MAP_N_1": "string", + "CONTEXT_IP": "string", + "CONTEXT_LIBRARY_NAME": "string", + "CONTEXT_LIBRARY_VERSION": "string", + "CONTEXT_LOCALE": "string", + "CONTEXT_PASSED_IP": "string", + "CONTEXT_REQUEST_IP": "string", + "CONTEXT_SCREEN_DENSITY": "int", + "CONTEXT_TRAITS_CITY": "string", + "CONTEXT_TRAITS_COUNTRY": "string", + "CONTEXT_TRAITS_EMAIL": "string", + "CONTEXT_TRAITS_FIRSTNAME": "string", + "CONTEXT_USER_AGENT": "string", + "EVENT": "string", + "EVENT_TEXT": "string", + "ID": "string", + "ORIGINAL_TIMESTAMP": "datetime", + "RECEIVED_AT": "datetime", + "SENT_AT": "datetime", + "TIMESTAMP": "datetime", + "USER_ID": "string", + "UUID_TS": "datetime" + }, + "receivedAt": "2020-01-24T11:59:02.403+05:30", + "table": "TRACKS" + } + }, + { + "data": { + "ANONYMOUS_ID": "e6ab2c5e-2cda-44a9-a962-e2f67df78bca", + "CHANNEL": "web", + "CONTEXT_APP_BUILD": "1.0.0", + "CONTEXT_APP_NAME": "RudderLabs JavaScript SDK", + "CONTEXT_APP_NAMESPACE": "com.rudderlabs.javascript", + "CONTEXT_APP_VERSION": "1.0.5", + "CONTEXT_C_MAP_NESTED_MAP_N_1": "context nested prop 1", + "CONTEXT_IP": "0.0.0.0", + "CONTEXT_LIBRARY_NAME": "RudderLabs JavaScript SDK", + "CONTEXT_LIBRARY_VERSION": "1.0.5", + "CONTEXT_LOCALE": "en-GB", + "CONTEXT_PASSED_IP": "0.0.0.0", + "CONTEXT_REQUEST_IP": "[::1]:53708", + "CONTEXT_SCREEN_DENSITY": 2, + "CONTEXT_TRAITS_CITY": "Disney", + "CONTEXT_TRAITS_COUNTRY": "USA", + "CONTEXT_TRAITS_EMAIL": "mickey@disney.com", + "CONTEXT_TRAITS_FIRSTNAME": "Mickey", + "CONTEXT_USER_AGENT": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.117 Safari/537.36", + "CURRENCY": "USD", + "EMAIL": "test@gmail.com", + "EVENT": "product_added", + "EVENT_TEXT": "Product Added", + "ID": "a6a0ad5a-bd26-4f19-8f75-38484e580fc7", + "ORIGINAL_TIMESTAMP": "2020-01-24T06:29:02.364Z", + "P_MAP_NESTED_MAP": "{\"n1\":\"nested prop 1\"}", + "RECEIVED_AT": "2020-01-24T06:29:02.403Z", + "REVENUE": 50, + "SENT_AT": "2020-01-24T06:29:02.364Z", + "TIMESTAMP": "2020-01-24T06:29:02.403Z", + "UP_MAP_NESTED_MAP": "{\"n1\":\"nested prop 1\"}", + "USER_ID": "9bb5d4c2-a7aa-4a36-9efb-dd2b1aec5d33" + }, + "metadata": { + "columns": { + "ANONYMOUS_ID": "string", + "CHANNEL": "string", + "CONTEXT_APP_BUILD": "string", + "CONTEXT_APP_NAME": "string", + "CONTEXT_APP_NAMESPACE": "string", + "CONTEXT_APP_VERSION": "string", + "CONTEXT_C_MAP_NESTED_MAP_N_1": "string", + "CONTEXT_IP": "string", + "CONTEXT_LIBRARY_NAME": "string", + "CONTEXT_LIBRARY_VERSION": "string", + "CONTEXT_LOCALE": "string", + "CONTEXT_PASSED_IP": "string", + "CONTEXT_REQUEST_IP": "string", + "CONTEXT_SCREEN_DENSITY": "int", + "CONTEXT_TRAITS_CITY": "string", + "CONTEXT_TRAITS_COUNTRY": "string", + "CONTEXT_TRAITS_EMAIL": "string", + "CONTEXT_TRAITS_FIRSTNAME": "string", + "CONTEXT_USER_AGENT": "string", + "CURRENCY": "string", + "EMAIL": "string", + "EVENT": "string", + "EVENT_TEXT": "string", + "ID": "string", + "ORIGINAL_TIMESTAMP": "datetime", + "P_MAP_NESTED_MAP": "json", + "RECEIVED_AT": "datetime", + "REVENUE": "int", + "SENT_AT": "datetime", + "TIMESTAMP": "datetime", + "UP_MAP_NESTED_MAP": "json", + "USER_ID": "string", + "UUID_TS": "datetime" + }, + "receivedAt": "2020-01-24T11:59:02.403+05:30", + "table": "PRODUCT_ADDED" + } + } + ] + } +} diff --git a/test/__tests__/data/warehouse/integrations/jsonpaths/new/aliases.js b/test/__tests__/data/warehouse/integrations/jsonpaths/new/aliases.js new file mode 100644 index 0000000000..91f19c5c77 --- /dev/null +++ b/test/__tests__/data/warehouse/integrations/jsonpaths/new/aliases.js @@ -0,0 +1,415 @@ +module.exports = { + input: { + destination: { + Config: {} + }, + message: { + anonymousId: "e6ab2c5e-2cda-44a9-a962-e2f67df78bca", + channel: "web", + traits: { + city: "Disney", + country: "USA", + email: "mickey@disney.com", + firstname: "Mickey", + testMap: { + nestedMap: { + n1: "nested prop 1" + } + }, + }, + context: { + app: { + build: "1.0.0", + name: "RudderLabs JavaScript SDK", + namespace: "com.rudderlabs.javascript", + version: "1.0.5" + }, + ip: "0.0.0.0", + library: { + name: "RudderLabs JavaScript SDK", + version: "1.0.5" + }, + ctestMap: { + cnestedMap: { + n1: "context nested prop 1" + } + }, + locale: "en-GB", + screen: { + density: 2 + }, + userAgent: + "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.117 Safari/537.36" + }, + integrations: { + All: true, + RS: { + options: { + jsonPaths: ["alias.traits.testMap.nestedMap", "alias.context.ctestMap.cnestedMap"] + } + }, + BQ: { + options: { + jsonPaths: ["alias.traits.testMap.nestedMap", "alias.context.ctestMap.cnestedMap"] + } + }, + POSTGRES: { + options: { + jsonPaths: ["alias.traits.testMap.nestedMap", "alias.context.ctestMap.cnestedMap"] + } + }, + SNOWFLAKE: { + options: { + jsonPaths: ["alias.traits.testMap.nestedMap", "alias.context.ctestMap.cnestedMap"] + } + }, + S3_DATALAKE: { + options: { + skipReservedKeywordsEscaping: true + } + }, + }, + messageId: "a6a0ad5a-bd26-4f19-8f75-38484e580fc7", + originalTimestamp: "2020-01-24T06:29:02.364Z", + receivedAt: "2020-01-24T11:59:02.403+05:30", + request_ip: "[::1]:53708", + sentAt: "2020-01-24T06:29:02.364Z", + timestamp: "2020-01-24T11:59:02.403+05:30", + type: "alias", + userId: "9bb5d4c2-a7aa-4a36-9efb-dd2b1aec5d33" + }, + request: { + query: { + whSchemaVersion: "v1" + } + } + }, + output: { + default: [ + { + "data": { + "anonymous_id": "e6ab2c5e-2cda-44a9-a962-e2f67df78bca", + "channel": "web", + "city": "Disney", + "context_app_build": "1.0.0", + "context_app_name": "RudderLabs JavaScript SDK", + "context_app_namespace": "com.rudderlabs.javascript", + "context_app_version": "1.0.5", + "context_ctest_map_cnested_map_n_1": "context nested prop 1", + "context_ip": "0.0.0.0", + "context_library_name": "RudderLabs JavaScript SDK", + "context_library_version": "1.0.5", + "context_locale": "en-GB", + "context_passed_ip": "0.0.0.0", + "context_request_ip": "[::1]:53708", + "context_screen_density": 2, + "context_user_agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.117 Safari/537.36", + "country": "USA", + "email": "mickey@disney.com", + "firstname": "Mickey", + "id": "a6a0ad5a-bd26-4f19-8f75-38484e580fc7", + "original_timestamp": "2020-01-24T06:29:02.364Z", + "received_at": "2020-01-24T06:29:02.403Z", + "sent_at": "2020-01-24T06:29:02.364Z", + "test_map_nested_map_n_1": "nested prop 1", + "timestamp": "2020-01-24T06:29:02.403Z", + "user_id": "9bb5d4c2-a7aa-4a36-9efb-dd2b1aec5d33" + }, + "metadata": { + "columns": { + "anonymous_id": "string", + "channel": "string", + "city": "string", + "context_app_build": "string", + "context_app_name": "string", + "context_app_namespace": "string", + "context_app_version": "string", + "context_ctest_map_cnested_map_n_1": "string", + "context_ip": "string", + "context_library_name": "string", + "context_library_version": "string", + "context_locale": "string", + "context_passed_ip": "string", + "context_request_ip": "string", + "context_screen_density": "int", + "context_user_agent": "string", + "country": "string", + "email": "string", + "firstname": "string", + "id": "string", + "original_timestamp": "datetime", + "received_at": "datetime", + "sent_at": "datetime", + "test_map_nested_map_n_1": "string", + "timestamp": "datetime", + "user_id": "string", + "uuid_ts": "datetime" + }, + "receivedAt": "2020-01-24T11:59:02.403+05:30", + "table": "aliases" + } + } + ], + rs: [ + { + "data": { + "anonymous_id": "e6ab2c5e-2cda-44a9-a962-e2f67df78bca", + "channel": "web", + "city": "Disney", + "context_app_build": "1.0.0", + "context_app_name": "RudderLabs JavaScript SDK", + "context_app_namespace": "com.rudderlabs.javascript", + "context_app_version": "1.0.5", + "context_ctest_map_cnested_map": "{\"n1\":\"context nested prop 1\"}", + "context_ip": "0.0.0.0", + "context_library_name": "RudderLabs JavaScript SDK", + "context_library_version": "1.0.5", + "context_locale": "en-GB", + "context_passed_ip": "0.0.0.0", + "context_request_ip": "[::1]:53708", + "context_screen_density": 2, + "context_user_agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.117 Safari/537.36", + "country": "USA", + "email": "mickey@disney.com", + "firstname": "Mickey", + "id": "a6a0ad5a-bd26-4f19-8f75-38484e580fc7", + "original_timestamp": "2020-01-24T06:29:02.364Z", + "received_at": "2020-01-24T06:29:02.403Z", + "sent_at": "2020-01-24T06:29:02.364Z", + "test_map_nested_map": "{\"n1\":\"nested prop 1\"}", + "timestamp": "2020-01-24T06:29:02.403Z", + "user_id": "9bb5d4c2-a7aa-4a36-9efb-dd2b1aec5d33" + }, + "metadata": { + "columns": { + "anonymous_id": "string", + "channel": "string", + "city": "string", + "context_app_build": "string", + "context_app_name": "string", + "context_app_namespace": "string", + "context_app_version": "string", + "context_ctest_map_cnested_map": "json", + "context_ip": "string", + "context_library_name": "string", + "context_library_version": "string", + "context_locale": "string", + "context_passed_ip": "string", + "context_request_ip": "string", + "context_screen_density": "int", + "context_user_agent": "string", + "country": "string", + "email": "string", + "firstname": "string", + "id": "string", + "original_timestamp": "datetime", + "received_at": "datetime", + "sent_at": "datetime", + "test_map_nested_map": "json", + "timestamp": "datetime", + "user_id": "string", + "uuid_ts": "datetime" + }, + "receivedAt": "2020-01-24T11:59:02.403+05:30", + "table": "aliases" + } + } + ], + bq: [ + { + "data": { + "anonymous_id": "e6ab2c5e-2cda-44a9-a962-e2f67df78bca", + "channel": "web", + "city": "Disney", + "context_app_build": "1.0.0", + "context_app_name": "RudderLabs JavaScript SDK", + "context_app_namespace": "com.rudderlabs.javascript", + "context_app_version": "1.0.5", + "context_ctest_map_cnested_map": "{\"n1\":\"context nested prop 1\"}", + "context_ip": "0.0.0.0", + "context_library_name": "RudderLabs JavaScript SDK", + "context_library_version": "1.0.5", + "context_locale": "en-GB", + "context_passed_ip": "0.0.0.0", + "context_request_ip": "[::1]:53708", + "context_screen_density": 2, + "context_user_agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.117 Safari/537.36", + "country": "USA", + "email": "mickey@disney.com", + "firstname": "Mickey", + "id": "a6a0ad5a-bd26-4f19-8f75-38484e580fc7", + "original_timestamp": "2020-01-24T06:29:02.364Z", + "received_at": "2020-01-24T06:29:02.403Z", + "sent_at": "2020-01-24T06:29:02.364Z", + "test_map_nested_map": "{\"n1\":\"nested prop 1\"}", + "timestamp": "2020-01-24T06:29:02.403Z", + "user_id": "9bb5d4c2-a7aa-4a36-9efb-dd2b1aec5d33" + }, + "metadata": { + "columns": { + "anonymous_id": "string", + "channel": "string", + "city": "string", + "context_app_build": "string", + "context_app_name": "string", + "context_app_namespace": "string", + "context_app_version": "string", + "context_ctest_map_cnested_map": "string", + "context_ip": "string", + "context_library_name": "string", + "context_library_version": "string", + "context_locale": "string", + "context_passed_ip": "string", + "context_request_ip": "string", + "context_screen_density": "int", + "context_user_agent": "string", + "country": "string", + "email": "string", + "firstname": "string", + "id": "string", + "loaded_at": "datetime", + "original_timestamp": "datetime", + "received_at": "datetime", + "sent_at": "datetime", + "test_map_nested_map": "string", + "timestamp": "datetime", + "user_id": "string", + "uuid_ts": "datetime" + }, + "receivedAt": "2020-01-24T11:59:02.403+05:30", + "table": "aliases" + } + } + ], + postgres: [ + { + "data": { + "anonymous_id": "e6ab2c5e-2cda-44a9-a962-e2f67df78bca", + "channel": "web", + "city": "Disney", + "context_app_build": "1.0.0", + "context_app_name": "RudderLabs JavaScript SDK", + "context_app_namespace": "com.rudderlabs.javascript", + "context_app_version": "1.0.5", + "context_ctest_map_cnested_map": "{\"n1\":\"context nested prop 1\"}", + "context_ip": "0.0.0.0", + "context_library_name": "RudderLabs JavaScript SDK", + "context_library_version": "1.0.5", + "context_locale": "en-GB", + "context_passed_ip": "0.0.0.0", + "context_request_ip": "[::1]:53708", + "context_screen_density": 2, + "context_user_agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.117 Safari/537.36", + "country": "USA", + "email": "mickey@disney.com", + "firstname": "Mickey", + "id": "a6a0ad5a-bd26-4f19-8f75-38484e580fc7", + "original_timestamp": "2020-01-24T06:29:02.364Z", + "received_at": "2020-01-24T06:29:02.403Z", + "sent_at": "2020-01-24T06:29:02.364Z", + "test_map_nested_map": "{\"n1\":\"nested prop 1\"}", + "timestamp": "2020-01-24T06:29:02.403Z", + "user_id": "9bb5d4c2-a7aa-4a36-9efb-dd2b1aec5d33" + }, + "metadata": { + "columns": { + "anonymous_id": "string", + "channel": "string", + "city": "string", + "context_app_build": "string", + "context_app_name": "string", + "context_app_namespace": "string", + "context_app_version": "string", + "context_ctest_map_cnested_map": "json", + "context_ip": "string", + "context_library_name": "string", + "context_library_version": "string", + "context_locale": "string", + "context_passed_ip": "string", + "context_request_ip": "string", + "context_screen_density": "int", + "context_user_agent": "string", + "country": "string", + "email": "string", + "firstname": "string", + "id": "string", + "original_timestamp": "datetime", + "received_at": "datetime", + "sent_at": "datetime", + "test_map_nested_map": "json", + "timestamp": "datetime", + "user_id": "string", + "uuid_ts": "datetime" + }, + "receivedAt": "2020-01-24T11:59:02.403+05:30", + "table": "aliases" + } + } + ], + snowflake: [ + { + "data": { + "ANONYMOUS_ID": "e6ab2c5e-2cda-44a9-a962-e2f67df78bca", + "CHANNEL": "web", + "CITY": "Disney", + "CONTEXT_APP_BUILD": "1.0.0", + "CONTEXT_APP_NAME": "RudderLabs JavaScript SDK", + "CONTEXT_APP_NAMESPACE": "com.rudderlabs.javascript", + "CONTEXT_APP_VERSION": "1.0.5", + "CONTEXT_CTEST_MAP_CNESTED_MAP": "{\"n1\":\"context nested prop 1\"}", + "CONTEXT_IP": "0.0.0.0", + "CONTEXT_LIBRARY_NAME": "RudderLabs JavaScript SDK", + "CONTEXT_LIBRARY_VERSION": "1.0.5", + "CONTEXT_LOCALE": "en-GB", + "CONTEXT_PASSED_IP": "0.0.0.0", + "CONTEXT_REQUEST_IP": "[::1]:53708", + "CONTEXT_SCREEN_DENSITY": 2, + "CONTEXT_USER_AGENT": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.117 Safari/537.36", + "COUNTRY": "USA", + "EMAIL": "mickey@disney.com", + "FIRSTNAME": "Mickey", + "ID": "a6a0ad5a-bd26-4f19-8f75-38484e580fc7", + "ORIGINAL_TIMESTAMP": "2020-01-24T06:29:02.364Z", + "RECEIVED_AT": "2020-01-24T06:29:02.403Z", + "SENT_AT": "2020-01-24T06:29:02.364Z", + "TEST_MAP_NESTED_MAP": "{\"n1\":\"nested prop 1\"}", + "TIMESTAMP": "2020-01-24T06:29:02.403Z", + "USER_ID": "9bb5d4c2-a7aa-4a36-9efb-dd2b1aec5d33" + }, + "metadata": { + "columns": { + "ANONYMOUS_ID": "string", + "CHANNEL": "string", + "CITY": "string", + "CONTEXT_APP_BUILD": "string", + "CONTEXT_APP_NAME": "string", + "CONTEXT_APP_NAMESPACE": "string", + "CONTEXT_APP_VERSION": "string", + "CONTEXT_CTEST_MAP_CNESTED_MAP": "json", + "CONTEXT_IP": "string", + "CONTEXT_LIBRARY_NAME": "string", + "CONTEXT_LIBRARY_VERSION": "string", + "CONTEXT_LOCALE": "string", + "CONTEXT_PASSED_IP": "string", + "CONTEXT_REQUEST_IP": "string", + "CONTEXT_SCREEN_DENSITY": "int", + "CONTEXT_USER_AGENT": "string", + "COUNTRY": "string", + "EMAIL": "string", + "FIRSTNAME": "string", + "ID": "string", + "ORIGINAL_TIMESTAMP": "datetime", + "RECEIVED_AT": "datetime", + "SENT_AT": "datetime", + "TEST_MAP_NESTED_MAP": "json", + "TIMESTAMP": "datetime", + "USER_ID": "string", + "UUID_TS": "datetime" + }, + "receivedAt": "2020-01-24T11:59:02.403+05:30", + "table": "ALIASES" + } + } + ], + } +} diff --git a/test/__tests__/data/warehouse/integrations/jsonpaths/new/extract.js b/test/__tests__/data/warehouse/integrations/jsonpaths/new/extract.js new file mode 100644 index 0000000000..7a36e4787e --- /dev/null +++ b/test/__tests__/data/warehouse/integrations/jsonpaths/new/extract.js @@ -0,0 +1,278 @@ +module.exports = { + input: { + destination: { + Config: {} + }, + message: { + anonymousId: "e6ab2c5e-2cda-44a9-a962-e2f67df78bca", + channel: "web", + context: { + sources: { + job_id: "djfhksdjhfkjdhfkjahkf", + version: "1169/merge", + job_run_id: "job_run_id", + task_run_id: "task_run_id" + }, + CMap: { + nestedMap: { + n1: "context nested prop 1" + } + }, + userAgent: + "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.117 Safari/537.36" + }, + event: "Product Added", + integrations: { + All: true, + RS: { + options: { + jsonPaths: [ + "extract.properties.PMap.nestedMap", + "extract.context.CMap.nestedMap", + ] + } + }, + BQ: { + options: { + jsonPaths: [ + "extract.properties.PMap.nestedMap", + "extract.context.CMap.nestedMap", + ] + } + }, + POSTGRES: { + options: { + jsonPaths: [ + "extract.properties.PMap.nestedMap", + "extract.context.CMap.nestedMap", + ] + } + }, + SNOWFLAKE: { + options: { + jsonPaths: [ + "extract.properties.PMap.nestedMap", + "extract.context.CMap.nestedMap", + ] + } + }, + S3_DATALAKE: { + options: { + skipReservedKeywordsEscaping: true + } + }, + }, + recordId: "a6a0ad5a-bd26-4f19-8f75-38484e580fc7", + messageId: "a6a0ad5a-bd26-4f19-8f75-38484e580fc7", + originalTimestamp: "2020-01-24T06:29:02.364Z", + properties: { + currency: "USD", + revenue: 50, + PMap: { + nestedMap: { + n1: "nested prop 1" + } + }, + }, + type: "extract", + receivedAt: "2020-01-24T11:59:02.403+05:30", + request_ip: "[::1]:53708", + sentAt: "2020-01-24T06:29:02.364Z", + timestamp: "2020-01-24T11:59:02.403+05:30", + userId: "9bb5d4c2-a7aa-4a36-9efb-dd2b1aec5d33" + }, + request: { + query: { + whSchemaVersion: "v1" + } + } + }, + output: { + default: [ + { + "data": { + "context_c_map_nested_map_n_1": "context nested prop 1", + "context_sources_job_id": "djfhksdjhfkjdhfkjahkf", + "context_sources_job_run_id": "job_run_id", + "context_sources_task_run_id": "task_run_id", + "context_sources_version": "1169/merge", + "context_user_agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.117 Safari/537.36", + "currency": "USD", + "event": "Product Added", + "id": "a6a0ad5a-bd26-4f19-8f75-38484e580fc7", + "p_map_nested_map_n_1": "nested prop 1", + "received_at": "2020-01-24T06:29:02.403Z", + "revenue": 50 + }, + "metadata": { + "columns": { + "context_c_map_nested_map_n_1": "string", + "context_sources_job_id": "string", + "context_sources_job_run_id": "string", + "context_sources_task_run_id": "string", + "context_sources_version": "string", + "context_user_agent": "string", + "currency": "string", + "event": "string", + "id": "string", + "p_map_nested_map_n_1": "string", + "received_at": "datetime", + "revenue": "int", + "uuid_ts": "datetime" + }, + "receivedAt": "2020-01-24T11:59:02.403+05:30", + "table": "product_added" + } + } + ], + rs: [ + { + "data": { + "context_c_map_nested_map": "{\"n1\":\"context nested prop 1\"}", + "context_sources_job_id": "djfhksdjhfkjdhfkjahkf", + "context_sources_job_run_id": "job_run_id", + "context_sources_task_run_id": "task_run_id", + "context_sources_version": "1169/merge", + "context_user_agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.117 Safari/537.36", + "currency": "USD", + "event": "Product Added", + "id": "a6a0ad5a-bd26-4f19-8f75-38484e580fc7", + "p_map_nested_map": "{\"n1\":\"nested prop 1\"}", + "received_at": "2020-01-24T06:29:02.403Z", + "revenue": 50 + }, + "metadata": { + "columns": { + "context_c_map_nested_map": "json", + "context_sources_job_id": "string", + "context_sources_job_run_id": "string", + "context_sources_task_run_id": "string", + "context_sources_version": "string", + "context_user_agent": "string", + "currency": "string", + "event": "string", + "id": "string", + "p_map_nested_map": "json", + "received_at": "datetime", + "revenue": "int", + "uuid_ts": "datetime" + }, + "receivedAt": "2020-01-24T11:59:02.403+05:30", + "table": "product_added" + } + } + ], + bq:[ + { + "data": { + "context_c_map_nested_map": "{\"n1\":\"context nested prop 1\"}", + "context_sources_job_id": "djfhksdjhfkjdhfkjahkf", + "context_sources_job_run_id": "job_run_id", + "context_sources_task_run_id": "task_run_id", + "context_sources_version": "1169/merge", + "context_user_agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.117 Safari/537.36", + "currency": "USD", + "event": "Product Added", + "id": "a6a0ad5a-bd26-4f19-8f75-38484e580fc7", + "p_map_nested_map": "{\"n1\":\"nested prop 1\"}", + "received_at": "2020-01-24T06:29:02.403Z", + "revenue": 50 + }, + "metadata": { + "columns": { + "context_c_map_nested_map": "string", + "context_sources_job_id": "string", + "context_sources_job_run_id": "string", + "context_sources_task_run_id": "string", + "context_sources_version": "string", + "context_user_agent": "string", + "currency": "string", + "event": "string", + "id": "string", + "loaded_at": "datetime", + "p_map_nested_map": "string", + "received_at": "datetime", + "revenue": "int", + "uuid_ts": "datetime" + }, + "receivedAt": "2020-01-24T11:59:02.403+05:30", + "table": "product_added" + } + } + ], + postgres: [ + { + "data": { + "context_c_map_nested_map": "{\"n1\":\"context nested prop 1\"}", + "context_sources_job_id": "djfhksdjhfkjdhfkjahkf", + "context_sources_job_run_id": "job_run_id", + "context_sources_task_run_id": "task_run_id", + "context_sources_version": "1169/merge", + "context_user_agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.117 Safari/537.36", + "currency": "USD", + "event": "Product Added", + "id": "a6a0ad5a-bd26-4f19-8f75-38484e580fc7", + "p_map_nested_map": "{\"n1\":\"nested prop 1\"}", + "received_at": "2020-01-24T06:29:02.403Z", + "revenue": 50 + }, + "metadata": { + "columns": { + "context_c_map_nested_map": "json", + "context_sources_job_id": "string", + "context_sources_job_run_id": "string", + "context_sources_task_run_id": "string", + "context_sources_version": "string", + "context_user_agent": "string", + "currency": "string", + "event": "string", + "id": "string", + "p_map_nested_map": "json", + "received_at": "datetime", + "revenue": "int", + "uuid_ts": "datetime" + }, + "receivedAt": "2020-01-24T11:59:02.403+05:30", + "table": "product_added" + } + } + ], + snowflake: [ + { + "data": { + "CONTEXT_C_MAP_NESTED_MAP": "{\"n1\":\"context nested prop 1\"}", + "CONTEXT_SOURCES_JOB_ID": "djfhksdjhfkjdhfkjahkf", + "CONTEXT_SOURCES_JOB_RUN_ID": "job_run_id", + "CONTEXT_SOURCES_TASK_RUN_ID": "task_run_id", + "CONTEXT_SOURCES_VERSION": "1169/merge", + "CONTEXT_USER_AGENT": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.117 Safari/537.36", + "CURRENCY": "USD", + "EVENT": "Product Added", + "ID": "a6a0ad5a-bd26-4f19-8f75-38484e580fc7", + "P_MAP_NESTED_MAP": "{\"n1\":\"nested prop 1\"}", + "RECEIVED_AT": "2020-01-24T06:29:02.403Z", + "REVENUE": 50 + }, + "metadata": { + "columns": { + "CONTEXT_C_MAP_NESTED_MAP": "json", + "CONTEXT_SOURCES_JOB_ID": "string", + "CONTEXT_SOURCES_JOB_RUN_ID": "string", + "CONTEXT_SOURCES_TASK_RUN_ID": "string", + "CONTEXT_SOURCES_VERSION": "string", + "CONTEXT_USER_AGENT": "string", + "CURRENCY": "string", + "EVENT": "string", + "ID": "string", + "P_MAP_NESTED_MAP": "json", + "RECEIVED_AT": "datetime", + "REVENUE": "int", + "UUID_TS": "datetime" + }, + "receivedAt": "2020-01-24T11:59:02.403+05:30", + "table": "PRODUCT_ADDED" + } + } + ] + } +} diff --git a/test/__tests__/data/warehouse/integrations/jsonpaths/new/groups.js b/test/__tests__/data/warehouse/integrations/jsonpaths/new/groups.js new file mode 100644 index 0000000000..f84f9d33ed --- /dev/null +++ b/test/__tests__/data/warehouse/integrations/jsonpaths/new/groups.js @@ -0,0 +1,420 @@ +module.exports = { + input: { + destination: { + Config: {} + }, + message: { + anonymousId: "e6ab2c5e-2cda-44a9-a962-e2f67df78bca", + channel: "web", + traits: { + city: "Disney", + country: "USA", + email: "mickey@disney.com", + firstname: "Mickey", + testMap: { + nestedMap: { + n1: "nested prop 1" + } + }, + }, + context: { + app: { + build: "1.0.0", + name: "RudderLabs JavaScript SDK", + namespace: "com.rudderlabs.javascript", + version: "1.0.5" + }, + ip: "0.0.0.0", + library: { + name: "RudderLabs JavaScript SDK", + version: "1.0.5" + }, + ctestMap: { + cnestedMap: { + n1: "context nested prop 1" + } + }, + locale: "en-GB", + screen: { + density: 2 + }, + userAgent: + "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.117 Safari/537.36" + }, + integrations: { + All: true, + RS: { + options: { + jsonPaths: ["group.traits.testMap.nestedMap", "group.context.ctestMap.cnestedMap"] + } + }, + BQ: { + options: { + jsonPaths: ["group.traits.testMap.nestedMap", "group.context.ctestMap.cnestedMap"] + } + }, + POSTGRES: { + options: { + jsonPaths: ["group.traits.testMap.nestedMap", "group.context.ctestMap.cnestedMap"] + } + }, + SNOWFLAKE: { + options: { + jsonPaths: ["group.traits.testMap.nestedMap", "group.context.ctestMap.cnestedMap"] + } + }, + GCS_DATALAKE: { + options: { + skipReservedKeywordsEscaping: true + } + }, + S3_DATALAKE: { + options: { + skipReservedKeywordsEscaping: true + } + }, + }, + messageId: "a6a0ad5a-bd26-4f19-8f75-38484e580fc7", + originalTimestamp: "2020-01-24T06:29:02.364Z", + receivedAt: "2020-01-24T11:59:02.403+05:30", + request_ip: "[::1]:53708", + sentAt: "2020-01-24T06:29:02.364Z", + timestamp: "2020-01-24T11:59:02.403+05:30", + type: "group", + userId: "9bb5d4c2-a7aa-4a36-9efb-dd2b1aec5d33" + }, + request: { + query: { + whSchemaVersion: "v1" + } + } + }, + output: { + default: [ + { + "data": { + "anonymous_id": "e6ab2c5e-2cda-44a9-a962-e2f67df78bca", + "channel": "web", + "city": "Disney", + "context_app_build": "1.0.0", + "context_app_name": "RudderLabs JavaScript SDK", + "context_app_namespace": "com.rudderlabs.javascript", + "context_app_version": "1.0.5", + "context_ctest_map_cnested_map_n_1": "context nested prop 1", + "context_ip": "0.0.0.0", + "context_library_name": "RudderLabs JavaScript SDK", + "context_library_version": "1.0.5", + "context_locale": "en-GB", + "context_passed_ip": "0.0.0.0", + "context_request_ip": "[::1]:53708", + "context_screen_density": 2, + "context_user_agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.117 Safari/537.36", + "country": "USA", + "email": "mickey@disney.com", + "firstname": "Mickey", + "id": "a6a0ad5a-bd26-4f19-8f75-38484e580fc7", + "original_timestamp": "2020-01-24T06:29:02.364Z", + "received_at": "2020-01-24T06:29:02.403Z", + "sent_at": "2020-01-24T06:29:02.364Z", + "test_map_nested_map_n_1": "nested prop 1", + "timestamp": "2020-01-24T06:29:02.403Z", + "user_id": "9bb5d4c2-a7aa-4a36-9efb-dd2b1aec5d33" + }, + "metadata": { + "columns": { + "anonymous_id": "string", + "channel": "string", + "city": "string", + "context_app_build": "string", + "context_app_name": "string", + "context_app_namespace": "string", + "context_app_version": "string", + "context_ctest_map_cnested_map_n_1": "string", + "context_ip": "string", + "context_library_name": "string", + "context_library_version": "string", + "context_locale": "string", + "context_passed_ip": "string", + "context_request_ip": "string", + "context_screen_density": "int", + "context_user_agent": "string", + "country": "string", + "email": "string", + "firstname": "string", + "id": "string", + "original_timestamp": "datetime", + "received_at": "datetime", + "sent_at": "datetime", + "test_map_nested_map_n_1": "string", + "timestamp": "datetime", + "user_id": "string", + "uuid_ts": "datetime" + }, + "receivedAt": "2020-01-24T11:59:02.403+05:30", + "table": "groups" + } + } + ], + rs: [ + { + "data": { + "anonymous_id": "e6ab2c5e-2cda-44a9-a962-e2f67df78bca", + "channel": "web", + "city": "Disney", + "context_app_build": "1.0.0", + "context_app_name": "RudderLabs JavaScript SDK", + "context_app_namespace": "com.rudderlabs.javascript", + "context_app_version": "1.0.5", + "context_ctest_map_cnested_map": "{\"n1\":\"context nested prop 1\"}", + "context_ip": "0.0.0.0", + "context_library_name": "RudderLabs JavaScript SDK", + "context_library_version": "1.0.5", + "context_locale": "en-GB", + "context_passed_ip": "0.0.0.0", + "context_request_ip": "[::1]:53708", + "context_screen_density": 2, + "context_user_agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.117 Safari/537.36", + "country": "USA", + "email": "mickey@disney.com", + "firstname": "Mickey", + "id": "a6a0ad5a-bd26-4f19-8f75-38484e580fc7", + "original_timestamp": "2020-01-24T06:29:02.364Z", + "received_at": "2020-01-24T06:29:02.403Z", + "sent_at": "2020-01-24T06:29:02.364Z", + "test_map_nested_map": "{\"n1\":\"nested prop 1\"}", + "timestamp": "2020-01-24T06:29:02.403Z", + "user_id": "9bb5d4c2-a7aa-4a36-9efb-dd2b1aec5d33" + }, + "metadata": { + "columns": { + "anonymous_id": "string", + "channel": "string", + "city": "string", + "context_app_build": "string", + "context_app_name": "string", + "context_app_namespace": "string", + "context_app_version": "string", + "context_ctest_map_cnested_map": "json", + "context_ip": "string", + "context_library_name": "string", + "context_library_version": "string", + "context_locale": "string", + "context_passed_ip": "string", + "context_request_ip": "string", + "context_screen_density": "int", + "context_user_agent": "string", + "country": "string", + "email": "string", + "firstname": "string", + "id": "string", + "original_timestamp": "datetime", + "received_at": "datetime", + "sent_at": "datetime", + "test_map_nested_map": "json", + "timestamp": "datetime", + "user_id": "string", + "uuid_ts": "datetime" + }, + "receivedAt": "2020-01-24T11:59:02.403+05:30", + "table": "groups" + } + } + ], + bq: [ + { + "data": { + "anonymous_id": "e6ab2c5e-2cda-44a9-a962-e2f67df78bca", + "channel": "web", + "city": "Disney", + "context_app_build": "1.0.0", + "context_app_name": "RudderLabs JavaScript SDK", + "context_app_namespace": "com.rudderlabs.javascript", + "context_app_version": "1.0.5", + "context_ctest_map_cnested_map": "{\"n1\":\"context nested prop 1\"}", + "context_ip": "0.0.0.0", + "context_library_name": "RudderLabs JavaScript SDK", + "context_library_version": "1.0.5", + "context_locale": "en-GB", + "context_passed_ip": "0.0.0.0", + "context_request_ip": "[::1]:53708", + "context_screen_density": 2, + "context_user_agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.117 Safari/537.36", + "country": "USA", + "email": "mickey@disney.com", + "firstname": "Mickey", + "id": "a6a0ad5a-bd26-4f19-8f75-38484e580fc7", + "original_timestamp": "2020-01-24T06:29:02.364Z", + "received_at": "2020-01-24T06:29:02.403Z", + "sent_at": "2020-01-24T06:29:02.364Z", + "test_map_nested_map": "{\"n1\":\"nested prop 1\"}", + "timestamp": "2020-01-24T06:29:02.403Z", + "user_id": "9bb5d4c2-a7aa-4a36-9efb-dd2b1aec5d33" + }, + "metadata": { + "columns": { + "anonymous_id": "string", + "channel": "string", + "city": "string", + "context_app_build": "string", + "context_app_name": "string", + "context_app_namespace": "string", + "context_app_version": "string", + "context_ctest_map_cnested_map": "string", + "context_ip": "string", + "context_library_name": "string", + "context_library_version": "string", + "context_locale": "string", + "context_passed_ip": "string", + "context_request_ip": "string", + "context_screen_density": "int", + "context_user_agent": "string", + "country": "string", + "email": "string", + "firstname": "string", + "id": "string", + "loaded_at": "datetime", + "original_timestamp": "datetime", + "received_at": "datetime", + "sent_at": "datetime", + "test_map_nested_map": "string", + "timestamp": "datetime", + "user_id": "string", + "uuid_ts": "datetime" + }, + "receivedAt": "2020-01-24T11:59:02.403+05:30", + "table": "_groups" + } + } + ], + postgres: [ + { + "data": { + "anonymous_id": "e6ab2c5e-2cda-44a9-a962-e2f67df78bca", + "channel": "web", + "city": "Disney", + "context_app_build": "1.0.0", + "context_app_name": "RudderLabs JavaScript SDK", + "context_app_namespace": "com.rudderlabs.javascript", + "context_app_version": "1.0.5", + "context_ctest_map_cnested_map": "{\"n1\":\"context nested prop 1\"}", + "context_ip": "0.0.0.0", + "context_library_name": "RudderLabs JavaScript SDK", + "context_library_version": "1.0.5", + "context_locale": "en-GB", + "context_passed_ip": "0.0.0.0", + "context_request_ip": "[::1]:53708", + "context_screen_density": 2, + "context_user_agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.117 Safari/537.36", + "country": "USA", + "email": "mickey@disney.com", + "firstname": "Mickey", + "id": "a6a0ad5a-bd26-4f19-8f75-38484e580fc7", + "original_timestamp": "2020-01-24T06:29:02.364Z", + "received_at": "2020-01-24T06:29:02.403Z", + "sent_at": "2020-01-24T06:29:02.364Z", + "test_map_nested_map": "{\"n1\":\"nested prop 1\"}", + "timestamp": "2020-01-24T06:29:02.403Z", + "user_id": "9bb5d4c2-a7aa-4a36-9efb-dd2b1aec5d33" + }, + "metadata": { + "columns": { + "anonymous_id": "string", + "channel": "string", + "city": "string", + "context_app_build": "string", + "context_app_name": "string", + "context_app_namespace": "string", + "context_app_version": "string", + "context_ctest_map_cnested_map": "json", + "context_ip": "string", + "context_library_name": "string", + "context_library_version": "string", + "context_locale": "string", + "context_passed_ip": "string", + "context_request_ip": "string", + "context_screen_density": "int", + "context_user_agent": "string", + "country": "string", + "email": "string", + "firstname": "string", + "id": "string", + "original_timestamp": "datetime", + "received_at": "datetime", + "sent_at": "datetime", + "test_map_nested_map": "json", + "timestamp": "datetime", + "user_id": "string", + "uuid_ts": "datetime" + }, + "receivedAt": "2020-01-24T11:59:02.403+05:30", + "table": "groups" + } + } + ], + snowflake: [ + { + "data": { + "ANONYMOUS_ID": "e6ab2c5e-2cda-44a9-a962-e2f67df78bca", + "CHANNEL": "web", + "CITY": "Disney", + "CONTEXT_APP_BUILD": "1.0.0", + "CONTEXT_APP_NAME": "RudderLabs JavaScript SDK", + "CONTEXT_APP_NAMESPACE": "com.rudderlabs.javascript", + "CONTEXT_APP_VERSION": "1.0.5", + "CONTEXT_CTEST_MAP_CNESTED_MAP": "{\"n1\":\"context nested prop 1\"}", + "CONTEXT_IP": "0.0.0.0", + "CONTEXT_LIBRARY_NAME": "RudderLabs JavaScript SDK", + "CONTEXT_LIBRARY_VERSION": "1.0.5", + "CONTEXT_LOCALE": "en-GB", + "CONTEXT_PASSED_IP": "0.0.0.0", + "CONTEXT_REQUEST_IP": "[::1]:53708", + "CONTEXT_SCREEN_DENSITY": 2, + "CONTEXT_USER_AGENT": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.117 Safari/537.36", + "COUNTRY": "USA", + "EMAIL": "mickey@disney.com", + "FIRSTNAME": "Mickey", + "ID": "a6a0ad5a-bd26-4f19-8f75-38484e580fc7", + "ORIGINAL_TIMESTAMP": "2020-01-24T06:29:02.364Z", + "RECEIVED_AT": "2020-01-24T06:29:02.403Z", + "SENT_AT": "2020-01-24T06:29:02.364Z", + "TEST_MAP_NESTED_MAP": "{\"n1\":\"nested prop 1\"}", + "TIMESTAMP": "2020-01-24T06:29:02.403Z", + "USER_ID": "9bb5d4c2-a7aa-4a36-9efb-dd2b1aec5d33" + }, + "metadata": { + "columns": { + "ANONYMOUS_ID": "string", + "CHANNEL": "string", + "CITY": "string", + "CONTEXT_APP_BUILD": "string", + "CONTEXT_APP_NAME": "string", + "CONTEXT_APP_NAMESPACE": "string", + "CONTEXT_APP_VERSION": "string", + "CONTEXT_CTEST_MAP_CNESTED_MAP": "json", + "CONTEXT_IP": "string", + "CONTEXT_LIBRARY_NAME": "string", + "CONTEXT_LIBRARY_VERSION": "string", + "CONTEXT_LOCALE": "string", + "CONTEXT_PASSED_IP": "string", + "CONTEXT_REQUEST_IP": "string", + "CONTEXT_SCREEN_DENSITY": "int", + "CONTEXT_USER_AGENT": "string", + "COUNTRY": "string", + "EMAIL": "string", + "FIRSTNAME": "string", + "ID": "string", + "ORIGINAL_TIMESTAMP": "datetime", + "RECEIVED_AT": "datetime", + "SENT_AT": "datetime", + "TEST_MAP_NESTED_MAP": "json", + "TIMESTAMP": "datetime", + "USER_ID": "string", + "UUID_TS": "datetime" + }, + "receivedAt": "2020-01-24T11:59:02.403+05:30", + "table": "GROUPS" + } + } + ], + } +} diff --git a/test/__tests__/data/warehouse/integrations/jsonpaths/new/identifies.js b/test/__tests__/data/warehouse/integrations/jsonpaths/new/identifies.js new file mode 100644 index 0000000000..3d6164b430 --- /dev/null +++ b/test/__tests__/data/warehouse/integrations/jsonpaths/new/identifies.js @@ -0,0 +1,850 @@ +module.exports = { + input: { + destination: { + Config: {} + }, + message: { + type: "identify", + sentAt: "2021-01-03T17:02:53.195Z", + userId: "user123", + channel: "web", + integrations: { + All: true, + RS: { + options: { + jsonPaths: [ + "identify.userProperties.UPMap.nestedMap", + "identify.context.traits.CTMap.nestedMap", + "identify.traits.TMap.nestedMap", + "identify.context.CMap.nestedMap", + ] + } + }, + BQ: { + options: { + jsonPaths: [ + "identify.userProperties.UPMap.nestedMap", + "identify.context.traits.CTMap.nestedMap", + "identify.traits.TMap.nestedMap", + "identify.context.CMap.nestedMap", + ] + } + }, + POSTGRES: { + options: { + jsonPaths: [ + "identify.userProperties.UPMap.nestedMap", + "identify.context.traits.CTMap.nestedMap", + "identify.traits.TMap.nestedMap", + "identify.context.CMap.nestedMap", + ] + } + }, + SNOWFLAKE: { + options: { + jsonPaths: [ + "identify.userProperties.UPMap.nestedMap", + "identify.context.traits.CTMap.nestedMap", + "identify.traits.TMap.nestedMap", + "identify.context.CMap.nestedMap", + ] + } + }, + S3_DATALAKE: { + options: { + skipReservedKeywordsEscaping: true + } + }, + }, + userProperties: { + email: "test@gmail.com", + UPMap: { + nestedMap: { + n1: "nested prop 1" + } + }, + }, + traits: { + TMap: { + nestedMap: { + n1: "nested prop 1" + } + }, + }, + context: { + os: { + "name": "android", + "version": "1.12.3" + }, + app: { + name: "RudderLabs JavaScript SDK", + build: "1.0.0", + version: "1.1.11", + namespace: "com.rudderlabs.javascript" + }, + traits: { + email: "user123@email.com", + phone: "+917836362334", + userId: "user123", + CTMap: { + nestedMap: { + n1: "nested prop 1" + } + }, + }, + CMap: { + nestedMap: { + n1: "context nested prop 1" + } + }, + locale: "en-US", + device: { + token: "token", + id: "id", + type: "ios" + }, + library: { + name: "RudderLabs JavaScript SDK", + version: "1.1.11" + }, + userAgent: "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.16; rv:84.0) Gecko/20100101 Firefox/84.0" + }, + rudderId: "8f8fa6b5-8e24-489c-8e22-61f23f2e364f", + messageId: "2116ef8c-efc3-4ca4-851b-02ee60dad6ff", + anonymousId: "97c46c81-3140-456d-b2a9-690d70aaca35", + originalTimestamp: "2020-01-24T06:29:02.364Z", + receivedAt: "2020-01-24T11:59:02.403+05:30", + request_ip: "[::1]:53708", + timestamp: "2020-01-24T11:59:02.403+05:30" + }, + request: { + query: { + whSchemaVersion: "v1" + } + } + }, + output: { + default: [ + { + "data": { + "anonymous_id": "97c46c81-3140-456d-b2a9-690d70aaca35", + "channel": "web", + "context_app_build": "1.0.0", + "context_app_name": "RudderLabs JavaScript SDK", + "context_app_namespace": "com.rudderlabs.javascript", + "context_app_version": "1.1.11", + "context_c_map_nested_map_n_1": "context nested prop 1", + "context_device_id": "id", + "context_device_token": "token", + "context_device_type": "ios", + "context_ip": "[::1]:53708", + "context_library_name": "RudderLabs JavaScript SDK", + "context_library_version": "1.1.11", + "context_locale": "en-US", + "context_os_name": "android", + "context_os_version": "1.12.3", + "context_request_ip": "[::1]:53708", + "context_traits_ct_map_nested_map_n_1": "nested prop 1", + "context_traits_email": "user123@email.com", + "context_traits_phone": "+917836362334", + "context_traits_user_id": "user123", + "context_user_agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.16; rv:84.0) Gecko/20100101 Firefox/84.0", + "ct_map_nested_map_n_1": "nested prop 1", + "email": "user123@email.com", + "id": "2116ef8c-efc3-4ca4-851b-02ee60dad6ff", + "original_timestamp": "2020-01-24T06:29:02.364Z", + "phone": "+917836362334", + "received_at": "2020-01-24T06:29:02.403Z", + "sent_at": "2021-01-03T17:02:53.195Z", + "t_map_nested_map_n_1": "nested prop 1", + "timestamp": "2020-01-24T06:29:02.403Z", + "up_map_nested_map_n_1": "nested prop 1", + "user_id": "user123" + }, + "metadata": { + "columns": { + "anonymous_id": "string", + "channel": "string", + "context_app_build": "string", + "context_app_name": "string", + "context_app_namespace": "string", + "context_app_version": "string", + "context_c_map_nested_map_n_1": "string", + "context_device_id": "string", + "context_device_token": "string", + "context_device_type": "string", + "context_ip": "string", + "context_library_name": "string", + "context_library_version": "string", + "context_locale": "string", + "context_os_name": "string", + "context_os_version": "string", + "context_request_ip": "string", + "context_traits_ct_map_nested_map_n_1": "string", + "context_traits_email": "string", + "context_traits_phone": "string", + "context_traits_user_id": "string", + "context_user_agent": "string", + "ct_map_nested_map_n_1": "string", + "email": "string", + "id": "string", + "original_timestamp": "datetime", + "phone": "string", + "received_at": "datetime", + "sent_at": "datetime", + "t_map_nested_map_n_1": "string", + "timestamp": "datetime", + "up_map_nested_map_n_1": "string", + "user_id": "string", + "uuid_ts": "datetime" + }, + "receivedAt": "2020-01-24T11:59:02.403+05:30", + "table": "identifies" + } + }, + { + "data": { + "context_app_build": "1.0.0", + "context_app_name": "RudderLabs JavaScript SDK", + "context_app_namespace": "com.rudderlabs.javascript", + "context_app_version": "1.1.11", + "context_c_map_nested_map_n_1": "context nested prop 1", + "context_device_id": "id", + "context_device_token": "token", + "context_device_type": "ios", + "context_ip": "[::1]:53708", + "context_library_name": "RudderLabs JavaScript SDK", + "context_library_version": "1.1.11", + "context_locale": "en-US", + "context_os_name": "android", + "context_os_version": "1.12.3", + "context_request_ip": "[::1]:53708", + "context_traits_ct_map_nested_map_n_1": "nested prop 1", + "context_traits_email": "user123@email.com", + "context_traits_phone": "+917836362334", + "context_traits_user_id": "user123", + "context_user_agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.16; rv:84.0) Gecko/20100101 Firefox/84.0", + "ct_map_nested_map_n_1": "nested prop 1", + "email": "user123@email.com", + "id": "user123", + "phone": "+917836362334", + "received_at": "2020-01-24T06:29:02.403Z", + "t_map_nested_map_n_1": "nested prop 1", + "up_map_nested_map_n_1": "nested prop 1" + }, + "metadata": { + "columns": { + "context_app_build": "string", + "context_app_name": "string", + "context_app_namespace": "string", + "context_app_version": "string", + "context_c_map_nested_map_n_1": "string", + "context_device_id": "string", + "context_device_token": "string", + "context_device_type": "string", + "context_ip": "string", + "context_library_name": "string", + "context_library_version": "string", + "context_locale": "string", + "context_os_name": "string", + "context_os_version": "string", + "context_request_ip": "string", + "context_traits_ct_map_nested_map_n_1": "string", + "context_traits_email": "string", + "context_traits_phone": "string", + "context_traits_user_id": "string", + "context_user_agent": "string", + "ct_map_nested_map_n_1": "string", + "email": "string", + "id": "string", + "phone": "string", + "received_at": "datetime", + "t_map_nested_map_n_1": "string", + "up_map_nested_map_n_1": "string", + "uuid_ts": "datetime" + }, + "receivedAt": "2020-01-24T11:59:02.403+05:30", + "table": "users" + } + } + ], + rs: [ + { + "data": { + "anonymous_id": "97c46c81-3140-456d-b2a9-690d70aaca35", + "channel": "web", + "context_app_build": "1.0.0", + "context_app_name": "RudderLabs JavaScript SDK", + "context_app_namespace": "com.rudderlabs.javascript", + "context_app_version": "1.1.11", + "context_c_map_nested_map": "{\"n1\":\"context nested prop 1\"}", + "context_device_id": "id", + "context_device_token": "token", + "context_device_type": "ios", + "context_ip": "[::1]:53708", + "context_library_name": "RudderLabs JavaScript SDK", + "context_library_version": "1.1.11", + "context_locale": "en-US", + "context_os_name": "android", + "context_os_version": "1.12.3", + "context_request_ip": "[::1]:53708", + "context_traits_ct_map_nested_map": "{\"n1\":\"nested prop 1\"}", + "context_traits_email": "user123@email.com", + "context_traits_phone": "+917836362334", + "context_traits_user_id": "user123", + "context_user_agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.16; rv:84.0) Gecko/20100101 Firefox/84.0", + "ct_map_nested_map": "{\"n1\":\"nested prop 1\"}", + "email": "user123@email.com", + "id": "2116ef8c-efc3-4ca4-851b-02ee60dad6ff", + "original_timestamp": "2020-01-24T06:29:02.364Z", + "phone": "+917836362334", + "received_at": "2020-01-24T06:29:02.403Z", + "sent_at": "2021-01-03T17:02:53.195Z", + "t_map_nested_map": "{\"n1\":\"nested prop 1\"}", + "timestamp": "2020-01-24T06:29:02.403Z", + "up_map_nested_map": "{\"n1\":\"nested prop 1\"}", + "user_id": "user123" + }, + "metadata": { + "columns": { + "anonymous_id": "string", + "channel": "string", + "context_app_build": "string", + "context_app_name": "string", + "context_app_namespace": "string", + "context_app_version": "string", + "context_c_map_nested_map": "json", + "context_device_id": "string", + "context_device_token": "string", + "context_device_type": "string", + "context_ip": "string", + "context_library_name": "string", + "context_library_version": "string", + "context_locale": "string", + "context_os_name": "string", + "context_os_version": "string", + "context_request_ip": "string", + "context_traits_ct_map_nested_map": "json", + "context_traits_email": "string", + "context_traits_phone": "string", + "context_traits_user_id": "string", + "context_user_agent": "string", + "ct_map_nested_map": "json", + "email": "string", + "id": "string", + "original_timestamp": "datetime", + "phone": "string", + "received_at": "datetime", + "sent_at": "datetime", + "t_map_nested_map": "json", + "timestamp": "datetime", + "up_map_nested_map": "json", + "user_id": "string", + "uuid_ts": "datetime" + }, + "receivedAt": "2020-01-24T11:59:02.403+05:30", + "table": "identifies" + } + }, + { + "data": { + "context_app_build": "1.0.0", + "context_app_name": "RudderLabs JavaScript SDK", + "context_app_namespace": "com.rudderlabs.javascript", + "context_app_version": "1.1.11", + "context_c_map_nested_map": "{\"n1\":\"context nested prop 1\"}", + "context_device_id": "id", + "context_device_token": "token", + "context_device_type": "ios", + "context_ip": "[::1]:53708", + "context_library_name": "RudderLabs JavaScript SDK", + "context_library_version": "1.1.11", + "context_locale": "en-US", + "context_os_name": "android", + "context_os_version": "1.12.3", + "context_request_ip": "[::1]:53708", + "context_traits_ct_map_nested_map": "{\"n1\":\"nested prop 1\"}", + "context_traits_email": "user123@email.com", + "context_traits_phone": "+917836362334", + "context_traits_user_id": "user123", + "context_user_agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.16; rv:84.0) Gecko/20100101 Firefox/84.0", + "ct_map_nested_map": "{\"n1\":\"nested prop 1\"}", + "email": "user123@email.com", + "id": "user123", + "phone": "+917836362334", + "received_at": "2020-01-24T06:29:02.403Z", + "t_map_nested_map": "{\"n1\":\"nested prop 1\"}", + "up_map_nested_map": "{\"n1\":\"nested prop 1\"}" + }, + "metadata": { + "columns": { + "context_app_build": "string", + "context_app_name": "string", + "context_app_namespace": "string", + "context_app_version": "string", + "context_c_map_nested_map": "json", + "context_device_id": "string", + "context_device_token": "string", + "context_device_type": "string", + "context_ip": "string", + "context_library_name": "string", + "context_library_version": "string", + "context_locale": "string", + "context_os_name": "string", + "context_os_version": "string", + "context_request_ip": "string", + "context_traits_ct_map_nested_map": "json", + "context_traits_email": "string", + "context_traits_phone": "string", + "context_traits_user_id": "string", + "context_user_agent": "string", + "ct_map_nested_map": "json", + "email": "string", + "id": "string", + "phone": "string", + "received_at": "datetime", + "t_map_nested_map": "json", + "up_map_nested_map": "json", + "uuid_ts": "datetime" + }, + "receivedAt": "2020-01-24T11:59:02.403+05:30", + "table": "users" + } + } + ], + bq: [ + { + "data": { + "anonymous_id": "97c46c81-3140-456d-b2a9-690d70aaca35", + "channel": "web", + "context_app_build": "1.0.0", + "context_app_name": "RudderLabs JavaScript SDK", + "context_app_namespace": "com.rudderlabs.javascript", + "context_app_version": "1.1.11", + "context_c_map_nested_map": "{\"n1\":\"context nested prop 1\"}", + "context_device_id": "id", + "context_device_token": "token", + "context_device_type": "ios", + "context_ip": "[::1]:53708", + "context_library_name": "RudderLabs JavaScript SDK", + "context_library_version": "1.1.11", + "context_locale": "en-US", + "context_os_name": "android", + "context_os_version": "1.12.3", + "context_request_ip": "[::1]:53708", + "context_traits_ct_map_nested_map": "{\"n1\":\"nested prop 1\"}", + "context_traits_email": "user123@email.com", + "context_traits_phone": "+917836362334", + "context_traits_user_id": "user123", + "context_user_agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.16; rv:84.0) Gecko/20100101 Firefox/84.0", + "ct_map_nested_map": "{\"n1\":\"nested prop 1\"}", + "email": "user123@email.com", + "id": "2116ef8c-efc3-4ca4-851b-02ee60dad6ff", + "original_timestamp": "2020-01-24T06:29:02.364Z", + "phone": "+917836362334", + "received_at": "2020-01-24T06:29:02.403Z", + "sent_at": "2021-01-03T17:02:53.195Z", + "t_map_nested_map": "{\"n1\":\"nested prop 1\"}", + "timestamp": "2020-01-24T06:29:02.403Z", + "up_map_nested_map": "{\"n1\":\"nested prop 1\"}", + "user_id": "user123" + }, + "metadata": { + "columns": { + "anonymous_id": "string", + "channel": "string", + "context_app_build": "string", + "context_app_name": "string", + "context_app_namespace": "string", + "context_app_version": "string", + "context_c_map_nested_map": "string", + "context_device_id": "string", + "context_device_token": "string", + "context_device_type": "string", + "context_ip": "string", + "context_library_name": "string", + "context_library_version": "string", + "context_locale": "string", + "context_os_name": "string", + "context_os_version": "string", + "context_request_ip": "string", + "context_traits_ct_map_nested_map": "string", + "context_traits_email": "string", + "context_traits_phone": "string", + "context_traits_user_id": "string", + "context_user_agent": "string", + "ct_map_nested_map": "string", + "email": "string", + "id": "string", + "loaded_at": "datetime", + "original_timestamp": "datetime", + "phone": "string", + "received_at": "datetime", + "sent_at": "datetime", + "t_map_nested_map": "string", + "timestamp": "datetime", + "up_map_nested_map": "string", + "user_id": "string", + "uuid_ts": "datetime" + }, + "receivedAt": "2020-01-24T11:59:02.403+05:30", + "table": "identifies" + } + }, + { + "data": { + "context_app_build": "1.0.0", + "context_app_name": "RudderLabs JavaScript SDK", + "context_app_namespace": "com.rudderlabs.javascript", + "context_app_version": "1.1.11", + "context_c_map_nested_map": "{\"n1\":\"context nested prop 1\"}", + "context_device_id": "id", + "context_device_token": "token", + "context_device_type": "ios", + "context_ip": "[::1]:53708", + "context_library_name": "RudderLabs JavaScript SDK", + "context_library_version": "1.1.11", + "context_locale": "en-US", + "context_os_name": "android", + "context_os_version": "1.12.3", + "context_request_ip": "[::1]:53708", + "context_traits_ct_map_nested_map": "{\"n1\":\"nested prop 1\"}", + "context_traits_email": "user123@email.com", + "context_traits_phone": "+917836362334", + "context_traits_user_id": "user123", + "context_user_agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.16; rv:84.0) Gecko/20100101 Firefox/84.0", + "ct_map_nested_map": "{\"n1\":\"nested prop 1\"}", + "email": "user123@email.com", + "id": "user123", + "phone": "+917836362334", + "received_at": "2020-01-24T06:29:02.403Z", + "t_map_nested_map": "{\"n1\":\"nested prop 1\"}", + "up_map_nested_map": "{\"n1\":\"nested prop 1\"}" + }, + "metadata": { + "columns": { + "context_app_build": "string", + "context_app_name": "string", + "context_app_namespace": "string", + "context_app_version": "string", + "context_c_map_nested_map": "string", + "context_device_id": "string", + "context_device_token": "string", + "context_device_type": "string", + "context_ip": "string", + "context_library_name": "string", + "context_library_version": "string", + "context_locale": "string", + "context_os_name": "string", + "context_os_version": "string", + "context_request_ip": "string", + "context_traits_ct_map_nested_map": "string", + "context_traits_email": "string", + "context_traits_phone": "string", + "context_traits_user_id": "string", + "context_user_agent": "string", + "ct_map_nested_map": "string", + "email": "string", + "id": "string", + "loaded_at": "datetime", + "phone": "string", + "received_at": "datetime", + "t_map_nested_map": "string", + "up_map_nested_map": "string", + "uuid_ts": "datetime" + }, + "receivedAt": "2020-01-24T11:59:02.403+05:30", + "table": "users" + } + } + ], + postgres: [ + { + "data": { + "anonymous_id": "97c46c81-3140-456d-b2a9-690d70aaca35", + "channel": "web", + "context_app_build": "1.0.0", + "context_app_name": "RudderLabs JavaScript SDK", + "context_app_namespace": "com.rudderlabs.javascript", + "context_app_version": "1.1.11", + "context_c_map_nested_map": "{\"n1\":\"context nested prop 1\"}", + "context_device_id": "id", + "context_device_token": "token", + "context_device_type": "ios", + "context_ip": "[::1]:53708", + "context_library_name": "RudderLabs JavaScript SDK", + "context_library_version": "1.1.11", + "context_locale": "en-US", + "context_os_name": "android", + "context_os_version": "1.12.3", + "context_request_ip": "[::1]:53708", + "context_traits_ct_map_nested_map": "{\"n1\":\"nested prop 1\"}", + "context_traits_email": "user123@email.com", + "context_traits_phone": "+917836362334", + "context_traits_user_id": "user123", + "context_user_agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.16; rv:84.0) Gecko/20100101 Firefox/84.0", + "ct_map_nested_map": "{\"n1\":\"nested prop 1\"}", + "email": "user123@email.com", + "id": "2116ef8c-efc3-4ca4-851b-02ee60dad6ff", + "original_timestamp": "2020-01-24T06:29:02.364Z", + "phone": "+917836362334", + "received_at": "2020-01-24T06:29:02.403Z", + "sent_at": "2021-01-03T17:02:53.195Z", + "t_map_nested_map": "{\"n1\":\"nested prop 1\"}", + "timestamp": "2020-01-24T06:29:02.403Z", + "up_map_nested_map": "{\"n1\":\"nested prop 1\"}", + "user_id": "user123" + }, + "metadata": { + "columns": { + "anonymous_id": "string", + "channel": "string", + "context_app_build": "string", + "context_app_name": "string", + "context_app_namespace": "string", + "context_app_version": "string", + "context_c_map_nested_map": "json", + "context_device_id": "string", + "context_device_token": "string", + "context_device_type": "string", + "context_ip": "string", + "context_library_name": "string", + "context_library_version": "string", + "context_locale": "string", + "context_os_name": "string", + "context_os_version": "string", + "context_request_ip": "string", + "context_traits_ct_map_nested_map": "json", + "context_traits_email": "string", + "context_traits_phone": "string", + "context_traits_user_id": "string", + "context_user_agent": "string", + "ct_map_nested_map": "json", + "email": "string", + "id": "string", + "original_timestamp": "datetime", + "phone": "string", + "received_at": "datetime", + "sent_at": "datetime", + "t_map_nested_map": "json", + "timestamp": "datetime", + "up_map_nested_map": "json", + "user_id": "string", + "uuid_ts": "datetime" + }, + "receivedAt": "2020-01-24T11:59:02.403+05:30", + "table": "identifies" + } + }, + { + "data": { + "context_app_build": "1.0.0", + "context_app_name": "RudderLabs JavaScript SDK", + "context_app_namespace": "com.rudderlabs.javascript", + "context_app_version": "1.1.11", + "context_c_map_nested_map": "{\"n1\":\"context nested prop 1\"}", + "context_device_id": "id", + "context_device_token": "token", + "context_device_type": "ios", + "context_ip": "[::1]:53708", + "context_library_name": "RudderLabs JavaScript SDK", + "context_library_version": "1.1.11", + "context_locale": "en-US", + "context_os_name": "android", + "context_os_version": "1.12.3", + "context_request_ip": "[::1]:53708", + "context_traits_ct_map_nested_map": "{\"n1\":\"nested prop 1\"}", + "context_traits_email": "user123@email.com", + "context_traits_phone": "+917836362334", + "context_traits_user_id": "user123", + "context_user_agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.16; rv:84.0) Gecko/20100101 Firefox/84.0", + "ct_map_nested_map": "{\"n1\":\"nested prop 1\"}", + "email": "user123@email.com", + "id": "user123", + "phone": "+917836362334", + "received_at": "2020-01-24T06:29:02.403Z", + "t_map_nested_map": "{\"n1\":\"nested prop 1\"}", + "up_map_nested_map": "{\"n1\":\"nested prop 1\"}" + }, + "metadata": { + "columns": { + "context_app_build": "string", + "context_app_name": "string", + "context_app_namespace": "string", + "context_app_version": "string", + "context_c_map_nested_map": "json", + "context_device_id": "string", + "context_device_token": "string", + "context_device_type": "string", + "context_ip": "string", + "context_library_name": "string", + "context_library_version": "string", + "context_locale": "string", + "context_os_name": "string", + "context_os_version": "string", + "context_request_ip": "string", + "context_traits_ct_map_nested_map": "json", + "context_traits_email": "string", + "context_traits_phone": "string", + "context_traits_user_id": "string", + "context_user_agent": "string", + "ct_map_nested_map": "json", + "email": "string", + "id": "string", + "phone": "string", + "received_at": "datetime", + "t_map_nested_map": "json", + "up_map_nested_map": "json", + "uuid_ts": "datetime" + }, + "receivedAt": "2020-01-24T11:59:02.403+05:30", + "table": "users" + } + } + ], + snowflake: [ + { + "data": { + "ANONYMOUS_ID": "97c46c81-3140-456d-b2a9-690d70aaca35", + "CHANNEL": "web", + "CONTEXT_APP_BUILD": "1.0.0", + "CONTEXT_APP_NAME": "RudderLabs JavaScript SDK", + "CONTEXT_APP_NAMESPACE": "com.rudderlabs.javascript", + "CONTEXT_APP_VERSION": "1.1.11", + "CONTEXT_C_MAP_NESTED_MAP": "{\"n1\":\"context nested prop 1\"}", + "CONTEXT_DEVICE_ID": "id", + "CONTEXT_DEVICE_TOKEN": "token", + "CONTEXT_DEVICE_TYPE": "ios", + "CONTEXT_IP": "[::1]:53708", + "CONTEXT_LIBRARY_NAME": "RudderLabs JavaScript SDK", + "CONTEXT_LIBRARY_VERSION": "1.1.11", + "CONTEXT_LOCALE": "en-US", + "CONTEXT_OS_NAME": "android", + "CONTEXT_OS_VERSION": "1.12.3", + "CONTEXT_REQUEST_IP": "[::1]:53708", + "CONTEXT_TRAITS_CT_MAP_NESTED_MAP": "{\"n1\":\"nested prop 1\"}", + "CONTEXT_TRAITS_EMAIL": "user123@email.com", + "CONTEXT_TRAITS_PHONE": "+917836362334", + "CONTEXT_TRAITS_USER_ID": "user123", + "CONTEXT_USER_AGENT": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.16; rv:84.0) Gecko/20100101 Firefox/84.0", + "CT_MAP_NESTED_MAP": "{\"n1\":\"nested prop 1\"}", + "EMAIL": "user123@email.com", + "ID": "2116ef8c-efc3-4ca4-851b-02ee60dad6ff", + "ORIGINAL_TIMESTAMP": "2020-01-24T06:29:02.364Z", + "PHONE": "+917836362334", + "RECEIVED_AT": "2020-01-24T06:29:02.403Z", + "SENT_AT": "2021-01-03T17:02:53.195Z", + "TIMESTAMP": "2020-01-24T06:29:02.403Z", + "T_MAP_NESTED_MAP": "{\"n1\":\"nested prop 1\"}", + "UP_MAP_NESTED_MAP": "{\"n1\":\"nested prop 1\"}", + "USER_ID": "user123" + }, + "metadata": { + "columns": { + "ANONYMOUS_ID": "string", + "CHANNEL": "string", + "CONTEXT_APP_BUILD": "string", + "CONTEXT_APP_NAME": "string", + "CONTEXT_APP_NAMESPACE": "string", + "CONTEXT_APP_VERSION": "string", + "CONTEXT_C_MAP_NESTED_MAP": "json", + "CONTEXT_DEVICE_ID": "string", + "CONTEXT_DEVICE_TOKEN": "string", + "CONTEXT_DEVICE_TYPE": "string", + "CONTEXT_IP": "string", + "CONTEXT_LIBRARY_NAME": "string", + "CONTEXT_LIBRARY_VERSION": "string", + "CONTEXT_LOCALE": "string", + "CONTEXT_OS_NAME": "string", + "CONTEXT_OS_VERSION": "string", + "CONTEXT_REQUEST_IP": "string", + "CONTEXT_TRAITS_CT_MAP_NESTED_MAP": "json", + "CONTEXT_TRAITS_EMAIL": "string", + "CONTEXT_TRAITS_PHONE": "string", + "CONTEXT_TRAITS_USER_ID": "string", + "CONTEXT_USER_AGENT": "string", + "CT_MAP_NESTED_MAP": "json", + "EMAIL": "string", + "ID": "string", + "ORIGINAL_TIMESTAMP": "datetime", + "PHONE": "string", + "RECEIVED_AT": "datetime", + "SENT_AT": "datetime", + "TIMESTAMP": "datetime", + "T_MAP_NESTED_MAP": "json", + "UP_MAP_NESTED_MAP": "json", + "USER_ID": "string", + "UUID_TS": "datetime" + }, + "receivedAt": "2020-01-24T11:59:02.403+05:30", + "table": "IDENTIFIES" + } + }, + { + "data": { + "CONTEXT_APP_BUILD": "1.0.0", + "CONTEXT_APP_NAME": "RudderLabs JavaScript SDK", + "CONTEXT_APP_NAMESPACE": "com.rudderlabs.javascript", + "CONTEXT_APP_VERSION": "1.1.11", + "CONTEXT_C_MAP_NESTED_MAP": "{\"n1\":\"context nested prop 1\"}", + "CONTEXT_DEVICE_ID": "id", + "CONTEXT_DEVICE_TOKEN": "token", + "CONTEXT_DEVICE_TYPE": "ios", + "CONTEXT_IP": "[::1]:53708", + "CONTEXT_LIBRARY_NAME": "RudderLabs JavaScript SDK", + "CONTEXT_LIBRARY_VERSION": "1.1.11", + "CONTEXT_LOCALE": "en-US", + "CONTEXT_OS_NAME": "android", + "CONTEXT_OS_VERSION": "1.12.3", + "CONTEXT_REQUEST_IP": "[::1]:53708", + "CONTEXT_TRAITS_CT_MAP_NESTED_MAP": "{\"n1\":\"nested prop 1\"}", + "CONTEXT_TRAITS_EMAIL": "user123@email.com", + "CONTEXT_TRAITS_PHONE": "+917836362334", + "CONTEXT_TRAITS_USER_ID": "user123", + "CONTEXT_USER_AGENT": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.16; rv:84.0) Gecko/20100101 Firefox/84.0", + "CT_MAP_NESTED_MAP": "{\"n1\":\"nested prop 1\"}", + "EMAIL": "user123@email.com", + "ID": "user123", + "PHONE": "+917836362334", + "RECEIVED_AT": "2020-01-24T06:29:02.403Z", + "T_MAP_NESTED_MAP": "{\"n1\":\"nested prop 1\"}", + "UP_MAP_NESTED_MAP": "{\"n1\":\"nested prop 1\"}" + }, + "metadata": { + "columns": { + "CONTEXT_APP_BUILD": "string", + "CONTEXT_APP_NAME": "string", + "CONTEXT_APP_NAMESPACE": "string", + "CONTEXT_APP_VERSION": "string", + "CONTEXT_C_MAP_NESTED_MAP": "json", + "CONTEXT_DEVICE_ID": "string", + "CONTEXT_DEVICE_TOKEN": "string", + "CONTEXT_DEVICE_TYPE": "string", + "CONTEXT_IP": "string", + "CONTEXT_LIBRARY_NAME": "string", + "CONTEXT_LIBRARY_VERSION": "string", + "CONTEXT_LOCALE": "string", + "CONTEXT_OS_NAME": "string", + "CONTEXT_OS_VERSION": "string", + "CONTEXT_REQUEST_IP": "string", + "CONTEXT_TRAITS_CT_MAP_NESTED_MAP": "json", + "CONTEXT_TRAITS_EMAIL": "string", + "CONTEXT_TRAITS_PHONE": "string", + "CONTEXT_TRAITS_USER_ID": "string", + "CONTEXT_USER_AGENT": "string", + "CT_MAP_NESTED_MAP": "json", + "EMAIL": "string", + "ID": "string", + "PHONE": "string", + "RECEIVED_AT": "datetime", + "T_MAP_NESTED_MAP": "json", + "UP_MAP_NESTED_MAP": "json", + "UUID_TS": "datetime" + }, + "receivedAt": "2020-01-24T11:59:02.403+05:30", + "table": "USERS" + } + } + ], + } +} diff --git a/test/__tests__/data/warehouse/integrations/jsonpaths/new/pages.js b/test/__tests__/data/warehouse/integrations/jsonpaths/new/pages.js new file mode 100644 index 0000000000..136f355b21 --- /dev/null +++ b/test/__tests__/data/warehouse/integrations/jsonpaths/new/pages.js @@ -0,0 +1,393 @@ +module.exports = { + input: { + destination: { + Config: {} + }, + message: { + anonymousId: "e6ab2c5e-2cda-44a9-a962-e2f67df78bca", + channel: "web", + context: { + app: { + build: "1.0.0", + name: "RudderLabs JavaScript SDK", + namespace: "com.rudderlabs.javascript", + version: "1.0.5" + }, + ip: "0.0.0.0", + library: { + name: "RudderLabs JavaScript SDK", + version: "1.0.5" + }, + ctestMap: { + cnestedMap: { + n1: "context nested prop 1" + } + }, + locale: "en-GB", + screen: { + density: 2 + }, + userAgent: + "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.117 Safari/537.36" + }, + integrations: { + All: true, + RS: { + options: { + jsonPaths: ["page.properties.testMap.nestedMap", "page.context.ctestMap.cnestedMap"] + } + }, + BQ: { + options: { + jsonPaths: ["page.properties.testMap.nestedMap", "page.context.ctestMap.cnestedMap"] + } + }, + POSTGRES: { + options: { + jsonPaths: ["page.properties.testMap.nestedMap", "page.context.ctestMap.cnestedMap"] + } + }, + SNOWFLAKE: { + options: { + jsonPaths: ["page.properties.testMap.nestedMap", "page.context.ctestMap.cnestedMap"] + } + }, + S3_DATALAKE: { + options: { + skipReservedKeywordsEscaping: true + } + }, + }, + messageId: "a6a0ad5a-bd26-4f19-8f75-38484e580fc7", + originalTimestamp: "2020-01-24T06:29:02.364Z", + properties: { + currency: "USD", + revenue: 50, + testMap: { + nestedMap: { + n1: "nested prop 1" + } + }, + }, + receivedAt: "2020-01-24T11:59:02.403+05:30", + request_ip: "[::1]:53708", + sentAt: "2020-01-24T06:29:02.364Z", + timestamp: "2020-01-24T11:59:02.403+05:30", + type: "page", + userId: "9bb5d4c2-a7aa-4a36-9efb-dd2b1aec5d33" + }, + request: { + query: { + whSchemaVersion: "v1" + } + } + }, + output: { + default: [ + { + "data": { + "anonymous_id": "e6ab2c5e-2cda-44a9-a962-e2f67df78bca", + "channel": "web", + "context_app_build": "1.0.0", + "context_app_name": "RudderLabs JavaScript SDK", + "context_app_namespace": "com.rudderlabs.javascript", + "context_app_version": "1.0.5", + "context_ctest_map_cnested_map_n_1": "context nested prop 1", + "context_ip": "0.0.0.0", + "context_library_name": "RudderLabs JavaScript SDK", + "context_library_version": "1.0.5", + "context_locale": "en-GB", + "context_passed_ip": "0.0.0.0", + "context_request_ip": "[::1]:53708", + "context_screen_density": 2, + "context_user_agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.117 Safari/537.36", + "currency": "USD", + "id": "a6a0ad5a-bd26-4f19-8f75-38484e580fc7", + "original_timestamp": "2020-01-24T06:29:02.364Z", + "received_at": "2020-01-24T06:29:02.403Z", + "revenue": 50, + "sent_at": "2020-01-24T06:29:02.364Z", + "test_map_nested_map_n_1": "nested prop 1", + "timestamp": "2020-01-24T06:29:02.403Z", + "user_id": "9bb5d4c2-a7aa-4a36-9efb-dd2b1aec5d33" + }, + "metadata": { + "columns": { + "anonymous_id": "string", + "channel": "string", + "context_app_build": "string", + "context_app_name": "string", + "context_app_namespace": "string", + "context_app_version": "string", + "context_ctest_map_cnested_map_n_1": "string", + "context_ip": "string", + "context_library_name": "string", + "context_library_version": "string", + "context_locale": "string", + "context_passed_ip": "string", + "context_request_ip": "string", + "context_screen_density": "int", + "context_user_agent": "string", + "currency": "string", + "id": "string", + "original_timestamp": "datetime", + "received_at": "datetime", + "revenue": "int", + "sent_at": "datetime", + "test_map_nested_map_n_1": "string", + "timestamp": "datetime", + "user_id": "string", + "uuid_ts": "datetime" + }, + "receivedAt": "2020-01-24T11:59:02.403+05:30", + "table": "pages" + } + } + ], + rs: [ + { + "data": { + "anonymous_id": "e6ab2c5e-2cda-44a9-a962-e2f67df78bca", + "channel": "web", + "context_app_build": "1.0.0", + "context_app_name": "RudderLabs JavaScript SDK", + "context_app_namespace": "com.rudderlabs.javascript", + "context_app_version": "1.0.5", + "context_ctest_map_cnested_map": "{\"n1\":\"context nested prop 1\"}", + "context_ip": "0.0.0.0", + "context_library_name": "RudderLabs JavaScript SDK", + "context_library_version": "1.0.5", + "context_locale": "en-GB", + "context_passed_ip": "0.0.0.0", + "context_request_ip": "[::1]:53708", + "context_screen_density": 2, + "context_user_agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.117 Safari/537.36", + "currency": "USD", + "id": "a6a0ad5a-bd26-4f19-8f75-38484e580fc7", + "original_timestamp": "2020-01-24T06:29:02.364Z", + "received_at": "2020-01-24T06:29:02.403Z", + "revenue": 50, + "sent_at": "2020-01-24T06:29:02.364Z", + "test_map_nested_map": "{\"n1\":\"nested prop 1\"}", + "timestamp": "2020-01-24T06:29:02.403Z", + "user_id": "9bb5d4c2-a7aa-4a36-9efb-dd2b1aec5d33" + }, + "metadata": { + "columns": { + "anonymous_id": "string", + "channel": "string", + "context_app_build": "string", + "context_app_name": "string", + "context_app_namespace": "string", + "context_app_version": "string", + "context_ctest_map_cnested_map": "json", + "context_ip": "string", + "context_library_name": "string", + "context_library_version": "string", + "context_locale": "string", + "context_passed_ip": "string", + "context_request_ip": "string", + "context_screen_density": "int", + "context_user_agent": "string", + "currency": "string", + "id": "string", + "original_timestamp": "datetime", + "received_at": "datetime", + "revenue": "int", + "sent_at": "datetime", + "test_map_nested_map": "json", + "timestamp": "datetime", + "user_id": "string", + "uuid_ts": "datetime" + }, + "receivedAt": "2020-01-24T11:59:02.403+05:30", + "table": "pages" + } + } + ], + bq: [ + { + "data": { + "anonymous_id": "e6ab2c5e-2cda-44a9-a962-e2f67df78bca", + "channel": "web", + "context_app_build": "1.0.0", + "context_app_name": "RudderLabs JavaScript SDK", + "context_app_namespace": "com.rudderlabs.javascript", + "context_app_version": "1.0.5", + "context_ctest_map_cnested_map": "{\"n1\":\"context nested prop 1\"}", + "context_ip": "0.0.0.0", + "context_library_name": "RudderLabs JavaScript SDK", + "context_library_version": "1.0.5", + "context_locale": "en-GB", + "context_passed_ip": "0.0.0.0", + "context_request_ip": "[::1]:53708", + "context_screen_density": 2, + "context_user_agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.117 Safari/537.36", + "currency": "USD", + "id": "a6a0ad5a-bd26-4f19-8f75-38484e580fc7", + "original_timestamp": "2020-01-24T06:29:02.364Z", + "received_at": "2020-01-24T06:29:02.403Z", + "revenue": 50, + "sent_at": "2020-01-24T06:29:02.364Z", + "test_map_nested_map": "{\"n1\":\"nested prop 1\"}", + "timestamp": "2020-01-24T06:29:02.403Z", + "user_id": "9bb5d4c2-a7aa-4a36-9efb-dd2b1aec5d33" + }, + "metadata": { + "columns": { + "anonymous_id": "string", + "channel": "string", + "context_app_build": "string", + "context_app_name": "string", + "context_app_namespace": "string", + "context_app_version": "string", + "context_ctest_map_cnested_map": "string", + "context_ip": "string", + "context_library_name": "string", + "context_library_version": "string", + "context_locale": "string", + "context_passed_ip": "string", + "context_request_ip": "string", + "context_screen_density": "int", + "context_user_agent": "string", + "currency": "string", + "id": "string", + "loaded_at": "datetime", + "original_timestamp": "datetime", + "received_at": "datetime", + "revenue": "int", + "sent_at": "datetime", + "test_map_nested_map": "string", + "timestamp": "datetime", + "user_id": "string", + "uuid_ts": "datetime" + }, + "receivedAt": "2020-01-24T11:59:02.403+05:30", + "table": "pages" + } + } + ], + postgres: [ + { + "data": { + "anonymous_id": "e6ab2c5e-2cda-44a9-a962-e2f67df78bca", + "channel": "web", + "context_app_build": "1.0.0", + "context_app_name": "RudderLabs JavaScript SDK", + "context_app_namespace": "com.rudderlabs.javascript", + "context_app_version": "1.0.5", + "context_ctest_map_cnested_map": "{\"n1\":\"context nested prop 1\"}", + "context_ip": "0.0.0.0", + "context_library_name": "RudderLabs JavaScript SDK", + "context_library_version": "1.0.5", + "context_locale": "en-GB", + "context_passed_ip": "0.0.0.0", + "context_request_ip": "[::1]:53708", + "context_screen_density": 2, + "context_user_agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.117 Safari/537.36", + "currency": "USD", + "id": "a6a0ad5a-bd26-4f19-8f75-38484e580fc7", + "original_timestamp": "2020-01-24T06:29:02.364Z", + "received_at": "2020-01-24T06:29:02.403Z", + "revenue": 50, + "sent_at": "2020-01-24T06:29:02.364Z", + "test_map_nested_map": "{\"n1\":\"nested prop 1\"}", + "timestamp": "2020-01-24T06:29:02.403Z", + "user_id": "9bb5d4c2-a7aa-4a36-9efb-dd2b1aec5d33" + }, + "metadata": { + "columns": { + "anonymous_id": "string", + "channel": "string", + "context_app_build": "string", + "context_app_name": "string", + "context_app_namespace": "string", + "context_app_version": "string", + "context_ctest_map_cnested_map": "json", + "context_ip": "string", + "context_library_name": "string", + "context_library_version": "string", + "context_locale": "string", + "context_passed_ip": "string", + "context_request_ip": "string", + "context_screen_density": "int", + "context_user_agent": "string", + "currency": "string", + "id": "string", + "original_timestamp": "datetime", + "received_at": "datetime", + "revenue": "int", + "sent_at": "datetime", + "test_map_nested_map": "json", + "timestamp": "datetime", + "user_id": "string", + "uuid_ts": "datetime" + }, + "receivedAt": "2020-01-24T11:59:02.403+05:30", + "table": "pages" + } + } + ], + snowflake: [ + { + "data": { + "ANONYMOUS_ID": "e6ab2c5e-2cda-44a9-a962-e2f67df78bca", + "CHANNEL": "web", + "CONTEXT_APP_BUILD": "1.0.0", + "CONTEXT_APP_NAME": "RudderLabs JavaScript SDK", + "CONTEXT_APP_NAMESPACE": "com.rudderlabs.javascript", + "CONTEXT_APP_VERSION": "1.0.5", + "CONTEXT_CTEST_MAP_CNESTED_MAP": "{\"n1\":\"context nested prop 1\"}", + "CONTEXT_IP": "0.0.0.0", + "CONTEXT_LIBRARY_NAME": "RudderLabs JavaScript SDK", + "CONTEXT_LIBRARY_VERSION": "1.0.5", + "CONTEXT_LOCALE": "en-GB", + "CONTEXT_PASSED_IP": "0.0.0.0", + "CONTEXT_REQUEST_IP": "[::1]:53708", + "CONTEXT_SCREEN_DENSITY": 2, + "CONTEXT_USER_AGENT": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.117 Safari/537.36", + "CURRENCY": "USD", + "ID": "a6a0ad5a-bd26-4f19-8f75-38484e580fc7", + "ORIGINAL_TIMESTAMP": "2020-01-24T06:29:02.364Z", + "RECEIVED_AT": "2020-01-24T06:29:02.403Z", + "REVENUE": 50, + "SENT_AT": "2020-01-24T06:29:02.364Z", + "TEST_MAP_NESTED_MAP": "{\"n1\":\"nested prop 1\"}", + "TIMESTAMP": "2020-01-24T06:29:02.403Z", + "USER_ID": "9bb5d4c2-a7aa-4a36-9efb-dd2b1aec5d33" + }, + "metadata": { + "columns": { + "ANONYMOUS_ID": "string", + "CHANNEL": "string", + "CONTEXT_APP_BUILD": "string", + "CONTEXT_APP_NAME": "string", + "CONTEXT_APP_NAMESPACE": "string", + "CONTEXT_APP_VERSION": "string", + "CONTEXT_CTEST_MAP_CNESTED_MAP": "json", + "CONTEXT_IP": "string", + "CONTEXT_LIBRARY_NAME": "string", + "CONTEXT_LIBRARY_VERSION": "string", + "CONTEXT_LOCALE": "string", + "CONTEXT_PASSED_IP": "string", + "CONTEXT_REQUEST_IP": "string", + "CONTEXT_SCREEN_DENSITY": "int", + "CONTEXT_USER_AGENT": "string", + "CURRENCY": "string", + "ID": "string", + "ORIGINAL_TIMESTAMP": "datetime", + "RECEIVED_AT": "datetime", + "REVENUE": "int", + "SENT_AT": "datetime", + "TEST_MAP_NESTED_MAP": "json", + "TIMESTAMP": "datetime", + "USER_ID": "string", + "UUID_TS": "datetime" + }, + "receivedAt": "2020-01-24T11:59:02.403+05:30", + "table": "PAGES" + } + } + ], + } +} diff --git a/test/__tests__/data/warehouse/integrations/jsonpaths/new/screens.js b/test/__tests__/data/warehouse/integrations/jsonpaths/new/screens.js new file mode 100644 index 0000000000..b11b311ebb --- /dev/null +++ b/test/__tests__/data/warehouse/integrations/jsonpaths/new/screens.js @@ -0,0 +1,393 @@ +module.exports = { + input: { + destination: { + Config: {} + }, + message: { + anonymousId: "e6ab2c5e-2cda-44a9-a962-e2f67df78bca", + channel: "web", + context: { + app: { + build: "1.0.0", + name: "RudderLabs JavaScript SDK", + namespace: "com.rudderlabs.javascript", + version: "1.0.5" + }, + ip: "0.0.0.0", + library: { + name: "RudderLabs JavaScript SDK", + version: "1.0.5" + }, + ctestMap: { + cnestedMap: { + n1: "context nested prop 1" + } + }, + locale: "en-GB", + screen: { + density: 2 + }, + userAgent: + "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.117 Safari/537.36" + }, + integrations: { + All: true, + RS: { + options: { + jsonPaths: ["screen.properties.testMap.nestedMap", "screen.context.ctestMap.cnestedMap"] + } + }, + BQ: { + options: { + jsonPaths: ["screen.properties.testMap.nestedMap", "screen.context.ctestMap.cnestedMap"] + } + }, + POSTGRES: { + options: { + jsonPaths: ["screen.properties.testMap.nestedMap", "screen.context.ctestMap.cnestedMap"] + } + }, + SNOWFLAKE: { + options: { + jsonPaths: ["screen.properties.testMap.nestedMap", "screen.context.ctestMap.cnestedMap"] + } + }, + S3_DATALAKE: { + options: { + skipReservedKeywordsEscaping: true + } + }, + }, + messageId: "a6a0ad5a-bd26-4f19-8f75-38484e580fc7", + originalTimestamp: "2020-01-24T06:29:02.364Z", + properties: { + currency: "USD", + revenue: 50, + testMap: { + nestedMap: { + n1: "nested prop 1" + } + }, + }, + receivedAt: "2020-01-24T11:59:02.403+05:30", + request_ip: "[::1]:53708", + sentAt: "2020-01-24T06:29:02.364Z", + timestamp: "2020-01-24T11:59:02.403+05:30", + type: "screen", + userId: "9bb5d4c2-a7aa-4a36-9efb-dd2b1aec5d33" + }, + request: { + query: { + whSchemaVersion: "v1" + } + } + }, + output: { + default: [ + { + "data": { + "anonymous_id": "e6ab2c5e-2cda-44a9-a962-e2f67df78bca", + "channel": "web", + "context_app_build": "1.0.0", + "context_app_name": "RudderLabs JavaScript SDK", + "context_app_namespace": "com.rudderlabs.javascript", + "context_app_version": "1.0.5", + "context_ctest_map_cnested_map_n_1": "context nested prop 1", + "context_ip": "0.0.0.0", + "context_library_name": "RudderLabs JavaScript SDK", + "context_library_version": "1.0.5", + "context_locale": "en-GB", + "context_passed_ip": "0.0.0.0", + "context_request_ip": "[::1]:53708", + "context_screen_density": 2, + "context_user_agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.117 Safari/537.36", + "currency": "USD", + "id": "a6a0ad5a-bd26-4f19-8f75-38484e580fc7", + "original_timestamp": "2020-01-24T06:29:02.364Z", + "received_at": "2020-01-24T06:29:02.403Z", + "revenue": 50, + "sent_at": "2020-01-24T06:29:02.364Z", + "test_map_nested_map_n_1": "nested prop 1", + "timestamp": "2020-01-24T06:29:02.403Z", + "user_id": "9bb5d4c2-a7aa-4a36-9efb-dd2b1aec5d33" + }, + "metadata": { + "columns": { + "anonymous_id": "string", + "channel": "string", + "context_app_build": "string", + "context_app_name": "string", + "context_app_namespace": "string", + "context_app_version": "string", + "context_ctest_map_cnested_map_n_1": "string", + "context_ip": "string", + "context_library_name": "string", + "context_library_version": "string", + "context_locale": "string", + "context_passed_ip": "string", + "context_request_ip": "string", + "context_screen_density": "int", + "context_user_agent": "string", + "currency": "string", + "id": "string", + "original_timestamp": "datetime", + "received_at": "datetime", + "revenue": "int", + "sent_at": "datetime", + "test_map_nested_map_n_1": "string", + "timestamp": "datetime", + "user_id": "string", + "uuid_ts": "datetime" + }, + "receivedAt": "2020-01-24T11:59:02.403+05:30", + "table": "screens" + } + } + ], + rs: [ + { + "data": { + "anonymous_id": "e6ab2c5e-2cda-44a9-a962-e2f67df78bca", + "channel": "web", + "context_app_build": "1.0.0", + "context_app_name": "RudderLabs JavaScript SDK", + "context_app_namespace": "com.rudderlabs.javascript", + "context_app_version": "1.0.5", + "context_ctest_map_cnested_map": "{\"n1\":\"context nested prop 1\"}", + "context_ip": "0.0.0.0", + "context_library_name": "RudderLabs JavaScript SDK", + "context_library_version": "1.0.5", + "context_locale": "en-GB", + "context_passed_ip": "0.0.0.0", + "context_request_ip": "[::1]:53708", + "context_screen_density": 2, + "context_user_agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.117 Safari/537.36", + "currency": "USD", + "id": "a6a0ad5a-bd26-4f19-8f75-38484e580fc7", + "original_timestamp": "2020-01-24T06:29:02.364Z", + "received_at": "2020-01-24T06:29:02.403Z", + "revenue": 50, + "sent_at": "2020-01-24T06:29:02.364Z", + "test_map_nested_map": "{\"n1\":\"nested prop 1\"}", + "timestamp": "2020-01-24T06:29:02.403Z", + "user_id": "9bb5d4c2-a7aa-4a36-9efb-dd2b1aec5d33" + }, + "metadata": { + "columns": { + "anonymous_id": "string", + "channel": "string", + "context_app_build": "string", + "context_app_name": "string", + "context_app_namespace": "string", + "context_app_version": "string", + "context_ctest_map_cnested_map": "json", + "context_ip": "string", + "context_library_name": "string", + "context_library_version": "string", + "context_locale": "string", + "context_passed_ip": "string", + "context_request_ip": "string", + "context_screen_density": "int", + "context_user_agent": "string", + "currency": "string", + "id": "string", + "original_timestamp": "datetime", + "received_at": "datetime", + "revenue": "int", + "sent_at": "datetime", + "test_map_nested_map": "json", + "timestamp": "datetime", + "user_id": "string", + "uuid_ts": "datetime" + }, + "receivedAt": "2020-01-24T11:59:02.403+05:30", + "table": "screens" + } + } + ], + bq: [ + { + "data": { + "anonymous_id": "e6ab2c5e-2cda-44a9-a962-e2f67df78bca", + "channel": "web", + "context_app_build": "1.0.0", + "context_app_name": "RudderLabs JavaScript SDK", + "context_app_namespace": "com.rudderlabs.javascript", + "context_app_version": "1.0.5", + "context_ctest_map_cnested_map": "{\"n1\":\"context nested prop 1\"}", + "context_ip": "0.0.0.0", + "context_library_name": "RudderLabs JavaScript SDK", + "context_library_version": "1.0.5", + "context_locale": "en-GB", + "context_passed_ip": "0.0.0.0", + "context_request_ip": "[::1]:53708", + "context_screen_density": 2, + "context_user_agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.117 Safari/537.36", + "currency": "USD", + "id": "a6a0ad5a-bd26-4f19-8f75-38484e580fc7", + "original_timestamp": "2020-01-24T06:29:02.364Z", + "received_at": "2020-01-24T06:29:02.403Z", + "revenue": 50, + "sent_at": "2020-01-24T06:29:02.364Z", + "test_map_nested_map": "{\"n1\":\"nested prop 1\"}", + "timestamp": "2020-01-24T06:29:02.403Z", + "user_id": "9bb5d4c2-a7aa-4a36-9efb-dd2b1aec5d33" + }, + "metadata": { + "columns": { + "anonymous_id": "string", + "channel": "string", + "context_app_build": "string", + "context_app_name": "string", + "context_app_namespace": "string", + "context_app_version": "string", + "context_ctest_map_cnested_map": "string", + "context_ip": "string", + "context_library_name": "string", + "context_library_version": "string", + "context_locale": "string", + "context_passed_ip": "string", + "context_request_ip": "string", + "context_screen_density": "int", + "context_user_agent": "string", + "currency": "string", + "id": "string", + "loaded_at": "datetime", + "original_timestamp": "datetime", + "received_at": "datetime", + "revenue": "int", + "sent_at": "datetime", + "test_map_nested_map": "string", + "timestamp": "datetime", + "user_id": "string", + "uuid_ts": "datetime" + }, + "receivedAt": "2020-01-24T11:59:02.403+05:30", + "table": "screens" + } + } + ], + postgres: [ + { + "data": { + "anonymous_id": "e6ab2c5e-2cda-44a9-a962-e2f67df78bca", + "channel": "web", + "context_app_build": "1.0.0", + "context_app_name": "RudderLabs JavaScript SDK", + "context_app_namespace": "com.rudderlabs.javascript", + "context_app_version": "1.0.5", + "context_ctest_map_cnested_map": "{\"n1\":\"context nested prop 1\"}", + "context_ip": "0.0.0.0", + "context_library_name": "RudderLabs JavaScript SDK", + "context_library_version": "1.0.5", + "context_locale": "en-GB", + "context_passed_ip": "0.0.0.0", + "context_request_ip": "[::1]:53708", + "context_screen_density": 2, + "context_user_agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.117 Safari/537.36", + "currency": "USD", + "id": "a6a0ad5a-bd26-4f19-8f75-38484e580fc7", + "original_timestamp": "2020-01-24T06:29:02.364Z", + "received_at": "2020-01-24T06:29:02.403Z", + "revenue": 50, + "sent_at": "2020-01-24T06:29:02.364Z", + "test_map_nested_map": "{\"n1\":\"nested prop 1\"}", + "timestamp": "2020-01-24T06:29:02.403Z", + "user_id": "9bb5d4c2-a7aa-4a36-9efb-dd2b1aec5d33" + }, + "metadata": { + "columns": { + "anonymous_id": "string", + "channel": "string", + "context_app_build": "string", + "context_app_name": "string", + "context_app_namespace": "string", + "context_app_version": "string", + "context_ctest_map_cnested_map": "json", + "context_ip": "string", + "context_library_name": "string", + "context_library_version": "string", + "context_locale": "string", + "context_passed_ip": "string", + "context_request_ip": "string", + "context_screen_density": "int", + "context_user_agent": "string", + "currency": "string", + "id": "string", + "original_timestamp": "datetime", + "received_at": "datetime", + "revenue": "int", + "sent_at": "datetime", + "test_map_nested_map": "json", + "timestamp": "datetime", + "user_id": "string", + "uuid_ts": "datetime" + }, + "receivedAt": "2020-01-24T11:59:02.403+05:30", + "table": "screens" + } + } + ], + snowflake: [ + { + "data": { + "ANONYMOUS_ID": "e6ab2c5e-2cda-44a9-a962-e2f67df78bca", + "CHANNEL": "web", + "CONTEXT_APP_BUILD": "1.0.0", + "CONTEXT_APP_NAME": "RudderLabs JavaScript SDK", + "CONTEXT_APP_NAMESPACE": "com.rudderlabs.javascript", + "CONTEXT_APP_VERSION": "1.0.5", + "CONTEXT_CTEST_MAP_CNESTED_MAP": "{\"n1\":\"context nested prop 1\"}", + "CONTEXT_IP": "0.0.0.0", + "CONTEXT_LIBRARY_NAME": "RudderLabs JavaScript SDK", + "CONTEXT_LIBRARY_VERSION": "1.0.5", + "CONTEXT_LOCALE": "en-GB", + "CONTEXT_PASSED_IP": "0.0.0.0", + "CONTEXT_REQUEST_IP": "[::1]:53708", + "CONTEXT_SCREEN_DENSITY": 2, + "CONTEXT_USER_AGENT": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.117 Safari/537.36", + "CURRENCY": "USD", + "ID": "a6a0ad5a-bd26-4f19-8f75-38484e580fc7", + "ORIGINAL_TIMESTAMP": "2020-01-24T06:29:02.364Z", + "RECEIVED_AT": "2020-01-24T06:29:02.403Z", + "REVENUE": 50, + "SENT_AT": "2020-01-24T06:29:02.364Z", + "TEST_MAP_NESTED_MAP": "{\"n1\":\"nested prop 1\"}", + "TIMESTAMP": "2020-01-24T06:29:02.403Z", + "USER_ID": "9bb5d4c2-a7aa-4a36-9efb-dd2b1aec5d33" + }, + "metadata": { + "columns": { + "ANONYMOUS_ID": "string", + "CHANNEL": "string", + "CONTEXT_APP_BUILD": "string", + "CONTEXT_APP_NAME": "string", + "CONTEXT_APP_NAMESPACE": "string", + "CONTEXT_APP_VERSION": "string", + "CONTEXT_CTEST_MAP_CNESTED_MAP": "json", + "CONTEXT_IP": "string", + "CONTEXT_LIBRARY_NAME": "string", + "CONTEXT_LIBRARY_VERSION": "string", + "CONTEXT_LOCALE": "string", + "CONTEXT_PASSED_IP": "string", + "CONTEXT_REQUEST_IP": "string", + "CONTEXT_SCREEN_DENSITY": "int", + "CONTEXT_USER_AGENT": "string", + "CURRENCY": "string", + "ID": "string", + "ORIGINAL_TIMESTAMP": "datetime", + "RECEIVED_AT": "datetime", + "REVENUE": "int", + "SENT_AT": "datetime", + "TEST_MAP_NESTED_MAP": "json", + "TIMESTAMP": "datetime", + "USER_ID": "string", + "UUID_TS": "datetime" + }, + "receivedAt": "2020-01-24T11:59:02.403+05:30", + "table": "SCREENS" + } + } + ], + } +} diff --git a/test/__tests__/data/warehouse/integrations/jsonpaths/new/tracks.js b/test/__tests__/data/warehouse/integrations/jsonpaths/new/tracks.js new file mode 100644 index 0000000000..7ed95685ff --- /dev/null +++ b/test/__tests__/data/warehouse/integrations/jsonpaths/new/tracks.js @@ -0,0 +1,830 @@ +module.exports = { + input: { + destination: { + Config: {} + }, + message: { + anonymousId: "e6ab2c5e-2cda-44a9-a962-e2f67df78bca", + channel: "web", + context: { + app: { + build: "1.0.0", + name: "RudderLabs JavaScript SDK", + namespace: "com.rudderlabs.javascript", + version: "1.0.5" + }, + ip: "0.0.0.0", + library: { + name: "RudderLabs JavaScript SDK", + version: "1.0.5" + }, + locale: "en-GB", + screen: { + density: 2 + }, + traits: { + city: "Disney", + country: "USA", + email: "mickey@disney.com", + firstname: "Mickey" + }, + CMap: { + nestedMap: { + n1: "context nested prop 1" + } + }, + userAgent: + "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.117 Safari/537.36" + }, + event: "Product Added", + integrations: { + All: true, + RS: { + options: { + jsonPaths: [ + "track.userProperties.UPMap.nestedMap", + "track.properties.PMap.nestedMap", + "track.context.CMap.nestedMap", + ] + } + }, + BQ: { + options: { + jsonPaths: [ + "track.userProperties.UPMap.nestedMap", + "track.properties.PMap.nestedMap", + "track.context.CMap.nestedMap", + ] + } + }, + POSTGRES: { + options: { + jsonPaths: [ + "track.userProperties.UPMap.nestedMap", + "track.properties.PMap.nestedMap", + "track.context.CMap.nestedMap", + ] + } + }, + SNOWFLAKE: { + options: { + jsonPaths: [ + "track.userProperties.UPMap.nestedMap", + "track.properties.PMap.nestedMap", + "track.context.CMap.nestedMap", + ] + } + }, + S3_DATALAKE: { + options: { + skipReservedKeywordsEscaping: true + } + }, + }, + messageId: "a6a0ad5a-bd26-4f19-8f75-38484e580fc7", + originalTimestamp: "2020-01-24T06:29:02.364Z", + userProperties: { + email: "test@gmail.com", + UPMap: { + nestedMap: { + n1: "nested prop 1" + } + }, + }, + properties: { + currency: "USD", + revenue: 50, + PMap: { + nestedMap: { + n1: "nested prop 1" + } + }, + }, + receivedAt: "2020-01-24T11:59:02.403+05:30", + request_ip: "[::1]:53708", + sentAt: "2020-01-24T06:29:02.364Z", + timestamp: "2020-01-24T11:59:02.403+05:30", + type: "track", + userId: "9bb5d4c2-a7aa-4a36-9efb-dd2b1aec5d33" + }, + request: { + query: { + whSchemaVersion: "v1" + } + } + }, + output: { + default: [ + { + "data": { + "anonymous_id": "e6ab2c5e-2cda-44a9-a962-e2f67df78bca", + "channel": "web", + "context_app_build": "1.0.0", + "context_app_name": "RudderLabs JavaScript SDK", + "context_app_namespace": "com.rudderlabs.javascript", + "context_app_version": "1.0.5", + "context_c_map_nested_map_n_1": "context nested prop 1", + "context_ip": "0.0.0.0", + "context_library_name": "RudderLabs JavaScript SDK", + "context_library_version": "1.0.5", + "context_locale": "en-GB", + "context_passed_ip": "0.0.0.0", + "context_request_ip": "[::1]:53708", + "context_screen_density": 2, + "context_traits_city": "Disney", + "context_traits_country": "USA", + "context_traits_email": "mickey@disney.com", + "context_traits_firstname": "Mickey", + "context_user_agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.117 Safari/537.36", + "event": "product_added", + "event_text": "Product Added", + "id": "a6a0ad5a-bd26-4f19-8f75-38484e580fc7", + "original_timestamp": "2020-01-24T06:29:02.364Z", + "received_at": "2020-01-24T06:29:02.403Z", + "sent_at": "2020-01-24T06:29:02.364Z", + "timestamp": "2020-01-24T06:29:02.403Z", + "user_id": "9bb5d4c2-a7aa-4a36-9efb-dd2b1aec5d33" + }, + "metadata": { + "columns": { + "anonymous_id": "string", + "channel": "string", + "context_app_build": "string", + "context_app_name": "string", + "context_app_namespace": "string", + "context_app_version": "string", + "context_c_map_nested_map_n_1": "string", + "context_ip": "string", + "context_library_name": "string", + "context_library_version": "string", + "context_locale": "string", + "context_passed_ip": "string", + "context_request_ip": "string", + "context_screen_density": "int", + "context_traits_city": "string", + "context_traits_country": "string", + "context_traits_email": "string", + "context_traits_firstname": "string", + "context_user_agent": "string", + "event": "string", + "event_text": "string", + "id": "string", + "original_timestamp": "datetime", + "received_at": "datetime", + "sent_at": "datetime", + "timestamp": "datetime", + "user_id": "string", + "uuid_ts": "datetime" + }, + "receivedAt": "2020-01-24T11:59:02.403+05:30", + "table": "tracks" + } + }, + { + "data": { + "anonymous_id": "e6ab2c5e-2cda-44a9-a962-e2f67df78bca", + "channel": "web", + "context_app_build": "1.0.0", + "context_app_name": "RudderLabs JavaScript SDK", + "context_app_namespace": "com.rudderlabs.javascript", + "context_app_version": "1.0.5", + "context_c_map_nested_map_n_1": "context nested prop 1", + "context_ip": "0.0.0.0", + "context_library_name": "RudderLabs JavaScript SDK", + "context_library_version": "1.0.5", + "context_locale": "en-GB", + "context_passed_ip": "0.0.0.0", + "context_request_ip": "[::1]:53708", + "context_screen_density": 2, + "context_traits_city": "Disney", + "context_traits_country": "USA", + "context_traits_email": "mickey@disney.com", + "context_traits_firstname": "Mickey", + "context_user_agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.117 Safari/537.36", + "currency": "USD", + "email": "test@gmail.com", + "event": "product_added", + "event_text": "Product Added", + "id": "a6a0ad5a-bd26-4f19-8f75-38484e580fc7", + "original_timestamp": "2020-01-24T06:29:02.364Z", + "p_map_nested_map_n_1": "nested prop 1", + "received_at": "2020-01-24T06:29:02.403Z", + "revenue": 50, + "sent_at": "2020-01-24T06:29:02.364Z", + "timestamp": "2020-01-24T06:29:02.403Z", + "up_map_nested_map_n_1": "nested prop 1", + "user_id": "9bb5d4c2-a7aa-4a36-9efb-dd2b1aec5d33" + }, + "metadata": { + "columns": { + "anonymous_id": "string", + "channel": "string", + "context_app_build": "string", + "context_app_name": "string", + "context_app_namespace": "string", + "context_app_version": "string", + "context_c_map_nested_map_n_1": "string", + "context_ip": "string", + "context_library_name": "string", + "context_library_version": "string", + "context_locale": "string", + "context_passed_ip": "string", + "context_request_ip": "string", + "context_screen_density": "int", + "context_traits_city": "string", + "context_traits_country": "string", + "context_traits_email": "string", + "context_traits_firstname": "string", + "context_user_agent": "string", + "currency": "string", + "email": "string", + "event": "string", + "event_text": "string", + "id": "string", + "original_timestamp": "datetime", + "p_map_nested_map_n_1": "string", + "received_at": "datetime", + "revenue": "int", + "sent_at": "datetime", + "timestamp": "datetime", + "up_map_nested_map_n_1": "string", + "user_id": "string", + "uuid_ts": "datetime" + }, + "receivedAt": "2020-01-24T11:59:02.403+05:30", + "table": "product_added" + } + } + ], + rs: [ + { + "data": { + "anonymous_id": "e6ab2c5e-2cda-44a9-a962-e2f67df78bca", + "channel": "web", + "context_app_build": "1.0.0", + "context_app_name": "RudderLabs JavaScript SDK", + "context_app_namespace": "com.rudderlabs.javascript", + "context_app_version": "1.0.5", + "context_c_map_nested_map": "{\"n1\":\"context nested prop 1\"}", + "context_ip": "0.0.0.0", + "context_library_name": "RudderLabs JavaScript SDK", + "context_library_version": "1.0.5", + "context_locale": "en-GB", + "context_passed_ip": "0.0.0.0", + "context_request_ip": "[::1]:53708", + "context_screen_density": 2, + "context_traits_city": "Disney", + "context_traits_country": "USA", + "context_traits_email": "mickey@disney.com", + "context_traits_firstname": "Mickey", + "context_user_agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.117 Safari/537.36", + "event": "product_added", + "event_text": "Product Added", + "id": "a6a0ad5a-bd26-4f19-8f75-38484e580fc7", + "original_timestamp": "2020-01-24T06:29:02.364Z", + "received_at": "2020-01-24T06:29:02.403Z", + "sent_at": "2020-01-24T06:29:02.364Z", + "timestamp": "2020-01-24T06:29:02.403Z", + "user_id": "9bb5d4c2-a7aa-4a36-9efb-dd2b1aec5d33" + }, + "metadata": { + "columns": { + "anonymous_id": "string", + "channel": "string", + "context_app_build": "string", + "context_app_name": "string", + "context_app_namespace": "string", + "context_app_version": "string", + "context_c_map_nested_map": "json", + "context_ip": "string", + "context_library_name": "string", + "context_library_version": "string", + "context_locale": "string", + "context_passed_ip": "string", + "context_request_ip": "string", + "context_screen_density": "int", + "context_traits_city": "string", + "context_traits_country": "string", + "context_traits_email": "string", + "context_traits_firstname": "string", + "context_user_agent": "string", + "event": "string", + "event_text": "string", + "id": "string", + "original_timestamp": "datetime", + "received_at": "datetime", + "sent_at": "datetime", + "timestamp": "datetime", + "user_id": "string", + "uuid_ts": "datetime" + }, + "receivedAt": "2020-01-24T11:59:02.403+05:30", + "table": "tracks" + } + }, + { + "data": { + "anonymous_id": "e6ab2c5e-2cda-44a9-a962-e2f67df78bca", + "channel": "web", + "context_app_build": "1.0.0", + "context_app_name": "RudderLabs JavaScript SDK", + "context_app_namespace": "com.rudderlabs.javascript", + "context_app_version": "1.0.5", + "context_c_map_nested_map": "{\"n1\":\"context nested prop 1\"}", + "context_ip": "0.0.0.0", + "context_library_name": "RudderLabs JavaScript SDK", + "context_library_version": "1.0.5", + "context_locale": "en-GB", + "context_passed_ip": "0.0.0.0", + "context_request_ip": "[::1]:53708", + "context_screen_density": 2, + "context_traits_city": "Disney", + "context_traits_country": "USA", + "context_traits_email": "mickey@disney.com", + "context_traits_firstname": "Mickey", + "context_user_agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.117 Safari/537.36", + "currency": "USD", + "email": "test@gmail.com", + "event": "product_added", + "event_text": "Product Added", + "id": "a6a0ad5a-bd26-4f19-8f75-38484e580fc7", + "original_timestamp": "2020-01-24T06:29:02.364Z", + "p_map_nested_map": "{\"n1\":\"nested prop 1\"}", + "received_at": "2020-01-24T06:29:02.403Z", + "revenue": 50, + "sent_at": "2020-01-24T06:29:02.364Z", + "timestamp": "2020-01-24T06:29:02.403Z", + "up_map_nested_map": "{\"n1\":\"nested prop 1\"}", + "user_id": "9bb5d4c2-a7aa-4a36-9efb-dd2b1aec5d33" + }, + "metadata": { + "columns": { + "anonymous_id": "string", + "channel": "string", + "context_app_build": "string", + "context_app_name": "string", + "context_app_namespace": "string", + "context_app_version": "string", + "context_c_map_nested_map": "json", + "context_ip": "string", + "context_library_name": "string", + "context_library_version": "string", + "context_locale": "string", + "context_passed_ip": "string", + "context_request_ip": "string", + "context_screen_density": "int", + "context_traits_city": "string", + "context_traits_country": "string", + "context_traits_email": "string", + "context_traits_firstname": "string", + "context_user_agent": "string", + "currency": "string", + "email": "string", + "event": "string", + "event_text": "string", + "id": "string", + "original_timestamp": "datetime", + "p_map_nested_map": "json", + "received_at": "datetime", + "revenue": "int", + "sent_at": "datetime", + "timestamp": "datetime", + "up_map_nested_map": "json", + "user_id": "string", + "uuid_ts": "datetime" + }, + "receivedAt": "2020-01-24T11:59:02.403+05:30", + "table": "product_added" + } + } + ], + bq: [ + { + "data": { + "anonymous_id": "e6ab2c5e-2cda-44a9-a962-e2f67df78bca", + "channel": "web", + "context_app_build": "1.0.0", + "context_app_name": "RudderLabs JavaScript SDK", + "context_app_namespace": "com.rudderlabs.javascript", + "context_app_version": "1.0.5", + "context_c_map_nested_map": "{\"n1\":\"context nested prop 1\"}", + "context_ip": "0.0.0.0", + "context_library_name": "RudderLabs JavaScript SDK", + "context_library_version": "1.0.5", + "context_locale": "en-GB", + "context_passed_ip": "0.0.0.0", + "context_request_ip": "[::1]:53708", + "context_screen_density": 2, + "context_traits_city": "Disney", + "context_traits_country": "USA", + "context_traits_email": "mickey@disney.com", + "context_traits_firstname": "Mickey", + "context_user_agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.117 Safari/537.36", + "event": "product_added", + "event_text": "Product Added", + "id": "a6a0ad5a-bd26-4f19-8f75-38484e580fc7", + "original_timestamp": "2020-01-24T06:29:02.364Z", + "received_at": "2020-01-24T06:29:02.403Z", + "sent_at": "2020-01-24T06:29:02.364Z", + "timestamp": "2020-01-24T06:29:02.403Z", + "user_id": "9bb5d4c2-a7aa-4a36-9efb-dd2b1aec5d33" + }, + "metadata": { + "columns": { + "anonymous_id": "string", + "channel": "string", + "context_app_build": "string", + "context_app_name": "string", + "context_app_namespace": "string", + "context_app_version": "string", + "context_c_map_nested_map": "string", + "context_ip": "string", + "context_library_name": "string", + "context_library_version": "string", + "context_locale": "string", + "context_passed_ip": "string", + "context_request_ip": "string", + "context_screen_density": "int", + "context_traits_city": "string", + "context_traits_country": "string", + "context_traits_email": "string", + "context_traits_firstname": "string", + "context_user_agent": "string", + "event": "string", + "event_text": "string", + "id": "string", + "loaded_at": "datetime", + "original_timestamp": "datetime", + "received_at": "datetime", + "sent_at": "datetime", + "timestamp": "datetime", + "user_id": "string", + "uuid_ts": "datetime" + }, + "receivedAt": "2020-01-24T11:59:02.403+05:30", + "table": "tracks" + } + }, + { + "data": { + "anonymous_id": "e6ab2c5e-2cda-44a9-a962-e2f67df78bca", + "channel": "web", + "context_app_build": "1.0.0", + "context_app_name": "RudderLabs JavaScript SDK", + "context_app_namespace": "com.rudderlabs.javascript", + "context_app_version": "1.0.5", + "context_c_map_nested_map": "{\"n1\":\"context nested prop 1\"}", + "context_ip": "0.0.0.0", + "context_library_name": "RudderLabs JavaScript SDK", + "context_library_version": "1.0.5", + "context_locale": "en-GB", + "context_passed_ip": "0.0.0.0", + "context_request_ip": "[::1]:53708", + "context_screen_density": 2, + "context_traits_city": "Disney", + "context_traits_country": "USA", + "context_traits_email": "mickey@disney.com", + "context_traits_firstname": "Mickey", + "context_user_agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.117 Safari/537.36", + "currency": "USD", + "email": "test@gmail.com", + "event": "product_added", + "event_text": "Product Added", + "id": "a6a0ad5a-bd26-4f19-8f75-38484e580fc7", + "original_timestamp": "2020-01-24T06:29:02.364Z", + "p_map_nested_map": "{\"n1\":\"nested prop 1\"}", + "received_at": "2020-01-24T06:29:02.403Z", + "revenue": 50, + "sent_at": "2020-01-24T06:29:02.364Z", + "timestamp": "2020-01-24T06:29:02.403Z", + "up_map_nested_map": "{\"n1\":\"nested prop 1\"}", + "user_id": "9bb5d4c2-a7aa-4a36-9efb-dd2b1aec5d33" + }, + "metadata": { + "columns": { + "anonymous_id": "string", + "channel": "string", + "context_app_build": "string", + "context_app_name": "string", + "context_app_namespace": "string", + "context_app_version": "string", + "context_c_map_nested_map": "string", + "context_ip": "string", + "context_library_name": "string", + "context_library_version": "string", + "context_locale": "string", + "context_passed_ip": "string", + "context_request_ip": "string", + "context_screen_density": "int", + "context_traits_city": "string", + "context_traits_country": "string", + "context_traits_email": "string", + "context_traits_firstname": "string", + "context_user_agent": "string", + "currency": "string", + "email": "string", + "event": "string", + "event_text": "string", + "id": "string", + "loaded_at": "datetime", + "original_timestamp": "datetime", + "p_map_nested_map": "string", + "received_at": "datetime", + "revenue": "int", + "sent_at": "datetime", + "timestamp": "datetime", + "up_map_nested_map": "string", + "user_id": "string", + "uuid_ts": "datetime" + }, + "receivedAt": "2020-01-24T11:59:02.403+05:30", + "table": "product_added" + } + } + ], + postgres: [ + { + "data": { + "anonymous_id": "e6ab2c5e-2cda-44a9-a962-e2f67df78bca", + "channel": "web", + "context_app_build": "1.0.0", + "context_app_name": "RudderLabs JavaScript SDK", + "context_app_namespace": "com.rudderlabs.javascript", + "context_app_version": "1.0.5", + "context_c_map_nested_map": "{\"n1\":\"context nested prop 1\"}", + "context_ip": "0.0.0.0", + "context_library_name": "RudderLabs JavaScript SDK", + "context_library_version": "1.0.5", + "context_locale": "en-GB", + "context_passed_ip": "0.0.0.0", + "context_request_ip": "[::1]:53708", + "context_screen_density": 2, + "context_traits_city": "Disney", + "context_traits_country": "USA", + "context_traits_email": "mickey@disney.com", + "context_traits_firstname": "Mickey", + "context_user_agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.117 Safari/537.36", + "event": "product_added", + "event_text": "Product Added", + "id": "a6a0ad5a-bd26-4f19-8f75-38484e580fc7", + "original_timestamp": "2020-01-24T06:29:02.364Z", + "received_at": "2020-01-24T06:29:02.403Z", + "sent_at": "2020-01-24T06:29:02.364Z", + "timestamp": "2020-01-24T06:29:02.403Z", + "user_id": "9bb5d4c2-a7aa-4a36-9efb-dd2b1aec5d33" + }, + "metadata": { + "columns": { + "anonymous_id": "string", + "channel": "string", + "context_app_build": "string", + "context_app_name": "string", + "context_app_namespace": "string", + "context_app_version": "string", + "context_c_map_nested_map": "json", + "context_ip": "string", + "context_library_name": "string", + "context_library_version": "string", + "context_locale": "string", + "context_passed_ip": "string", + "context_request_ip": "string", + "context_screen_density": "int", + "context_traits_city": "string", + "context_traits_country": "string", + "context_traits_email": "string", + "context_traits_firstname": "string", + "context_user_agent": "string", + "event": "string", + "event_text": "string", + "id": "string", + "original_timestamp": "datetime", + "received_at": "datetime", + "sent_at": "datetime", + "timestamp": "datetime", + "user_id": "string", + "uuid_ts": "datetime" + }, + "receivedAt": "2020-01-24T11:59:02.403+05:30", + "table": "tracks" + } + }, + { + "data": { + "anonymous_id": "e6ab2c5e-2cda-44a9-a962-e2f67df78bca", + "channel": "web", + "context_app_build": "1.0.0", + "context_app_name": "RudderLabs JavaScript SDK", + "context_app_namespace": "com.rudderlabs.javascript", + "context_app_version": "1.0.5", + "context_c_map_nested_map": "{\"n1\":\"context nested prop 1\"}", + "context_ip": "0.0.0.0", + "context_library_name": "RudderLabs JavaScript SDK", + "context_library_version": "1.0.5", + "context_locale": "en-GB", + "context_passed_ip": "0.0.0.0", + "context_request_ip": "[::1]:53708", + "context_screen_density": 2, + "context_traits_city": "Disney", + "context_traits_country": "USA", + "context_traits_email": "mickey@disney.com", + "context_traits_firstname": "Mickey", + "context_user_agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.117 Safari/537.36", + "currency": "USD", + "email": "test@gmail.com", + "event": "product_added", + "event_text": "Product Added", + "id": "a6a0ad5a-bd26-4f19-8f75-38484e580fc7", + "original_timestamp": "2020-01-24T06:29:02.364Z", + "p_map_nested_map": "{\"n1\":\"nested prop 1\"}", + "received_at": "2020-01-24T06:29:02.403Z", + "revenue": 50, + "sent_at": "2020-01-24T06:29:02.364Z", + "timestamp": "2020-01-24T06:29:02.403Z", + "up_map_nested_map": "{\"n1\":\"nested prop 1\"}", + "user_id": "9bb5d4c2-a7aa-4a36-9efb-dd2b1aec5d33" + }, + "metadata": { + "columns": { + "anonymous_id": "string", + "channel": "string", + "context_app_build": "string", + "context_app_name": "string", + "context_app_namespace": "string", + "context_app_version": "string", + "context_c_map_nested_map": "json", + "context_ip": "string", + "context_library_name": "string", + "context_library_version": "string", + "context_locale": "string", + "context_passed_ip": "string", + "context_request_ip": "string", + "context_screen_density": "int", + "context_traits_city": "string", + "context_traits_country": "string", + "context_traits_email": "string", + "context_traits_firstname": "string", + "context_user_agent": "string", + "currency": "string", + "email": "string", + "event": "string", + "event_text": "string", + "id": "string", + "original_timestamp": "datetime", + "p_map_nested_map": "json", + "received_at": "datetime", + "revenue": "int", + "sent_at": "datetime", + "timestamp": "datetime", + "up_map_nested_map": "json", + "user_id": "string", + "uuid_ts": "datetime" + }, + "receivedAt": "2020-01-24T11:59:02.403+05:30", + "table": "product_added" + } + } + ], + snowflake: [ + { + "data": { + "ANONYMOUS_ID": "e6ab2c5e-2cda-44a9-a962-e2f67df78bca", + "CHANNEL": "web", + "CONTEXT_APP_BUILD": "1.0.0", + "CONTEXT_APP_NAME": "RudderLabs JavaScript SDK", + "CONTEXT_APP_NAMESPACE": "com.rudderlabs.javascript", + "CONTEXT_APP_VERSION": "1.0.5", + "CONTEXT_C_MAP_NESTED_MAP": "{\"n1\":\"context nested prop 1\"}", + "CONTEXT_IP": "0.0.0.0", + "CONTEXT_LIBRARY_NAME": "RudderLabs JavaScript SDK", + "CONTEXT_LIBRARY_VERSION": "1.0.5", + "CONTEXT_LOCALE": "en-GB", + "CONTEXT_PASSED_IP": "0.0.0.0", + "CONTEXT_REQUEST_IP": "[::1]:53708", + "CONTEXT_SCREEN_DENSITY": 2, + "CONTEXT_TRAITS_CITY": "Disney", + "CONTEXT_TRAITS_COUNTRY": "USA", + "CONTEXT_TRAITS_EMAIL": "mickey@disney.com", + "CONTEXT_TRAITS_FIRSTNAME": "Mickey", + "CONTEXT_USER_AGENT": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.117 Safari/537.36", + "EVENT": "product_added", + "EVENT_TEXT": "Product Added", + "ID": "a6a0ad5a-bd26-4f19-8f75-38484e580fc7", + "ORIGINAL_TIMESTAMP": "2020-01-24T06:29:02.364Z", + "RECEIVED_AT": "2020-01-24T06:29:02.403Z", + "SENT_AT": "2020-01-24T06:29:02.364Z", + "TIMESTAMP": "2020-01-24T06:29:02.403Z", + "USER_ID": "9bb5d4c2-a7aa-4a36-9efb-dd2b1aec5d33" + }, + "metadata": { + "columns": { + "ANONYMOUS_ID": "string", + "CHANNEL": "string", + "CONTEXT_APP_BUILD": "string", + "CONTEXT_APP_NAME": "string", + "CONTEXT_APP_NAMESPACE": "string", + "CONTEXT_APP_VERSION": "string", + "CONTEXT_C_MAP_NESTED_MAP": "json", + "CONTEXT_IP": "string", + "CONTEXT_LIBRARY_NAME": "string", + "CONTEXT_LIBRARY_VERSION": "string", + "CONTEXT_LOCALE": "string", + "CONTEXT_PASSED_IP": "string", + "CONTEXT_REQUEST_IP": "string", + "CONTEXT_SCREEN_DENSITY": "int", + "CONTEXT_TRAITS_CITY": "string", + "CONTEXT_TRAITS_COUNTRY": "string", + "CONTEXT_TRAITS_EMAIL": "string", + "CONTEXT_TRAITS_FIRSTNAME": "string", + "CONTEXT_USER_AGENT": "string", + "EVENT": "string", + "EVENT_TEXT": "string", + "ID": "string", + "ORIGINAL_TIMESTAMP": "datetime", + "RECEIVED_AT": "datetime", + "SENT_AT": "datetime", + "TIMESTAMP": "datetime", + "USER_ID": "string", + "UUID_TS": "datetime" + }, + "receivedAt": "2020-01-24T11:59:02.403+05:30", + "table": "TRACKS" + } + }, + { + "data": { + "ANONYMOUS_ID": "e6ab2c5e-2cda-44a9-a962-e2f67df78bca", + "CHANNEL": "web", + "CONTEXT_APP_BUILD": "1.0.0", + "CONTEXT_APP_NAME": "RudderLabs JavaScript SDK", + "CONTEXT_APP_NAMESPACE": "com.rudderlabs.javascript", + "CONTEXT_APP_VERSION": "1.0.5", + "CONTEXT_C_MAP_NESTED_MAP": "{\"n1\":\"context nested prop 1\"}", + "CONTEXT_IP": "0.0.0.0", + "CONTEXT_LIBRARY_NAME": "RudderLabs JavaScript SDK", + "CONTEXT_LIBRARY_VERSION": "1.0.5", + "CONTEXT_LOCALE": "en-GB", + "CONTEXT_PASSED_IP": "0.0.0.0", + "CONTEXT_REQUEST_IP": "[::1]:53708", + "CONTEXT_SCREEN_DENSITY": 2, + "CONTEXT_TRAITS_CITY": "Disney", + "CONTEXT_TRAITS_COUNTRY": "USA", + "CONTEXT_TRAITS_EMAIL": "mickey@disney.com", + "CONTEXT_TRAITS_FIRSTNAME": "Mickey", + "CONTEXT_USER_AGENT": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.117 Safari/537.36", + "CURRENCY": "USD", + "EMAIL": "test@gmail.com", + "EVENT": "product_added", + "EVENT_TEXT": "Product Added", + "ID": "a6a0ad5a-bd26-4f19-8f75-38484e580fc7", + "ORIGINAL_TIMESTAMP": "2020-01-24T06:29:02.364Z", + "P_MAP_NESTED_MAP": "{\"n1\":\"nested prop 1\"}", + "RECEIVED_AT": "2020-01-24T06:29:02.403Z", + "REVENUE": 50, + "SENT_AT": "2020-01-24T06:29:02.364Z", + "TIMESTAMP": "2020-01-24T06:29:02.403Z", + "UP_MAP_NESTED_MAP": "{\"n1\":\"nested prop 1\"}", + "USER_ID": "9bb5d4c2-a7aa-4a36-9efb-dd2b1aec5d33" + }, + "metadata": { + "columns": { + "ANONYMOUS_ID": "string", + "CHANNEL": "string", + "CONTEXT_APP_BUILD": "string", + "CONTEXT_APP_NAME": "string", + "CONTEXT_APP_NAMESPACE": "string", + "CONTEXT_APP_VERSION": "string", + "CONTEXT_C_MAP_NESTED_MAP": "json", + "CONTEXT_IP": "string", + "CONTEXT_LIBRARY_NAME": "string", + "CONTEXT_LIBRARY_VERSION": "string", + "CONTEXT_LOCALE": "string", + "CONTEXT_PASSED_IP": "string", + "CONTEXT_REQUEST_IP": "string", + "CONTEXT_SCREEN_DENSITY": "int", + "CONTEXT_TRAITS_CITY": "string", + "CONTEXT_TRAITS_COUNTRY": "string", + "CONTEXT_TRAITS_EMAIL": "string", + "CONTEXT_TRAITS_FIRSTNAME": "string", + "CONTEXT_USER_AGENT": "string", + "CURRENCY": "string", + "EMAIL": "string", + "EVENT": "string", + "EVENT_TEXT": "string", + "ID": "string", + "ORIGINAL_TIMESTAMP": "datetime", + "P_MAP_NESTED_MAP": "json", + "RECEIVED_AT": "datetime", + "REVENUE": "int", + "SENT_AT": "datetime", + "TIMESTAMP": "datetime", + "UP_MAP_NESTED_MAP": "json", + "USER_ID": "string", + "UUID_TS": "datetime" + }, + "receivedAt": "2020-01-24T11:59:02.403+05:30", + "table": "PRODUCT_ADDED" + } + } + ] + } +} diff --git a/test/__tests__/flatten_events.test.js b/test/__tests__/flatten_events.test.js index 2e3f142aca..502140bccd 100644 --- a/test/__tests__/flatten_events.test.js +++ b/test/__tests__/flatten_events.test.js @@ -9,7 +9,7 @@ Key aspects covered: 2. Coud source event - same as above for nested property under level 3 - Above level 3 are stringified and considered as string type - 3. Introducing jsonKeys for BQ, PG, RS, SF + 3. Introducing jsonLegacyPathKeys for BQ, PG, RS, SF - data types: int, float, string, json - number, string, array, objects fit under json data type, value is json stringified - in BQ, json type is just a string data type @@ -83,8 +83,8 @@ describe("Flatten event properties", () => { expect(columnTypes).toEqual(expected.columnTypes); }); - it("Should stringify properties of sample event if jsonKeys are present", () => { - options.jsonKeys = { + it("Should stringify properties of sample event if jsonLegacyPathKeys are present", () => { + options.jsonLegacyPathKeys = { arrayProp: 0, objectProp_firstLevelMap_secondLevelMap: 2 }; @@ -98,14 +98,14 @@ describe("Flatten event properties", () => { columnTypes, options ); - delete options.jsonKeys; + delete options.jsonLegacyPathKeys; const expected = fOutput("json_key_event", integrations[index]); expect(output).toEqual(expected.output); expect(columnTypes).toEqual(expected.columnTypes); }); - it("Should stringify properties of sample event and jsonKeys has more priority than cloud source at level 3", () => { - options.jsonKeys = { + it("Should stringify properties of sample event and jsonLegacyPathKeys has more priority than cloud source at level 3", () => { + options.jsonLegacyPathKeys = { objectProp_firstLevelMap_secondLevelMap_thirdLevelMap: 3 }; options.sourceCategory = "cloud"; @@ -119,15 +119,15 @@ describe("Flatten event properties", () => { columnTypes, options ); - delete options.jsonKeys; + delete options.jsonLegacyPathKeys; delete options.sourceCategory; const expected = fOutput("json_key_cloud_event", integrations[index]); expect(output).toEqual(expected.output); expect(columnTypes).toEqual(expected.columnTypes); }); - it("Should stringify properties of nested event and jsonKeys is not applied for cloud source at level > 3", () => { - options.jsonKeys = { + it("Should stringify properties of nested event and jsonLegacyPathKeys is not applied for cloud source at level > 3", () => { + options.jsonLegacyPathKeys = { objectProp_firstLevelMap_secondLevelMap_thirdLevelMap_fourthLevelMap: 4, arrayProp: 0 }; @@ -142,15 +142,15 @@ describe("Flatten event properties", () => { columnTypes, options ); - delete options.jsonKeys; + delete options.jsonLegacyPathKeys; delete options.sourceCategory; const expected = fOutput("cloud_json_key_event", integrations[index]); expect(output).toEqual(expected.output); expect(columnTypes).toEqual(expected.columnTypes); }); - it("Should flatten all properties of sample event and jsonkeys is not applicable other than track events", () => { - options.jsonKeys = { arrayProp: 0 }; + it("Should flatten all properties of sample event and jsonLegacyPathKeys is not applicable other than track events", () => { + options.jsonLegacyPathKeys = { arrayProp: 0 }; const output = {}; const columnTypes = {}; setDataFromInputAndComputeColumnTypes( @@ -161,19 +161,19 @@ describe("Flatten event properties", () => { columnTypes, options ); - delete options.jsonKeys; + delete options.jsonLegacyPathKeys; // Will be same as flattening all properties const expected = fOutput("sample_event", integrations[index]); expect(output).toEqual(expected.output); expect(columnTypes).toEqual(expected.columnTypes); }); - it("Should flatten all properties of sample event and declared jsonKeys get stringified primitive values", () => { + it("Should flatten all properties of sample event and declared jsonLegacyPathKeys get stringified primitive values", () => { i.dateProp = "2022-01-01T00:00:00.000Z"; i.objectProp.firstLevelDateProp = "2022-01-01T01:01:01.111Z"; i.objectProp.firstLevelMap.secondLevelDateProp = "2022-01-01T02:02:02.222Z"; - options.jsonKeys = { + options.jsonLegacyPathKeys = { nullProp: 0, blankProp: 0, floatProp: 0, @@ -195,7 +195,7 @@ describe("Flatten event properties", () => { columnTypes, options ); - delete options.jsonKeys; + delete options.jsonLegacyPathKeys; delete i.dateProp; delete i.objectProp.firstLevelDateProp; delete i.objectProp.firstLevelMap.secondLevelDateProp; @@ -204,12 +204,12 @@ describe("Flatten event properties", () => { expect(columnTypes).toEqual(expected.columnTypes); }); - it("Should ignore rudder reserved columns even though they are set as jsonKeys", () => { + it("Should ignore rudder reserved columns even though they are set as jsonLegacyPathKeys", () => { // setting two reserved columns as map i.anonymous_id = "ignored column"; i.timestamp = "ignored column"; // setting reserved colum paths as json keys - options.jsonKeys = { anonymous_id: 0, timestamp: 0 }; + options.jsonLegacyPathKeys = { anonymous_id: 0, timestamp: 0 }; const output = {}; const columnTypes = {}; setDataFromInputAndComputeColumnTypes( @@ -220,19 +220,19 @@ describe("Flatten event properties", () => { columnTypes, options ); - delete options.jsonKeys; + delete options.jsonLegacyPathKeys; // Will be same as flattening all properties with reserved columns being ignored const expected = fOutput("sample_event", integrations[index]); expect(output).toEqual(expected.output); expect(columnTypes).toEqual(expected.columnTypes); }); - it("Should apply escaping on WH reserved columns even though they are set as jsonKeys", () => { + it("Should apply escaping on WH reserved columns even though they are set as jsonLegacyPathKeys", () => { // setting two reserved columns as map i.between = "escaped column"; i.as = "escaped column"; // setting reserved colum paths as json keys - options.jsonKeys = { between: 0, as: 0 }; + options.jsonLegacyPathKeys = { between: 0, as: 0 }; const output = {}; const columnTypes = {}; setDataFromInputAndComputeColumnTypes( @@ -243,7 +243,7 @@ describe("Flatten event properties", () => { columnTypes, options ); - delete options.jsonKeys; + delete options.jsonLegacyPathKeys; // Escaping is applied as usual for json keys too const expected = fOutput("escape_event", integrations[index]); expect(output).toEqual(expected.output); diff --git a/test/__tests__/warehouse.test.js b/test/__tests__/warehouse.test.js index 6d8b490208..045bab35a6 100644 --- a/test/__tests__/warehouse.test.js +++ b/test/__tests__/warehouse.test.js @@ -30,7 +30,10 @@ const integrations = [ "snowflake", "mssql", "azure_synapse", - "s3_datalake" + "deltalake", + "azure_datalake", + "s3_datalake", + "gcs_datalake", ]; const transformers = integrations.map(integration => require(`../../src/${version}/destinations/${integration}/transform`) @@ -229,7 +232,7 @@ describe("column & table names", () => { ); return; } - if (integrations[index] === "s3_datalake") { + if (integrations[index] === "s3_datalake" || integrations[index] === "gcs_datalake" || integrations[index] === "azure_datalake") { expect(received[1].metadata).toHaveProperty( "table", "a_1_a_2_a_3_a_4_a_5_b_1_b_2_b_3_b_4_b_5_c_1_c_2_c_3_c_4_c_5_d_1_d_2_d_3_d_4_d_5_e_1_e_2_e_3_e_4_e_5_f_1_f_2_f_3_f_4_f_5_g_1_g_2_g_3_g_4_g_5" @@ -943,7 +946,7 @@ describe("Handle no of columns in an event", () => { it("should throw an error if no of columns are more than 200", () => { const i = input("track"); transformers - .filter((transformer, index) => integrations[index] !== "s3_datalake") + .filter((transformer, index) => integrations[index] !== "s3_datalake" && integrations[index] !== "gcs_datalake" && integrations[index] !== "azure_datalake") .forEach((transformer, index) => { i.message.properties = largeNoOfColumnsevent; expect(() => transformer.process(i)).toThrow( @@ -1009,7 +1012,7 @@ describe("Integration options", () => { it("should generate two events for every track call", () => { const i = opInput("track"); transformers.forEach((transformer, index) => { - const { jsonPaths } = i.destination.Config; + const {jsonPaths} = i.destination.Config; if (integrations[index] === "postgres") { delete i.destination.Config.jsonPaths; } @@ -1019,6 +1022,7 @@ describe("Integration options", () => { }); }); }); + describe("users", () => { it("should skip users when skipUsersTable is set", () => { const i = opInput("users"); @@ -1028,6 +1032,65 @@ describe("Integration options", () => { }); }); }); + + describe("json paths", () => { + const output = (config, provider) => { + switch (provider) { + case "rs": + return _.cloneDeep(config.output.rs); + case "bq": + return _.cloneDeep(config.output.bq); + case "postgres": + return _.cloneDeep(config.output.postgres); + case "snowflake": + return _.cloneDeep(config.output.snowflake); + default: + return _.cloneDeep(config.output.default); + } + } + + const testCases = [ + { + eventType: "aliases", + }, + { + eventType: "groups", + }, + { + eventType: "identifies", + }, + { + eventType: "pages", + }, + { + eventType: "screens", + }, + { + eventType: "tracks", + }, + { + eventType: "extract", + }, + ]; + + for (const testCase of testCases) { + transformers.forEach((transformer, index) => { + it(`new ${testCase.eventType} for ${integrations[index]}`, () => { + const config = require("./data/warehouse/integrations/jsonpaths/new/" + testCase.eventType); + const input = _.cloneDeep(config.input); + const received = transformer.process(input); + expect(received).toEqual(output(config, integrations[index])); + }) + + it(`legacy ${testCase.eventType} for ${integrations[index]}`, () => { + const config = require("./data/warehouse/integrations/jsonpaths/legacy/" + testCase.eventType); + const input = _.cloneDeep(config.input); + const received = transformer.process(input); + expect(received).toEqual(output(config, integrations[index])); + }) + }); + } + }); }); describe("validTimestamp", () => { From 3dce2438f03af572d12fedd297d6a26d93276865 Mon Sep 17 00:00:00 2001 From: mihir-4116 Date: Mon, 11 Sep 2023 10:52:16 +0530 Subject: [PATCH 09/37] fix(bugsnag): alerts --- src/v0/destinations/adobe_analytics/transform.js | 6 +++--- src/v0/destinations/branch/transform.js | 6 +++++- src/v0/destinations/fb/transform.js | 12 ++++++++---- 3 files changed, 16 insertions(+), 8 deletions(-) diff --git a/src/v0/destinations/adobe_analytics/transform.js b/src/v0/destinations/adobe_analytics/transform.js index 5daf11e62e..c477b4c93c 100644 --- a/src/v0/destinations/adobe_analytics/transform.js +++ b/src/v0/destinations/adobe_analytics/transform.js @@ -341,7 +341,7 @@ const handleTrack = (message, destinationConfig) => { let payload = null; // handle ecommerce events separately // generic events should go to the default - const event = rawEvent?.toLowerCase(); + const event = typeof rawEvent === 'string' ? rawEvent.toLowerCase() : rawEvent; switch (event) { case 'product viewed': case 'product list viewed': @@ -372,10 +372,10 @@ const handleTrack = (message, destinationConfig) => { payload = processTrackEvent(message, 'scOpen', destinationConfig); break; default: - if (destinationConfig.rudderEventsToAdobeEvents[event.toLowerCase()]) { + if (destinationConfig.rudderEventsToAdobeEvents[event]) { payload = processTrackEvent( message, - destinationConfig.rudderEventsToAdobeEvents[event.toLowerCase()].trim(), + destinationConfig.rudderEventsToAdobeEvents[event]?.trim(), destinationConfig, ); } else if (message?.properties?.overrideEventName) { diff --git a/src/v0/destinations/branch/transform.js b/src/v0/destinations/branch/transform.js index ae214819b2..362f6cc840 100644 --- a/src/v0/destinations/branch/transform.js +++ b/src/v0/destinations/branch/transform.js @@ -46,7 +46,11 @@ function getCategoryAndName(rudderEventName) { let requiredCategory = null; // eslint-disable-next-line array-callback-return Object.keys(category.name).find((branchKey) => { - if (branchKey.toLowerCase() === rudderEventName.toLowerCase()) { + if ( + typeof branchKey === 'string' && + typeof rudderEventName === 'string' && + branchKey.toLowerCase() === rudderEventName.toLowerCase() + ) { requiredName = category.name[branchKey]; requiredCategory = category; } diff --git a/src/v0/destinations/fb/transform.js b/src/v0/destinations/fb/transform.js index a73bbdca8b..a6a8b71e8d 100644 --- a/src/v0/destinations/fb/transform.js +++ b/src/v0/destinations/fb/transform.js @@ -83,7 +83,11 @@ function sanityCheckPayloadForTypesAndModifications(updatedEvent) { case 'ud[ln]': case 'ud[st]': case 'ud[cn]': - if (clonedUpdatedEvent[prop] && clonedUpdatedEvent[prop] !== '') { + if ( + clonedUpdatedEvent[prop] && + typeof clonedUpdatedEvent[prop] === 'string' && + clonedUpdatedEvent[prop] !== '' + ) { isUDSet = true; clonedUpdatedEvent[prop] = sha256(clonedUpdatedEvent[prop].toLowerCase()); } @@ -105,8 +109,7 @@ function sanityCheckPayloadForTypesAndModifications(updatedEvent) { if (clonedUpdatedEvent[prop] && clonedUpdatedEvent[prop] !== '') { if (typeof clonedUpdatedEvent[prop] !== 'string') { delete clonedUpdatedEvent[prop]; - } - else { + } else { isUDSet = true; clonedUpdatedEvent[prop] = sha256( clonedUpdatedEvent[prop].toLowerCase() === 'female' ? 'f' : 'm', @@ -167,7 +170,8 @@ function getCorrectedTypedValue(pathToKey, value, originalPath) { } throw new InstrumentationError( - `${typeof originalPath === 'object' ? JSON.stringify(originalPath) : originalPath + `${ + typeof originalPath === 'object' ? JSON.stringify(originalPath) : originalPath } is not of valid type`, ); } From 21852d972567b905976e0892ddbbcfc4b6b97e2a Mon Sep 17 00:00:00 2001 From: Ujjwal Abhishek <63387036+ujjwal-ab@users.noreply.github.com> Date: Mon, 11 Sep 2023 11:59:16 +0530 Subject: [PATCH 10/37] feat: add support for updating profile properties through track call (#2581) add all traits to profile properties in track call --- src/v0/destinations/klaviyo/transform.js | 31 ++++++------ src/v0/destinations/klaviyo/util.js | 2 +- test/__tests__/data/klaviyo.json | 62 +++++++++++++----------- 3 files changed, 51 insertions(+), 44 deletions(-) diff --git a/src/v0/destinations/klaviyo/transform.js b/src/v0/destinations/klaviyo/transform.js index d7170ce789..bb19c5f8fd 100644 --- a/src/v0/destinations/klaviyo/transform.js +++ b/src/v0/destinations/klaviyo/transform.js @@ -42,9 +42,10 @@ const { JSON_MIME_TYPE } = require('../../util/constant'); /** * Main Identify request handler func * The function is used to create/update new users and also for adding/subscribing - * members to the list depending on conditons.If listId is there member is added to that list & - * if subscribe is true member is subscribed to that list else not. - * DOCS: https://www.klaviyo.com/docs/http-api + * users to the list. + * DOCS: 1. https://developers.klaviyo.com/en/v2023-02-22/reference/create_profile + * 2. https://developers.klaviyo.com/en/v2023-02-22/reference/update_profile + * 3. https://developers.klaviyo.com/en/v2023-02-22/reference/subscribe_profiles * @param {*} message * @param {*} category * @param {*} destination @@ -123,7 +124,7 @@ const identifyRequestHandler = async (message, category, destination) => { // ---------------------- // Main handler func for track request/screen request // User info needs to be mapped to a track event (mandatory) -// DOCS: https://www.klaviyo.com/docs/http-api +// DOCS: https://developers.klaviyo.com/en/v2023-02-22/reference/create_event // ---------------------- const trackRequestHandler = (message, category, destination) => { @@ -138,10 +139,6 @@ const trackRequestHandler = (message, category, destination) => { attributes.metric = { name: eventName }; const categ = CONFIG_CATEGORIES[eventMap]; attributes.properties = constructPayload(message.properties, MAPPING_CONFIG[categ.name]); - attributes.properties = { - ...attributes.properties, - ...populateCustomFieldsFromTraits(message), - }; // products mapping using Items.json // mapping properties.items to payload.properties.items and using properties.products as a fallback to properties.items @@ -191,17 +188,21 @@ const trackRequestHandler = (message, category, destination) => { if (value) { attributes.value = value; } - attributes.properties = { - ...attributes.properties, - ...populateCustomFieldsFromTraits(message), - }; } // if flattenProperties is enabled from UI, flatten the event properties attributes.properties = flattenProperties ? flattenJson(attributes.properties, '.', 'normal', false) : attributes.properties; // Map user properties to profile object - attributes.profile = createCustomerProperties(message, destination.Config); + attributes.profile = { + ...createCustomerProperties(message, destination.Config), + ...populateCustomFieldsFromTraits(message), + }; + + attributes.profile = flattenProperties + ? flattenJson(attributes.profile, '.', 'normal', false) + : attributes.profile; + if (message.timestamp) { attributes.time = message.timestamp; } @@ -222,9 +223,9 @@ const trackRequestHandler = (message, category, destination) => { // ---------------------- // Main handlerfunc for group request -// we will map user to list (subscribe and/or member) +// we will add/subscribe users to the list // based on property sent -// DOCS: https://www.klaviyo.com/docs/api/v2/lists +// DOCS: https://developers.klaviyo.com/en/v2023-02-22/reference/subscribe_profiles // ---------------------- const groupRequestHandler = (message, category, destination) => { if (!message.groupId) { diff --git a/src/v0/destinations/klaviyo/util.js b/src/v0/destinations/klaviyo/util.js index 8fb9f0e875..3c4882b834 100644 --- a/src/v0/destinations/klaviyo/util.js +++ b/src/v0/destinations/klaviyo/util.js @@ -96,7 +96,7 @@ const profileUpdateResponseBuilder = (payload, profileId, category, privateApiKe /** * This function is used for creating response for subscribing users to a particular list. - * DOCS: https://www.klaviyo.com/docs/api/v2/lists + * DOCS: https://developers.klaviyo.com/en/v2023-02-22/reference/subscribe_profiles */ const subscribeUserToList = (message, traitsInfo, destination) => { // listId from message properties are preferred over Config listId diff --git a/test/__tests__/data/klaviyo.json b/test/__tests__/data/klaviyo.json index e3ce30c792..1fc46a6e4c 100644 --- a/test/__tests__/data/klaviyo.json +++ b/test/__tests__/data/klaviyo.json @@ -705,7 +705,7 @@ } }, { - "description": "Track event call", + "description": "Screen event call", "input": { "destination": { "Config": { @@ -800,13 +800,13 @@ "properties": { "PreviouslyVicePresident": true, "YearElected": 1801, - "VicePresidents": ["Aaron Burr", "George Clinton"], - "age": "22" + "VicePresidents": ["Aaron Burr", "George Clinton"] }, "profile": { "$email": "test@rudderstack.com", "$phone_number": "9112340375", - "$id": "sajal12" + "$id": "sajal12", + "age": "22" } } } @@ -863,7 +863,11 @@ "age": "22", "email": "test@rudderstack.com", "phone": "9112340375", - "anonymousId": "9c6bd77ea9da3e68" + "anonymousId": "9c6bd77ea9da3e68", + "plan_details": { + "plan_type": "gold", + "duration": "3 months" + } }, "library": { "name": "com.rudderstack.android.sdk.core", @@ -917,13 +921,15 @@ "properties": { "vicePresdentInfo.PreviouslVicePresident": true, "vicePresdentInfo.VicePresidents": ["AaronBurr", "GeorgeClinton"], - "vicePresdentInfo.YearElected": 1801, - "age": "22" + "vicePresdentInfo.YearElected": 1801 }, "profile": { "$email": "test@rudderstack.com", "$phone_number": "9112340375", - "$id": "sajal12" + "$id": "sajal12", + "age": "22", + "plan_details.plan_type": "gold", + "plan_details.duration": "3 months" } } } @@ -1034,15 +1040,15 @@ "properties": { "PreviouslyVicePresident": true, "YearElected": 1801, - "age": "22", - "VicePresidents": ["Aaron Burr", "George Clinton"], - "description": "Sample description", - "name": "Test" + "VicePresidents": ["Aaron Burr", "George Clinton"] }, "profile": { "$email": "test@rudderstack.com", "$phone_number": "9112340375", - "$id": "sajal12" + "$id": "sajal12", + "age": "22", + "name": "Test", + "description": "Sample description" }, "value": 3000 } @@ -1152,12 +1158,12 @@ "properties": { "PreviouslyVicePresident": true, "YearElected": 1801, - "VicePresidents": ["Aaron Burr", "George Clinton"], - "age": "22" + "VicePresidents": ["Aaron Burr", "George Clinton"] }, "profile": { "$email": "test@rudderstack.com", "$phone_number": "9112340375", + "age": "22", "_id": "sajal12" } } @@ -1483,7 +1489,10 @@ "profile": { "$email": "test@rudderstack.com", "$phone_number": "9112340375", - "$id": "sajal12" + "$id": "sajal12", + "age": "22", + "name": "Test", + "description": "Sample description" }, "properties": { "ProductName": "test product", @@ -1493,10 +1502,7 @@ "URL": "http://www.example.com/path/to/product", "Brand": "Not for Kids", "Price": 9.9, - "Categories": ["Fiction", "Children"], - "age": "22", - "name": "Test", - "description": "Sample description" + "Categories": ["Fiction", "Children"] } } } @@ -1633,9 +1639,6 @@ "properties": { "$event_id": "1234", "$value": 20, - "age": "22", - "name": "Test", - "description": "Sample description", "items[0].ProductID": "123", "items[0].SKU": "G-32", "items[0].ProductName": "Monopoly", @@ -1652,7 +1655,10 @@ "profile": { "$email": "test@rudderstack.com", "$phone_number": "9112340375", - "$id": "sajal12" + "$id": "sajal12", + "age": "22", + "name": "Test", + "description": "Sample description" } } } @@ -1780,16 +1786,16 @@ "profile": { "$email": "test@rudderstack.com", "$phone_number": "9112340375", - "$id": "sajal12" + "$id": "sajal12", + "age": "22", + "name": "Test", + "description": "Sample description" }, "properties": { "$value": 12.12, "AddedItemCategories": ["Fiction3", "Children3"], "ItemNames": ["book1", "book2"], "CheckoutURL": "http://www.heythere.com", - "age": "22", - "name": "Test", - "description": "Sample description", "items": [ { "ProductID": "b1pid", From 32856eaf7c8d9b1d7b3fb789459633fd830cadcb Mon Sep 17 00:00:00 2001 From: GitHub Actions Date: Mon, 11 Sep 2023 07:10:42 +0000 Subject: [PATCH 11/37] chore(release): 1.41.0 --- CHANGELOG.md | 16 ++++++++++++++++ package-lock.json | 4 ++-- package.json | 2 +- 3 files changed, 19 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 552026d41b..fdb53f4527 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,22 @@ All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines. +## [1.41.0](https://github.com/rudderlabs/rudder-transformer/compare/v1.40.2...v1.41.0) (2023-09-11) + + +### Features + +* add support for updating profile properties through track call ([#2581](https://github.com/rudderlabs/rudder-transformer/issues/2581)) ([f0f20d6](https://github.com/rudderlabs/rudder-transformer/commit/f0f20d654ec5ee8eb078ce7f5610a4666d73fd8c)) +* **INT-580:** messageId to event_id mapping support ([#2570](https://github.com/rudderlabs/rudder-transformer/issues/2570)) ([b38843b](https://github.com/rudderlabs/rudder-transformer/commit/b38843bce9bc02d73dceedc6f751f402251fd23a)) +* **tiktok_ads:** messageId to event_id mapping support ([72f87bf](https://github.com/rudderlabs/rudder-transformer/commit/72f87bfa381ed7a5b74fb5907f932b78d0257ab9)) + + +### Bug Fixes + +* **bugsnag:** alerts ([266514b](https://github.com/rudderlabs/rudder-transformer/commit/266514bd56c150d6c88c1db0733a1da0a4367c02)) +* **bugsnag:** alerts ([#2580](https://github.com/rudderlabs/rudder-transformer/issues/2580)) ([9e9eeac](https://github.com/rudderlabs/rudder-transformer/commit/9e9eeacdf79cf8175f87f302242542060f668db8)) +* json paths for non tracks events for warehouse ([#2571](https://github.com/rudderlabs/rudder-transformer/issues/2571)) ([e455368](https://github.com/rudderlabs/rudder-transformer/commit/e45536805cf9545b73f4d5bf1be5fad1565ab075)) + ### [1.40.2](https://github.com/rudderlabs/rudder-transformer/compare/v1.40.1...v1.40.2) (2023-09-06) diff --git a/package-lock.json b/package-lock.json index c3035fff22..eafd11fbdd 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "rudder-transformer", - "version": "1.40.2", + "version": "1.41.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "rudder-transformer", - "version": "1.40.2", + "version": "1.41.0", "license": "ISC", "dependencies": { "@amplitude/ua-parser-js": "^0.7.24", diff --git a/package.json b/package.json index 1e8442e12a..4540f6b3b3 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "rudder-transformer", - "version": "1.40.2", + "version": "1.41.0", "description": "", "homepage": "https://github.com/rudderlabs/rudder-transformer#readme", "bugs": { From 47ab4ba1956b51a722d5286fbe6ff5e63db4b51c Mon Sep 17 00:00:00 2001 From: Mihir Bhalala <77438541+mihir-4116@users.noreply.github.com> Date: Tue, 12 Sep 2023 11:30:00 +0530 Subject: [PATCH 12/37] fix(INT-591): added support of id parameter for update events (#2595) fix(iterable): added support of id parameter for update events --- src/v0/destinations/iterable/data/IterableTrackConfig.json | 5 +++++ .../iterable/data/IterableTrackPurchaseConfig.json | 2 +- test/__tests__/data/iterable.json | 3 +++ 3 files changed, 9 insertions(+), 1 deletion(-) diff --git a/src/v0/destinations/iterable/data/IterableTrackConfig.json b/src/v0/destinations/iterable/data/IterableTrackConfig.json index 1a751e2fe4..28fdcaecc7 100644 --- a/src/v0/destinations/iterable/data/IterableTrackConfig.json +++ b/src/v0/destinations/iterable/data/IterableTrackConfig.json @@ -21,6 +21,11 @@ ], "required": false }, + { + "destKey": "id", + "sourceKeys": ["properties.id", "properties.event_id"], + "required": false + }, { "destKey": "eventName", "sourceKeys": "event", diff --git a/src/v0/destinations/iterable/data/IterableTrackPurchaseConfig.json b/src/v0/destinations/iterable/data/IterableTrackPurchaseConfig.json index 08014dec3f..892ae67cd4 100644 --- a/src/v0/destinations/iterable/data/IterableTrackPurchaseConfig.json +++ b/src/v0/destinations/iterable/data/IterableTrackPurchaseConfig.json @@ -6,7 +6,7 @@ }, { "destKey": "id", - "sourceKeys": "properties.orderId", + "sourceKeys": ["properties.orderId", "properties.id", "properties.event_id"], "required": false }, { diff --git a/test/__tests__/data/iterable.json b/test/__tests__/data/iterable.json index 2612978f88..08e83a47a5 100644 --- a/test/__tests__/data/iterable.json +++ b/test/__tests__/data/iterable.json @@ -3078,6 +3078,7 @@ }, "messageId": "node-570110489d3e99b234b18af9a9eca9d4-6009779e-82d7-469d-aaeb-5ccf162b0453", "properties": { + "id": "event1234", "subject": "resume validate", "sendtime": "2020-01-01", "sendlocation": "akashdeep@gmail.com" @@ -3102,9 +3103,11 @@ "JSON_ARRAY": {}, "FORM": {}, "JSON": { + "id": "event1234", "userId": "abcdeeeeeeeexxxx102", "createdAt": 1598631966468, "dataFields": { + "id": "event1234", "subject": "resume validate", "sendtime": "2020-01-01", "sendlocation": "akashdeep@gmail.com" From 86d08be19cc17e1d48c7b1809bc7d86088111996 Mon Sep 17 00:00:00 2001 From: Ujjwal Abhishek <63387036+ujjwal-ab@users.noreply.github.com> Date: Tue, 12 Sep 2023 17:04:34 +0530 Subject: [PATCH 13/37] chore: migrate test cases to new component test suit (#2579) * migrate test cases to new component test suit * chore: migrate lambda tests * chore: migrate kochava tests * chore: migrate lambda tests * chore: migrate leanplum router tests * chore: migrate lemnisk tests * chore: migrate lytics tests * chore: migrate mailjet tests * chore: migrate mailmodo tests * chore: migrate marketo_static_list tests * chore: migrate moengage tests * chore: migrate moetate tests * chore: migrate ometria tests * chore: migrate one_signal tests * chore: migrate pagerduty tests * chore: migrate pinterest_tag tests * chore: migrate pardot tests --- .../destinations/kochava/processor/data.ts | 1404 + .../destinations/lambda/processor/data.ts | 498 + .../destinations/lambda/router/data.ts | 38788 ++++++++++++++++ .../destinations/leanplum/processor/data.ts | 1708 + .../destinations/leanplum/router/data.ts | 370 + .../destinations/lemnisk/processor/data.ts | 1088 + .../destinations/lemnisk/router/data.ts | 664 + .../destinations/lytics/processor/data.ts | 1360 + .../destinations/lytics/router/data.ts | 351 + .../destinations/mailjet/processor/data.ts | 229 + .../destinations/mailjet/router/data.ts | 106 + .../destinations/mailmodo/processor/data.ts | 648 + .../destinations/mailmodo/router/data.ts | 294 + .../marketo_static_list/processor/data.ts | 1194 + .../marketo_static_list/router/data.ts | 1416 + .../destinations/moengage/processor/data.ts | 2780 ++ .../destinations/moengage/router/data.ts | 480 + .../destinations/monetate/processor/data.ts | 2796 ++ .../destinations/monetate/router/data.ts | 264 + .../destinations/ometria/processor/data.ts | 1078 + .../destinations/ometria/router/data.ts | 336 + .../destinations/one_signal/processor/data.ts | 1545 + .../destinations/one_signal/router/data.ts | 286 + .../destinations/pagerduty/processor/data.ts | 782 + .../destinations/pagerduty/router/data.ts | 309 + .../destinations/pardot/router/data.ts | 1017 + .../personalize/processor/data.ts | 4188 ++ .../pinterest_tag/processor/data.ts | 3435 ++ .../destinations/pinterest_tag/router/data.ts | 2153 + .../destinations/pinterest_tag/step/data.ts | 3358 ++ 30 files changed, 74925 insertions(+) create mode 100644 test/integrations/destinations/kochava/processor/data.ts create mode 100644 test/integrations/destinations/lambda/processor/data.ts create mode 100644 test/integrations/destinations/lambda/router/data.ts create mode 100644 test/integrations/destinations/leanplum/processor/data.ts create mode 100644 test/integrations/destinations/leanplum/router/data.ts create mode 100644 test/integrations/destinations/lemnisk/processor/data.ts create mode 100644 test/integrations/destinations/lemnisk/router/data.ts create mode 100644 test/integrations/destinations/lytics/processor/data.ts create mode 100644 test/integrations/destinations/lytics/router/data.ts create mode 100644 test/integrations/destinations/mailjet/processor/data.ts create mode 100644 test/integrations/destinations/mailjet/router/data.ts create mode 100644 test/integrations/destinations/mailmodo/processor/data.ts create mode 100644 test/integrations/destinations/mailmodo/router/data.ts create mode 100644 test/integrations/destinations/marketo_static_list/processor/data.ts create mode 100644 test/integrations/destinations/marketo_static_list/router/data.ts create mode 100644 test/integrations/destinations/moengage/processor/data.ts create mode 100644 test/integrations/destinations/moengage/router/data.ts create mode 100644 test/integrations/destinations/monetate/processor/data.ts create mode 100644 test/integrations/destinations/monetate/router/data.ts create mode 100644 test/integrations/destinations/ometria/processor/data.ts create mode 100644 test/integrations/destinations/ometria/router/data.ts create mode 100644 test/integrations/destinations/one_signal/processor/data.ts create mode 100644 test/integrations/destinations/one_signal/router/data.ts create mode 100644 test/integrations/destinations/pagerduty/processor/data.ts create mode 100644 test/integrations/destinations/pagerduty/router/data.ts create mode 100644 test/integrations/destinations/pardot/router/data.ts create mode 100644 test/integrations/destinations/personalize/processor/data.ts create mode 100644 test/integrations/destinations/pinterest_tag/processor/data.ts create mode 100644 test/integrations/destinations/pinterest_tag/router/data.ts create mode 100644 test/integrations/destinations/pinterest_tag/step/data.ts diff --git a/test/integrations/destinations/kochava/processor/data.ts b/test/integrations/destinations/kochava/processor/data.ts new file mode 100644 index 0000000000..d17e9795ff --- /dev/null +++ b/test/integrations/destinations/kochava/processor/data.ts @@ -0,0 +1,1404 @@ +export const data = [ + { + name: 'kochava', + description: 'Test 0', + feature: 'processor', + module: 'destination', + version: 'v0', + input: { + request: { + body: [ + { + destination: { + Config: { apiKey: '' }, + DestinationDefinition: { + Config: { cdkEnabled: true }, + DisplayName: 'Kochava', + ID: '1WTpBSTiL3iAUHUdW7rHT4sawgU', + Name: 'KOCHAVA', + }, + Enabled: true, + ID: '1WTpIHpH7NTBgjeiUPW1kCUgZGI', + Name: 'kochava test', + Transformations: [], + }, + message: { + anonymousId: 'sampath', + channel: 'web', + context: { + app: { + build: '1.0.0', + name: 'RudderLabs JavaScript SDK', + namespace: 'com.rudderlabs.javascript', + version: '1.0.0', + }, + ip: '1.1.1.1', + library: { name: 'RudderLabs JavaScript SDK', version: '1.0.0' }, + locale: 'en-US', + os: { name: 'macOS', version: '15.9' }, + screen: { density: 2 }, + traits: { anonymousId: 'sampath', email: 'sampath@gmail.com' }, + userAgent: + 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.88 Safari/537.36', + }, + event: 'product added', + integrations: { All: true }, + messageId: 'ea5cfab2-3961-4d8a-8187-3d1858c90a9f', + originalTimestamp: '2020-01-17T04:53:51.185Z', + properties: { name: 'sampath' }, + receivedAt: '2020-01-17T10:23:52.688+05:30', + request_ip: '0.0.0.0', + sentAt: '2020-01-17T04:53:52.667Z', + timestamp: '2020-01-17T10:23:51.206+05:30', + type: 'track', + userId: 'sampath', + }, + }, + ], + method: 'POST', + }, + pathSuffix: '', + }, + output: { + response: { + status: 200, + body: [ + { + output: { + version: '1', + type: 'REST', + method: 'POST', + endpoint: 'https://control.kochava.com/track/json', + headers: {}, + params: {}, + body: { + JSON: { + action: 'event', + kochava_app_id: '', + kochava_device_id: 'sampath', + data: { + app_tracking_transparency: { att: false }, + currency: 'USD', + device_ids: { idfa: '', idfv: '', adid: '', android_id: '' }, + device_ver: '', + usertime: 1579236831206, + origination_ip: '1.1.1.1', + device_ua: + 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.88 Safari/537.36', + app_name: 'RudderLabs JavaScript SDK', + app_version: '1.0.0', + app_short_string: '1.0.0', + os_version: '15.9', + screen_dpi: 2, + locale: 'en-US', + event_name: 'Add to Cart', + event_data: { name: 'sampath' }, + }, + }, + XML: {}, + JSON_ARRAY: {}, + FORM: {}, + }, + files: {}, + userId: 'sampath', + }, + statusCode: 200, + }, + ], + }, + }, + }, + { + name: 'kochava', + description: 'Test 1', + feature: 'processor', + module: 'destination', + version: 'v0', + input: { + request: { + body: [ + { + message: { + channel: 'web', + context: { + app: { + build: '1.0.0', + name: 'RudderLabs JavaScript SDK', + namespace: 'com.rudderlabs.javascript', + version: '1.0.0', + }, + library: { name: 'RudderLabs JavaScript SDK', version: '1.0.0' }, + userAgent: + 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.90 Safari/537.36', + locale: 'en-US', + ip: '1.1.1.1', + os: { name: '', version: '' }, + screen: { density: 2 }, + }, + type: 'identify', + messageId: '84e26acc-56a5-4835-8233-591137fca468', + originalTimestamp: '2019-10-14T09:03:17.562Z', + anonymousId: '00000000000000000000000000', + userId: '123456', + integrations: { All: true }, + sentAt: '2019-10-14T09:03:22.563Z', + }, + metadata: { + destinationId: '1WTpIHpH7NTBgjeiUPW1kCUgZGI', + }, + destination: { + Config: { apiKey: '' }, + DestinationDefinition: { + Config: { cdkEnabled: true }, + DisplayName: 'Kochava', + ID: '1WTpBSTiL3iAUHUdW7rHT4sawgU', + Name: 'KOCHAVA', + }, + Enabled: true, + ID: '1WTpIHpH7NTBgjeiUPW1kCUgZGI', + Name: 'kochava test', + Transformations: [], + }, + }, + ], + method: 'POST', + }, + pathSuffix: '', + }, + output: { + response: { + status: 200, + body: [ + { + error: 'Bad event. Original error: message type "identify" not supported for "kochava"', + metadata: { + destinationId: '1WTpIHpH7NTBgjeiUPW1kCUgZGI', + }, + statTags: { + destType: 'KOCHAVA', + errorCategory: 'dataValidation', + destinationId: '1WTpIHpH7NTBgjeiUPW1kCUgZGI', + errorType: 'instrumentation', + feature: 'processor', + implementation: 'cdkV1', + module: 'destination', + }, + statusCode: 400, + }, + ], + }, + }, + }, + { + name: 'kochava', + description: 'Test 2', + feature: 'processor', + module: 'destination', + version: 'v0', + input: { + request: { + body: [ + { + message: { + channel: 'web', + context: { + app: { + build: '1.0.0', + name: 'RudderLabs JavaScript SDK', + namespace: 'com.rudderlabs.javascript', + version: '1.0.0', + }, + library: { name: 'RudderLabs JavaScript SDK', version: '1.0.0' }, + userAgent: + 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.90 Safari/537.36', + locale: 'en-US', + ip: '1.1.1.1', + os: { name: '', version: '' }, + screen: { density: 2 }, + }, + type: 'screen', + name: 'Home Screen', + messageId: '84e26acc-56a5-4835-8233-591137fca468', + originalTimestamp: '2019-10-14T09:03:17.562Z', + anonymousId: '00000000000000000000000000', + userId: '123456', + integrations: { All: true }, + sentAt: '2019-10-14T09:03:22.563Z', + }, + destination: { + Config: { apiKey: '' }, + DestinationDefinition: { + Config: { cdkEnabled: true }, + DisplayName: 'Kochava', + ID: '1WTpBSTiL3iAUHUdW7rHT4sawgU', + Name: 'KOCHAVA', + }, + Enabled: true, + ID: '1WTpIHpH7NTBgjeiUPW1kCUgZGI', + Name: 'kochava test', + Transformations: [], + }, + }, + ], + method: 'POST', + }, + pathSuffix: '', + }, + output: { + response: { + status: 200, + body: [ + { + output: { + version: '1', + type: 'REST', + method: 'POST', + endpoint: 'https://control.kochava.com/track/json', + headers: {}, + params: {}, + body: { + JSON: { + action: 'event', + kochava_app_id: '', + kochava_device_id: '00000000000000000000000000', + data: { + app_tracking_transparency: { att: false }, + currency: 'USD', + device_ids: { idfa: '', idfv: '', adid: '', android_id: '' }, + device_ver: '', + os_version: '', + usertime: 1571043797562, + device_ua: + 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.90 Safari/537.36', + app_name: 'RudderLabs JavaScript SDK', + app_version: '1.0.0', + app_short_string: '1.0.0', + screen_dpi: 2, + locale: 'en-US', + event_name: 'screen view', + event_data: {}, + origination_ip: '1.1.1.1', + }, + }, + XML: {}, + JSON_ARRAY: {}, + FORM: {}, + }, + files: {}, + userId: '00000000000000000000000000', + }, + statusCode: 200, + }, + ], + }, + }, + }, + { + name: 'kochava', + description: 'Test 3', + feature: 'processor', + module: 'destination', + version: 'v0', + input: { + request: { + body: [ + { + message: { + channel: 'web', + context: { + app: { + build: '1.0.0', + name: 'RudderLabs JavaScript SDK', + namespace: 'com.rudderlabs.javascript', + version: '1.0.0', + }, + library: { name: 'RudderLabs JavaScript SDK', version: '1.0.0' }, + userAgent: + 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.90 Safari/537.36', + locale: 'en-US', + ip: '1.1.1.1', + os: { name: '', version: '' }, + screen: { density: 2 }, + }, + type: 'screen', + properties: { name: 'Home Screen' }, + messageId: '84e26acc-56a5-4835-8233-591137fca468', + originalTimestamp: '2019-10-14T09:03:17.562Z', + anonymousId: '00000000000000000000000000', + userId: '123456', + integrations: { All: true }, + sentAt: '2019-10-14T09:03:22.563Z', + }, + destination: { + Config: { apiKey: '' }, + DestinationDefinition: { + Config: { cdkEnabled: true }, + DisplayName: 'Kochava', + ID: '1WTpBSTiL3iAUHUdW7rHT4sawgU', + Name: 'KOCHAVA', + }, + Enabled: true, + ID: '1WTpIHpH7NTBgjeiUPW1kCUgZGI', + Name: 'kochava test', + Transformations: [], + }, + }, + ], + method: 'POST', + }, + pathSuffix: '', + }, + output: { + response: { + status: 200, + body: [ + { + output: { + version: '1', + type: 'REST', + method: 'POST', + endpoint: 'https://control.kochava.com/track/json', + headers: {}, + params: {}, + body: { + JSON: { + action: 'event', + kochava_app_id: '', + kochava_device_id: '00000000000000000000000000', + data: { + app_tracking_transparency: { att: false }, + currency: 'USD', + device_ids: { idfa: '', idfv: '', adid: '', android_id: '' }, + device_ver: '', + os_version: '', + usertime: 1571043797562, + device_ua: + 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.90 Safari/537.36', + app_name: 'RudderLabs JavaScript SDK', + app_version: '1.0.0', + app_short_string: '1.0.0', + screen_dpi: 2, + locale: 'en-US', + event_name: 'screen view Home Screen', + event_data: { name: 'Home Screen' }, + origination_ip: '1.1.1.1', + }, + }, + XML: {}, + JSON_ARRAY: {}, + FORM: {}, + }, + files: {}, + userId: '00000000000000000000000000', + }, + statusCode: 200, + }, + ], + }, + }, + }, + { + name: 'kochava', + description: 'Test 4', + feature: 'processor', + module: 'destination', + version: 'v0', + input: { + request: { + body: [ + { + message: { + anonymousId: '5094f5704b9cf2b3', + channel: 'mobile', + context: { + app: { + build: '1', + name: 'LeanPlumIntegrationAndroid', + namespace: 'com.android.SampleLeanPlum', + version: '1.0', + }, + device: { + id: '5094f5704b9cf2b3', + manufacturer: 'Google', + model: 'Android SDK built for x86', + name: 'generic_x86', + type: 'android', + adTrackingEnabled: true, + advertisingId: 'some_adid', + }, + library: { name: 'com.rudderstack.android.sdk.core', version: '1.0.1-beta.1' }, + locale: 'en-US', + network: { carrier: 'Android', bluetooth: false, cellular: true, wifi: true }, + os: { name: 'Android', version: '8.1.0' }, + screen: { density: 420, height: 1794, width: 1080 }, + timezone: 'Asia/Kolkata', + traits: { anonymousId: '5094f5704b9cf2b3' }, + userAgent: + 'Dalvik/2.1.0 (Linux; U; Android 8.1.0; Android SDK built for x86 Build/OSM1.180201.007)', + }, + event: 'MainActivity', + integrations: { All: true }, + messageId: 'id1', + properties: { name: 'MainActivity', automatic: true }, + originalTimestamp: '2020-03-12T09:05:03.421Z', + type: 'screen', + sentAt: '2020-03-12T09:05:13.042Z', + }, + destination: { + Config: { apiKey: '' }, + DestinationDefinition: { + Config: { cdkEnabled: true }, + DisplayName: 'Kochava', + ID: '1WTpBSTiL3iAUHUdW7rHT4sawgU', + Name: 'KOCHAVA', + }, + Enabled: true, + ID: '1WTpIHpH7NTBgjeiUPW1kCUgZGI', + Name: 'kochava test', + Transformations: [], + }, + }, + ], + method: 'POST', + }, + pathSuffix: '', + }, + output: { + response: { + status: 200, + body: [ + { + output: { + version: '1', + type: 'REST', + method: 'POST', + endpoint: 'https://control.kochava.com/track/json', + headers: {}, + params: {}, + body: { + JSON: { + action: 'event', + kochava_app_id: '', + kochava_device_id: '5094f5704b9cf2b3', + data: { + app_tracking_transparency: { att: false }, + usertime: 1584003903421, + app_version: '1', + device_ver: 'Android SDK built for x86-Android-8.1.0', + device_ids: { + idfa: '', + idfv: '', + adid: 'some_adid', + android_id: '5094f5704b9cf2b3', + }, + device_ua: + 'Dalvik/2.1.0 (Linux; U; Android 8.1.0; Android SDK built for x86 Build/OSM1.180201.007)', + event_name: 'screen view MainActivity', + currency: 'USD', + event_data: { name: 'MainActivity', automatic: true }, + app_name: 'LeanPlumIntegrationAndroid', + app_short_string: '1.0', + locale: 'en-US', + os_version: '8.1.0', + screen_dpi: 420, + }, + }, + XML: {}, + JSON_ARRAY: {}, + FORM: {}, + }, + files: {}, + userId: '5094f5704b9cf2b3', + }, + statusCode: 200, + }, + ], + }, + }, + }, + { + name: 'kochava', + description: 'Test 5', + feature: 'processor', + module: 'destination', + version: 'v0', + input: { + request: { + body: [ + { + message: { + anonymousId: '5094f5704b9cf2b3', + channel: 'mobile', + context: { + app: { + build: '1', + name: 'LeanPlumIntegrationAndroid', + namespace: 'com.android.SampleLeanPlum', + version: '1.0', + }, + device: { + id: '5094f5704b9cf2b3', + manufacturer: 'Google', + model: 'Android SDK built for x86', + name: 'generic_x86', + type: 'android', + adTrackingEnabled: true, + advertisingId: 'some_adid', + attTrackingStatus: 3, + }, + library: { name: 'com.rudderstack.android.sdk.core', version: '1.0.1-beta.1' }, + locale: 'en-US', + network: { carrier: 'Android', bluetooth: false, cellular: true, wifi: true }, + os: { name: 'iOS', version: '14.5' }, + screen: { density: 420, height: 1794, width: 1080 }, + timezone: 'Asia/Kolkata', + traits: { anonymousId: '5094f5704b9cf2b3' }, + userAgent: + 'Dalvik/2.1.0 (Linux; U; Android 8.1.0; Android SDK built for x86 Build/OSM1.180201.007)', + }, + event: 'MainActivity', + integrations: { All: true }, + messageId: 'id1', + properties: { name: 'MainActivity', automatic: true }, + originalTimestamp: '2020-03-12T09:05:03.421Z', + type: 'screen', + sentAt: '2020-03-12T09:05:13.042Z', + }, + destination: { + Config: { apiKey: '' }, + DestinationDefinition: { + Config: { cdkEnabled: true }, + DisplayName: 'Kochava', + ID: '1WTpBSTiL3iAUHUdW7rHT4sawgU', + Name: 'KOCHAVA', + }, + Enabled: true, + ID: '1WTpIHpH7NTBgjeiUPW1kCUgZGI', + Name: 'kochava test', + Transformations: [], + }, + }, + ], + method: 'POST', + }, + pathSuffix: '', + }, + output: { + response: { + status: 200, + body: [ + { + output: { + version: '1', + type: 'REST', + method: 'POST', + endpoint: 'https://control.kochava.com/track/json', + headers: {}, + params: {}, + body: { + JSON: { + action: 'event', + kochava_app_id: '', + kochava_device_id: '5094f5704b9cf2b3', + data: { + app_tracking_transparency: { att: true }, + usertime: 1584003903421, + app_version: '1', + device_ver: 'Android SDK built for x86-iOS-14.5', + device_ids: { + idfa: 'some_adid', + idfv: '5094f5704b9cf2b3', + adid: '', + android_id: '', + }, + device_ua: + 'Dalvik/2.1.0 (Linux; U; Android 8.1.0; Android SDK built for x86 Build/OSM1.180201.007)', + event_name: 'screen view MainActivity', + currency: 'USD', + event_data: { name: 'MainActivity', automatic: true }, + app_name: 'LeanPlumIntegrationAndroid', + app_short_string: '1.0', + locale: 'en-US', + os_version: '14.5', + screen_dpi: 420, + }, + }, + XML: {}, + JSON_ARRAY: {}, + FORM: {}, + }, + files: {}, + userId: '5094f5704b9cf2b3', + }, + statusCode: 200, + }, + ], + }, + }, + }, + { + name: 'kochava', + description: 'Test 6', + feature: 'processor', + module: 'destination', + version: 'v0', + input: { + request: { + body: [ + { + message: { + anonymousId: '5094f5704b9cf2b3', + channel: 'mobile', + context: { + app: { + build: '1', + name: 'LeanPlumIntegrationAndroid', + namespace: 'com.android.SampleLeanPlum', + version: '1.0', + }, + device: { + id: '5094f5704b9cf2b3', + manufacturer: 'Google', + model: 'Android SDK built for x86', + name: 'generic_x86', + type: 'ipados', + adTrackingEnabled: true, + advertisingId: 'some_adid', + attTrackingStatus: 3, + }, + library: { name: 'com.rudderstack.android.sdk.core', version: '1.0.1-beta.1' }, + locale: 'en-US', + network: { carrier: 'Android', bluetooth: false, cellular: true, wifi: true }, + os: { name: 'ipados' }, + screen: { density: 420, height: 1794, width: 1080 }, + timezone: 'Asia/Kolkata', + traits: { anonymousId: '5094f5704b9cf2b3' }, + userAgent: + 'Dalvik/2.1.0 (Linux; U; Android 8.1.0; Android SDK built for x86 Build/OSM1.180201.007)', + }, + event: 'MainActivity', + integrations: { All: true }, + messageId: 'id1', + properties: { name: 'MainActivity', automatic: true }, + originalTimestamp: '2020-03-12T09:05:03.421Z', + type: 'screen', + sentAt: '2020-03-12T09:05:13.042Z', + }, + destination: { + Config: { apiKey: '' }, + DestinationDefinition: { + Config: { cdkEnabled: true }, + DisplayName: 'Kochava', + ID: '1WTpBSTiL3iAUHUdW7rHT4sawgU', + Name: 'KOCHAVA', + }, + Enabled: true, + ID: '1WTpIHpH7NTBgjeiUPW1kCUgZGI', + Name: 'kochava test', + Transformations: [], + }, + }, + ], + method: 'POST', + }, + pathSuffix: '', + }, + output: { + response: { + status: 200, + body: [ + { + output: { + version: '1', + type: 'REST', + method: 'POST', + endpoint: 'https://control.kochava.com/track/json', + headers: {}, + params: {}, + body: { + JSON: { + action: 'event', + kochava_app_id: '', + kochava_device_id: '5094f5704b9cf2b3', + data: { + app_tracking_transparency: { att: true }, + usertime: 1584003903421, + app_version: '1', + device_ver: '', + device_ids: { + idfa: 'some_adid', + idfv: '5094f5704b9cf2b3', + adid: '', + android_id: '', + }, + device_ua: + 'Dalvik/2.1.0 (Linux; U; Android 8.1.0; Android SDK built for x86 Build/OSM1.180201.007)', + event_name: 'screen view MainActivity', + currency: 'USD', + event_data: { name: 'MainActivity', automatic: true }, + app_name: 'LeanPlumIntegrationAndroid', + app_short_string: '1.0', + locale: 'en-US', + screen_dpi: 420, + }, + }, + JSON_ARRAY: {}, + XML: {}, + FORM: {}, + }, + files: {}, + userId: '5094f5704b9cf2b3', + }, + statusCode: 200, + }, + ], + }, + }, + }, + { + name: 'kochava', + description: 'Test 7', + feature: 'processor', + module: 'destination', + version: 'v0', + input: { + request: { + body: [ + { + message: { + anonymousId: '5094f5704b9cf2b3', + channel: 'mobile', + context: { + app: { + build: '1', + name: 'LeanPlumIntegrationAndroid', + namespace: 'com.android.SampleLeanPlum', + version: '1.0', + }, + device: { + manufacturer: 'Google', + model: 'Android SDK built for x86', + name: 'generic_x86', + type: 'android', + adTrackingEnabled: true, + }, + library: { name: 'com.rudderstack.android.sdk.core', version: '1.0.1-beta.1' }, + locale: 'en-US', + network: { carrier: 'Android', bluetooth: false, cellular: true, wifi: true }, + os: { name: 'Android', version: '8.1.0' }, + screen: { density: 420, height: 1794, width: 1080 }, + timezone: 'Asia/Kolkata', + traits: { anonymousId: '5094f5704b9cf2b3' }, + userAgent: + 'Dalvik/2.1.0 (Linux; U; Android 8.1.0; Android SDK built for x86 Build/OSM1.180201.007)', + }, + event: 'MainActivity', + integrations: { All: true }, + messageId: 'id1', + properties: { name: 'MainActivity', automatic: true }, + originalTimestamp: '2020-03-12T09:05:03.421Z', + type: 'screen', + sentAt: '2020-03-12T09:05:13.042Z', + }, + destination: { + Config: { apiKey: '' }, + DestinationDefinition: { + Config: { cdkEnabled: true }, + DisplayName: 'Kochava', + ID: '1WTpBSTiL3iAUHUdW7rHT4sawgU', + Name: 'KOCHAVA', + }, + Enabled: true, + ID: '1WTpIHpH7NTBgjeiUPW1kCUgZGI', + Name: 'kochava test', + Transformations: [], + }, + }, + ], + method: 'POST', + }, + pathSuffix: '', + }, + output: { + response: { + status: 200, + body: [ + { + output: { + version: '1', + type: 'REST', + method: 'POST', + endpoint: 'https://control.kochava.com/track/json', + headers: {}, + params: {}, + body: { + JSON: { + action: 'event', + kochava_app_id: '', + kochava_device_id: '5094f5704b9cf2b3', + data: { + app_tracking_transparency: { att: false }, + usertime: 1584003903421, + app_version: '1', + device_ver: 'Android SDK built for x86-Android-8.1.0', + device_ids: { idfa: '', idfv: '', adid: '', android_id: '5094f5704b9cf2b3' }, + device_ua: + 'Dalvik/2.1.0 (Linux; U; Android 8.1.0; Android SDK built for x86 Build/OSM1.180201.007)', + event_name: 'screen view MainActivity', + currency: 'USD', + event_data: { name: 'MainActivity', automatic: true }, + app_name: 'LeanPlumIntegrationAndroid', + app_short_string: '1.0', + locale: 'en-US', + os_version: '8.1.0', + screen_dpi: 420, + }, + }, + JSON_ARRAY: {}, + XML: {}, + FORM: {}, + }, + files: {}, + userId: '5094f5704b9cf2b3', + }, + statusCode: 200, + }, + ], + }, + }, + }, + { + name: 'kochava', + description: 'Test 8', + feature: 'processor', + module: 'destination', + version: 'v0', + input: { + request: { + body: [ + { + message: { + anonymousId: '5094f5704b9cf2b3', + channel: 'mobile', + context: { + app: { + build: '1', + name: 'LeanPlumIntegrationAndroid', + namespace: 'com.android.SampleLeanPlum', + version: '1.0', + }, + device: { + manufacturer: 'Google', + model: 'Android SDK built for x86', + name: 'generic_x86', + type: 'android', + adTrackingEnabled: true, + }, + library: { name: 'com.rudderstack.android.sdk.core', version: '1.0.1-beta.1' }, + locale: 'en-US', + network: { carrier: 'Android', bluetooth: false, cellular: true, wifi: true }, + screen: { density: 420, height: 1794, width: 1080 }, + timezone: 'Asia/Kolkata', + traits: { anonymousId: '5094f5704b9cf2b3' }, + userAgent: + 'Dalvik/2.1.0 (Linux; U; Android 8.1.0; Android SDK built for x86 Build/OSM1.180201.007)', + }, + event: 'MainActivity', + integrations: { All: true }, + messageId: 'id1', + properties: { name: 'MainActivity', automatic: true }, + originalTimestamp: '2020-03-12T09:05:03.421Z', + type: 'screen', + sentAt: '2020-03-12T09:05:13.042Z', + }, + destination: { + Config: { apiKey: '' }, + DestinationDefinition: { + Config: { cdkEnabled: true }, + DisplayName: 'Kochava', + ID: '1WTpBSTiL3iAUHUdW7rHT4sawgU', + Name: 'KOCHAVA', + }, + Enabled: true, + ID: '1WTpIHpH7NTBgjeiUPW1kCUgZGI', + Name: 'kochava test', + Transformations: [], + }, + }, + ], + method: 'POST', + }, + pathSuffix: '', + }, + output: { + response: { + status: 200, + body: [ + { + output: { + version: '1', + type: 'REST', + method: 'POST', + endpoint: 'https://control.kochava.com/track/json', + headers: {}, + params: {}, + body: { + JSON: { + action: 'event', + kochava_app_id: '', + kochava_device_id: '5094f5704b9cf2b3', + data: { + app_tracking_transparency: { att: false }, + usertime: 1584003903421, + app_version: '1', + device_ver: '', + device_ids: { idfa: '', idfv: '', adid: '', android_id: '' }, + device_ua: + 'Dalvik/2.1.0 (Linux; U; Android 8.1.0; Android SDK built for x86 Build/OSM1.180201.007)', + event_name: 'screen view MainActivity', + currency: 'USD', + event_data: { name: 'MainActivity', automatic: true }, + app_name: 'LeanPlumIntegrationAndroid', + app_short_string: '1.0', + locale: 'en-US', + screen_dpi: 420, + }, + }, + JSON_ARRAY: {}, + XML: {}, + FORM: {}, + }, + files: {}, + userId: '5094f5704b9cf2b3', + }, + statusCode: 200, + }, + ], + }, + }, + }, + { + name: 'kochava', + description: 'Test 9', + feature: 'processor', + module: 'destination', + version: 'v0', + input: { + request: { + body: [ + { + message: { + channel: 'web', + context: { + app: { + build: '1.0.0', + name: 'RudderLabs JavaScript SDK', + namespace: 'com.rudderlabs.javascript', + version: '1.0.0', + }, + library: { name: 'RudderLabs JavaScript SDK', version: '1.0.0' }, + locale: 'en-US', + ip: '1.1.1.1', + os: { name: '', version: '' }, + screen: { density: 2 }, + }, + type: 'screen', + name: 'Home Screen', + messageId: '84e26acc-56a5-4835-8233-591137fca468', + timestamp: '2019-10-14T09:03:17.562Z', + originalTimestamp: '2019-10-14T09:03:17.562Z', + anonymousId: '00000000000000000000000000', + userId: '123456', + integrations: { All: true }, + sentAt: '2019-10-14T09:03:22.563Z', + }, + destination: { + Config: { apiKey: '' }, + DestinationDefinition: { + Config: { cdkEnabled: true }, + DisplayName: 'Kochava', + ID: '1WTpBSTiL3iAUHUdW7rHT4sawgU', + Name: 'KOCHAVA', + }, + Enabled: true, + ID: '1WTpIHpH7NTBgjeiUPW1kCUgZGI', + Name: 'kochava test', + Transformations: [], + }, + }, + ], + method: 'POST', + }, + pathSuffix: '', + }, + output: { + response: { + status: 200, + body: [ + { + output: { + version: '1', + type: 'REST', + method: 'POST', + endpoint: 'https://control.kochava.com/track/json', + headers: {}, + params: {}, + body: { + JSON: { + action: 'event', + kochava_app_id: '', + kochava_device_id: '00000000000000000000000000', + data: { + app_tracking_transparency: { att: false }, + usertime: 1571043797562, + app_version: '1.0.0', + device_ver: '', + device_ids: { idfa: '', idfv: '', adid: '', android_id: '' }, + device_ua: '', + event_name: 'screen view', + origination_ip: '1.1.1.1', + currency: 'USD', + event_data: {}, + app_name: 'RudderLabs JavaScript SDK', + app_short_string: '1.0.0', + locale: 'en-US', + os_version: '', + screen_dpi: 2, + }, + }, + JSON_ARRAY: {}, + XML: {}, + FORM: {}, + }, + files: {}, + userId: '00000000000000000000000000', + }, + statusCode: 200, + }, + ], + }, + }, + }, + { + name: 'kochava', + description: 'Test 10', + feature: 'processor', + module: 'destination', + version: 'v0', + input: { + request: { + body: [ + { + message: { + channel: 'web', + context: { + app: { + build: '1.0.0', + name: 'RudderLabs JavaScript SDK', + namespace: 'com.rudderlabs.javascript', + version: '1.0.0', + }, + library: { name: 'RudderLabs JavaScript SDK', version: '1.0.0' }, + locale: 'en-US', + ip: '1.1.1.1', + os: { name: 'ios', version: '' }, + device: { attTrackingStatus: 3 }, + screen: { density: 2 }, + }, + type: 'screen', + name: 'Home Screen', + messageId: '84e26acc-56a5-4835-8233-591137fca468', + timestamp: '2019-10-14T09:03:17.562Z', + originalTimestamp: '2019-10-14T09:03:17.562Z', + anonymousId: '00000000000000000000000000', + userId: '123456', + integrations: { All: true }, + sentAt: '2019-10-14T09:03:22.563Z', + }, + destination: { + Config: { apiKey: '' }, + DestinationDefinition: { + Config: { cdkEnabled: true }, + DisplayName: 'Kochava', + ID: '1WTpBSTiL3iAUHUdW7rHT4sawgU', + Name: 'KOCHAVA', + }, + Enabled: true, + ID: '1WTpIHpH7NTBgjeiUPW1kCUgZGI', + Name: 'kochava test', + Transformations: [], + }, + }, + ], + method: 'POST', + }, + pathSuffix: '', + }, + output: { + response: { + status: 200, + body: [ + { + output: { + version: '1', + type: 'REST', + method: 'POST', + endpoint: 'https://control.kochava.com/track/json', + headers: {}, + params: {}, + body: { + JSON: { + action: 'event', + kochava_app_id: '', + kochava_device_id: '00000000000000000000000000', + data: { + app_tracking_transparency: { att: true }, + usertime: 1571043797562, + app_version: '1.0.0', + device_ver: '', + device_ids: { + idfa: '', + idfv: '00000000000000000000000000', + adid: '', + android_id: '', + }, + device_ua: '', + event_name: 'screen view', + origination_ip: '1.1.1.1', + currency: 'USD', + event_data: {}, + app_name: 'RudderLabs JavaScript SDK', + app_short_string: '1.0.0', + locale: 'en-US', + os_version: '', + screen_dpi: 2, + }, + }, + JSON_ARRAY: {}, + XML: {}, + FORM: {}, + }, + files: {}, + userId: '00000000000000000000000000', + }, + statusCode: 200, + }, + ], + }, + }, + }, + { + name: 'kochava', + description: 'Test 11', + feature: 'processor', + module: 'destination', + version: 'v0', + input: { + request: { + body: [ + { + message: { + channel: 'web', + context: { + app: { + build: '1.0.0', + name: 'RudderLabs JavaScript SDK', + namespace: 'com.rudderlabs.javascript', + version: '1.0.0', + }, + library: { name: 'RudderLabs JavaScript SDK', version: '1.0.0' }, + locale: 'en-US', + ip: '1.1.1.1', + os: { name: 'tvOS', version: '' }, + screen: { density: 2 }, + }, + type: 'screen', + name: 'Home Screen', + messageId: '84e26acc-56a5-4835-8233-591137fca468', + timestamp: '2019-10-14T09:03:17.562Z', + originalTimestamp: '2019-10-14T09:03:17.562Z', + anonymousId: '00000000000000000000000000', + userId: '123456', + integrations: { All: true }, + sentAt: '2019-10-14T09:03:22.563Z', + }, + destination: { + Config: { apiKey: '' }, + DestinationDefinition: { + Config: { cdkEnabled: true }, + DisplayName: 'Kochava', + ID: '1WTpBSTiL3iAUHUdW7rHT4sawgU', + Name: 'KOCHAVA', + }, + Enabled: true, + ID: '1WTpIHpH7NTBgjeiUPW1kCUgZGI', + Name: 'kochava test', + Transformations: [], + }, + }, + ], + method: 'POST', + }, + pathSuffix: '', + }, + output: { + response: { + status: 200, + body: [ + { + output: { + version: '1', + type: 'REST', + method: 'POST', + endpoint: 'https://control.kochava.com/track/json', + headers: {}, + params: {}, + body: { + JSON: { + action: 'event', + kochava_app_id: '', + kochava_device_id: '00000000000000000000000000', + data: { + app_tracking_transparency: { att: false }, + usertime: 1571043797562, + app_version: '1.0.0', + device_ver: '', + device_ids: { + idfa: '', + idfv: '00000000000000000000000000', + adid: '', + android_id: '', + }, + device_ua: '', + event_name: 'screen view', + origination_ip: '1.1.1.1', + currency: 'USD', + event_data: {}, + app_name: 'RudderLabs JavaScript SDK', + app_short_string: '1.0.0', + locale: 'en-US', + os_version: '', + screen_dpi: 2, + }, + }, + JSON_ARRAY: {}, + XML: {}, + FORM: {}, + }, + files: {}, + userId: '00000000000000000000000000', + }, + statusCode: 200, + }, + ], + }, + }, + }, + { + name: 'kochava', + description: 'Test 12', + feature: 'processor', + module: 'destination', + version: 'v0', + input: { + request: { + body: [ + { + message: { + channel: 'web', + context: { + app: { + build: '1.0.0', + name: 'RudderLabs JavaScript SDK', + namespace: 'com.rudderlabs.javascript', + version: '1.0.0', + }, + library: { name: 'RudderLabs JavaScript SDK', version: '1.0.0' }, + locale: 'en-US', + ip: '1.1.1.1', + os: { name: 'android', version: '' }, + screen: { density: 2 }, + }, + type: 'screen', + name: 'Home Screen', + messageId: '84e26acc-56a5-4835-8233-591137fca468', + timestamp: '2019-10-14T09:03:17.562Z', + originalTimestamp: '2019-10-14T09:03:17.562Z', + anonymousId: '00000000000000000000000000', + userId: '123456', + integrations: { All: true }, + sentAt: '2019-10-14T09:03:22.563Z', + }, + destination: { + Config: { apiKey: '' }, + DestinationDefinition: { + Config: { cdkEnabled: true }, + DisplayName: 'Kochava', + ID: '1WTpBSTiL3iAUHUdW7rHT4sawgU', + Name: 'KOCHAVA', + }, + Enabled: true, + ID: '1WTpIHpH7NTBgjeiUPW1kCUgZGI', + Name: 'kochava test', + Transformations: [], + }, + }, + ], + method: 'POST', + }, + pathSuffix: '', + }, + output: { + response: { + status: 200, + body: [ + { + output: { + version: '1', + type: 'REST', + method: 'POST', + endpoint: 'https://control.kochava.com/track/json', + headers: {}, + params: {}, + body: { + JSON: { + action: 'event', + kochava_app_id: '', + kochava_device_id: '00000000000000000000000000', + data: { + app_tracking_transparency: { att: false }, + usertime: 1571043797562, + app_version: '1.0.0', + device_ver: '', + device_ids: { + idfa: '', + idfv: '', + adid: '', + android_id: '00000000000000000000000000', + }, + device_ua: '', + event_name: 'screen view', + origination_ip: '1.1.1.1', + currency: 'USD', + event_data: {}, + app_name: 'RudderLabs JavaScript SDK', + app_short_string: '1.0.0', + locale: 'en-US', + os_version: '', + screen_dpi: 2, + }, + }, + JSON_ARRAY: {}, + XML: {}, + FORM: {}, + }, + files: {}, + userId: '00000000000000000000000000', + }, + statusCode: 200, + }, + ], + }, + }, + }, +]; diff --git a/test/integrations/destinations/lambda/processor/data.ts b/test/integrations/destinations/lambda/processor/data.ts new file mode 100644 index 0000000000..540de25417 --- /dev/null +++ b/test/integrations/destinations/lambda/processor/data.ts @@ -0,0 +1,498 @@ +export const data = [ + { + name: 'lambda', + description: 'Simple Identify call', + feature: 'processor', + module: 'destination', + version: 'v0', + input: { + request: { + body: [ + { + message: { + type: 'identify', + sentAt: '2022-08-03T10:44:55.382+05:30', + userId: 'user113', + context: { + os: { name: 'android' }, + device: { name: 'Mi', token: 'qwertyuioprtyuiop' }, + traits: { name: 'User2', email: 'user112@mail.com' }, + }, + rudderId: 'ed33ef22-569d-44b1-a6cb-063c69dca8f0', + messageId: '29beef33-2771-45fd-adb4-4376aa6d72d9', + timestamp: '2022-08-03T10:44:54.942+05:30', + receivedAt: '2022-08-03T10:44:54.943+05:30', + request_ip: '[::1]', + originalTimestamp: '2022-08-03T10:44:55.382+05:30', + }, + metadata: { + userId: 'user113<<>>user113', + jobId: 10, + sourceId: '2CFEootdF2eQh0CGeD0jdVybP5A', + destinationId: '2CojwY2YqpiTqfBPrMAUN8orgHA', + attemptNum: 0, + receivedAt: '2022-08-03T10:44:54.943+05:30', + createdAt: '2022-08-03T05:14:55.384Z', + firstAttemptedAt: '', + transformAt: 'router', + workspaceId: '2ANaDOTAzxboCOF86FkRGMEJ5F7', + secret: null, + jobsT: { + UUID: '53927e88-2d5c-4274-ad72-2e1c14a96301', + JobID: 10, + UserID: 'user113<<>>user113', + CreatedAt: '2022-08-03T05:14:55.384207Z', + ExpireAt: '2022-08-03T05:14:55.384207Z', + CustomVal: 'LAMBDA', + EventCount: 1, + EventPayload: { + type: 'identify', + sentAt: '2022-08-03T10:44:55.382+05:30', + userId: 'user113', + context: { + os: { name: 'android' }, + device: { name: 'Mi', token: 'qwertyuioprtyuiop' }, + traits: { name: 'User2', email: 'user112@mail.com' }, + }, + rudderId: 'ed33ef22-569d-44b1-a6cb-063c69dca8f0', + messageId: '29beef33-2771-45fd-adb4-4376aa6d72d9', + timestamp: '2022-08-03T10:44:54.942+05:30', + receivedAt: '2022-08-03T10:44:54.943+05:30', + request_ip: '[::1]', + originalTimestamp: '2022-08-03T10:44:55.382+05:30', + }, + PayloadSize: 550, + LastJobStatus: { + JobID: 0, + JobState: '', + AttemptNum: 0, + ExecTime: '0001-01-01T00:00:00Z', + RetryTime: '0001-01-01T00:00:00Z', + ErrorCode: '', + ErrorResponse: null, + Parameters: null, + WorkspaceId: '', + }, + Parameters: { + record_id: null, + source_id: '2CFEootdF2eQh0CGeD0jdVybP5A', + event_name: '', + event_type: 'identify', + message_id: '29beef33-2771-45fd-adb4-4376aa6d72d9', + received_at: '2022-08-03T10:44:54.943+05:30', + workspaceId: '2ANaDOTAzxboCOF86FkRGMEJ5F7', + transform_at: 'router', + source_job_id: '', + destination_id: '2CojwY2YqpiTqfBPrMAUN8orgHA', + gateway_job_id: 10, + source_task_id: '', + source_batch_id: '', + source_category: '', + source_job_run_id: '', + source_task_run_id: '', + source_definition_id: '2CCxgViQJACgWABA6h83wlXnE1k', + destination_definition_id: '', + }, + WorkspaceId: '2ANaDOTAzxboCOF86FkRGMEJ5F7', + }, + pickedAtTime: '2022-08-03T10:44:56.193361+05:30', + resultSetID: 10, + }, + destination: { + ID: '2CojwY2YqpiTqfBPrMAUN8orgHA', + Name: 'Lambda test', + DestinationDefinition: { + ID: '2CoiaHPaRb79wpSG3wZWfrG3B0n', + Name: 'LAMBDA', + DisplayName: 'AWS Lambda', + Config: { + destConfig: { + defaultConfig: [ + 'region', + 'accessKeyId', + 'accessKey', + 'lambda', + 'invocationType', + 'enableBatchInput', + 'clientContext', + ], + }, + excludeKeys: [], + includeKeys: [], + saveDestinationResponse: true, + secretKeys: ['accessKeyId', 'accessKey'], + supportedMessageTypes: ['identify', 'page', 'screen', 'track', 'alias', 'group'], + supportedSourceTypes: [ + 'amp', + 'android', + 'cordova', + 'cloud', + 'flutter', + 'ios', + 'reactnative', + 'unity', + 'warehouse', + 'web', + ], + transformAt: 'router', + transformAtV1: 'router', + }, + ResponseRules: {}, + }, + Config: { + accessKeyId: '', + clientContext: '', + enableBatchInput: false, + invocationType: 'Event', + lambda: 'testFunction', + region: 'us-west-2', + accessKey: '', + }, + Enabled: true, + Transformations: [], + IsProcessorEnabled: true, + RevisionID: '2CojwWiWjNghiGbfuRcwfs6Bt5q', + }, + }, + ], + method: 'POST', + }, + pathSuffix: '', + }, + output: { + response: { + status: 200, + body: [ + { + metadata: { + userId: 'user113<<>>user113', + jobId: 10, + sourceId: '2CFEootdF2eQh0CGeD0jdVybP5A', + destinationId: '2CojwY2YqpiTqfBPrMAUN8orgHA', + attemptNum: 0, + receivedAt: '2022-08-03T10:44:54.943+05:30', + createdAt: '2022-08-03T05:14:55.384Z', + firstAttemptedAt: '', + transformAt: 'router', + workspaceId: '2ANaDOTAzxboCOF86FkRGMEJ5F7', + secret: null, + jobsT: { + UUID: '53927e88-2d5c-4274-ad72-2e1c14a96301', + JobID: 10, + UserID: 'user113<<>>user113', + CreatedAt: '2022-08-03T05:14:55.384207Z', + ExpireAt: '2022-08-03T05:14:55.384207Z', + CustomVal: 'LAMBDA', + EventCount: 1, + EventPayload: { + type: 'identify', + sentAt: '2022-08-03T10:44:55.382+05:30', + userId: 'user113', + context: { + os: { name: 'android' }, + device: { name: 'Mi', token: 'qwertyuioprtyuiop' }, + traits: { name: 'User2', email: 'user112@mail.com' }, + }, + rudderId: 'ed33ef22-569d-44b1-a6cb-063c69dca8f0', + messageId: '29beef33-2771-45fd-adb4-4376aa6d72d9', + timestamp: '2022-08-03T10:44:54.942+05:30', + receivedAt: '2022-08-03T10:44:54.943+05:30', + request_ip: '[::1]', + originalTimestamp: '2022-08-03T10:44:55.382+05:30', + }, + PayloadSize: 550, + LastJobStatus: { + JobID: 0, + JobState: '', + AttemptNum: 0, + ExecTime: '0001-01-01T00:00:00Z', + RetryTime: '0001-01-01T00:00:00Z', + ErrorCode: '', + ErrorResponse: null, + Parameters: null, + WorkspaceId: '', + }, + Parameters: { + record_id: null, + source_id: '2CFEootdF2eQh0CGeD0jdVybP5A', + event_name: '', + event_type: 'identify', + message_id: '29beef33-2771-45fd-adb4-4376aa6d72d9', + received_at: '2022-08-03T10:44:54.943+05:30', + workspaceId: '2ANaDOTAzxboCOF86FkRGMEJ5F7', + transform_at: 'router', + source_job_id: '', + destination_id: '2CojwY2YqpiTqfBPrMAUN8orgHA', + gateway_job_id: 10, + source_task_id: '', + source_batch_id: '', + source_category: '', + source_job_run_id: '', + source_task_run_id: '', + source_definition_id: '2CCxgViQJACgWABA6h83wlXnE1k', + destination_definition_id: '', + }, + WorkspaceId: '2ANaDOTAzxboCOF86FkRGMEJ5F7', + }, + pickedAtTime: '2022-08-03T10:44:56.193361+05:30', + resultSetID: 10, + }, + output: { + payload: + '{"type":"identify","sentAt":"2022-08-03T10:44:55.382+05:30","userId":"user113","context":{"os":{"name":"android"},"device":{"name":"Mi","token":"qwertyuioprtyuiop"},"traits":{"name":"User2","email":"user112@mail.com"}},"rudderId":"ed33ef22-569d-44b1-a6cb-063c69dca8f0","messageId":"29beef33-2771-45fd-adb4-4376aa6d72d9","timestamp":"2022-08-03T10:44:54.942+05:30","receivedAt":"2022-08-03T10:44:54.943+05:30","request_ip":"[::1]","originalTimestamp":"2022-08-03T10:44:55.382+05:30"}', + destConfig: { clientContext: '', invocationType: 'Event', lambda: 'testFunction' }, + userId: '', + }, + statusCode: 200, + }, + ], + }, + }, + }, + { + name: 'lambda', + description: 'Destination config not present', + feature: 'processor', + module: 'destination', + version: 'v0', + input: { + request: { + body: [ + { + message: { + type: 'identify', + sentAt: '2022-08-03T10:44:55.382+05:30', + userId: 'user113', + context: { + os: { name: 'android' }, + device: { name: 'Mi', token: 'qwertyuioprtyuiop' }, + traits: { name: 'User2', email: 'user112@mail.com' }, + }, + rudderId: 'ed33ef22-569d-44b1-a6cb-063c69dca8f0', + messageId: '29beef33-2771-45fd-adb4-4376aa6d72d9', + timestamp: '2022-08-03T10:44:54.942+05:30', + receivedAt: '2022-08-03T10:44:54.943+05:30', + request_ip: '[::1]', + originalTimestamp: '2022-08-03T10:44:55.382+05:30', + }, + metadata: { + userId: 'user113<<>>user113', + jobId: 10, + sourceId: '2CFEootdF2eQh0CGeD0jdVybP5A', + destinationId: '2CojwY2YqpiTqfBPrMAUN8orgHA', + attemptNum: 0, + receivedAt: '2022-08-03T10:44:54.943+05:30', + createdAt: '2022-08-03T05:14:55.384Z', + firstAttemptedAt: '', + transformAt: 'router', + workspaceId: '2ANaDOTAzxboCOF86FkRGMEJ5F7', + secret: null, + jobsT: { + UUID: '53927e88-2d5c-4274-ad72-2e1c14a96301', + JobID: 10, + UserID: 'user113<<>>user113', + CreatedAt: '2022-08-03T05:14:55.384207Z', + ExpireAt: '2022-08-03T05:14:55.384207Z', + CustomVal: 'LAMBDA', + EventCount: 1, + EventPayload: { + type: 'identify', + sentAt: '2022-08-03T10:44:55.382+05:30', + userId: 'user113', + context: { + os: { name: 'android' }, + device: { name: 'Mi', token: 'qwertyuioprtyuiop' }, + traits: { name: 'User2', email: 'user112@mail.com' }, + }, + rudderId: 'ed33ef22-569d-44b1-a6cb-063c69dca8f0', + messageId: '29beef33-2771-45fd-adb4-4376aa6d72d9', + timestamp: '2022-08-03T10:44:54.942+05:30', + receivedAt: '2022-08-03T10:44:54.943+05:30', + request_ip: '[::1]', + originalTimestamp: '2022-08-03T10:44:55.382+05:30', + }, + PayloadSize: 550, + LastJobStatus: { + JobID: 0, + JobState: '', + AttemptNum: 0, + ExecTime: '0001-01-01T00:00:00Z', + RetryTime: '0001-01-01T00:00:00Z', + ErrorCode: '', + ErrorResponse: null, + Parameters: null, + WorkspaceId: '', + }, + Parameters: { + record_id: null, + source_id: '2CFEootdF2eQh0CGeD0jdVybP5A', + event_name: '', + event_type: 'identify', + message_id: '29beef33-2771-45fd-adb4-4376aa6d72d9', + received_at: '2022-08-03T10:44:54.943+05:30', + workspaceId: '2ANaDOTAzxboCOF86FkRGMEJ5F7', + transform_at: 'router', + source_job_id: '', + destination_id: '2CojwY2YqpiTqfBPrMAUN8orgHA', + gateway_job_id: 10, + source_task_id: '', + source_batch_id: '', + source_category: '', + source_job_run_id: '', + source_task_run_id: '', + source_definition_id: '2CCxgViQJACgWABA6h83wlXnE1k', + destination_definition_id: '', + }, + WorkspaceId: '2ANaDOTAzxboCOF86FkRGMEJ5F7', + }, + pickedAtTime: '2022-08-03T10:44:56.193361+05:30', + resultSetID: 10, + }, + destination: { + ID: '2CojwY2YqpiTqfBPrMAUN8orgHA', + Name: 'Lambda test', + DestinationDefinition: { + ID: '2CoiaHPaRb79wpSG3wZWfrG3B0n', + Name: 'LAMBDA', + DisplayName: 'AWS Lambda', + Config: { + destConfig: { + defaultConfig: [ + 'region', + 'accessKeyId', + 'accessKey', + 'lambda', + 'invocationType', + 'enableBatchInput', + 'clientContext', + ], + }, + excludeKeys: [], + includeKeys: [], + saveDestinationResponse: true, + secretKeys: ['accessKeyId', 'accessKey'], + supportedMessageTypes: ['identify', 'page', 'screen', 'track', 'alias', 'group'], + supportedSourceTypes: [ + 'amp', + 'android', + 'cordova', + 'cloud', + 'flutter', + 'ios', + 'reactnative', + 'unity', + 'warehouse', + 'web', + ], + transformAt: 'router', + transformAtV1: 'router', + }, + ResponseRules: {}, + }, + Enabled: true, + Transformations: [], + IsProcessorEnabled: true, + RevisionID: '2CojwWiWjNghiGbfuRcwfs6Bt5q', + }, + }, + ], + method: 'POST', + }, + pathSuffix: '', + }, + output: { + response: { + status: 200, + body: [ + { + error: 'destination.Config cannot be undefined', + metadata: { + userId: 'user113<<>>user113', + jobId: 10, + sourceId: '2CFEootdF2eQh0CGeD0jdVybP5A', + destinationId: '2CojwY2YqpiTqfBPrMAUN8orgHA', + attemptNum: 0, + receivedAt: '2022-08-03T10:44:54.943+05:30', + createdAt: '2022-08-03T05:14:55.384Z', + firstAttemptedAt: '', + transformAt: 'router', + workspaceId: '2ANaDOTAzxboCOF86FkRGMEJ5F7', + secret: null, + jobsT: { + UUID: '53927e88-2d5c-4274-ad72-2e1c14a96301', + JobID: 10, + UserID: 'user113<<>>user113', + CreatedAt: '2022-08-03T05:14:55.384207Z', + ExpireAt: '2022-08-03T05:14:55.384207Z', + CustomVal: 'LAMBDA', + EventCount: 1, + EventPayload: { + type: 'identify', + sentAt: '2022-08-03T10:44:55.382+05:30', + userId: 'user113', + context: { + os: { name: 'android' }, + device: { name: 'Mi', token: 'qwertyuioprtyuiop' }, + traits: { name: 'User2', email: 'user112@mail.com' }, + }, + rudderId: 'ed33ef22-569d-44b1-a6cb-063c69dca8f0', + messageId: '29beef33-2771-45fd-adb4-4376aa6d72d9', + timestamp: '2022-08-03T10:44:54.942+05:30', + receivedAt: '2022-08-03T10:44:54.943+05:30', + request_ip: '[::1]', + originalTimestamp: '2022-08-03T10:44:55.382+05:30', + }, + PayloadSize: 550, + LastJobStatus: { + JobID: 0, + JobState: '', + AttemptNum: 0, + ExecTime: '0001-01-01T00:00:00Z', + RetryTime: '0001-01-01T00:00:00Z', + ErrorCode: '', + ErrorResponse: null, + Parameters: null, + WorkspaceId: '', + }, + Parameters: { + record_id: null, + source_id: '2CFEootdF2eQh0CGeD0jdVybP5A', + event_name: '', + event_type: 'identify', + message_id: '29beef33-2771-45fd-adb4-4376aa6d72d9', + received_at: '2022-08-03T10:44:54.943+05:30', + workspaceId: '2ANaDOTAzxboCOF86FkRGMEJ5F7', + transform_at: 'router', + source_job_id: '', + destination_id: '2CojwY2YqpiTqfBPrMAUN8orgHA', + gateway_job_id: 10, + source_task_id: '', + source_batch_id: '', + source_category: '', + source_job_run_id: '', + source_task_run_id: '', + source_definition_id: '2CCxgViQJACgWABA6h83wlXnE1k', + destination_definition_id: '', + }, + WorkspaceId: '2ANaDOTAzxboCOF86FkRGMEJ5F7', + }, + pickedAtTime: '2022-08-03T10:44:56.193361+05:30', + resultSetID: 10, + }, + statTags: { + destType: 'LAMBDA', + errorCategory: 'dataValidation', + destinationId: '2CojwY2YqpiTqfBPrMAUN8orgHA', + workspaceId: '2ANaDOTAzxboCOF86FkRGMEJ5F7', + errorType: 'configuration', + feature: 'processor', + implementation: 'native', + module: 'destination', + }, + statusCode: 400, + }, + ], + }, + }, + }, +]; diff --git a/test/integrations/destinations/lambda/router/data.ts b/test/integrations/destinations/lambda/router/data.ts new file mode 100644 index 0000000000..37b13e4d2a --- /dev/null +++ b/test/integrations/destinations/lambda/router/data.ts @@ -0,0 +1,38788 @@ +export const data = [ + { + name: 'lambda', + description: 'Test 0', + feature: 'router', + module: 'destination', + version: 'v0', + input: { + request: { + body: { + input: [ + { + message: { + type: 'identify', + sentAt: '2022-08-18T08:43:15.539+05:30', + userId: 'identified user id', + context: { + ip: '14.5.67.21', + traits: { + data: [ + { + id: 6104546, + url: 'https://api.github.com/repos/mralexgray/-REPONAME', + fork: false, + name: '-REPONAME', + size: 48, + forks: 0, + owner: { + id: 262517, + url: 'https://api.github.com/users/mralexgray', + type: 'User', + login: 'mralexgray', + node_id: 'MDQ6VXNlcjI2MjUxNw==', + html_url: 'https://github.com/mralexgray', + gists_url: 'https://api.github.com/users/mralexgray/gists{/gist_id}', + repos_url: 'https://api.github.com/users/mralexgray/repos', + avatar_url: 'https://avatars.githubusercontent.com/u/262517?v=4', + events_url: 'https://api.github.com/users/mralexgray/events{/privacy}', + site_admin: false, + gravatar_id: '', + starred_url: + 'https://api.github.com/users/mralexgray/starred{/owner}{/repo}', + followers_url: 'https://api.github.com/users/mralexgray/followers', + following_url: + 'https://api.github.com/users/mralexgray/following{/other_user}', + organizations_url: 'https://api.github.com/users/mralexgray/orgs', + subscriptions_url: + 'https://api.github.com/users/mralexgray/subscriptions', + received_events_url: + 'https://api.github.com/users/mralexgray/received_events', + }, + topics: [], + git_url: 'git://github.com/mralexgray/-REPONAME.git', + license: null, + node_id: 'MDEwOlJlcG9zaXRvcnk2MTA0NTQ2', + private: false, + ssh_url: 'git@github.com:mralexgray/-REPONAME.git', + svn_url: 'https://github.com/mralexgray/-REPONAME', + archived: false, + disabled: false, + has_wiki: true, + homepage: null, + html_url: 'https://github.com/mralexgray/-REPONAME', + keys_url: 'https://api.github.com/repos/mralexgray/-REPONAME/keys{/key_id}', + language: null, + tags_url: 'https://api.github.com/repos/mralexgray/-REPONAME/tags', + watchers: 0, + blobs_url: + 'https://api.github.com/repos/mralexgray/-REPONAME/git/blobs{/sha}', + clone_url: 'https://github.com/mralexgray/-REPONAME.git', + forks_url: 'https://api.github.com/repos/mralexgray/-REPONAME/forks', + full_name: 'mralexgray/-REPONAME', + has_pages: false, + hooks_url: 'https://api.github.com/repos/mralexgray/-REPONAME/hooks', + pulls_url: + 'https://api.github.com/repos/mralexgray/-REPONAME/pulls{/number}', + pushed_at: '2012-10-06T16:37:39Z', + teams_url: 'https://api.github.com/repos/mralexgray/-REPONAME/teams', + trees_url: + 'https://api.github.com/repos/mralexgray/-REPONAME/git/trees{/sha}', + created_at: '2012-10-06T16:37:39Z', + events_url: 'https://api.github.com/repos/mralexgray/-REPONAME/events', + has_issues: true, + issues_url: + 'https://api.github.com/repos/mralexgray/-REPONAME/issues{/number}', + labels_url: + 'https://api.github.com/repos/mralexgray/-REPONAME/labels{/name}', + merges_url: 'https://api.github.com/repos/mralexgray/-REPONAME/merges', + mirror_url: null, + updated_at: '2013-01-12T13:39:30Z', + visibility: 'public', + archive_url: + 'https://api.github.com/repos/mralexgray/-REPONAME/{archive_format}{/ref}', + commits_url: + 'https://api.github.com/repos/mralexgray/-REPONAME/commits{/sha}', + compare_url: + 'https://api.github.com/repos/mralexgray/-REPONAME/compare/{base}...{head}', + description: null, + forks_count: 0, + is_template: false, + open_issues: 0, + branches_url: + 'https://api.github.com/repos/mralexgray/-REPONAME/branches{/branch}', + comments_url: + 'https://api.github.com/repos/mralexgray/-REPONAME/comments{/number}', + contents_url: + 'https://api.github.com/repos/mralexgray/-REPONAME/contents/{+path}', + git_refs_url: + 'https://api.github.com/repos/mralexgray/-REPONAME/git/refs{/sha}', + git_tags_url: + 'https://api.github.com/repos/mralexgray/-REPONAME/git/tags{/sha}', + has_projects: true, + releases_url: + 'https://api.github.com/repos/mralexgray/-REPONAME/releases{/id}', + statuses_url: + 'https://api.github.com/repos/mralexgray/-REPONAME/statuses/{sha}', + allow_forking: true, + assignees_url: + 'https://api.github.com/repos/mralexgray/-REPONAME/assignees{/user}', + downloads_url: + 'https://api.github.com/repos/mralexgray/-REPONAME/downloads', + has_downloads: true, + languages_url: + 'https://api.github.com/repos/mralexgray/-REPONAME/languages', + default_branch: 'master', + milestones_url: + 'https://api.github.com/repos/mralexgray/-REPONAME/milestones{/number}', + stargazers_url: + 'https://api.github.com/repos/mralexgray/-REPONAME/stargazers', + watchers_count: 0, + deployments_url: + 'https://api.github.com/repos/mralexgray/-REPONAME/deployments', + git_commits_url: + 'https://api.github.com/repos/mralexgray/-REPONAME/git/commits{/sha}', + subscribers_url: + 'https://api.github.com/repos/mralexgray/-REPONAME/subscribers', + contributors_url: + 'https://api.github.com/repos/mralexgray/-REPONAME/contributors', + issue_events_url: + 'https://api.github.com/repos/mralexgray/-REPONAME/issues/events{/number}', + stargazers_count: 0, + subscription_url: + 'https://api.github.com/repos/mralexgray/-REPONAME/subscription', + collaborators_url: + 'https://api.github.com/repos/mralexgray/-REPONAME/collaborators{/collaborator}', + issue_comment_url: + 'https://api.github.com/repos/mralexgray/-REPONAME/issues/comments{/number}', + notifications_url: + 'https://api.github.com/repos/mralexgray/-REPONAME/notifications{?since,all,participating}', + open_issues_count: 0, + web_commit_signoff_required: false, + }, + { + id: 104510411, + url: 'https://api.github.com/repos/mralexgray/...', + fork: true, + name: '...', + size: 113, + forks: 0, + owner: { + id: 262517, + url: 'https://api.github.com/users/mralexgray', + type: 'User', + login: 'mralexgray', + node_id: 'MDQ6VXNlcjI2MjUxNw==', + html_url: 'https://github.com/mralexgray', + gists_url: 'https://api.github.com/users/mralexgray/gists{/gist_id}', + repos_url: 'https://api.github.com/users/mralexgray/repos', + avatar_url: 'https://avatars.githubusercontent.com/u/262517?v=4', + events_url: 'https://api.github.com/users/mralexgray/events{/privacy}', + site_admin: false, + gravatar_id: '', + starred_url: + 'https://api.github.com/users/mralexgray/starred{/owner}{/repo}', + followers_url: 'https://api.github.com/users/mralexgray/followers', + following_url: + 'https://api.github.com/users/mralexgray/following{/other_user}', + organizations_url: 'https://api.github.com/users/mralexgray/orgs', + subscriptions_url: + 'https://api.github.com/users/mralexgray/subscriptions', + received_events_url: + 'https://api.github.com/users/mralexgray/received_events', + }, + topics: [], + git_url: 'git://github.com/mralexgray/....git', + license: { + key: 'mit', + url: 'https://api.github.com/licenses/mit', + name: 'MIT License', + node_id: 'MDc6TGljZW5zZTEz', + spdx_id: 'MIT', + }, + node_id: 'MDEwOlJlcG9zaXRvcnkxMDQ1MTA0MTE=', + private: false, + ssh_url: 'git@github.com:mralexgray/....git', + svn_url: 'https://github.com/mralexgray/...', + archived: false, + disabled: false, + has_wiki: false, + homepage: 'https://driesvints.com/blog/getting-started-with-dotfiles', + html_url: 'https://github.com/mralexgray/...', + keys_url: 'https://api.github.com/repos/mralexgray/.../keys{/key_id}', + language: 'Shell', + tags_url: 'https://api.github.com/repos/mralexgray/.../tags', + watchers: 0, + blobs_url: 'https://api.github.com/repos/mralexgray/.../git/blobs{/sha}', + clone_url: 'https://github.com/mralexgray/....git', + forks_url: 'https://api.github.com/repos/mralexgray/.../forks', + full_name: 'mralexgray/...', + has_pages: false, + hooks_url: 'https://api.github.com/repos/mralexgray/.../hooks', + pulls_url: 'https://api.github.com/repos/mralexgray/.../pulls{/number}', + pushed_at: '2017-09-15T08:27:32Z', + teams_url: 'https://api.github.com/repos/mralexgray/.../teams', + trees_url: 'https://api.github.com/repos/mralexgray/.../git/trees{/sha}', + created_at: '2017-09-22T19:19:42Z', + events_url: 'https://api.github.com/repos/mralexgray/.../events', + has_issues: false, + issues_url: 'https://api.github.com/repos/mralexgray/.../issues{/number}', + labels_url: 'https://api.github.com/repos/mralexgray/.../labels{/name}', + merges_url: 'https://api.github.com/repos/mralexgray/.../merges', + mirror_url: null, + updated_at: '2017-09-22T19:20:22Z', + visibility: 'public', + archive_url: + 'https://api.github.com/repos/mralexgray/.../{archive_format}{/ref}', + commits_url: 'https://api.github.com/repos/mralexgray/.../commits{/sha}', + compare_url: + 'https://api.github.com/repos/mralexgray/.../compare/{base}...{head}', + description: ':computer: Public repo for my personal dotfiles.', + forks_count: 0, + is_template: false, + open_issues: 0, + branches_url: + 'https://api.github.com/repos/mralexgray/.../branches{/branch}', + comments_url: + 'https://api.github.com/repos/mralexgray/.../comments{/number}', + contents_url: + 'https://api.github.com/repos/mralexgray/.../contents/{+path}', + git_refs_url: 'https://api.github.com/repos/mralexgray/.../git/refs{/sha}', + git_tags_url: 'https://api.github.com/repos/mralexgray/.../git/tags{/sha}', + has_projects: true, + releases_url: 'https://api.github.com/repos/mralexgray/.../releases{/id}', + statuses_url: 'https://api.github.com/repos/mralexgray/.../statuses/{sha}', + allow_forking: true, + assignees_url: + 'https://api.github.com/repos/mralexgray/.../assignees{/user}', + downloads_url: 'https://api.github.com/repos/mralexgray/.../downloads', + has_downloads: true, + languages_url: 'https://api.github.com/repos/mralexgray/.../languages', + default_branch: 'master', + milestones_url: + 'https://api.github.com/repos/mralexgray/.../milestones{/number}', + stargazers_url: 'https://api.github.com/repos/mralexgray/.../stargazers', + watchers_count: 0, + deployments_url: 'https://api.github.com/repos/mralexgray/.../deployments', + git_commits_url: + 'https://api.github.com/repos/mralexgray/.../git/commits{/sha}', + subscribers_url: 'https://api.github.com/repos/mralexgray/.../subscribers', + contributors_url: + 'https://api.github.com/repos/mralexgray/.../contributors', + issue_events_url: + 'https://api.github.com/repos/mralexgray/.../issues/events{/number}', + stargazers_count: 0, + subscription_url: + 'https://api.github.com/repos/mralexgray/.../subscription', + collaborators_url: + 'https://api.github.com/repos/mralexgray/.../collaborators{/collaborator}', + issue_comment_url: + 'https://api.github.com/repos/mralexgray/.../issues/comments{/number}', + notifications_url: + 'https://api.github.com/repos/mralexgray/.../notifications{?since,all,participating}', + open_issues_count: 0, + web_commit_signoff_required: false, + }, + { + id: 58656723, + url: 'https://api.github.com/repos/mralexgray/2200087-Serial-Protocol', + fork: true, + name: '2200087-Serial-Protocol', + size: 41, + forks: 1, + owner: { + id: 262517, + url: 'https://api.github.com/users/mralexgray', + type: 'User', + login: 'mralexgray', + node_id: 'MDQ6VXNlcjI2MjUxNw==', + html_url: 'https://github.com/mralexgray', + gists_url: 'https://api.github.com/users/mralexgray/gists{/gist_id}', + repos_url: 'https://api.github.com/users/mralexgray/repos', + avatar_url: 'https://avatars.githubusercontent.com/u/262517?v=4', + events_url: 'https://api.github.com/users/mralexgray/events{/privacy}', + site_admin: false, + gravatar_id: '', + starred_url: + 'https://api.github.com/users/mralexgray/starred{/owner}{/repo}', + followers_url: 'https://api.github.com/users/mralexgray/followers', + following_url: + 'https://api.github.com/users/mralexgray/following{/other_user}', + organizations_url: 'https://api.github.com/users/mralexgray/orgs', + subscriptions_url: + 'https://api.github.com/users/mralexgray/subscriptions', + received_events_url: + 'https://api.github.com/users/mralexgray/received_events', + }, + topics: [], + git_url: 'git://github.com/mralexgray/2200087-Serial-Protocol.git', + license: { + key: 'gpl-2.0', + url: 'https://api.github.com/licenses/gpl-2.0', + name: 'GNU General Public License v2.0', + node_id: 'MDc6TGljZW5zZTg=', + spdx_id: 'GPL-2.0', + }, + node_id: 'MDEwOlJlcG9zaXRvcnk1ODY1NjcyMw==', + private: false, + ssh_url: 'git@github.com:mralexgray/2200087-Serial-Protocol.git', + svn_url: 'https://github.com/mralexgray/2200087-Serial-Protocol', + archived: false, + disabled: false, + has_wiki: true, + homepage: 'http://daviddworken.com', + html_url: 'https://github.com/mralexgray/2200087-Serial-Protocol', + keys_url: + 'https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/keys{/key_id}', + language: 'Python', + tags_url: + 'https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/tags', + watchers: 0, + blobs_url: + 'https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/git/blobs{/sha}', + clone_url: 'https://github.com/mralexgray/2200087-Serial-Protocol.git', + forks_url: + 'https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/forks', + full_name: 'mralexgray/2200087-Serial-Protocol', + has_pages: false, + hooks_url: + 'https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/hooks', + pulls_url: + 'https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/pulls{/number}', + pushed_at: '2016-05-12T16:07:24Z', + teams_url: + 'https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/teams', + trees_url: + 'https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/git/trees{/sha}', + created_at: '2016-05-12T16:05:28Z', + events_url: + 'https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/events', + has_issues: false, + issues_url: + 'https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/issues{/number}', + labels_url: + 'https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/labels{/name}', + merges_url: + 'https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/merges', + mirror_url: null, + updated_at: '2016-05-12T16:05:30Z', + visibility: 'public', + archive_url: + 'https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/{archive_format}{/ref}', + commits_url: + 'https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/commits{/sha}', + compare_url: + 'https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/compare/{base}...{head}', + description: + "A reverse engineered protocol description and accompanying code for Radioshack's 2200087 multimeter", + forks_count: 1, + is_template: false, + open_issues: 0, + branches_url: + 'https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/branches{/branch}', + comments_url: + 'https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/comments{/number}', + contents_url: + 'https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/contents/{+path}', + git_refs_url: + 'https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/git/refs{/sha}', + git_tags_url: + 'https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/git/tags{/sha}', + has_projects: true, + releases_url: + 'https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/releases{/id}', + statuses_url: + 'https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/statuses/{sha}', + allow_forking: true, + assignees_url: + 'https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/assignees{/user}', + downloads_url: + 'https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/downloads', + has_downloads: true, + languages_url: + 'https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/languages', + default_branch: 'master', + milestones_url: + 'https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/milestones{/number}', + stargazers_url: + 'https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/stargazers', + watchers_count: 0, + deployments_url: + 'https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/deployments', + git_commits_url: + 'https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/git/commits{/sha}', + subscribers_url: + 'https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/subscribers', + contributors_url: + 'https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/contributors', + issue_events_url: + 'https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/issues/events{/number}', + stargazers_count: 0, + subscription_url: + 'https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/subscription', + collaborators_url: + 'https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/collaborators{/collaborator}', + issue_comment_url: + 'https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/issues/comments{/number}', + notifications_url: + 'https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/notifications{?since,all,participating}', + open_issues_count: 0, + web_commit_signoff_required: false, + }, + { + id: 13121042, + url: 'https://api.github.com/repos/mralexgray/ace', + fork: true, + name: 'ace', + size: 21080, + forks: 1, + owner: { + id: 262517, + url: 'https://api.github.com/users/mralexgray', + type: 'User', + login: 'mralexgray', + node_id: 'MDQ6VXNlcjI2MjUxNw==', + html_url: 'https://github.com/mralexgray', + gists_url: 'https://api.github.com/users/mralexgray/gists{/gist_id}', + repos_url: 'https://api.github.com/users/mralexgray/repos', + avatar_url: 'https://avatars.githubusercontent.com/u/262517?v=4', + events_url: 'https://api.github.com/users/mralexgray/events{/privacy}', + site_admin: false, + gravatar_id: '', + starred_url: + 'https://api.github.com/users/mralexgray/starred{/owner}{/repo}', + followers_url: 'https://api.github.com/users/mralexgray/followers', + following_url: + 'https://api.github.com/users/mralexgray/following{/other_user}', + organizations_url: 'https://api.github.com/users/mralexgray/orgs', + subscriptions_url: + 'https://api.github.com/users/mralexgray/subscriptions', + received_events_url: + 'https://api.github.com/users/mralexgray/received_events', + }, + topics: [], + git_url: 'git://github.com/mralexgray/ace.git', + license: { + key: 'other', + url: null, + name: 'Other', + node_id: 'MDc6TGljZW5zZTA=', + spdx_id: 'NOASSERTION', + }, + node_id: 'MDEwOlJlcG9zaXRvcnkxMzEyMTA0Mg==', + private: false, + ssh_url: 'git@github.com:mralexgray/ace.git', + svn_url: 'https://github.com/mralexgray/ace', + archived: false, + disabled: false, + has_wiki: true, + homepage: 'http://ace.c9.io', + html_url: 'https://github.com/mralexgray/ace', + keys_url: 'https://api.github.com/repos/mralexgray/ace/keys{/key_id}', + language: 'JavaScript', + tags_url: 'https://api.github.com/repos/mralexgray/ace/tags', + watchers: 0, + blobs_url: 'https://api.github.com/repos/mralexgray/ace/git/blobs{/sha}', + clone_url: 'https://github.com/mralexgray/ace.git', + forks_url: 'https://api.github.com/repos/mralexgray/ace/forks', + full_name: 'mralexgray/ace', + has_pages: false, + hooks_url: 'https://api.github.com/repos/mralexgray/ace/hooks', + pulls_url: 'https://api.github.com/repos/mralexgray/ace/pulls{/number}', + pushed_at: '2013-10-26T12:34:48Z', + teams_url: 'https://api.github.com/repos/mralexgray/ace/teams', + trees_url: 'https://api.github.com/repos/mralexgray/ace/git/trees{/sha}', + created_at: '2013-09-26T11:58:10Z', + events_url: 'https://api.github.com/repos/mralexgray/ace/events', + has_issues: false, + issues_url: 'https://api.github.com/repos/mralexgray/ace/issues{/number}', + labels_url: 'https://api.github.com/repos/mralexgray/ace/labels{/name}', + merges_url: 'https://api.github.com/repos/mralexgray/ace/merges', + mirror_url: null, + updated_at: '2013-10-26T12:34:49Z', + visibility: 'public', + archive_url: + 'https://api.github.com/repos/mralexgray/ace/{archive_format}{/ref}', + commits_url: 'https://api.github.com/repos/mralexgray/ace/commits{/sha}', + compare_url: + 'https://api.github.com/repos/mralexgray/ace/compare/{base}...{head}', + description: 'Ace (Ajax.org Cloud9 Editor)', + forks_count: 1, + is_template: false, + open_issues: 0, + branches_url: + 'https://api.github.com/repos/mralexgray/ace/branches{/branch}', + comments_url: + 'https://api.github.com/repos/mralexgray/ace/comments{/number}', + contents_url: + 'https://api.github.com/repos/mralexgray/ace/contents/{+path}', + git_refs_url: 'https://api.github.com/repos/mralexgray/ace/git/refs{/sha}', + git_tags_url: 'https://api.github.com/repos/mralexgray/ace/git/tags{/sha}', + has_projects: true, + releases_url: 'https://api.github.com/repos/mralexgray/ace/releases{/id}', + statuses_url: 'https://api.github.com/repos/mralexgray/ace/statuses/{sha}', + allow_forking: true, + assignees_url: + 'https://api.github.com/repos/mralexgray/ace/assignees{/user}', + downloads_url: 'https://api.github.com/repos/mralexgray/ace/downloads', + has_downloads: true, + languages_url: 'https://api.github.com/repos/mralexgray/ace/languages', + default_branch: 'master', + milestones_url: + 'https://api.github.com/repos/mralexgray/ace/milestones{/number}', + stargazers_url: 'https://api.github.com/repos/mralexgray/ace/stargazers', + watchers_count: 0, + deployments_url: 'https://api.github.com/repos/mralexgray/ace/deployments', + git_commits_url: + 'https://api.github.com/repos/mralexgray/ace/git/commits{/sha}', + subscribers_url: 'https://api.github.com/repos/mralexgray/ace/subscribers', + contributors_url: + 'https://api.github.com/repos/mralexgray/ace/contributors', + issue_events_url: + 'https://api.github.com/repos/mralexgray/ace/issues/events{/number}', + stargazers_count: 0, + subscription_url: + 'https://api.github.com/repos/mralexgray/ace/subscription', + collaborators_url: + 'https://api.github.com/repos/mralexgray/ace/collaborators{/collaborator}', + issue_comment_url: + 'https://api.github.com/repos/mralexgray/ace/issues/comments{/number}', + notifications_url: + 'https://api.github.com/repos/mralexgray/ace/notifications{?since,all,participating}', + open_issues_count: 0, + web_commit_signoff_required: false, + }, + { + id: 10791045, + url: 'https://api.github.com/repos/mralexgray/ACEView', + fork: true, + name: 'ACEView', + size: 1733, + forks: 1, + owner: { + id: 262517, + url: 'https://api.github.com/users/mralexgray', + type: 'User', + login: 'mralexgray', + node_id: 'MDQ6VXNlcjI2MjUxNw==', + html_url: 'https://github.com/mralexgray', + gists_url: 'https://api.github.com/users/mralexgray/gists{/gist_id}', + repos_url: 'https://api.github.com/users/mralexgray/repos', + avatar_url: 'https://avatars.githubusercontent.com/u/262517?v=4', + events_url: 'https://api.github.com/users/mralexgray/events{/privacy}', + site_admin: false, + gravatar_id: '', + starred_url: + 'https://api.github.com/users/mralexgray/starred{/owner}{/repo}', + followers_url: 'https://api.github.com/users/mralexgray/followers', + following_url: + 'https://api.github.com/users/mralexgray/following{/other_user}', + organizations_url: 'https://api.github.com/users/mralexgray/orgs', + subscriptions_url: + 'https://api.github.com/users/mralexgray/subscriptions', + received_events_url: + 'https://api.github.com/users/mralexgray/received_events', + }, + topics: [], + git_url: 'git://github.com/mralexgray/ACEView.git', + license: { + key: 'other', + url: null, + name: 'Other', + node_id: 'MDc6TGljZW5zZTA=', + spdx_id: 'NOASSERTION', + }, + node_id: 'MDEwOlJlcG9zaXRvcnkxMDc5MTA0NQ==', + private: false, + ssh_url: 'git@github.com:mralexgray/ACEView.git', + svn_url: 'https://github.com/mralexgray/ACEView', + archived: false, + disabled: false, + has_wiki: true, + homepage: null, + html_url: 'https://github.com/mralexgray/ACEView', + keys_url: 'https://api.github.com/repos/mralexgray/ACEView/keys{/key_id}', + language: 'Objective-C', + tags_url: 'https://api.github.com/repos/mralexgray/ACEView/tags', + watchers: 0, + blobs_url: + 'https://api.github.com/repos/mralexgray/ACEView/git/blobs{/sha}', + clone_url: 'https://github.com/mralexgray/ACEView.git', + forks_url: 'https://api.github.com/repos/mralexgray/ACEView/forks', + full_name: 'mralexgray/ACEView', + has_pages: false, + hooks_url: 'https://api.github.com/repos/mralexgray/ACEView/hooks', + pulls_url: 'https://api.github.com/repos/mralexgray/ACEView/pulls{/number}', + pushed_at: '2014-05-09T01:36:23Z', + teams_url: 'https://api.github.com/repos/mralexgray/ACEView/teams', + trees_url: + 'https://api.github.com/repos/mralexgray/ACEView/git/trees{/sha}', + created_at: '2013-06-19T12:15:04Z', + events_url: 'https://api.github.com/repos/mralexgray/ACEView/events', + has_issues: false, + issues_url: + 'https://api.github.com/repos/mralexgray/ACEView/issues{/number}', + labels_url: 'https://api.github.com/repos/mralexgray/ACEView/labels{/name}', + merges_url: 'https://api.github.com/repos/mralexgray/ACEView/merges', + mirror_url: null, + updated_at: '2015-11-24T01:14:10Z', + visibility: 'public', + archive_url: + 'https://api.github.com/repos/mralexgray/ACEView/{archive_format}{/ref}', + commits_url: + 'https://api.github.com/repos/mralexgray/ACEView/commits{/sha}', + compare_url: + 'https://api.github.com/repos/mralexgray/ACEView/compare/{base}...{head}', + description: 'Use the wonderful ACE editor in your Cocoa applications', + forks_count: 1, + is_template: false, + open_issues: 0, + branches_url: + 'https://api.github.com/repos/mralexgray/ACEView/branches{/branch}', + comments_url: + 'https://api.github.com/repos/mralexgray/ACEView/comments{/number}', + contents_url: + 'https://api.github.com/repos/mralexgray/ACEView/contents/{+path}', + git_refs_url: + 'https://api.github.com/repos/mralexgray/ACEView/git/refs{/sha}', + git_tags_url: + 'https://api.github.com/repos/mralexgray/ACEView/git/tags{/sha}', + has_projects: true, + releases_url: + 'https://api.github.com/repos/mralexgray/ACEView/releases{/id}', + statuses_url: + 'https://api.github.com/repos/mralexgray/ACEView/statuses/{sha}', + allow_forking: true, + assignees_url: + 'https://api.github.com/repos/mralexgray/ACEView/assignees{/user}', + downloads_url: 'https://api.github.com/repos/mralexgray/ACEView/downloads', + has_downloads: true, + languages_url: 'https://api.github.com/repos/mralexgray/ACEView/languages', + default_branch: 'master', + milestones_url: + 'https://api.github.com/repos/mralexgray/ACEView/milestones{/number}', + stargazers_url: + 'https://api.github.com/repos/mralexgray/ACEView/stargazers', + watchers_count: 0, + deployments_url: + 'https://api.github.com/repos/mralexgray/ACEView/deployments', + git_commits_url: + 'https://api.github.com/repos/mralexgray/ACEView/git/commits{/sha}', + subscribers_url: + 'https://api.github.com/repos/mralexgray/ACEView/subscribers', + contributors_url: + 'https://api.github.com/repos/mralexgray/ACEView/contributors', + issue_events_url: + 'https://api.github.com/repos/mralexgray/ACEView/issues/events{/number}', + stargazers_count: 0, + subscription_url: + 'https://api.github.com/repos/mralexgray/ACEView/subscription', + collaborators_url: + 'https://api.github.com/repos/mralexgray/ACEView/collaborators{/collaborator}', + issue_comment_url: + 'https://api.github.com/repos/mralexgray/ACEView/issues/comments{/number}', + notifications_url: + 'https://api.github.com/repos/mralexgray/ACEView/notifications{?since,all,participating}', + open_issues_count: 0, + web_commit_signoff_required: false, + }, + { + id: 13623648, + url: 'https://api.github.com/repos/mralexgray/ActiveLog', + fork: true, + name: 'ActiveLog', + size: 60, + forks: 0, + owner: { + id: 262517, + url: 'https://api.github.com/users/mralexgray', + type: 'User', + login: 'mralexgray', + node_id: 'MDQ6VXNlcjI2MjUxNw==', + html_url: 'https://github.com/mralexgray', + gists_url: 'https://api.github.com/users/mralexgray/gists{/gist_id}', + repos_url: 'https://api.github.com/users/mralexgray/repos', + avatar_url: 'https://avatars.githubusercontent.com/u/262517?v=4', + events_url: 'https://api.github.com/users/mralexgray/events{/privacy}', + site_admin: false, + gravatar_id: '', + starred_url: + 'https://api.github.com/users/mralexgray/starred{/owner}{/repo}', + followers_url: 'https://api.github.com/users/mralexgray/followers', + following_url: + 'https://api.github.com/users/mralexgray/following{/other_user}', + organizations_url: 'https://api.github.com/users/mralexgray/orgs', + subscriptions_url: + 'https://api.github.com/users/mralexgray/subscriptions', + received_events_url: + 'https://api.github.com/users/mralexgray/received_events', + }, + topics: [], + git_url: 'git://github.com/mralexgray/ActiveLog.git', + license: null, + node_id: 'MDEwOlJlcG9zaXRvcnkxMzYyMzY0OA==', + private: false, + ssh_url: 'git@github.com:mralexgray/ActiveLog.git', + svn_url: 'https://github.com/mralexgray/ActiveLog', + archived: false, + disabled: false, + has_wiki: true, + homepage: 'http://deepitpro.com/en/articles/ActiveLog/info/', + html_url: 'https://github.com/mralexgray/ActiveLog', + keys_url: 'https://api.github.com/repos/mralexgray/ActiveLog/keys{/key_id}', + language: 'Objective-C', + tags_url: 'https://api.github.com/repos/mralexgray/ActiveLog/tags', + watchers: 0, + blobs_url: + 'https://api.github.com/repos/mralexgray/ActiveLog/git/blobs{/sha}', + clone_url: 'https://github.com/mralexgray/ActiveLog.git', + forks_url: 'https://api.github.com/repos/mralexgray/ActiveLog/forks', + full_name: 'mralexgray/ActiveLog', + has_pages: false, + hooks_url: 'https://api.github.com/repos/mralexgray/ActiveLog/hooks', + pulls_url: + 'https://api.github.com/repos/mralexgray/ActiveLog/pulls{/number}', + pushed_at: '2011-07-03T06:28:59Z', + teams_url: 'https://api.github.com/repos/mralexgray/ActiveLog/teams', + trees_url: + 'https://api.github.com/repos/mralexgray/ActiveLog/git/trees{/sha}', + created_at: '2013-10-16T15:52:37Z', + events_url: 'https://api.github.com/repos/mralexgray/ActiveLog/events', + has_issues: false, + issues_url: + 'https://api.github.com/repos/mralexgray/ActiveLog/issues{/number}', + labels_url: + 'https://api.github.com/repos/mralexgray/ActiveLog/labels{/name}', + merges_url: 'https://api.github.com/repos/mralexgray/ActiveLog/merges', + mirror_url: null, + updated_at: '2013-10-16T15:52:37Z', + visibility: 'public', + archive_url: + 'https://api.github.com/repos/mralexgray/ActiveLog/{archive_format}{/ref}', + commits_url: + 'https://api.github.com/repos/mralexgray/ActiveLog/commits{/sha}', + compare_url: + 'https://api.github.com/repos/mralexgray/ActiveLog/compare/{base}...{head}', + description: 'Shut up all logs with active filter.', + forks_count: 0, + is_template: false, + open_issues: 0, + branches_url: + 'https://api.github.com/repos/mralexgray/ActiveLog/branches{/branch}', + comments_url: + 'https://api.github.com/repos/mralexgray/ActiveLog/comments{/number}', + contents_url: + 'https://api.github.com/repos/mralexgray/ActiveLog/contents/{+path}', + git_refs_url: + 'https://api.github.com/repos/mralexgray/ActiveLog/git/refs{/sha}', + git_tags_url: + 'https://api.github.com/repos/mralexgray/ActiveLog/git/tags{/sha}', + has_projects: true, + releases_url: + 'https://api.github.com/repos/mralexgray/ActiveLog/releases{/id}', + statuses_url: + 'https://api.github.com/repos/mralexgray/ActiveLog/statuses/{sha}', + allow_forking: true, + assignees_url: + 'https://api.github.com/repos/mralexgray/ActiveLog/assignees{/user}', + downloads_url: + 'https://api.github.com/repos/mralexgray/ActiveLog/downloads', + has_downloads: true, + languages_url: + 'https://api.github.com/repos/mralexgray/ActiveLog/languages', + default_branch: 'master', + milestones_url: + 'https://api.github.com/repos/mralexgray/ActiveLog/milestones{/number}', + stargazers_url: + 'https://api.github.com/repos/mralexgray/ActiveLog/stargazers', + watchers_count: 0, + deployments_url: + 'https://api.github.com/repos/mralexgray/ActiveLog/deployments', + git_commits_url: + 'https://api.github.com/repos/mralexgray/ActiveLog/git/commits{/sha}', + subscribers_url: + 'https://api.github.com/repos/mralexgray/ActiveLog/subscribers', + contributors_url: + 'https://api.github.com/repos/mralexgray/ActiveLog/contributors', + issue_events_url: + 'https://api.github.com/repos/mralexgray/ActiveLog/issues/events{/number}', + stargazers_count: 0, + subscription_url: + 'https://api.github.com/repos/mralexgray/ActiveLog/subscription', + collaborators_url: + 'https://api.github.com/repos/mralexgray/ActiveLog/collaborators{/collaborator}', + issue_comment_url: + 'https://api.github.com/repos/mralexgray/ActiveLog/issues/comments{/number}', + notifications_url: + 'https://api.github.com/repos/mralexgray/ActiveLog/notifications{?since,all,participating}', + open_issues_count: 0, + web_commit_signoff_required: false, + }, + { + id: 9716210, + url: 'https://api.github.com/repos/mralexgray/adium', + fork: false, + name: 'adium', + size: 277719, + forks: 37, + owner: { + id: 262517, + url: 'https://api.github.com/users/mralexgray', + type: 'User', + login: 'mralexgray', + node_id: 'MDQ6VXNlcjI2MjUxNw==', + html_url: 'https://github.com/mralexgray', + gists_url: 'https://api.github.com/users/mralexgray/gists{/gist_id}', + repos_url: 'https://api.github.com/users/mralexgray/repos', + avatar_url: 'https://avatars.githubusercontent.com/u/262517?v=4', + events_url: 'https://api.github.com/users/mralexgray/events{/privacy}', + site_admin: false, + gravatar_id: '', + starred_url: + 'https://api.github.com/users/mralexgray/starred{/owner}{/repo}', + followers_url: 'https://api.github.com/users/mralexgray/followers', + following_url: + 'https://api.github.com/users/mralexgray/following{/other_user}', + organizations_url: 'https://api.github.com/users/mralexgray/orgs', + subscriptions_url: + 'https://api.github.com/users/mralexgray/subscriptions', + received_events_url: + 'https://api.github.com/users/mralexgray/received_events', + }, + topics: [], + git_url: 'git://github.com/mralexgray/adium.git', + license: { + key: 'other', + url: null, + name: 'Other', + node_id: 'MDc6TGljZW5zZTA=', + spdx_id: 'NOASSERTION', + }, + node_id: 'MDEwOlJlcG9zaXRvcnk5NzE2MjEw', + private: false, + ssh_url: 'git@github.com:mralexgray/adium.git', + svn_url: 'https://github.com/mralexgray/adium', + archived: false, + disabled: false, + has_wiki: false, + homepage: null, + html_url: 'https://github.com/mralexgray/adium', + keys_url: 'https://api.github.com/repos/mralexgray/adium/keys{/key_id}', + language: 'Objective-C', + tags_url: 'https://api.github.com/repos/mralexgray/adium/tags', + watchers: 0, + blobs_url: 'https://api.github.com/repos/mralexgray/adium/git/blobs{/sha}', + clone_url: 'https://github.com/mralexgray/adium.git', + forks_url: 'https://api.github.com/repos/mralexgray/adium/forks', + full_name: 'mralexgray/adium', + has_pages: false, + hooks_url: 'https://api.github.com/repos/mralexgray/adium/hooks', + pulls_url: 'https://api.github.com/repos/mralexgray/adium/pulls{/number}', + pushed_at: '2013-04-26T16:43:53Z', + teams_url: 'https://api.github.com/repos/mralexgray/adium/teams', + trees_url: 'https://api.github.com/repos/mralexgray/adium/git/trees{/sha}', + created_at: '2013-04-27T14:59:33Z', + events_url: 'https://api.github.com/repos/mralexgray/adium/events', + has_issues: false, + issues_url: 'https://api.github.com/repos/mralexgray/adium/issues{/number}', + labels_url: 'https://api.github.com/repos/mralexgray/adium/labels{/name}', + merges_url: 'https://api.github.com/repos/mralexgray/adium/merges', + mirror_url: null, + updated_at: '2019-12-11T06:51:45Z', + visibility: 'public', + archive_url: + 'https://api.github.com/repos/mralexgray/adium/{archive_format}{/ref}', + commits_url: 'https://api.github.com/repos/mralexgray/adium/commits{/sha}', + compare_url: + 'https://api.github.com/repos/mralexgray/adium/compare/{base}...{head}', + description: 'Official mirror of hg.adium.im', + forks_count: 37, + is_template: false, + open_issues: 0, + branches_url: + 'https://api.github.com/repos/mralexgray/adium/branches{/branch}', + comments_url: + 'https://api.github.com/repos/mralexgray/adium/comments{/number}', + contents_url: + 'https://api.github.com/repos/mralexgray/adium/contents/{+path}', + git_refs_url: + 'https://api.github.com/repos/mralexgray/adium/git/refs{/sha}', + git_tags_url: + 'https://api.github.com/repos/mralexgray/adium/git/tags{/sha}', + has_projects: true, + releases_url: 'https://api.github.com/repos/mralexgray/adium/releases{/id}', + statuses_url: + 'https://api.github.com/repos/mralexgray/adium/statuses/{sha}', + allow_forking: true, + assignees_url: + 'https://api.github.com/repos/mralexgray/adium/assignees{/user}', + downloads_url: 'https://api.github.com/repos/mralexgray/adium/downloads', + has_downloads: true, + languages_url: 'https://api.github.com/repos/mralexgray/adium/languages', + default_branch: 'master', + milestones_url: + 'https://api.github.com/repos/mralexgray/adium/milestones{/number}', + stargazers_url: 'https://api.github.com/repos/mralexgray/adium/stargazers', + watchers_count: 0, + deployments_url: + 'https://api.github.com/repos/mralexgray/adium/deployments', + git_commits_url: + 'https://api.github.com/repos/mralexgray/adium/git/commits{/sha}', + subscribers_url: + 'https://api.github.com/repos/mralexgray/adium/subscribers', + contributors_url: + 'https://api.github.com/repos/mralexgray/adium/contributors', + issue_events_url: + 'https://api.github.com/repos/mralexgray/adium/issues/events{/number}', + stargazers_count: 0, + subscription_url: + 'https://api.github.com/repos/mralexgray/adium/subscription', + collaborators_url: + 'https://api.github.com/repos/mralexgray/adium/collaborators{/collaborator}', + issue_comment_url: + 'https://api.github.com/repos/mralexgray/adium/issues/comments{/number}', + notifications_url: + 'https://api.github.com/repos/mralexgray/adium/notifications{?since,all,participating}', + open_issues_count: 0, + web_commit_signoff_required: false, + }, + { + id: 12752329, + url: 'https://api.github.com/repos/mralexgray/ADLivelyTableView', + fork: true, + name: 'ADLivelyTableView', + size: 73, + forks: 0, + owner: { + id: 262517, + url: 'https://api.github.com/users/mralexgray', + type: 'User', + login: 'mralexgray', + node_id: 'MDQ6VXNlcjI2MjUxNw==', + html_url: 'https://github.com/mralexgray', + gists_url: 'https://api.github.com/users/mralexgray/gists{/gist_id}', + repos_url: 'https://api.github.com/users/mralexgray/repos', + avatar_url: 'https://avatars.githubusercontent.com/u/262517?v=4', + events_url: 'https://api.github.com/users/mralexgray/events{/privacy}', + site_admin: false, + gravatar_id: '', + starred_url: + 'https://api.github.com/users/mralexgray/starred{/owner}{/repo}', + followers_url: 'https://api.github.com/users/mralexgray/followers', + following_url: + 'https://api.github.com/users/mralexgray/following{/other_user}', + organizations_url: 'https://api.github.com/users/mralexgray/orgs', + subscriptions_url: + 'https://api.github.com/users/mralexgray/subscriptions', + received_events_url: + 'https://api.github.com/users/mralexgray/received_events', + }, + topics: [], + git_url: 'git://github.com/mralexgray/ADLivelyTableView.git', + license: { + key: 'other', + url: null, + name: 'Other', + node_id: 'MDc6TGljZW5zZTA=', + spdx_id: 'NOASSERTION', + }, + node_id: 'MDEwOlJlcG9zaXRvcnkxMjc1MjMyOQ==', + private: false, + ssh_url: 'git@github.com:mralexgray/ADLivelyTableView.git', + svn_url: 'https://github.com/mralexgray/ADLivelyTableView', + archived: false, + disabled: false, + has_wiki: true, + homepage: 'http://applidium.com/en/news/lively_uitableview/', + html_url: 'https://github.com/mralexgray/ADLivelyTableView', + keys_url: + 'https://api.github.com/repos/mralexgray/ADLivelyTableView/keys{/key_id}', + language: 'Objective-C', + tags_url: 'https://api.github.com/repos/mralexgray/ADLivelyTableView/tags', + watchers: 0, + blobs_url: + 'https://api.github.com/repos/mralexgray/ADLivelyTableView/git/blobs{/sha}', + clone_url: 'https://github.com/mralexgray/ADLivelyTableView.git', + forks_url: + 'https://api.github.com/repos/mralexgray/ADLivelyTableView/forks', + full_name: 'mralexgray/ADLivelyTableView', + has_pages: false, + hooks_url: + 'https://api.github.com/repos/mralexgray/ADLivelyTableView/hooks', + pulls_url: + 'https://api.github.com/repos/mralexgray/ADLivelyTableView/pulls{/number}', + pushed_at: '2012-05-10T10:40:15Z', + teams_url: + 'https://api.github.com/repos/mralexgray/ADLivelyTableView/teams', + trees_url: + 'https://api.github.com/repos/mralexgray/ADLivelyTableView/git/trees{/sha}', + created_at: '2013-09-11T09:18:01Z', + events_url: + 'https://api.github.com/repos/mralexgray/ADLivelyTableView/events', + has_issues: false, + issues_url: + 'https://api.github.com/repos/mralexgray/ADLivelyTableView/issues{/number}', + labels_url: + 'https://api.github.com/repos/mralexgray/ADLivelyTableView/labels{/name}', + merges_url: + 'https://api.github.com/repos/mralexgray/ADLivelyTableView/merges', + mirror_url: null, + updated_at: '2013-09-11T09:18:03Z', + visibility: 'public', + archive_url: + 'https://api.github.com/repos/mralexgray/ADLivelyTableView/{archive_format}{/ref}', + commits_url: + 'https://api.github.com/repos/mralexgray/ADLivelyTableView/commits{/sha}', + compare_url: + 'https://api.github.com/repos/mralexgray/ADLivelyTableView/compare/{base}...{head}', + description: 'Lively UITableView', + forks_count: 0, + is_template: false, + open_issues: 0, + branches_url: + 'https://api.github.com/repos/mralexgray/ADLivelyTableView/branches{/branch}', + comments_url: + 'https://api.github.com/repos/mralexgray/ADLivelyTableView/comments{/number}', + contents_url: + 'https://api.github.com/repos/mralexgray/ADLivelyTableView/contents/{+path}', + git_refs_url: + 'https://api.github.com/repos/mralexgray/ADLivelyTableView/git/refs{/sha}', + git_tags_url: + 'https://api.github.com/repos/mralexgray/ADLivelyTableView/git/tags{/sha}', + has_projects: true, + releases_url: + 'https://api.github.com/repos/mralexgray/ADLivelyTableView/releases{/id}', + statuses_url: + 'https://api.github.com/repos/mralexgray/ADLivelyTableView/statuses/{sha}', + allow_forking: true, + assignees_url: + 'https://api.github.com/repos/mralexgray/ADLivelyTableView/assignees{/user}', + downloads_url: + 'https://api.github.com/repos/mralexgray/ADLivelyTableView/downloads', + has_downloads: true, + languages_url: + 'https://api.github.com/repos/mralexgray/ADLivelyTableView/languages', + default_branch: 'master', + milestones_url: + 'https://api.github.com/repos/mralexgray/ADLivelyTableView/milestones{/number}', + stargazers_url: + 'https://api.github.com/repos/mralexgray/ADLivelyTableView/stargazers', + watchers_count: 0, + deployments_url: + 'https://api.github.com/repos/mralexgray/ADLivelyTableView/deployments', + git_commits_url: + 'https://api.github.com/repos/mralexgray/ADLivelyTableView/git/commits{/sha}', + subscribers_url: + 'https://api.github.com/repos/mralexgray/ADLivelyTableView/subscribers', + contributors_url: + 'https://api.github.com/repos/mralexgray/ADLivelyTableView/contributors', + issue_events_url: + 'https://api.github.com/repos/mralexgray/ADLivelyTableView/issues/events{/number}', + stargazers_count: 0, + subscription_url: + 'https://api.github.com/repos/mralexgray/ADLivelyTableView/subscription', + collaborators_url: + 'https://api.github.com/repos/mralexgray/ADLivelyTableView/collaborators{/collaborator}', + issue_comment_url: + 'https://api.github.com/repos/mralexgray/ADLivelyTableView/issues/comments{/number}', + notifications_url: + 'https://api.github.com/repos/mralexgray/ADLivelyTableView/notifications{?since,all,participating}', + open_issues_count: 0, + web_commit_signoff_required: false, + }, + { + id: 5697379, + url: 'https://api.github.com/repos/mralexgray/AFIncrementalStore', + fork: true, + name: 'AFIncrementalStore', + size: 139, + forks: 0, + owner: { + id: 262517, + url: 'https://api.github.com/users/mralexgray', + type: 'User', + login: 'mralexgray', + node_id: 'MDQ6VXNlcjI2MjUxNw==', + html_url: 'https://github.com/mralexgray', + gists_url: 'https://api.github.com/users/mralexgray/gists{/gist_id}', + repos_url: 'https://api.github.com/users/mralexgray/repos', + avatar_url: 'https://avatars.githubusercontent.com/u/262517?v=4', + events_url: 'https://api.github.com/users/mralexgray/events{/privacy}', + site_admin: false, + gravatar_id: '', + starred_url: + 'https://api.github.com/users/mralexgray/starred{/owner}{/repo}', + followers_url: 'https://api.github.com/users/mralexgray/followers', + following_url: + 'https://api.github.com/users/mralexgray/following{/other_user}', + organizations_url: 'https://api.github.com/users/mralexgray/orgs', + subscriptions_url: + 'https://api.github.com/users/mralexgray/subscriptions', + received_events_url: + 'https://api.github.com/users/mralexgray/received_events', + }, + topics: [], + git_url: 'git://github.com/mralexgray/AFIncrementalStore.git', + license: { + key: 'mit', + url: 'https://api.github.com/licenses/mit', + name: 'MIT License', + node_id: 'MDc6TGljZW5zZTEz', + spdx_id: 'MIT', + }, + node_id: 'MDEwOlJlcG9zaXRvcnk1Njk3Mzc5', + private: false, + ssh_url: 'git@github.com:mralexgray/AFIncrementalStore.git', + svn_url: 'https://github.com/mralexgray/AFIncrementalStore', + archived: false, + disabled: false, + has_wiki: true, + homepage: null, + html_url: 'https://github.com/mralexgray/AFIncrementalStore', + keys_url: + 'https://api.github.com/repos/mralexgray/AFIncrementalStore/keys{/key_id}', + language: 'Objective-C', + tags_url: 'https://api.github.com/repos/mralexgray/AFIncrementalStore/tags', + watchers: 0, + blobs_url: + 'https://api.github.com/repos/mralexgray/AFIncrementalStore/git/blobs{/sha}', + clone_url: 'https://github.com/mralexgray/AFIncrementalStore.git', + forks_url: + 'https://api.github.com/repos/mralexgray/AFIncrementalStore/forks', + full_name: 'mralexgray/AFIncrementalStore', + has_pages: false, + hooks_url: + 'https://api.github.com/repos/mralexgray/AFIncrementalStore/hooks', + pulls_url: + 'https://api.github.com/repos/mralexgray/AFIncrementalStore/pulls{/number}', + pushed_at: '2012-09-01T22:46:25Z', + teams_url: + 'https://api.github.com/repos/mralexgray/AFIncrementalStore/teams', + trees_url: + 'https://api.github.com/repos/mralexgray/AFIncrementalStore/git/trees{/sha}', + created_at: '2012-09-06T04:20:33Z', + events_url: + 'https://api.github.com/repos/mralexgray/AFIncrementalStore/events', + has_issues: false, + issues_url: + 'https://api.github.com/repos/mralexgray/AFIncrementalStore/issues{/number}', + labels_url: + 'https://api.github.com/repos/mralexgray/AFIncrementalStore/labels{/name}', + merges_url: + 'https://api.github.com/repos/mralexgray/AFIncrementalStore/merges', + mirror_url: null, + updated_at: '2013-01-12T03:15:29Z', + visibility: 'public', + archive_url: + 'https://api.github.com/repos/mralexgray/AFIncrementalStore/{archive_format}{/ref}', + commits_url: + 'https://api.github.com/repos/mralexgray/AFIncrementalStore/commits{/sha}', + compare_url: + 'https://api.github.com/repos/mralexgray/AFIncrementalStore/compare/{base}...{head}', + description: 'Core Data Persistence with AFNetworking, Done Right', + forks_count: 0, + is_template: false, + open_issues: 0, + branches_url: + 'https://api.github.com/repos/mralexgray/AFIncrementalStore/branches{/branch}', + comments_url: + 'https://api.github.com/repos/mralexgray/AFIncrementalStore/comments{/number}', + contents_url: + 'https://api.github.com/repos/mralexgray/AFIncrementalStore/contents/{+path}', + git_refs_url: + 'https://api.github.com/repos/mralexgray/AFIncrementalStore/git/refs{/sha}', + git_tags_url: + 'https://api.github.com/repos/mralexgray/AFIncrementalStore/git/tags{/sha}', + has_projects: true, + releases_url: + 'https://api.github.com/repos/mralexgray/AFIncrementalStore/releases{/id}', + statuses_url: + 'https://api.github.com/repos/mralexgray/AFIncrementalStore/statuses/{sha}', + allow_forking: true, + assignees_url: + 'https://api.github.com/repos/mralexgray/AFIncrementalStore/assignees{/user}', + downloads_url: + 'https://api.github.com/repos/mralexgray/AFIncrementalStore/downloads', + has_downloads: true, + languages_url: + 'https://api.github.com/repos/mralexgray/AFIncrementalStore/languages', + default_branch: 'master', + milestones_url: + 'https://api.github.com/repos/mralexgray/AFIncrementalStore/milestones{/number}', + stargazers_url: + 'https://api.github.com/repos/mralexgray/AFIncrementalStore/stargazers', + watchers_count: 0, + deployments_url: + 'https://api.github.com/repos/mralexgray/AFIncrementalStore/deployments', + git_commits_url: + 'https://api.github.com/repos/mralexgray/AFIncrementalStore/git/commits{/sha}', + subscribers_url: + 'https://api.github.com/repos/mralexgray/AFIncrementalStore/subscribers', + contributors_url: + 'https://api.github.com/repos/mralexgray/AFIncrementalStore/contributors', + issue_events_url: + 'https://api.github.com/repos/mralexgray/AFIncrementalStore/issues/events{/number}', + stargazers_count: 0, + subscription_url: + 'https://api.github.com/repos/mralexgray/AFIncrementalStore/subscription', + collaborators_url: + 'https://api.github.com/repos/mralexgray/AFIncrementalStore/collaborators{/collaborator}', + issue_comment_url: + 'https://api.github.com/repos/mralexgray/AFIncrementalStore/issues/comments{/number}', + notifications_url: + 'https://api.github.com/repos/mralexgray/AFIncrementalStore/notifications{?since,all,participating}', + open_issues_count: 0, + web_commit_signoff_required: false, + }, + { + id: 6969621, + url: 'https://api.github.com/repos/mralexgray/AFNetworking', + fork: true, + name: 'AFNetworking', + size: 4341, + forks: 0, + owner: { + id: 262517, + url: 'https://api.github.com/users/mralexgray', + type: 'User', + login: 'mralexgray', + node_id: 'MDQ6VXNlcjI2MjUxNw==', + html_url: 'https://github.com/mralexgray', + gists_url: 'https://api.github.com/users/mralexgray/gists{/gist_id}', + repos_url: 'https://api.github.com/users/mralexgray/repos', + avatar_url: 'https://avatars.githubusercontent.com/u/262517?v=4', + events_url: 'https://api.github.com/users/mralexgray/events{/privacy}', + site_admin: false, + gravatar_id: '', + starred_url: + 'https://api.github.com/users/mralexgray/starred{/owner}{/repo}', + followers_url: 'https://api.github.com/users/mralexgray/followers', + following_url: + 'https://api.github.com/users/mralexgray/following{/other_user}', + organizations_url: 'https://api.github.com/users/mralexgray/orgs', + subscriptions_url: + 'https://api.github.com/users/mralexgray/subscriptions', + received_events_url: + 'https://api.github.com/users/mralexgray/received_events', + }, + topics: [], + git_url: 'git://github.com/mralexgray/AFNetworking.git', + license: { + key: 'mit', + url: 'https://api.github.com/licenses/mit', + name: 'MIT License', + node_id: 'MDc6TGljZW5zZTEz', + spdx_id: 'MIT', + }, + node_id: 'MDEwOlJlcG9zaXRvcnk2OTY5NjIx', + private: false, + ssh_url: 'git@github.com:mralexgray/AFNetworking.git', + svn_url: 'https://github.com/mralexgray/AFNetworking', + archived: false, + disabled: false, + has_wiki: true, + homepage: 'http://afnetworking.com', + html_url: 'https://github.com/mralexgray/AFNetworking', + keys_url: + 'https://api.github.com/repos/mralexgray/AFNetworking/keys{/key_id}', + language: 'Objective-C', + tags_url: 'https://api.github.com/repos/mralexgray/AFNetworking/tags', + watchers: 2, + blobs_url: + 'https://api.github.com/repos/mralexgray/AFNetworking/git/blobs{/sha}', + clone_url: 'https://github.com/mralexgray/AFNetworking.git', + forks_url: 'https://api.github.com/repos/mralexgray/AFNetworking/forks', + full_name: 'mralexgray/AFNetworking', + has_pages: false, + hooks_url: 'https://api.github.com/repos/mralexgray/AFNetworking/hooks', + pulls_url: + 'https://api.github.com/repos/mralexgray/AFNetworking/pulls{/number}', + pushed_at: '2014-01-24T07:14:32Z', + teams_url: 'https://api.github.com/repos/mralexgray/AFNetworking/teams', + trees_url: + 'https://api.github.com/repos/mralexgray/AFNetworking/git/trees{/sha}', + created_at: '2012-12-02T17:00:04Z', + events_url: 'https://api.github.com/repos/mralexgray/AFNetworking/events', + has_issues: false, + issues_url: + 'https://api.github.com/repos/mralexgray/AFNetworking/issues{/number}', + labels_url: + 'https://api.github.com/repos/mralexgray/AFNetworking/labels{/name}', + merges_url: 'https://api.github.com/repos/mralexgray/AFNetworking/merges', + mirror_url: null, + updated_at: '2014-01-24T07:14:33Z', + visibility: 'public', + archive_url: + 'https://api.github.com/repos/mralexgray/AFNetworking/{archive_format}{/ref}', + commits_url: + 'https://api.github.com/repos/mralexgray/AFNetworking/commits{/sha}', + compare_url: + 'https://api.github.com/repos/mralexgray/AFNetworking/compare/{base}...{head}', + description: 'A delightful iOS and OS X networking framework', + forks_count: 0, + is_template: false, + open_issues: 0, + branches_url: + 'https://api.github.com/repos/mralexgray/AFNetworking/branches{/branch}', + comments_url: + 'https://api.github.com/repos/mralexgray/AFNetworking/comments{/number}', + contents_url: + 'https://api.github.com/repos/mralexgray/AFNetworking/contents/{+path}', + git_refs_url: + 'https://api.github.com/repos/mralexgray/AFNetworking/git/refs{/sha}', + git_tags_url: + 'https://api.github.com/repos/mralexgray/AFNetworking/git/tags{/sha}', + has_projects: true, + releases_url: + 'https://api.github.com/repos/mralexgray/AFNetworking/releases{/id}', + statuses_url: + 'https://api.github.com/repos/mralexgray/AFNetworking/statuses/{sha}', + allow_forking: true, + assignees_url: + 'https://api.github.com/repos/mralexgray/AFNetworking/assignees{/user}', + downloads_url: + 'https://api.github.com/repos/mralexgray/AFNetworking/downloads', + has_downloads: true, + languages_url: + 'https://api.github.com/repos/mralexgray/AFNetworking/languages', + default_branch: 'master', + milestones_url: + 'https://api.github.com/repos/mralexgray/AFNetworking/milestones{/number}', + stargazers_url: + 'https://api.github.com/repos/mralexgray/AFNetworking/stargazers', + watchers_count: 2, + deployments_url: + 'https://api.github.com/repos/mralexgray/AFNetworking/deployments', + git_commits_url: + 'https://api.github.com/repos/mralexgray/AFNetworking/git/commits{/sha}', + subscribers_url: + 'https://api.github.com/repos/mralexgray/AFNetworking/subscribers', + contributors_url: + 'https://api.github.com/repos/mralexgray/AFNetworking/contributors', + issue_events_url: + 'https://api.github.com/repos/mralexgray/AFNetworking/issues/events{/number}', + stargazers_count: 2, + subscription_url: + 'https://api.github.com/repos/mralexgray/AFNetworking/subscription', + collaborators_url: + 'https://api.github.com/repos/mralexgray/AFNetworking/collaborators{/collaborator}', + issue_comment_url: + 'https://api.github.com/repos/mralexgray/AFNetworking/issues/comments{/number}', + notifications_url: + 'https://api.github.com/repos/mralexgray/AFNetworking/notifications{?since,all,participating}', + open_issues_count: 0, + web_commit_signoff_required: false, + }, + { + id: 9485541, + url: 'https://api.github.com/repos/mralexgray/AGNSSplitView', + fork: true, + name: 'AGNSSplitView', + size: 68, + forks: 0, + owner: { + id: 262517, + url: 'https://api.github.com/users/mralexgray', + type: 'User', + login: 'mralexgray', + node_id: 'MDQ6VXNlcjI2MjUxNw==', + html_url: 'https://github.com/mralexgray', + gists_url: 'https://api.github.com/users/mralexgray/gists{/gist_id}', + repos_url: 'https://api.github.com/users/mralexgray/repos', + avatar_url: 'https://avatars.githubusercontent.com/u/262517?v=4', + events_url: 'https://api.github.com/users/mralexgray/events{/privacy}', + site_admin: false, + gravatar_id: '', + starred_url: + 'https://api.github.com/users/mralexgray/starred{/owner}{/repo}', + followers_url: 'https://api.github.com/users/mralexgray/followers', + following_url: + 'https://api.github.com/users/mralexgray/following{/other_user}', + organizations_url: 'https://api.github.com/users/mralexgray/orgs', + subscriptions_url: + 'https://api.github.com/users/mralexgray/subscriptions', + received_events_url: + 'https://api.github.com/users/mralexgray/received_events', + }, + topics: [], + git_url: 'git://github.com/mralexgray/AGNSSplitView.git', + license: null, + node_id: 'MDEwOlJlcG9zaXRvcnk5NDg1NTQx', + private: false, + ssh_url: 'git@github.com:mralexgray/AGNSSplitView.git', + svn_url: 'https://github.com/mralexgray/AGNSSplitView', + archived: false, + disabled: false, + has_wiki: true, + homepage: null, + html_url: 'https://github.com/mralexgray/AGNSSplitView', + keys_url: + 'https://api.github.com/repos/mralexgray/AGNSSplitView/keys{/key_id}', + language: 'Objective-C', + tags_url: 'https://api.github.com/repos/mralexgray/AGNSSplitView/tags', + watchers: 0, + blobs_url: + 'https://api.github.com/repos/mralexgray/AGNSSplitView/git/blobs{/sha}', + clone_url: 'https://github.com/mralexgray/AGNSSplitView.git', + forks_url: 'https://api.github.com/repos/mralexgray/AGNSSplitView/forks', + full_name: 'mralexgray/AGNSSplitView', + has_pages: false, + hooks_url: 'https://api.github.com/repos/mralexgray/AGNSSplitView/hooks', + pulls_url: + 'https://api.github.com/repos/mralexgray/AGNSSplitView/pulls{/number}', + pushed_at: '2013-02-26T00:32:32Z', + teams_url: 'https://api.github.com/repos/mralexgray/AGNSSplitView/teams', + trees_url: + 'https://api.github.com/repos/mralexgray/AGNSSplitView/git/trees{/sha}', + created_at: '2013-04-17T00:10:13Z', + events_url: 'https://api.github.com/repos/mralexgray/AGNSSplitView/events', + has_issues: false, + issues_url: + 'https://api.github.com/repos/mralexgray/AGNSSplitView/issues{/number}', + labels_url: + 'https://api.github.com/repos/mralexgray/AGNSSplitView/labels{/name}', + merges_url: 'https://api.github.com/repos/mralexgray/AGNSSplitView/merges', + mirror_url: null, + updated_at: '2013-04-17T00:10:13Z', + visibility: 'public', + archive_url: + 'https://api.github.com/repos/mralexgray/AGNSSplitView/{archive_format}{/ref}', + commits_url: + 'https://api.github.com/repos/mralexgray/AGNSSplitView/commits{/sha}', + compare_url: + 'https://api.github.com/repos/mralexgray/AGNSSplitView/compare/{base}...{head}', + description: 'Simple NSSplitView additions.', + forks_count: 0, + is_template: false, + open_issues: 0, + branches_url: + 'https://api.github.com/repos/mralexgray/AGNSSplitView/branches{/branch}', + comments_url: + 'https://api.github.com/repos/mralexgray/AGNSSplitView/comments{/number}', + contents_url: + 'https://api.github.com/repos/mralexgray/AGNSSplitView/contents/{+path}', + git_refs_url: + 'https://api.github.com/repos/mralexgray/AGNSSplitView/git/refs{/sha}', + git_tags_url: + 'https://api.github.com/repos/mralexgray/AGNSSplitView/git/tags{/sha}', + has_projects: true, + releases_url: + 'https://api.github.com/repos/mralexgray/AGNSSplitView/releases{/id}', + statuses_url: + 'https://api.github.com/repos/mralexgray/AGNSSplitView/statuses/{sha}', + allow_forking: true, + assignees_url: + 'https://api.github.com/repos/mralexgray/AGNSSplitView/assignees{/user}', + downloads_url: + 'https://api.github.com/repos/mralexgray/AGNSSplitView/downloads', + has_downloads: true, + languages_url: + 'https://api.github.com/repos/mralexgray/AGNSSplitView/languages', + default_branch: 'master', + milestones_url: + 'https://api.github.com/repos/mralexgray/AGNSSplitView/milestones{/number}', + stargazers_url: + 'https://api.github.com/repos/mralexgray/AGNSSplitView/stargazers', + watchers_count: 0, + deployments_url: + 'https://api.github.com/repos/mralexgray/AGNSSplitView/deployments', + git_commits_url: + 'https://api.github.com/repos/mralexgray/AGNSSplitView/git/commits{/sha}', + subscribers_url: + 'https://api.github.com/repos/mralexgray/AGNSSplitView/subscribers', + contributors_url: + 'https://api.github.com/repos/mralexgray/AGNSSplitView/contributors', + issue_events_url: + 'https://api.github.com/repos/mralexgray/AGNSSplitView/issues/events{/number}', + stargazers_count: 0, + subscription_url: + 'https://api.github.com/repos/mralexgray/AGNSSplitView/subscription', + collaborators_url: + 'https://api.github.com/repos/mralexgray/AGNSSplitView/collaborators{/collaborator}', + issue_comment_url: + 'https://api.github.com/repos/mralexgray/AGNSSplitView/issues/comments{/number}', + notifications_url: + 'https://api.github.com/repos/mralexgray/AGNSSplitView/notifications{?since,all,participating}', + open_issues_count: 0, + web_commit_signoff_required: false, + }, + { + id: 12767784, + url: 'https://api.github.com/repos/mralexgray/AGScopeBar', + fork: true, + name: 'AGScopeBar', + size: 64, + forks: 0, + owner: { + id: 262517, + url: 'https://api.github.com/users/mralexgray', + type: 'User', + login: 'mralexgray', + node_id: 'MDQ6VXNlcjI2MjUxNw==', + html_url: 'https://github.com/mralexgray', + gists_url: 'https://api.github.com/users/mralexgray/gists{/gist_id}', + repos_url: 'https://api.github.com/users/mralexgray/repos', + avatar_url: 'https://avatars.githubusercontent.com/u/262517?v=4', + events_url: 'https://api.github.com/users/mralexgray/events{/privacy}', + site_admin: false, + gravatar_id: '', + starred_url: + 'https://api.github.com/users/mralexgray/starred{/owner}{/repo}', + followers_url: 'https://api.github.com/users/mralexgray/followers', + following_url: + 'https://api.github.com/users/mralexgray/following{/other_user}', + organizations_url: 'https://api.github.com/users/mralexgray/orgs', + subscriptions_url: + 'https://api.github.com/users/mralexgray/subscriptions', + received_events_url: + 'https://api.github.com/users/mralexgray/received_events', + }, + topics: [], + git_url: 'git://github.com/mralexgray/AGScopeBar.git', + license: null, + node_id: 'MDEwOlJlcG9zaXRvcnkxMjc2Nzc4NA==', + private: false, + ssh_url: 'git@github.com:mralexgray/AGScopeBar.git', + svn_url: 'https://github.com/mralexgray/AGScopeBar', + archived: false, + disabled: false, + has_wiki: true, + homepage: null, + html_url: 'https://github.com/mralexgray/AGScopeBar', + keys_url: + 'https://api.github.com/repos/mralexgray/AGScopeBar/keys{/key_id}', + language: 'Objective-C', + tags_url: 'https://api.github.com/repos/mralexgray/AGScopeBar/tags', + watchers: 0, + blobs_url: + 'https://api.github.com/repos/mralexgray/AGScopeBar/git/blobs{/sha}', + clone_url: 'https://github.com/mralexgray/AGScopeBar.git', + forks_url: 'https://api.github.com/repos/mralexgray/AGScopeBar/forks', + full_name: 'mralexgray/AGScopeBar', + has_pages: false, + hooks_url: 'https://api.github.com/repos/mralexgray/AGScopeBar/hooks', + pulls_url: + 'https://api.github.com/repos/mralexgray/AGScopeBar/pulls{/number}', + pushed_at: '2013-05-07T03:35:29Z', + teams_url: 'https://api.github.com/repos/mralexgray/AGScopeBar/teams', + trees_url: + 'https://api.github.com/repos/mralexgray/AGScopeBar/git/trees{/sha}', + created_at: '2013-09-11T21:06:54Z', + events_url: 'https://api.github.com/repos/mralexgray/AGScopeBar/events', + has_issues: false, + issues_url: + 'https://api.github.com/repos/mralexgray/AGScopeBar/issues{/number}', + labels_url: + 'https://api.github.com/repos/mralexgray/AGScopeBar/labels{/name}', + merges_url: 'https://api.github.com/repos/mralexgray/AGScopeBar/merges', + mirror_url: null, + updated_at: '2013-09-11T21:06:54Z', + visibility: 'public', + archive_url: + 'https://api.github.com/repos/mralexgray/AGScopeBar/{archive_format}{/ref}', + commits_url: + 'https://api.github.com/repos/mralexgray/AGScopeBar/commits{/sha}', + compare_url: + 'https://api.github.com/repos/mralexgray/AGScopeBar/compare/{base}...{head}', + description: 'Custom scope bar implementation for Cocoa', + forks_count: 0, + is_template: false, + open_issues: 0, + branches_url: + 'https://api.github.com/repos/mralexgray/AGScopeBar/branches{/branch}', + comments_url: + 'https://api.github.com/repos/mralexgray/AGScopeBar/comments{/number}', + contents_url: + 'https://api.github.com/repos/mralexgray/AGScopeBar/contents/{+path}', + git_refs_url: + 'https://api.github.com/repos/mralexgray/AGScopeBar/git/refs{/sha}', + git_tags_url: + 'https://api.github.com/repos/mralexgray/AGScopeBar/git/tags{/sha}', + has_projects: true, + releases_url: + 'https://api.github.com/repos/mralexgray/AGScopeBar/releases{/id}', + statuses_url: + 'https://api.github.com/repos/mralexgray/AGScopeBar/statuses/{sha}', + allow_forking: true, + assignees_url: + 'https://api.github.com/repos/mralexgray/AGScopeBar/assignees{/user}', + downloads_url: + 'https://api.github.com/repos/mralexgray/AGScopeBar/downloads', + has_downloads: true, + languages_url: + 'https://api.github.com/repos/mralexgray/AGScopeBar/languages', + default_branch: 'master', + milestones_url: + 'https://api.github.com/repos/mralexgray/AGScopeBar/milestones{/number}', + stargazers_url: + 'https://api.github.com/repos/mralexgray/AGScopeBar/stargazers', + watchers_count: 0, + deployments_url: + 'https://api.github.com/repos/mralexgray/AGScopeBar/deployments', + git_commits_url: + 'https://api.github.com/repos/mralexgray/AGScopeBar/git/commits{/sha}', + subscribers_url: + 'https://api.github.com/repos/mralexgray/AGScopeBar/subscribers', + contributors_url: + 'https://api.github.com/repos/mralexgray/AGScopeBar/contributors', + issue_events_url: + 'https://api.github.com/repos/mralexgray/AGScopeBar/issues/events{/number}', + stargazers_count: 0, + subscription_url: + 'https://api.github.com/repos/mralexgray/AGScopeBar/subscription', + collaborators_url: + 'https://api.github.com/repos/mralexgray/AGScopeBar/collaborators{/collaborator}', + issue_comment_url: + 'https://api.github.com/repos/mralexgray/AGScopeBar/issues/comments{/number}', + notifications_url: + 'https://api.github.com/repos/mralexgray/AGScopeBar/notifications{?since,all,participating}', + open_issues_count: 0, + web_commit_signoff_required: false, + }, + { + id: 31829499, + url: 'https://api.github.com/repos/mralexgray/agvtool-xcode-plugin', + fork: true, + name: 'agvtool-xcode-plugin', + size: 102, + forks: 0, + owner: { + id: 262517, + url: 'https://api.github.com/users/mralexgray', + type: 'User', + login: 'mralexgray', + node_id: 'MDQ6VXNlcjI2MjUxNw==', + html_url: 'https://github.com/mralexgray', + gists_url: 'https://api.github.com/users/mralexgray/gists{/gist_id}', + repos_url: 'https://api.github.com/users/mralexgray/repos', + avatar_url: 'https://avatars.githubusercontent.com/u/262517?v=4', + events_url: 'https://api.github.com/users/mralexgray/events{/privacy}', + site_admin: false, + gravatar_id: '', + starred_url: + 'https://api.github.com/users/mralexgray/starred{/owner}{/repo}', + followers_url: 'https://api.github.com/users/mralexgray/followers', + following_url: + 'https://api.github.com/users/mralexgray/following{/other_user}', + organizations_url: 'https://api.github.com/users/mralexgray/orgs', + subscriptions_url: + 'https://api.github.com/users/mralexgray/subscriptions', + received_events_url: + 'https://api.github.com/users/mralexgray/received_events', + }, + topics: [], + git_url: 'git://github.com/mralexgray/agvtool-xcode-plugin.git', + license: null, + node_id: 'MDEwOlJlcG9zaXRvcnkzMTgyOTQ5OQ==', + private: false, + ssh_url: 'git@github.com:mralexgray/agvtool-xcode-plugin.git', + svn_url: 'https://github.com/mralexgray/agvtool-xcode-plugin', + archived: false, + disabled: false, + has_wiki: true, + homepage: null, + html_url: 'https://github.com/mralexgray/agvtool-xcode-plugin', + keys_url: + 'https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/keys{/key_id}', + language: 'Objective-C', + tags_url: + 'https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/tags', + watchers: 0, + blobs_url: + 'https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/git/blobs{/sha}', + clone_url: 'https://github.com/mralexgray/agvtool-xcode-plugin.git', + forks_url: + 'https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/forks', + full_name: 'mralexgray/agvtool-xcode-plugin', + has_pages: false, + hooks_url: + 'https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/hooks', + pulls_url: + 'https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/pulls{/number}', + pushed_at: '2015-03-08T00:04:31Z', + teams_url: + 'https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/teams', + trees_url: + 'https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/git/trees{/sha}', + created_at: '2015-03-07T22:15:38Z', + events_url: + 'https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/events', + has_issues: false, + issues_url: + 'https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/issues{/number}', + labels_url: + 'https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/labels{/name}', + merges_url: + 'https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/merges', + mirror_url: null, + updated_at: '2015-03-07T22:15:41Z', + visibility: 'public', + archive_url: + 'https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/{archive_format}{/ref}', + commits_url: + 'https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/commits{/sha}', + compare_url: + 'https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/compare/{base}...{head}', + description: 'this is a plugin wrapper for agvtool for xcode.', + forks_count: 0, + is_template: false, + open_issues: 0, + branches_url: + 'https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/branches{/branch}', + comments_url: + 'https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/comments{/number}', + contents_url: + 'https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/contents/{+path}', + git_refs_url: + 'https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/git/refs{/sha}', + git_tags_url: + 'https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/git/tags{/sha}', + has_projects: true, + releases_url: + 'https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/releases{/id}', + statuses_url: + 'https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/statuses/{sha}', + allow_forking: true, + assignees_url: + 'https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/assignees{/user}', + downloads_url: + 'https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/downloads', + has_downloads: true, + languages_url: + 'https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/languages', + default_branch: 'master', + milestones_url: + 'https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/milestones{/number}', + stargazers_url: + 'https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/stargazers', + watchers_count: 0, + deployments_url: + 'https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/deployments', + git_commits_url: + 'https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/git/commits{/sha}', + subscribers_url: + 'https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/subscribers', + contributors_url: + 'https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/contributors', + issue_events_url: + 'https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/issues/events{/number}', + stargazers_count: 0, + subscription_url: + 'https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/subscription', + collaborators_url: + 'https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/collaborators{/collaborator}', + issue_comment_url: + 'https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/issues/comments{/number}', + notifications_url: + 'https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/notifications{?since,all,participating}', + open_issues_count: 0, + web_commit_signoff_required: false, + }, + { + id: 9227846, + url: 'https://api.github.com/repos/mralexgray/AHContentBrowser', + fork: true, + name: 'AHContentBrowser', + size: 223, + forks: 0, + owner: { + id: 262517, + url: 'https://api.github.com/users/mralexgray', + type: 'User', + login: 'mralexgray', + node_id: 'MDQ6VXNlcjI2MjUxNw==', + html_url: 'https://github.com/mralexgray', + gists_url: 'https://api.github.com/users/mralexgray/gists{/gist_id}', + repos_url: 'https://api.github.com/users/mralexgray/repos', + avatar_url: 'https://avatars.githubusercontent.com/u/262517?v=4', + events_url: 'https://api.github.com/users/mralexgray/events{/privacy}', + site_admin: false, + gravatar_id: '', + starred_url: + 'https://api.github.com/users/mralexgray/starred{/owner}{/repo}', + followers_url: 'https://api.github.com/users/mralexgray/followers', + following_url: + 'https://api.github.com/users/mralexgray/following{/other_user}', + organizations_url: 'https://api.github.com/users/mralexgray/orgs', + subscriptions_url: + 'https://api.github.com/users/mralexgray/subscriptions', + received_events_url: + 'https://api.github.com/users/mralexgray/received_events', + }, + topics: [], + git_url: 'git://github.com/mralexgray/AHContentBrowser.git', + license: null, + node_id: 'MDEwOlJlcG9zaXRvcnk5MjI3ODQ2', + private: false, + ssh_url: 'git@github.com:mralexgray/AHContentBrowser.git', + svn_url: 'https://github.com/mralexgray/AHContentBrowser', + archived: false, + disabled: false, + has_wiki: true, + homepage: '', + html_url: 'https://github.com/mralexgray/AHContentBrowser', + keys_url: + 'https://api.github.com/repos/mralexgray/AHContentBrowser/keys{/key_id}', + language: 'Objective-C', + tags_url: 'https://api.github.com/repos/mralexgray/AHContentBrowser/tags', + watchers: 0, + blobs_url: + 'https://api.github.com/repos/mralexgray/AHContentBrowser/git/blobs{/sha}', + clone_url: 'https://github.com/mralexgray/AHContentBrowser.git', + forks_url: 'https://api.github.com/repos/mralexgray/AHContentBrowser/forks', + full_name: 'mralexgray/AHContentBrowser', + has_pages: false, + hooks_url: 'https://api.github.com/repos/mralexgray/AHContentBrowser/hooks', + pulls_url: + 'https://api.github.com/repos/mralexgray/AHContentBrowser/pulls{/number}', + pushed_at: '2013-03-13T17:38:23Z', + teams_url: 'https://api.github.com/repos/mralexgray/AHContentBrowser/teams', + trees_url: + 'https://api.github.com/repos/mralexgray/AHContentBrowser/git/trees{/sha}', + created_at: '2013-04-04T20:56:16Z', + events_url: + 'https://api.github.com/repos/mralexgray/AHContentBrowser/events', + has_issues: false, + issues_url: + 'https://api.github.com/repos/mralexgray/AHContentBrowser/issues{/number}', + labels_url: + 'https://api.github.com/repos/mralexgray/AHContentBrowser/labels{/name}', + merges_url: + 'https://api.github.com/repos/mralexgray/AHContentBrowser/merges', + mirror_url: null, + updated_at: '2015-10-22T05:00:24Z', + visibility: 'public', + archive_url: + 'https://api.github.com/repos/mralexgray/AHContentBrowser/{archive_format}{/ref}', + commits_url: + 'https://api.github.com/repos/mralexgray/AHContentBrowser/commits{/sha}', + compare_url: + 'https://api.github.com/repos/mralexgray/AHContentBrowser/compare/{base}...{head}', + description: + 'A Mac only webview that loads a fast readable version of the website if available.', + forks_count: 0, + is_template: false, + open_issues: 0, + branches_url: + 'https://api.github.com/repos/mralexgray/AHContentBrowser/branches{/branch}', + comments_url: + 'https://api.github.com/repos/mralexgray/AHContentBrowser/comments{/number}', + contents_url: + 'https://api.github.com/repos/mralexgray/AHContentBrowser/contents/{+path}', + git_refs_url: + 'https://api.github.com/repos/mralexgray/AHContentBrowser/git/refs{/sha}', + git_tags_url: + 'https://api.github.com/repos/mralexgray/AHContentBrowser/git/tags{/sha}', + has_projects: true, + releases_url: + 'https://api.github.com/repos/mralexgray/AHContentBrowser/releases{/id}', + statuses_url: + 'https://api.github.com/repos/mralexgray/AHContentBrowser/statuses/{sha}', + allow_forking: true, + assignees_url: + 'https://api.github.com/repos/mralexgray/AHContentBrowser/assignees{/user}', + downloads_url: + 'https://api.github.com/repos/mralexgray/AHContentBrowser/downloads', + has_downloads: true, + languages_url: + 'https://api.github.com/repos/mralexgray/AHContentBrowser/languages', + default_branch: 'master', + milestones_url: + 'https://api.github.com/repos/mralexgray/AHContentBrowser/milestones{/number}', + stargazers_url: + 'https://api.github.com/repos/mralexgray/AHContentBrowser/stargazers', + watchers_count: 0, + deployments_url: + 'https://api.github.com/repos/mralexgray/AHContentBrowser/deployments', + git_commits_url: + 'https://api.github.com/repos/mralexgray/AHContentBrowser/git/commits{/sha}', + subscribers_url: + 'https://api.github.com/repos/mralexgray/AHContentBrowser/subscribers', + contributors_url: + 'https://api.github.com/repos/mralexgray/AHContentBrowser/contributors', + issue_events_url: + 'https://api.github.com/repos/mralexgray/AHContentBrowser/issues/events{/number}', + stargazers_count: 0, + subscription_url: + 'https://api.github.com/repos/mralexgray/AHContentBrowser/subscription', + collaborators_url: + 'https://api.github.com/repos/mralexgray/AHContentBrowser/collaborators{/collaborator}', + issue_comment_url: + 'https://api.github.com/repos/mralexgray/AHContentBrowser/issues/comments{/number}', + notifications_url: + 'https://api.github.com/repos/mralexgray/AHContentBrowser/notifications{?since,all,participating}', + open_issues_count: 0, + web_commit_signoff_required: false, + }, + { + id: 37430328, + url: 'https://api.github.com/repos/mralexgray/AHLaunchCtl', + fork: true, + name: 'AHLaunchCtl', + size: 592, + forks: 0, + owner: { + id: 262517, + url: 'https://api.github.com/users/mralexgray', + type: 'User', + login: 'mralexgray', + node_id: 'MDQ6VXNlcjI2MjUxNw==', + html_url: 'https://github.com/mralexgray', + gists_url: 'https://api.github.com/users/mralexgray/gists{/gist_id}', + repos_url: 'https://api.github.com/users/mralexgray/repos', + avatar_url: 'https://avatars.githubusercontent.com/u/262517?v=4', + events_url: 'https://api.github.com/users/mralexgray/events{/privacy}', + site_admin: false, + gravatar_id: '', + starred_url: + 'https://api.github.com/users/mralexgray/starred{/owner}{/repo}', + followers_url: 'https://api.github.com/users/mralexgray/followers', + following_url: + 'https://api.github.com/users/mralexgray/following{/other_user}', + organizations_url: 'https://api.github.com/users/mralexgray/orgs', + subscriptions_url: + 'https://api.github.com/users/mralexgray/subscriptions', + received_events_url: + 'https://api.github.com/users/mralexgray/received_events', + }, + topics: [], + git_url: 'git://github.com/mralexgray/AHLaunchCtl.git', + license: { + key: 'mit', + url: 'https://api.github.com/licenses/mit', + name: 'MIT License', + node_id: 'MDc6TGljZW5zZTEz', + spdx_id: 'MIT', + }, + node_id: 'MDEwOlJlcG9zaXRvcnkzNzQzMDMyOA==', + private: false, + ssh_url: 'git@github.com:mralexgray/AHLaunchCtl.git', + svn_url: 'https://github.com/mralexgray/AHLaunchCtl', + archived: false, + disabled: false, + has_wiki: true, + homepage: '', + html_url: 'https://github.com/mralexgray/AHLaunchCtl', + keys_url: + 'https://api.github.com/repos/mralexgray/AHLaunchCtl/keys{/key_id}', + language: 'Objective-C', + tags_url: 'https://api.github.com/repos/mralexgray/AHLaunchCtl/tags', + watchers: 0, + blobs_url: + 'https://api.github.com/repos/mralexgray/AHLaunchCtl/git/blobs{/sha}', + clone_url: 'https://github.com/mralexgray/AHLaunchCtl.git', + forks_url: 'https://api.github.com/repos/mralexgray/AHLaunchCtl/forks', + full_name: 'mralexgray/AHLaunchCtl', + has_pages: false, + hooks_url: 'https://api.github.com/repos/mralexgray/AHLaunchCtl/hooks', + pulls_url: + 'https://api.github.com/repos/mralexgray/AHLaunchCtl/pulls{/number}', + pushed_at: '2015-05-26T18:50:48Z', + teams_url: 'https://api.github.com/repos/mralexgray/AHLaunchCtl/teams', + trees_url: + 'https://api.github.com/repos/mralexgray/AHLaunchCtl/git/trees{/sha}', + created_at: '2015-06-14T21:31:03Z', + events_url: 'https://api.github.com/repos/mralexgray/AHLaunchCtl/events', + has_issues: false, + issues_url: + 'https://api.github.com/repos/mralexgray/AHLaunchCtl/issues{/number}', + labels_url: + 'https://api.github.com/repos/mralexgray/AHLaunchCtl/labels{/name}', + merges_url: 'https://api.github.com/repos/mralexgray/AHLaunchCtl/merges', + mirror_url: null, + updated_at: '2015-06-14T21:31:04Z', + visibility: 'public', + archive_url: + 'https://api.github.com/repos/mralexgray/AHLaunchCtl/{archive_format}{/ref}', + commits_url: + 'https://api.github.com/repos/mralexgray/AHLaunchCtl/commits{/sha}', + compare_url: + 'https://api.github.com/repos/mralexgray/AHLaunchCtl/compare/{base}...{head}', + description: 'LaunchD Framework for Cocoa Apps', + forks_count: 0, + is_template: false, + open_issues: 0, + branches_url: + 'https://api.github.com/repos/mralexgray/AHLaunchCtl/branches{/branch}', + comments_url: + 'https://api.github.com/repos/mralexgray/AHLaunchCtl/comments{/number}', + contents_url: + 'https://api.github.com/repos/mralexgray/AHLaunchCtl/contents/{+path}', + git_refs_url: + 'https://api.github.com/repos/mralexgray/AHLaunchCtl/git/refs{/sha}', + git_tags_url: + 'https://api.github.com/repos/mralexgray/AHLaunchCtl/git/tags{/sha}', + has_projects: true, + releases_url: + 'https://api.github.com/repos/mralexgray/AHLaunchCtl/releases{/id}', + statuses_url: + 'https://api.github.com/repos/mralexgray/AHLaunchCtl/statuses/{sha}', + allow_forking: true, + assignees_url: + 'https://api.github.com/repos/mralexgray/AHLaunchCtl/assignees{/user}', + downloads_url: + 'https://api.github.com/repos/mralexgray/AHLaunchCtl/downloads', + has_downloads: true, + languages_url: + 'https://api.github.com/repos/mralexgray/AHLaunchCtl/languages', + default_branch: 'master', + milestones_url: + 'https://api.github.com/repos/mralexgray/AHLaunchCtl/milestones{/number}', + stargazers_url: + 'https://api.github.com/repos/mralexgray/AHLaunchCtl/stargazers', + watchers_count: 0, + deployments_url: + 'https://api.github.com/repos/mralexgray/AHLaunchCtl/deployments', + git_commits_url: + 'https://api.github.com/repos/mralexgray/AHLaunchCtl/git/commits{/sha}', + subscribers_url: + 'https://api.github.com/repos/mralexgray/AHLaunchCtl/subscribers', + contributors_url: + 'https://api.github.com/repos/mralexgray/AHLaunchCtl/contributors', + issue_events_url: + 'https://api.github.com/repos/mralexgray/AHLaunchCtl/issues/events{/number}', + stargazers_count: 0, + subscription_url: + 'https://api.github.com/repos/mralexgray/AHLaunchCtl/subscription', + collaborators_url: + 'https://api.github.com/repos/mralexgray/AHLaunchCtl/collaborators{/collaborator}', + issue_comment_url: + 'https://api.github.com/repos/mralexgray/AHLaunchCtl/issues/comments{/number}', + notifications_url: + 'https://api.github.com/repos/mralexgray/AHLaunchCtl/notifications{?since,all,participating}', + open_issues_count: 0, + web_commit_signoff_required: false, + }, + { + id: 9167473, + url: 'https://api.github.com/repos/mralexgray/AHLayout', + fork: true, + name: 'AHLayout', + size: 359, + forks: 0, + owner: { + id: 262517, + url: 'https://api.github.com/users/mralexgray', + type: 'User', + login: 'mralexgray', + node_id: 'MDQ6VXNlcjI2MjUxNw==', + html_url: 'https://github.com/mralexgray', + gists_url: 'https://api.github.com/users/mralexgray/gists{/gist_id}', + repos_url: 'https://api.github.com/users/mralexgray/repos', + avatar_url: 'https://avatars.githubusercontent.com/u/262517?v=4', + events_url: 'https://api.github.com/users/mralexgray/events{/privacy}', + site_admin: false, + gravatar_id: '', + starred_url: + 'https://api.github.com/users/mralexgray/starred{/owner}{/repo}', + followers_url: 'https://api.github.com/users/mralexgray/followers', + following_url: + 'https://api.github.com/users/mralexgray/following{/other_user}', + organizations_url: 'https://api.github.com/users/mralexgray/orgs', + subscriptions_url: + 'https://api.github.com/users/mralexgray/subscriptions', + received_events_url: + 'https://api.github.com/users/mralexgray/received_events', + }, + topics: [], + git_url: 'git://github.com/mralexgray/AHLayout.git', + license: null, + node_id: 'MDEwOlJlcG9zaXRvcnk5MTY3NDcz', + private: false, + ssh_url: 'git@github.com:mralexgray/AHLayout.git', + svn_url: 'https://github.com/mralexgray/AHLayout', + archived: false, + disabled: false, + has_wiki: true, + homepage: null, + html_url: 'https://github.com/mralexgray/AHLayout', + keys_url: 'https://api.github.com/repos/mralexgray/AHLayout/keys{/key_id}', + language: 'Objective-C', + tags_url: 'https://api.github.com/repos/mralexgray/AHLayout/tags', + watchers: 0, + blobs_url: + 'https://api.github.com/repos/mralexgray/AHLayout/git/blobs{/sha}', + clone_url: 'https://github.com/mralexgray/AHLayout.git', + forks_url: 'https://api.github.com/repos/mralexgray/AHLayout/forks', + full_name: 'mralexgray/AHLayout', + has_pages: false, + hooks_url: 'https://api.github.com/repos/mralexgray/AHLayout/hooks', + pulls_url: + 'https://api.github.com/repos/mralexgray/AHLayout/pulls{/number}', + pushed_at: '2013-07-08T02:31:14Z', + teams_url: 'https://api.github.com/repos/mralexgray/AHLayout/teams', + trees_url: + 'https://api.github.com/repos/mralexgray/AHLayout/git/trees{/sha}', + created_at: '2013-04-02T10:10:30Z', + events_url: 'https://api.github.com/repos/mralexgray/AHLayout/events', + has_issues: false, + issues_url: + 'https://api.github.com/repos/mralexgray/AHLayout/issues{/number}', + labels_url: + 'https://api.github.com/repos/mralexgray/AHLayout/labels{/name}', + merges_url: 'https://api.github.com/repos/mralexgray/AHLayout/merges', + mirror_url: null, + updated_at: '2013-07-08T02:31:17Z', + visibility: 'public', + archive_url: + 'https://api.github.com/repos/mralexgray/AHLayout/{archive_format}{/ref}', + commits_url: + 'https://api.github.com/repos/mralexgray/AHLayout/commits{/sha}', + compare_url: + 'https://api.github.com/repos/mralexgray/AHLayout/compare/{base}...{head}', + description: 'AHLayout', + forks_count: 0, + is_template: false, + open_issues: 0, + branches_url: + 'https://api.github.com/repos/mralexgray/AHLayout/branches{/branch}', + comments_url: + 'https://api.github.com/repos/mralexgray/AHLayout/comments{/number}', + contents_url: + 'https://api.github.com/repos/mralexgray/AHLayout/contents/{+path}', + git_refs_url: + 'https://api.github.com/repos/mralexgray/AHLayout/git/refs{/sha}', + git_tags_url: + 'https://api.github.com/repos/mralexgray/AHLayout/git/tags{/sha}', + has_projects: true, + releases_url: + 'https://api.github.com/repos/mralexgray/AHLayout/releases{/id}', + statuses_url: + 'https://api.github.com/repos/mralexgray/AHLayout/statuses/{sha}', + allow_forking: true, + assignees_url: + 'https://api.github.com/repos/mralexgray/AHLayout/assignees{/user}', + downloads_url: 'https://api.github.com/repos/mralexgray/AHLayout/downloads', + has_downloads: true, + languages_url: 'https://api.github.com/repos/mralexgray/AHLayout/languages', + default_branch: 'master', + milestones_url: + 'https://api.github.com/repos/mralexgray/AHLayout/milestones{/number}', + stargazers_url: + 'https://api.github.com/repos/mralexgray/AHLayout/stargazers', + watchers_count: 0, + deployments_url: + 'https://api.github.com/repos/mralexgray/AHLayout/deployments', + git_commits_url: + 'https://api.github.com/repos/mralexgray/AHLayout/git/commits{/sha}', + subscribers_url: + 'https://api.github.com/repos/mralexgray/AHLayout/subscribers', + contributors_url: + 'https://api.github.com/repos/mralexgray/AHLayout/contributors', + issue_events_url: + 'https://api.github.com/repos/mralexgray/AHLayout/issues/events{/number}', + stargazers_count: 0, + subscription_url: + 'https://api.github.com/repos/mralexgray/AHLayout/subscription', + collaborators_url: + 'https://api.github.com/repos/mralexgray/AHLayout/collaborators{/collaborator}', + issue_comment_url: + 'https://api.github.com/repos/mralexgray/AHLayout/issues/comments{/number}', + notifications_url: + 'https://api.github.com/repos/mralexgray/AHLayout/notifications{?since,all,participating}', + open_issues_count: 0, + web_commit_signoff_required: false, + }, + { + id: 18450201, + url: 'https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework', + fork: true, + name: 'Airmail-Plug-In-Framework', + size: 888, + forks: 0, + owner: { + id: 262517, + url: 'https://api.github.com/users/mralexgray', + type: 'User', + login: 'mralexgray', + node_id: 'MDQ6VXNlcjI2MjUxNw==', + html_url: 'https://github.com/mralexgray', + gists_url: 'https://api.github.com/users/mralexgray/gists{/gist_id}', + repos_url: 'https://api.github.com/users/mralexgray/repos', + avatar_url: 'https://avatars.githubusercontent.com/u/262517?v=4', + events_url: 'https://api.github.com/users/mralexgray/events{/privacy}', + site_admin: false, + gravatar_id: '', + starred_url: + 'https://api.github.com/users/mralexgray/starred{/owner}{/repo}', + followers_url: 'https://api.github.com/users/mralexgray/followers', + following_url: + 'https://api.github.com/users/mralexgray/following{/other_user}', + organizations_url: 'https://api.github.com/users/mralexgray/orgs', + subscriptions_url: + 'https://api.github.com/users/mralexgray/subscriptions', + received_events_url: + 'https://api.github.com/users/mralexgray/received_events', + }, + topics: [], + git_url: 'git://github.com/mralexgray/Airmail-Plug-In-Framework.git', + license: { + key: 'gpl-2.0', + url: 'https://api.github.com/licenses/gpl-2.0', + name: 'GNU General Public License v2.0', + node_id: 'MDc6TGljZW5zZTg=', + spdx_id: 'GPL-2.0', + }, + node_id: 'MDEwOlJlcG9zaXRvcnkxODQ1MDIwMQ==', + private: false, + ssh_url: 'git@github.com:mralexgray/Airmail-Plug-In-Framework.git', + svn_url: 'https://github.com/mralexgray/Airmail-Plug-In-Framework', + archived: false, + disabled: false, + has_wiki: true, + homepage: null, + html_url: 'https://github.com/mralexgray/Airmail-Plug-In-Framework', + keys_url: + 'https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/keys{/key_id}', + language: null, + tags_url: + 'https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/tags', + watchers: 0, + blobs_url: + 'https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/git/blobs{/sha}', + clone_url: 'https://github.com/mralexgray/Airmail-Plug-In-Framework.git', + forks_url: + 'https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/forks', + full_name: 'mralexgray/Airmail-Plug-In-Framework', + has_pages: false, + hooks_url: + 'https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/hooks', + pulls_url: + 'https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/pulls{/number}', + pushed_at: '2014-03-27T15:42:19Z', + teams_url: + 'https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/teams', + trees_url: + 'https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/git/trees{/sha}', + created_at: '2014-04-04T19:33:54Z', + events_url: + 'https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/events', + has_issues: false, + issues_url: + 'https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/issues{/number}', + labels_url: + 'https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/labels{/name}', + merges_url: + 'https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/merges', + mirror_url: null, + updated_at: '2014-11-23T19:31:04Z', + visibility: 'public', + archive_url: + 'https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/{archive_format}{/ref}', + commits_url: + 'https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/commits{/sha}', + compare_url: + 'https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/compare/{base}...{head}', + description: null, + forks_count: 0, + is_template: false, + open_issues: 0, + branches_url: + 'https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/branches{/branch}', + comments_url: + 'https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/comments{/number}', + contents_url: + 'https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/contents/{+path}', + git_refs_url: + 'https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/git/refs{/sha}', + git_tags_url: + 'https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/git/tags{/sha}', + has_projects: true, + releases_url: + 'https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/releases{/id}', + statuses_url: + 'https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/statuses/{sha}', + allow_forking: true, + assignees_url: + 'https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/assignees{/user}', + downloads_url: + 'https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/downloads', + has_downloads: true, + languages_url: + 'https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/languages', + default_branch: 'master', + milestones_url: + 'https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/milestones{/number}', + stargazers_url: + 'https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/stargazers', + watchers_count: 0, + deployments_url: + 'https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/deployments', + git_commits_url: + 'https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/git/commits{/sha}', + subscribers_url: + 'https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/subscribers', + contributors_url: + 'https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/contributors', + issue_events_url: + 'https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/issues/events{/number}', + stargazers_count: 0, + subscription_url: + 'https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/subscription', + collaborators_url: + 'https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/collaborators{/collaborator}', + issue_comment_url: + 'https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/issues/comments{/number}', + notifications_url: + 'https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/notifications{?since,all,participating}', + open_issues_count: 0, + web_commit_signoff_required: false, + }, + { + id: 5203219, + url: 'https://api.github.com/repos/mralexgray/AJS-iTunes-API', + fork: true, + name: 'AJS-iTunes-API', + size: 103, + forks: 0, + owner: { + id: 262517, + url: 'https://api.github.com/users/mralexgray', + type: 'User', + login: 'mralexgray', + node_id: 'MDQ6VXNlcjI2MjUxNw==', + html_url: 'https://github.com/mralexgray', + gists_url: 'https://api.github.com/users/mralexgray/gists{/gist_id}', + repos_url: 'https://api.github.com/users/mralexgray/repos', + avatar_url: 'https://avatars.githubusercontent.com/u/262517?v=4', + events_url: 'https://api.github.com/users/mralexgray/events{/privacy}', + site_admin: false, + gravatar_id: '', + starred_url: + 'https://api.github.com/users/mralexgray/starred{/owner}{/repo}', + followers_url: 'https://api.github.com/users/mralexgray/followers', + following_url: + 'https://api.github.com/users/mralexgray/following{/other_user}', + organizations_url: 'https://api.github.com/users/mralexgray/orgs', + subscriptions_url: + 'https://api.github.com/users/mralexgray/subscriptions', + received_events_url: + 'https://api.github.com/users/mralexgray/received_events', + }, + topics: [], + git_url: 'git://github.com/mralexgray/AJS-iTunes-API.git', + license: null, + node_id: 'MDEwOlJlcG9zaXRvcnk1MjAzMjE5', + private: false, + ssh_url: 'git@github.com:mralexgray/AJS-iTunes-API.git', + svn_url: 'https://github.com/mralexgray/AJS-iTunes-API', + archived: false, + disabled: false, + has_wiki: true, + homepage: '', + html_url: 'https://github.com/mralexgray/AJS-iTunes-API', + keys_url: + 'https://api.github.com/repos/mralexgray/AJS-iTunes-API/keys{/key_id}', + language: 'Objective-C', + tags_url: 'https://api.github.com/repos/mralexgray/AJS-iTunes-API/tags', + watchers: 2, + blobs_url: + 'https://api.github.com/repos/mralexgray/AJS-iTunes-API/git/blobs{/sha}', + clone_url: 'https://github.com/mralexgray/AJS-iTunes-API.git', + forks_url: 'https://api.github.com/repos/mralexgray/AJS-iTunes-API/forks', + full_name: 'mralexgray/AJS-iTunes-API', + has_pages: false, + hooks_url: 'https://api.github.com/repos/mralexgray/AJS-iTunes-API/hooks', + pulls_url: + 'https://api.github.com/repos/mralexgray/AJS-iTunes-API/pulls{/number}', + pushed_at: '2011-10-30T22:26:48Z', + teams_url: 'https://api.github.com/repos/mralexgray/AJS-iTunes-API/teams', + trees_url: + 'https://api.github.com/repos/mralexgray/AJS-iTunes-API/git/trees{/sha}', + created_at: '2012-07-27T10:20:58Z', + events_url: 'https://api.github.com/repos/mralexgray/AJS-iTunes-API/events', + has_issues: false, + issues_url: + 'https://api.github.com/repos/mralexgray/AJS-iTunes-API/issues{/number}', + labels_url: + 'https://api.github.com/repos/mralexgray/AJS-iTunes-API/labels{/name}', + merges_url: 'https://api.github.com/repos/mralexgray/AJS-iTunes-API/merges', + mirror_url: null, + updated_at: '2013-01-11T11:00:05Z', + visibility: 'public', + archive_url: + 'https://api.github.com/repos/mralexgray/AJS-iTunes-API/{archive_format}{/ref}', + commits_url: + 'https://api.github.com/repos/mralexgray/AJS-iTunes-API/commits{/sha}', + compare_url: + 'https://api.github.com/repos/mralexgray/AJS-iTunes-API/compare/{base}...{head}', + description: + 'Cocoa wrapper for the iTunes search API - for iOS and Mac OSX projects', + forks_count: 0, + is_template: false, + open_issues: 0, + branches_url: + 'https://api.github.com/repos/mralexgray/AJS-iTunes-API/branches{/branch}', + comments_url: + 'https://api.github.com/repos/mralexgray/AJS-iTunes-API/comments{/number}', + contents_url: + 'https://api.github.com/repos/mralexgray/AJS-iTunes-API/contents/{+path}', + git_refs_url: + 'https://api.github.com/repos/mralexgray/AJS-iTunes-API/git/refs{/sha}', + git_tags_url: + 'https://api.github.com/repos/mralexgray/AJS-iTunes-API/git/tags{/sha}', + has_projects: true, + releases_url: + 'https://api.github.com/repos/mralexgray/AJS-iTunes-API/releases{/id}', + statuses_url: + 'https://api.github.com/repos/mralexgray/AJS-iTunes-API/statuses/{sha}', + allow_forking: true, + assignees_url: + 'https://api.github.com/repos/mralexgray/AJS-iTunes-API/assignees{/user}', + downloads_url: + 'https://api.github.com/repos/mralexgray/AJS-iTunes-API/downloads', + has_downloads: true, + languages_url: + 'https://api.github.com/repos/mralexgray/AJS-iTunes-API/languages', + default_branch: 'master', + milestones_url: + 'https://api.github.com/repos/mralexgray/AJS-iTunes-API/milestones{/number}', + stargazers_url: + 'https://api.github.com/repos/mralexgray/AJS-iTunes-API/stargazers', + watchers_count: 2, + deployments_url: + 'https://api.github.com/repos/mralexgray/AJS-iTunes-API/deployments', + git_commits_url: + 'https://api.github.com/repos/mralexgray/AJS-iTunes-API/git/commits{/sha}', + subscribers_url: + 'https://api.github.com/repos/mralexgray/AJS-iTunes-API/subscribers', + contributors_url: + 'https://api.github.com/repos/mralexgray/AJS-iTunes-API/contributors', + issue_events_url: + 'https://api.github.com/repos/mralexgray/AJS-iTunes-API/issues/events{/number}', + stargazers_count: 2, + subscription_url: + 'https://api.github.com/repos/mralexgray/AJS-iTunes-API/subscription', + collaborators_url: + 'https://api.github.com/repos/mralexgray/AJS-iTunes-API/collaborators{/collaborator}', + issue_comment_url: + 'https://api.github.com/repos/mralexgray/AJS-iTunes-API/issues/comments{/number}', + notifications_url: + 'https://api.github.com/repos/mralexgray/AJS-iTunes-API/notifications{?since,all,participating}', + open_issues_count: 0, + web_commit_signoff_required: false, + }, + { + id: 10093801, + url: 'https://api.github.com/repos/mralexgray/Alcatraz', + fork: true, + name: 'Alcatraz', + size: 3668, + forks: 0, + owner: { + id: 262517, + url: 'https://api.github.com/users/mralexgray', + type: 'User', + login: 'mralexgray', + node_id: 'MDQ6VXNlcjI2MjUxNw==', + html_url: 'https://github.com/mralexgray', + gists_url: 'https://api.github.com/users/mralexgray/gists{/gist_id}', + repos_url: 'https://api.github.com/users/mralexgray/repos', + avatar_url: 'https://avatars.githubusercontent.com/u/262517?v=4', + events_url: 'https://api.github.com/users/mralexgray/events{/privacy}', + site_admin: false, + gravatar_id: '', + starred_url: + 'https://api.github.com/users/mralexgray/starred{/owner}{/repo}', + followers_url: 'https://api.github.com/users/mralexgray/followers', + following_url: + 'https://api.github.com/users/mralexgray/following{/other_user}', + organizations_url: 'https://api.github.com/users/mralexgray/orgs', + subscriptions_url: + 'https://api.github.com/users/mralexgray/subscriptions', + received_events_url: + 'https://api.github.com/users/mralexgray/received_events', + }, + topics: [], + git_url: 'git://github.com/mralexgray/Alcatraz.git', + license: { + key: 'mit', + url: 'https://api.github.com/licenses/mit', + name: 'MIT License', + node_id: 'MDc6TGljZW5zZTEz', + spdx_id: 'MIT', + }, + node_id: 'MDEwOlJlcG9zaXRvcnkxMDA5MzgwMQ==', + private: false, + ssh_url: 'git@github.com:mralexgray/Alcatraz.git', + svn_url: 'https://github.com/mralexgray/Alcatraz', + archived: false, + disabled: false, + has_wiki: false, + homepage: 'mneorr.github.com/Alcatraz', + html_url: 'https://github.com/mralexgray/Alcatraz', + keys_url: 'https://api.github.com/repos/mralexgray/Alcatraz/keys{/key_id}', + language: 'Objective-C', + tags_url: 'https://api.github.com/repos/mralexgray/Alcatraz/tags', + watchers: 0, + blobs_url: + 'https://api.github.com/repos/mralexgray/Alcatraz/git/blobs{/sha}', + clone_url: 'https://github.com/mralexgray/Alcatraz.git', + forks_url: 'https://api.github.com/repos/mralexgray/Alcatraz/forks', + full_name: 'mralexgray/Alcatraz', + has_pages: false, + hooks_url: 'https://api.github.com/repos/mralexgray/Alcatraz/hooks', + pulls_url: + 'https://api.github.com/repos/mralexgray/Alcatraz/pulls{/number}', + pushed_at: '2014-03-19T12:50:37Z', + teams_url: 'https://api.github.com/repos/mralexgray/Alcatraz/teams', + trees_url: + 'https://api.github.com/repos/mralexgray/Alcatraz/git/trees{/sha}', + created_at: '2013-05-16T04:41:13Z', + events_url: 'https://api.github.com/repos/mralexgray/Alcatraz/events', + has_issues: false, + issues_url: + 'https://api.github.com/repos/mralexgray/Alcatraz/issues{/number}', + labels_url: + 'https://api.github.com/repos/mralexgray/Alcatraz/labels{/name}', + merges_url: 'https://api.github.com/repos/mralexgray/Alcatraz/merges', + mirror_url: null, + updated_at: '2014-03-19T20:38:35Z', + visibility: 'public', + archive_url: + 'https://api.github.com/repos/mralexgray/Alcatraz/{archive_format}{/ref}', + commits_url: + 'https://api.github.com/repos/mralexgray/Alcatraz/commits{/sha}', + compare_url: + 'https://api.github.com/repos/mralexgray/Alcatraz/compare/{base}...{head}', + description: 'The most awesome (and only) Xcode package manager!', + forks_count: 0, + is_template: false, + open_issues: 0, + branches_url: + 'https://api.github.com/repos/mralexgray/Alcatraz/branches{/branch}', + comments_url: + 'https://api.github.com/repos/mralexgray/Alcatraz/comments{/number}', + contents_url: + 'https://api.github.com/repos/mralexgray/Alcatraz/contents/{+path}', + git_refs_url: + 'https://api.github.com/repos/mralexgray/Alcatraz/git/refs{/sha}', + git_tags_url: + 'https://api.github.com/repos/mralexgray/Alcatraz/git/tags{/sha}', + has_projects: true, + releases_url: + 'https://api.github.com/repos/mralexgray/Alcatraz/releases{/id}', + statuses_url: + 'https://api.github.com/repos/mralexgray/Alcatraz/statuses/{sha}', + allow_forking: true, + assignees_url: + 'https://api.github.com/repos/mralexgray/Alcatraz/assignees{/user}', + downloads_url: 'https://api.github.com/repos/mralexgray/Alcatraz/downloads', + has_downloads: true, + languages_url: 'https://api.github.com/repos/mralexgray/Alcatraz/languages', + default_branch: 'master', + milestones_url: + 'https://api.github.com/repos/mralexgray/Alcatraz/milestones{/number}', + stargazers_url: + 'https://api.github.com/repos/mralexgray/Alcatraz/stargazers', + watchers_count: 0, + deployments_url: + 'https://api.github.com/repos/mralexgray/Alcatraz/deployments', + git_commits_url: + 'https://api.github.com/repos/mralexgray/Alcatraz/git/commits{/sha}', + subscribers_url: + 'https://api.github.com/repos/mralexgray/Alcatraz/subscribers', + contributors_url: + 'https://api.github.com/repos/mralexgray/Alcatraz/contributors', + issue_events_url: + 'https://api.github.com/repos/mralexgray/Alcatraz/issues/events{/number}', + stargazers_count: 0, + subscription_url: + 'https://api.github.com/repos/mralexgray/Alcatraz/subscription', + collaborators_url: + 'https://api.github.com/repos/mralexgray/Alcatraz/collaborators{/collaborator}', + issue_comment_url: + 'https://api.github.com/repos/mralexgray/Alcatraz/issues/comments{/number}', + notifications_url: + 'https://api.github.com/repos/mralexgray/Alcatraz/notifications{?since,all,participating}', + open_issues_count: 0, + web_commit_signoff_required: false, + }, + { + id: 12916552, + url: 'https://api.github.com/repos/mralexgray/alcatraz-packages', + fork: true, + name: 'alcatraz-packages', + size: 826, + forks: 0, + owner: { + id: 262517, + url: 'https://api.github.com/users/mralexgray', + type: 'User', + login: 'mralexgray', + node_id: 'MDQ6VXNlcjI2MjUxNw==', + html_url: 'https://github.com/mralexgray', + gists_url: 'https://api.github.com/users/mralexgray/gists{/gist_id}', + repos_url: 'https://api.github.com/users/mralexgray/repos', + avatar_url: 'https://avatars.githubusercontent.com/u/262517?v=4', + events_url: 'https://api.github.com/users/mralexgray/events{/privacy}', + site_admin: false, + gravatar_id: '', + starred_url: + 'https://api.github.com/users/mralexgray/starred{/owner}{/repo}', + followers_url: 'https://api.github.com/users/mralexgray/followers', + following_url: + 'https://api.github.com/users/mralexgray/following{/other_user}', + organizations_url: 'https://api.github.com/users/mralexgray/orgs', + subscriptions_url: + 'https://api.github.com/users/mralexgray/subscriptions', + received_events_url: + 'https://api.github.com/users/mralexgray/received_events', + }, + topics: [], + git_url: 'git://github.com/mralexgray/alcatraz-packages.git', + license: null, + node_id: 'MDEwOlJlcG9zaXRvcnkxMjkxNjU1Mg==', + private: false, + ssh_url: 'git@github.com:mralexgray/alcatraz-packages.git', + svn_url: 'https://github.com/mralexgray/alcatraz-packages', + archived: false, + disabled: false, + has_wiki: true, + homepage: 'mneorr.github.com/Alcatraz', + html_url: 'https://github.com/mralexgray/alcatraz-packages', + keys_url: + 'https://api.github.com/repos/mralexgray/alcatraz-packages/keys{/key_id}', + language: 'Ruby', + tags_url: 'https://api.github.com/repos/mralexgray/alcatraz-packages/tags', + watchers: 0, + blobs_url: + 'https://api.github.com/repos/mralexgray/alcatraz-packages/git/blobs{/sha}', + clone_url: 'https://github.com/mralexgray/alcatraz-packages.git', + forks_url: + 'https://api.github.com/repos/mralexgray/alcatraz-packages/forks', + full_name: 'mralexgray/alcatraz-packages', + has_pages: false, + hooks_url: + 'https://api.github.com/repos/mralexgray/alcatraz-packages/hooks', + pulls_url: + 'https://api.github.com/repos/mralexgray/alcatraz-packages/pulls{/number}', + pushed_at: '2015-12-14T16:21:31Z', + teams_url: + 'https://api.github.com/repos/mralexgray/alcatraz-packages/teams', + trees_url: + 'https://api.github.com/repos/mralexgray/alcatraz-packages/git/trees{/sha}', + created_at: '2013-09-18T07:15:24Z', + events_url: + 'https://api.github.com/repos/mralexgray/alcatraz-packages/events', + has_issues: false, + issues_url: + 'https://api.github.com/repos/mralexgray/alcatraz-packages/issues{/number}', + labels_url: + 'https://api.github.com/repos/mralexgray/alcatraz-packages/labels{/name}', + merges_url: + 'https://api.github.com/repos/mralexgray/alcatraz-packages/merges', + mirror_url: null, + updated_at: '2015-11-10T20:52:30Z', + visibility: 'public', + archive_url: + 'https://api.github.com/repos/mralexgray/alcatraz-packages/{archive_format}{/ref}', + commits_url: + 'https://api.github.com/repos/mralexgray/alcatraz-packages/commits{/sha}', + compare_url: + 'https://api.github.com/repos/mralexgray/alcatraz-packages/compare/{base}...{head}', + description: 'Package list repository for Alcatraz', + forks_count: 0, + is_template: false, + open_issues: 0, + branches_url: + 'https://api.github.com/repos/mralexgray/alcatraz-packages/branches{/branch}', + comments_url: + 'https://api.github.com/repos/mralexgray/alcatraz-packages/comments{/number}', + contents_url: + 'https://api.github.com/repos/mralexgray/alcatraz-packages/contents/{+path}', + git_refs_url: + 'https://api.github.com/repos/mralexgray/alcatraz-packages/git/refs{/sha}', + git_tags_url: + 'https://api.github.com/repos/mralexgray/alcatraz-packages/git/tags{/sha}', + has_projects: true, + releases_url: + 'https://api.github.com/repos/mralexgray/alcatraz-packages/releases{/id}', + statuses_url: + 'https://api.github.com/repos/mralexgray/alcatraz-packages/statuses/{sha}', + allow_forking: true, + assignees_url: + 'https://api.github.com/repos/mralexgray/alcatraz-packages/assignees{/user}', + downloads_url: + 'https://api.github.com/repos/mralexgray/alcatraz-packages/downloads', + has_downloads: true, + languages_url: + 'https://api.github.com/repos/mralexgray/alcatraz-packages/languages', + default_branch: 'master', + milestones_url: + 'https://api.github.com/repos/mralexgray/alcatraz-packages/milestones{/number}', + stargazers_url: + 'https://api.github.com/repos/mralexgray/alcatraz-packages/stargazers', + watchers_count: 0, + deployments_url: + 'https://api.github.com/repos/mralexgray/alcatraz-packages/deployments', + git_commits_url: + 'https://api.github.com/repos/mralexgray/alcatraz-packages/git/commits{/sha}', + subscribers_url: + 'https://api.github.com/repos/mralexgray/alcatraz-packages/subscribers', + contributors_url: + 'https://api.github.com/repos/mralexgray/alcatraz-packages/contributors', + issue_events_url: + 'https://api.github.com/repos/mralexgray/alcatraz-packages/issues/events{/number}', + stargazers_count: 0, + subscription_url: + 'https://api.github.com/repos/mralexgray/alcatraz-packages/subscription', + collaborators_url: + 'https://api.github.com/repos/mralexgray/alcatraz-packages/collaborators{/collaborator}', + issue_comment_url: + 'https://api.github.com/repos/mralexgray/alcatraz-packages/issues/comments{/number}', + notifications_url: + 'https://api.github.com/repos/mralexgray/alcatraz-packages/notifications{?since,all,participating}', + open_issues_count: 0, + web_commit_signoff_required: false, + }, + { + id: 44278362, + url: 'https://api.github.com/repos/mralexgray/alexicons', + fork: true, + name: 'alexicons', + size: 257, + forks: 0, + owner: { + id: 262517, + url: 'https://api.github.com/users/mralexgray', + type: 'User', + login: 'mralexgray', + node_id: 'MDQ6VXNlcjI2MjUxNw==', + html_url: 'https://github.com/mralexgray', + gists_url: 'https://api.github.com/users/mralexgray/gists{/gist_id}', + repos_url: 'https://api.github.com/users/mralexgray/repos', + avatar_url: 'https://avatars.githubusercontent.com/u/262517?v=4', + events_url: 'https://api.github.com/users/mralexgray/events{/privacy}', + site_admin: false, + gravatar_id: '', + starred_url: + 'https://api.github.com/users/mralexgray/starred{/owner}{/repo}', + followers_url: 'https://api.github.com/users/mralexgray/followers', + following_url: + 'https://api.github.com/users/mralexgray/following{/other_user}', + organizations_url: 'https://api.github.com/users/mralexgray/orgs', + subscriptions_url: + 'https://api.github.com/users/mralexgray/subscriptions', + received_events_url: + 'https://api.github.com/users/mralexgray/received_events', + }, + topics: [], + git_url: 'git://github.com/mralexgray/alexicons.git', + license: null, + node_id: 'MDEwOlJlcG9zaXRvcnk0NDI3ODM2Mg==', + private: false, + ssh_url: 'git@github.com:mralexgray/alexicons.git', + svn_url: 'https://github.com/mralexgray/alexicons', + archived: false, + disabled: false, + has_wiki: false, + homepage: null, + html_url: 'https://github.com/mralexgray/alexicons', + keys_url: 'https://api.github.com/repos/mralexgray/alexicons/keys{/key_id}', + language: 'CoffeeScript', + tags_url: 'https://api.github.com/repos/mralexgray/alexicons/tags', + watchers: 0, + blobs_url: + 'https://api.github.com/repos/mralexgray/alexicons/git/blobs{/sha}', + clone_url: 'https://github.com/mralexgray/alexicons.git', + forks_url: 'https://api.github.com/repos/mralexgray/alexicons/forks', + full_name: 'mralexgray/alexicons', + has_pages: false, + hooks_url: 'https://api.github.com/repos/mralexgray/alexicons/hooks', + pulls_url: + 'https://api.github.com/repos/mralexgray/alexicons/pulls{/number}', + pushed_at: '2015-10-16T03:57:51Z', + teams_url: 'https://api.github.com/repos/mralexgray/alexicons/teams', + trees_url: + 'https://api.github.com/repos/mralexgray/alexicons/git/trees{/sha}', + created_at: '2015-10-14T21:49:39Z', + events_url: 'https://api.github.com/repos/mralexgray/alexicons/events', + has_issues: false, + issues_url: + 'https://api.github.com/repos/mralexgray/alexicons/issues{/number}', + labels_url: + 'https://api.github.com/repos/mralexgray/alexicons/labels{/name}', + merges_url: 'https://api.github.com/repos/mralexgray/alexicons/merges', + mirror_url: null, + updated_at: '2015-10-15T06:20:08Z', + visibility: 'public', + archive_url: + 'https://api.github.com/repos/mralexgray/alexicons/{archive_format}{/ref}', + commits_url: + 'https://api.github.com/repos/mralexgray/alexicons/commits{/sha}', + compare_url: + 'https://api.github.com/repos/mralexgray/alexicons/compare/{base}...{head}', + description: 'Get popular cat names', + forks_count: 0, + is_template: false, + open_issues: 0, + branches_url: + 'https://api.github.com/repos/mralexgray/alexicons/branches{/branch}', + comments_url: + 'https://api.github.com/repos/mralexgray/alexicons/comments{/number}', + contents_url: + 'https://api.github.com/repos/mralexgray/alexicons/contents/{+path}', + git_refs_url: + 'https://api.github.com/repos/mralexgray/alexicons/git/refs{/sha}', + git_tags_url: + 'https://api.github.com/repos/mralexgray/alexicons/git/tags{/sha}', + has_projects: true, + releases_url: + 'https://api.github.com/repos/mralexgray/alexicons/releases{/id}', + statuses_url: + 'https://api.github.com/repos/mralexgray/alexicons/statuses/{sha}', + allow_forking: true, + assignees_url: + 'https://api.github.com/repos/mralexgray/alexicons/assignees{/user}', + downloads_url: + 'https://api.github.com/repos/mralexgray/alexicons/downloads', + has_downloads: true, + languages_url: + 'https://api.github.com/repos/mralexgray/alexicons/languages', + default_branch: 'master', + milestones_url: + 'https://api.github.com/repos/mralexgray/alexicons/milestones{/number}', + stargazers_url: + 'https://api.github.com/repos/mralexgray/alexicons/stargazers', + watchers_count: 0, + deployments_url: + 'https://api.github.com/repos/mralexgray/alexicons/deployments', + git_commits_url: + 'https://api.github.com/repos/mralexgray/alexicons/git/commits{/sha}', + subscribers_url: + 'https://api.github.com/repos/mralexgray/alexicons/subscribers', + contributors_url: + 'https://api.github.com/repos/mralexgray/alexicons/contributors', + issue_events_url: + 'https://api.github.com/repos/mralexgray/alexicons/issues/events{/number}', + stargazers_count: 0, + subscription_url: + 'https://api.github.com/repos/mralexgray/alexicons/subscription', + collaborators_url: + 'https://api.github.com/repos/mralexgray/alexicons/collaborators{/collaborator}', + issue_comment_url: + 'https://api.github.com/repos/mralexgray/alexicons/issues/comments{/number}', + notifications_url: + 'https://api.github.com/repos/mralexgray/alexicons/notifications{?since,all,participating}', + open_issues_count: 0, + web_commit_signoff_required: false, + }, + { + id: 10476467, + url: 'https://api.github.com/repos/mralexgray/Alfred-Google-Translate', + fork: true, + name: 'Alfred-Google-Translate', + size: 103, + forks: 0, + owner: { + id: 262517, + url: 'https://api.github.com/users/mralexgray', + type: 'User', + login: 'mralexgray', + node_id: 'MDQ6VXNlcjI2MjUxNw==', + html_url: 'https://github.com/mralexgray', + gists_url: 'https://api.github.com/users/mralexgray/gists{/gist_id}', + repos_url: 'https://api.github.com/users/mralexgray/repos', + avatar_url: 'https://avatars.githubusercontent.com/u/262517?v=4', + events_url: 'https://api.github.com/users/mralexgray/events{/privacy}', + site_admin: false, + gravatar_id: '', + starred_url: + 'https://api.github.com/users/mralexgray/starred{/owner}{/repo}', + followers_url: 'https://api.github.com/users/mralexgray/followers', + following_url: + 'https://api.github.com/users/mralexgray/following{/other_user}', + organizations_url: 'https://api.github.com/users/mralexgray/orgs', + subscriptions_url: + 'https://api.github.com/users/mralexgray/subscriptions', + received_events_url: + 'https://api.github.com/users/mralexgray/received_events', + }, + topics: [], + git_url: 'git://github.com/mralexgray/Alfred-Google-Translate.git', + license: null, + node_id: 'MDEwOlJlcG9zaXRvcnkxMDQ3NjQ2Nw==', + private: false, + ssh_url: 'git@github.com:mralexgray/Alfred-Google-Translate.git', + svn_url: 'https://github.com/mralexgray/Alfred-Google-Translate', + archived: false, + disabled: false, + has_wiki: true, + homepage: null, + html_url: 'https://github.com/mralexgray/Alfred-Google-Translate', + keys_url: + 'https://api.github.com/repos/mralexgray/Alfred-Google-Translate/keys{/key_id}', + language: 'Shell', + tags_url: + 'https://api.github.com/repos/mralexgray/Alfred-Google-Translate/tags', + watchers: 0, + blobs_url: + 'https://api.github.com/repos/mralexgray/Alfred-Google-Translate/git/blobs{/sha}', + clone_url: 'https://github.com/mralexgray/Alfred-Google-Translate.git', + forks_url: + 'https://api.github.com/repos/mralexgray/Alfred-Google-Translate/forks', + full_name: 'mralexgray/Alfred-Google-Translate', + has_pages: false, + hooks_url: + 'https://api.github.com/repos/mralexgray/Alfred-Google-Translate/hooks', + pulls_url: + 'https://api.github.com/repos/mralexgray/Alfred-Google-Translate/pulls{/number}', + pushed_at: '2013-01-12T19:39:03Z', + teams_url: + 'https://api.github.com/repos/mralexgray/Alfred-Google-Translate/teams', + trees_url: + 'https://api.github.com/repos/mralexgray/Alfred-Google-Translate/git/trees{/sha}', + created_at: '2013-06-04T10:45:10Z', + events_url: + 'https://api.github.com/repos/mralexgray/Alfred-Google-Translate/events', + has_issues: false, + issues_url: + 'https://api.github.com/repos/mralexgray/Alfred-Google-Translate/issues{/number}', + labels_url: + 'https://api.github.com/repos/mralexgray/Alfred-Google-Translate/labels{/name}', + merges_url: + 'https://api.github.com/repos/mralexgray/Alfred-Google-Translate/merges', + mirror_url: null, + updated_at: '2013-06-04T10:45:10Z', + visibility: 'public', + archive_url: + 'https://api.github.com/repos/mralexgray/Alfred-Google-Translate/{archive_format}{/ref}', + commits_url: + 'https://api.github.com/repos/mralexgray/Alfred-Google-Translate/commits{/sha}', + compare_url: + 'https://api.github.com/repos/mralexgray/Alfred-Google-Translate/compare/{base}...{head}', + description: 'Extension for Alfred that will do a Google translate for you', + forks_count: 0, + is_template: false, + open_issues: 0, + branches_url: + 'https://api.github.com/repos/mralexgray/Alfred-Google-Translate/branches{/branch}', + comments_url: + 'https://api.github.com/repos/mralexgray/Alfred-Google-Translate/comments{/number}', + contents_url: + 'https://api.github.com/repos/mralexgray/Alfred-Google-Translate/contents/{+path}', + git_refs_url: + 'https://api.github.com/repos/mralexgray/Alfred-Google-Translate/git/refs{/sha}', + git_tags_url: + 'https://api.github.com/repos/mralexgray/Alfred-Google-Translate/git/tags{/sha}', + has_projects: true, + releases_url: + 'https://api.github.com/repos/mralexgray/Alfred-Google-Translate/releases{/id}', + statuses_url: + 'https://api.github.com/repos/mralexgray/Alfred-Google-Translate/statuses/{sha}', + allow_forking: true, + assignees_url: + 'https://api.github.com/repos/mralexgray/Alfred-Google-Translate/assignees{/user}', + downloads_url: + 'https://api.github.com/repos/mralexgray/Alfred-Google-Translate/downloads', + has_downloads: true, + languages_url: + 'https://api.github.com/repos/mralexgray/Alfred-Google-Translate/languages', + default_branch: 'master', + milestones_url: + 'https://api.github.com/repos/mralexgray/Alfred-Google-Translate/milestones{/number}', + stargazers_url: + 'https://api.github.com/repos/mralexgray/Alfred-Google-Translate/stargazers', + watchers_count: 0, + deployments_url: + 'https://api.github.com/repos/mralexgray/Alfred-Google-Translate/deployments', + git_commits_url: + 'https://api.github.com/repos/mralexgray/Alfred-Google-Translate/git/commits{/sha}', + subscribers_url: + 'https://api.github.com/repos/mralexgray/Alfred-Google-Translate/subscribers', + contributors_url: + 'https://api.github.com/repos/mralexgray/Alfred-Google-Translate/contributors', + issue_events_url: + 'https://api.github.com/repos/mralexgray/Alfred-Google-Translate/issues/events{/number}', + stargazers_count: 0, + subscription_url: + 'https://api.github.com/repos/mralexgray/Alfred-Google-Translate/subscription', + collaborators_url: + 'https://api.github.com/repos/mralexgray/Alfred-Google-Translate/collaborators{/collaborator}', + issue_comment_url: + 'https://api.github.com/repos/mralexgray/Alfred-Google-Translate/issues/comments{/number}', + notifications_url: + 'https://api.github.com/repos/mralexgray/Alfred-Google-Translate/notifications{?since,all,participating}', + open_issues_count: 0, + web_commit_signoff_required: false, + }, + { + id: 5524019, + url: 'https://api.github.com/repos/mralexgray/Amber', + fork: false, + name: 'Amber', + size: 48, + forks: 0, + owner: { + id: 262517, + url: 'https://api.github.com/users/mralexgray', + type: 'User', + login: 'mralexgray', + node_id: 'MDQ6VXNlcjI2MjUxNw==', + html_url: 'https://github.com/mralexgray', + gists_url: 'https://api.github.com/users/mralexgray/gists{/gist_id}', + repos_url: 'https://api.github.com/users/mralexgray/repos', + avatar_url: 'https://avatars.githubusercontent.com/u/262517?v=4', + events_url: 'https://api.github.com/users/mralexgray/events{/privacy}', + site_admin: false, + gravatar_id: '', + starred_url: + 'https://api.github.com/users/mralexgray/starred{/owner}{/repo}', + followers_url: 'https://api.github.com/users/mralexgray/followers', + following_url: + 'https://api.github.com/users/mralexgray/following{/other_user}', + organizations_url: 'https://api.github.com/users/mralexgray/orgs', + subscriptions_url: + 'https://api.github.com/users/mralexgray/subscriptions', + received_events_url: + 'https://api.github.com/users/mralexgray/received_events', + }, + topics: [], + git_url: 'git://github.com/mralexgray/Amber.git', + license: null, + node_id: 'MDEwOlJlcG9zaXRvcnk1NTI0MDE5', + private: false, + ssh_url: 'git@github.com:mralexgray/Amber.git', + svn_url: 'https://github.com/mralexgray/Amber', + archived: false, + disabled: false, + has_wiki: true, + homepage: null, + html_url: 'https://github.com/mralexgray/Amber', + keys_url: 'https://api.github.com/repos/mralexgray/Amber/keys{/key_id}', + language: null, + tags_url: 'https://api.github.com/repos/mralexgray/Amber/tags', + watchers: 0, + blobs_url: 'https://api.github.com/repos/mralexgray/Amber/git/blobs{/sha}', + clone_url: 'https://github.com/mralexgray/Amber.git', + forks_url: 'https://api.github.com/repos/mralexgray/Amber/forks', + full_name: 'mralexgray/Amber', + has_pages: false, + hooks_url: 'https://api.github.com/repos/mralexgray/Amber/hooks', + pulls_url: 'https://api.github.com/repos/mralexgray/Amber/pulls{/number}', + pushed_at: '2012-08-23T10:38:25Z', + teams_url: 'https://api.github.com/repos/mralexgray/Amber/teams', + trees_url: 'https://api.github.com/repos/mralexgray/Amber/git/trees{/sha}', + created_at: '2012-08-23T10:38:24Z', + events_url: 'https://api.github.com/repos/mralexgray/Amber/events', + has_issues: true, + issues_url: 'https://api.github.com/repos/mralexgray/Amber/issues{/number}', + labels_url: 'https://api.github.com/repos/mralexgray/Amber/labels{/name}', + merges_url: 'https://api.github.com/repos/mralexgray/Amber/merges', + mirror_url: null, + updated_at: '2013-01-11T22:25:35Z', + visibility: 'public', + archive_url: + 'https://api.github.com/repos/mralexgray/Amber/{archive_format}{/ref}', + commits_url: 'https://api.github.com/repos/mralexgray/Amber/commits{/sha}', + compare_url: + 'https://api.github.com/repos/mralexgray/Amber/compare/{base}...{head}', + description: 'Fork of the difficult-to-deal-with Amber.framework', + forks_count: 0, + is_template: false, + open_issues: 0, + branches_url: + 'https://api.github.com/repos/mralexgray/Amber/branches{/branch}', + comments_url: + 'https://api.github.com/repos/mralexgray/Amber/comments{/number}', + contents_url: + 'https://api.github.com/repos/mralexgray/Amber/contents/{+path}', + git_refs_url: + 'https://api.github.com/repos/mralexgray/Amber/git/refs{/sha}', + git_tags_url: + 'https://api.github.com/repos/mralexgray/Amber/git/tags{/sha}', + has_projects: true, + releases_url: 'https://api.github.com/repos/mralexgray/Amber/releases{/id}', + statuses_url: + 'https://api.github.com/repos/mralexgray/Amber/statuses/{sha}', + allow_forking: true, + assignees_url: + 'https://api.github.com/repos/mralexgray/Amber/assignees{/user}', + downloads_url: 'https://api.github.com/repos/mralexgray/Amber/downloads', + has_downloads: true, + languages_url: 'https://api.github.com/repos/mralexgray/Amber/languages', + default_branch: 'master', + milestones_url: + 'https://api.github.com/repos/mralexgray/Amber/milestones{/number}', + stargazers_url: 'https://api.github.com/repos/mralexgray/Amber/stargazers', + watchers_count: 0, + deployments_url: + 'https://api.github.com/repos/mralexgray/Amber/deployments', + git_commits_url: + 'https://api.github.com/repos/mralexgray/Amber/git/commits{/sha}', + subscribers_url: + 'https://api.github.com/repos/mralexgray/Amber/subscribers', + contributors_url: + 'https://api.github.com/repos/mralexgray/Amber/contributors', + issue_events_url: + 'https://api.github.com/repos/mralexgray/Amber/issues/events{/number}', + stargazers_count: 0, + subscription_url: + 'https://api.github.com/repos/mralexgray/Amber/subscription', + collaborators_url: + 'https://api.github.com/repos/mralexgray/Amber/collaborators{/collaborator}', + issue_comment_url: + 'https://api.github.com/repos/mralexgray/Amber/issues/comments{/number}', + notifications_url: + 'https://api.github.com/repos/mralexgray/Amber/notifications{?since,all,participating}', + open_issues_count: 0, + web_commit_signoff_required: false, + }, + { + id: 10809060, + url: 'https://api.github.com/repos/mralexgray/Amethyst', + fork: true, + name: 'Amethyst', + size: 12623, + forks: 0, + owner: { + id: 262517, + url: 'https://api.github.com/users/mralexgray', + type: 'User', + login: 'mralexgray', + node_id: 'MDQ6VXNlcjI2MjUxNw==', + html_url: 'https://github.com/mralexgray', + gists_url: 'https://api.github.com/users/mralexgray/gists{/gist_id}', + repos_url: 'https://api.github.com/users/mralexgray/repos', + avatar_url: 'https://avatars.githubusercontent.com/u/262517?v=4', + events_url: 'https://api.github.com/users/mralexgray/events{/privacy}', + site_admin: false, + gravatar_id: '', + starred_url: + 'https://api.github.com/users/mralexgray/starred{/owner}{/repo}', + followers_url: 'https://api.github.com/users/mralexgray/followers', + following_url: + 'https://api.github.com/users/mralexgray/following{/other_user}', + organizations_url: 'https://api.github.com/users/mralexgray/orgs', + subscriptions_url: + 'https://api.github.com/users/mralexgray/subscriptions', + received_events_url: + 'https://api.github.com/users/mralexgray/received_events', + }, + topics: [], + git_url: 'git://github.com/mralexgray/Amethyst.git', + license: { + key: 'mit', + url: 'https://api.github.com/licenses/mit', + name: 'MIT License', + node_id: 'MDc6TGljZW5zZTEz', + spdx_id: 'MIT', + }, + node_id: 'MDEwOlJlcG9zaXRvcnkxMDgwOTA2MA==', + private: false, + ssh_url: 'git@github.com:mralexgray/Amethyst.git', + svn_url: 'https://github.com/mralexgray/Amethyst', + archived: false, + disabled: false, + has_wiki: true, + homepage: 'http://ianyh.github.io/Amethyst/', + html_url: 'https://github.com/mralexgray/Amethyst', + keys_url: 'https://api.github.com/repos/mralexgray/Amethyst/keys{/key_id}', + language: 'Objective-C', + tags_url: 'https://api.github.com/repos/mralexgray/Amethyst/tags', + watchers: 0, + blobs_url: + 'https://api.github.com/repos/mralexgray/Amethyst/git/blobs{/sha}', + clone_url: 'https://github.com/mralexgray/Amethyst.git', + forks_url: 'https://api.github.com/repos/mralexgray/Amethyst/forks', + full_name: 'mralexgray/Amethyst', + has_pages: false, + hooks_url: 'https://api.github.com/repos/mralexgray/Amethyst/hooks', + pulls_url: + 'https://api.github.com/repos/mralexgray/Amethyst/pulls{/number}', + pushed_at: '2013-06-18T02:54:11Z', + teams_url: 'https://api.github.com/repos/mralexgray/Amethyst/teams', + trees_url: + 'https://api.github.com/repos/mralexgray/Amethyst/git/trees{/sha}', + created_at: '2013-06-20T00:34:22Z', + events_url: 'https://api.github.com/repos/mralexgray/Amethyst/events', + has_issues: false, + issues_url: + 'https://api.github.com/repos/mralexgray/Amethyst/issues{/number}', + labels_url: + 'https://api.github.com/repos/mralexgray/Amethyst/labels{/name}', + merges_url: 'https://api.github.com/repos/mralexgray/Amethyst/merges', + mirror_url: null, + updated_at: '2013-06-20T00:34:22Z', + visibility: 'public', + archive_url: + 'https://api.github.com/repos/mralexgray/Amethyst/{archive_format}{/ref}', + commits_url: + 'https://api.github.com/repos/mralexgray/Amethyst/commits{/sha}', + compare_url: + 'https://api.github.com/repos/mralexgray/Amethyst/compare/{base}...{head}', + description: 'Tiling window manager for OS X.', + forks_count: 0, + is_template: false, + open_issues: 0, + branches_url: + 'https://api.github.com/repos/mralexgray/Amethyst/branches{/branch}', + comments_url: + 'https://api.github.com/repos/mralexgray/Amethyst/comments{/number}', + contents_url: + 'https://api.github.com/repos/mralexgray/Amethyst/contents/{+path}', + git_refs_url: + 'https://api.github.com/repos/mralexgray/Amethyst/git/refs{/sha}', + git_tags_url: + 'https://api.github.com/repos/mralexgray/Amethyst/git/tags{/sha}', + has_projects: true, + releases_url: + 'https://api.github.com/repos/mralexgray/Amethyst/releases{/id}', + statuses_url: + 'https://api.github.com/repos/mralexgray/Amethyst/statuses/{sha}', + allow_forking: true, + assignees_url: + 'https://api.github.com/repos/mralexgray/Amethyst/assignees{/user}', + downloads_url: 'https://api.github.com/repos/mralexgray/Amethyst/downloads', + has_downloads: true, + languages_url: 'https://api.github.com/repos/mralexgray/Amethyst/languages', + default_branch: 'master', + milestones_url: + 'https://api.github.com/repos/mralexgray/Amethyst/milestones{/number}', + stargazers_url: + 'https://api.github.com/repos/mralexgray/Amethyst/stargazers', + watchers_count: 0, + deployments_url: + 'https://api.github.com/repos/mralexgray/Amethyst/deployments', + git_commits_url: + 'https://api.github.com/repos/mralexgray/Amethyst/git/commits{/sha}', + subscribers_url: + 'https://api.github.com/repos/mralexgray/Amethyst/subscribers', + contributors_url: + 'https://api.github.com/repos/mralexgray/Amethyst/contributors', + issue_events_url: + 'https://api.github.com/repos/mralexgray/Amethyst/issues/events{/number}', + stargazers_count: 0, + subscription_url: + 'https://api.github.com/repos/mralexgray/Amethyst/subscription', + collaborators_url: + 'https://api.github.com/repos/mralexgray/Amethyst/collaborators{/collaborator}', + issue_comment_url: + 'https://api.github.com/repos/mralexgray/Amethyst/issues/comments{/number}', + notifications_url: + 'https://api.github.com/repos/mralexgray/Amethyst/notifications{?since,all,participating}', + open_issues_count: 0, + web_commit_signoff_required: false, + }, + { + id: 3684286, + url: 'https://api.github.com/repos/mralexgray/Animated-Paths', + fork: true, + name: 'Animated-Paths', + size: 411, + forks: 0, + owner: { + id: 262517, + url: 'https://api.github.com/users/mralexgray', + type: 'User', + login: 'mralexgray', + node_id: 'MDQ6VXNlcjI2MjUxNw==', + html_url: 'https://github.com/mralexgray', + gists_url: 'https://api.github.com/users/mralexgray/gists{/gist_id}', + repos_url: 'https://api.github.com/users/mralexgray/repos', + avatar_url: 'https://avatars.githubusercontent.com/u/262517?v=4', + events_url: 'https://api.github.com/users/mralexgray/events{/privacy}', + site_admin: false, + gravatar_id: '', + starred_url: + 'https://api.github.com/users/mralexgray/starred{/owner}{/repo}', + followers_url: 'https://api.github.com/users/mralexgray/followers', + following_url: + 'https://api.github.com/users/mralexgray/following{/other_user}', + organizations_url: 'https://api.github.com/users/mralexgray/orgs', + subscriptions_url: + 'https://api.github.com/users/mralexgray/subscriptions', + received_events_url: + 'https://api.github.com/users/mralexgray/received_events', + }, + topics: [], + git_url: 'git://github.com/mralexgray/Animated-Paths.git', + license: { + key: 'other', + url: null, + name: 'Other', + node_id: 'MDc6TGljZW5zZTA=', + spdx_id: 'NOASSERTION', + }, + node_id: 'MDEwOlJlcG9zaXRvcnkzNjg0Mjg2', + private: false, + ssh_url: 'git@github.com:mralexgray/Animated-Paths.git', + svn_url: 'https://github.com/mralexgray/Animated-Paths', + archived: false, + disabled: false, + has_wiki: true, + homepage: + 'http://oleb.net/blog/2010/12/animating-drawing-of-cgpath-with-cashapelayer/', + html_url: 'https://github.com/mralexgray/Animated-Paths', + keys_url: + 'https://api.github.com/repos/mralexgray/Animated-Paths/keys{/key_id}', + language: 'Objective-C', + tags_url: 'https://api.github.com/repos/mralexgray/Animated-Paths/tags', + watchers: 2, + blobs_url: + 'https://api.github.com/repos/mralexgray/Animated-Paths/git/blobs{/sha}', + clone_url: 'https://github.com/mralexgray/Animated-Paths.git', + forks_url: 'https://api.github.com/repos/mralexgray/Animated-Paths/forks', + full_name: 'mralexgray/Animated-Paths', + has_pages: false, + hooks_url: 'https://api.github.com/repos/mralexgray/Animated-Paths/hooks', + pulls_url: + 'https://api.github.com/repos/mralexgray/Animated-Paths/pulls{/number}', + pushed_at: '2010-12-30T20:56:51Z', + teams_url: 'https://api.github.com/repos/mralexgray/Animated-Paths/teams', + trees_url: + 'https://api.github.com/repos/mralexgray/Animated-Paths/git/trees{/sha}', + created_at: '2012-03-11T02:56:38Z', + events_url: 'https://api.github.com/repos/mralexgray/Animated-Paths/events', + has_issues: false, + issues_url: + 'https://api.github.com/repos/mralexgray/Animated-Paths/issues{/number}', + labels_url: + 'https://api.github.com/repos/mralexgray/Animated-Paths/labels{/name}', + merges_url: 'https://api.github.com/repos/mralexgray/Animated-Paths/merges', + mirror_url: null, + updated_at: '2013-01-08T04:12:21Z', + visibility: 'public', + archive_url: + 'https://api.github.com/repos/mralexgray/Animated-Paths/{archive_format}{/ref}', + commits_url: + 'https://api.github.com/repos/mralexgray/Animated-Paths/commits{/sha}', + compare_url: + 'https://api.github.com/repos/mralexgray/Animated-Paths/compare/{base}...{head}', + description: + 'Demo project: Animating the drawing of a CGPath with CAShapeLayer.strokeEnd', + forks_count: 0, + is_template: false, + open_issues: 0, + branches_url: + 'https://api.github.com/repos/mralexgray/Animated-Paths/branches{/branch}', + comments_url: + 'https://api.github.com/repos/mralexgray/Animated-Paths/comments{/number}', + contents_url: + 'https://api.github.com/repos/mralexgray/Animated-Paths/contents/{+path}', + git_refs_url: + 'https://api.github.com/repos/mralexgray/Animated-Paths/git/refs{/sha}', + git_tags_url: + 'https://api.github.com/repos/mralexgray/Animated-Paths/git/tags{/sha}', + has_projects: true, + releases_url: + 'https://api.github.com/repos/mralexgray/Animated-Paths/releases{/id}', + statuses_url: + 'https://api.github.com/repos/mralexgray/Animated-Paths/statuses/{sha}', + allow_forking: true, + assignees_url: + 'https://api.github.com/repos/mralexgray/Animated-Paths/assignees{/user}', + downloads_url: + 'https://api.github.com/repos/mralexgray/Animated-Paths/downloads', + has_downloads: true, + languages_url: + 'https://api.github.com/repos/mralexgray/Animated-Paths/languages', + default_branch: 'master', + milestones_url: + 'https://api.github.com/repos/mralexgray/Animated-Paths/milestones{/number}', + stargazers_url: + 'https://api.github.com/repos/mralexgray/Animated-Paths/stargazers', + watchers_count: 2, + deployments_url: + 'https://api.github.com/repos/mralexgray/Animated-Paths/deployments', + git_commits_url: + 'https://api.github.com/repos/mralexgray/Animated-Paths/git/commits{/sha}', + subscribers_url: + 'https://api.github.com/repos/mralexgray/Animated-Paths/subscribers', + contributors_url: + 'https://api.github.com/repos/mralexgray/Animated-Paths/contributors', + issue_events_url: + 'https://api.github.com/repos/mralexgray/Animated-Paths/issues/events{/number}', + stargazers_count: 2, + subscription_url: + 'https://api.github.com/repos/mralexgray/Animated-Paths/subscription', + collaborators_url: + 'https://api.github.com/repos/mralexgray/Animated-Paths/collaborators{/collaborator}', + issue_comment_url: + 'https://api.github.com/repos/mralexgray/Animated-Paths/issues/comments{/number}', + notifications_url: + 'https://api.github.com/repos/mralexgray/Animated-Paths/notifications{?since,all,participating}', + open_issues_count: 0, + web_commit_signoff_required: false, + }, + { + id: 16662874, + url: 'https://api.github.com/repos/mralexgray/AnsiLove.framework', + fork: true, + name: 'AnsiLove.framework', + size: 3780, + forks: 0, + owner: { + id: 262517, + url: 'https://api.github.com/users/mralexgray', + type: 'User', + login: 'mralexgray', + node_id: 'MDQ6VXNlcjI2MjUxNw==', + html_url: 'https://github.com/mralexgray', + gists_url: 'https://api.github.com/users/mralexgray/gists{/gist_id}', + repos_url: 'https://api.github.com/users/mralexgray/repos', + avatar_url: 'https://avatars.githubusercontent.com/u/262517?v=4', + events_url: 'https://api.github.com/users/mralexgray/events{/privacy}', + site_admin: false, + gravatar_id: '', + starred_url: + 'https://api.github.com/users/mralexgray/starred{/owner}{/repo}', + followers_url: 'https://api.github.com/users/mralexgray/followers', + following_url: + 'https://api.github.com/users/mralexgray/following{/other_user}', + organizations_url: 'https://api.github.com/users/mralexgray/orgs', + subscriptions_url: + 'https://api.github.com/users/mralexgray/subscriptions', + received_events_url: + 'https://api.github.com/users/mralexgray/received_events', + }, + topics: [], + git_url: 'git://github.com/mralexgray/AnsiLove.framework.git', + license: { + key: 'other', + url: null, + name: 'Other', + node_id: 'MDc6TGljZW5zZTA=', + spdx_id: 'NOASSERTION', + }, + node_id: 'MDEwOlJlcG9zaXRvcnkxNjY2Mjg3NA==', + private: false, + ssh_url: 'git@github.com:mralexgray/AnsiLove.framework.git', + svn_url: 'https://github.com/mralexgray/AnsiLove.framework', + archived: false, + disabled: false, + has_wiki: false, + homepage: 'http://byteproject.net', + html_url: 'https://github.com/mralexgray/AnsiLove.framework', + keys_url: + 'https://api.github.com/repos/mralexgray/AnsiLove.framework/keys{/key_id}', + language: 'M', + tags_url: 'https://api.github.com/repos/mralexgray/AnsiLove.framework/tags', + watchers: 0, + blobs_url: + 'https://api.github.com/repos/mralexgray/AnsiLove.framework/git/blobs{/sha}', + clone_url: 'https://github.com/mralexgray/AnsiLove.framework.git', + forks_url: + 'https://api.github.com/repos/mralexgray/AnsiLove.framework/forks', + full_name: 'mralexgray/AnsiLove.framework', + has_pages: false, + hooks_url: + 'https://api.github.com/repos/mralexgray/AnsiLove.framework/hooks', + pulls_url: + 'https://api.github.com/repos/mralexgray/AnsiLove.framework/pulls{/number}', + pushed_at: '2013-10-04T14:08:38Z', + teams_url: + 'https://api.github.com/repos/mralexgray/AnsiLove.framework/teams', + trees_url: + 'https://api.github.com/repos/mralexgray/AnsiLove.framework/git/trees{/sha}', + created_at: '2014-02-09T08:30:27Z', + events_url: + 'https://api.github.com/repos/mralexgray/AnsiLove.framework/events', + has_issues: false, + issues_url: + 'https://api.github.com/repos/mralexgray/AnsiLove.framework/issues{/number}', + labels_url: + 'https://api.github.com/repos/mralexgray/AnsiLove.framework/labels{/name}', + merges_url: + 'https://api.github.com/repos/mralexgray/AnsiLove.framework/merges', + mirror_url: null, + updated_at: '2015-01-13T20:41:46Z', + visibility: 'public', + archive_url: + 'https://api.github.com/repos/mralexgray/AnsiLove.framework/{archive_format}{/ref}', + commits_url: + 'https://api.github.com/repos/mralexgray/AnsiLove.framework/commits{/sha}', + compare_url: + 'https://api.github.com/repos/mralexgray/AnsiLove.framework/compare/{base}...{head}', + description: 'Cocoa Framework for rendering ANSi / ASCII art', + forks_count: 0, + is_template: false, + open_issues: 0, + branches_url: + 'https://api.github.com/repos/mralexgray/AnsiLove.framework/branches{/branch}', + comments_url: + 'https://api.github.com/repos/mralexgray/AnsiLove.framework/comments{/number}', + contents_url: + 'https://api.github.com/repos/mralexgray/AnsiLove.framework/contents/{+path}', + git_refs_url: + 'https://api.github.com/repos/mralexgray/AnsiLove.framework/git/refs{/sha}', + git_tags_url: + 'https://api.github.com/repos/mralexgray/AnsiLove.framework/git/tags{/sha}', + has_projects: true, + releases_url: + 'https://api.github.com/repos/mralexgray/AnsiLove.framework/releases{/id}', + statuses_url: + 'https://api.github.com/repos/mralexgray/AnsiLove.framework/statuses/{sha}', + allow_forking: true, + assignees_url: + 'https://api.github.com/repos/mralexgray/AnsiLove.framework/assignees{/user}', + downloads_url: + 'https://api.github.com/repos/mralexgray/AnsiLove.framework/downloads', + has_downloads: true, + languages_url: + 'https://api.github.com/repos/mralexgray/AnsiLove.framework/languages', + default_branch: 'master', + milestones_url: + 'https://api.github.com/repos/mralexgray/AnsiLove.framework/milestones{/number}', + stargazers_url: + 'https://api.github.com/repos/mralexgray/AnsiLove.framework/stargazers', + watchers_count: 0, + deployments_url: + 'https://api.github.com/repos/mralexgray/AnsiLove.framework/deployments', + git_commits_url: + 'https://api.github.com/repos/mralexgray/AnsiLove.framework/git/commits{/sha}', + subscribers_url: + 'https://api.github.com/repos/mralexgray/AnsiLove.framework/subscribers', + contributors_url: + 'https://api.github.com/repos/mralexgray/AnsiLove.framework/contributors', + issue_events_url: + 'https://api.github.com/repos/mralexgray/AnsiLove.framework/issues/events{/number}', + stargazers_count: 0, + subscription_url: + 'https://api.github.com/repos/mralexgray/AnsiLove.framework/subscription', + collaborators_url: + 'https://api.github.com/repos/mralexgray/AnsiLove.framework/collaborators{/collaborator}', + issue_comment_url: + 'https://api.github.com/repos/mralexgray/AnsiLove.framework/issues/comments{/number}', + notifications_url: + 'https://api.github.com/repos/mralexgray/AnsiLove.framework/notifications{?since,all,participating}', + open_issues_count: 0, + web_commit_signoff_required: false, + }, + { + id: 5189563, + url: 'https://api.github.com/repos/mralexgray/ANTrackBar', + fork: true, + name: 'ANTrackBar', + size: 94, + forks: 0, + owner: { + id: 262517, + url: 'https://api.github.com/users/mralexgray', + type: 'User', + login: 'mralexgray', + node_id: 'MDQ6VXNlcjI2MjUxNw==', + html_url: 'https://github.com/mralexgray', + gists_url: 'https://api.github.com/users/mralexgray/gists{/gist_id}', + repos_url: 'https://api.github.com/users/mralexgray/repos', + avatar_url: 'https://avatars.githubusercontent.com/u/262517?v=4', + events_url: 'https://api.github.com/users/mralexgray/events{/privacy}', + site_admin: false, + gravatar_id: '', + starred_url: + 'https://api.github.com/users/mralexgray/starred{/owner}{/repo}', + followers_url: 'https://api.github.com/users/mralexgray/followers', + following_url: + 'https://api.github.com/users/mralexgray/following{/other_user}', + organizations_url: 'https://api.github.com/users/mralexgray/orgs', + subscriptions_url: + 'https://api.github.com/users/mralexgray/subscriptions', + received_events_url: + 'https://api.github.com/users/mralexgray/received_events', + }, + topics: [], + git_url: 'git://github.com/mralexgray/ANTrackBar.git', + license: null, + node_id: 'MDEwOlJlcG9zaXRvcnk1MTg5NTYz', + private: false, + ssh_url: 'git@github.com:mralexgray/ANTrackBar.git', + svn_url: 'https://github.com/mralexgray/ANTrackBar', + archived: false, + disabled: false, + has_wiki: true, + homepage: '', + html_url: 'https://github.com/mralexgray/ANTrackBar', + keys_url: + 'https://api.github.com/repos/mralexgray/ANTrackBar/keys{/key_id}', + language: 'Objective-C', + tags_url: 'https://api.github.com/repos/mralexgray/ANTrackBar/tags', + watchers: 2, + blobs_url: + 'https://api.github.com/repos/mralexgray/ANTrackBar/git/blobs{/sha}', + clone_url: 'https://github.com/mralexgray/ANTrackBar.git', + forks_url: 'https://api.github.com/repos/mralexgray/ANTrackBar/forks', + full_name: 'mralexgray/ANTrackBar', + has_pages: false, + hooks_url: 'https://api.github.com/repos/mralexgray/ANTrackBar/hooks', + pulls_url: + 'https://api.github.com/repos/mralexgray/ANTrackBar/pulls{/number}', + pushed_at: '2012-03-09T01:40:02Z', + teams_url: 'https://api.github.com/repos/mralexgray/ANTrackBar/teams', + trees_url: + 'https://api.github.com/repos/mralexgray/ANTrackBar/git/trees{/sha}', + created_at: '2012-07-26T08:17:22Z', + events_url: 'https://api.github.com/repos/mralexgray/ANTrackBar/events', + has_issues: false, + issues_url: + 'https://api.github.com/repos/mralexgray/ANTrackBar/issues{/number}', + labels_url: + 'https://api.github.com/repos/mralexgray/ANTrackBar/labels{/name}', + merges_url: 'https://api.github.com/repos/mralexgray/ANTrackBar/merges', + mirror_url: null, + updated_at: '2013-01-11T10:29:56Z', + visibility: 'public', + archive_url: + 'https://api.github.com/repos/mralexgray/ANTrackBar/{archive_format}{/ref}', + commits_url: + 'https://api.github.com/repos/mralexgray/ANTrackBar/commits{/sha}', + compare_url: + 'https://api.github.com/repos/mralexgray/ANTrackBar/compare/{base}...{head}', + description: 'An easy-to-use Cocoa seek bar with a pleasing appearance', + forks_count: 0, + is_template: false, + open_issues: 0, + branches_url: + 'https://api.github.com/repos/mralexgray/ANTrackBar/branches{/branch}', + comments_url: + 'https://api.github.com/repos/mralexgray/ANTrackBar/comments{/number}', + contents_url: + 'https://api.github.com/repos/mralexgray/ANTrackBar/contents/{+path}', + git_refs_url: + 'https://api.github.com/repos/mralexgray/ANTrackBar/git/refs{/sha}', + git_tags_url: + 'https://api.github.com/repos/mralexgray/ANTrackBar/git/tags{/sha}', + has_projects: true, + releases_url: + 'https://api.github.com/repos/mralexgray/ANTrackBar/releases{/id}', + statuses_url: + 'https://api.github.com/repos/mralexgray/ANTrackBar/statuses/{sha}', + allow_forking: true, + assignees_url: + 'https://api.github.com/repos/mralexgray/ANTrackBar/assignees{/user}', + downloads_url: + 'https://api.github.com/repos/mralexgray/ANTrackBar/downloads', + has_downloads: true, + languages_url: + 'https://api.github.com/repos/mralexgray/ANTrackBar/languages', + default_branch: 'master', + milestones_url: + 'https://api.github.com/repos/mralexgray/ANTrackBar/milestones{/number}', + stargazers_url: + 'https://api.github.com/repos/mralexgray/ANTrackBar/stargazers', + watchers_count: 2, + deployments_url: + 'https://api.github.com/repos/mralexgray/ANTrackBar/deployments', + git_commits_url: + 'https://api.github.com/repos/mralexgray/ANTrackBar/git/commits{/sha}', + subscribers_url: + 'https://api.github.com/repos/mralexgray/ANTrackBar/subscribers', + contributors_url: + 'https://api.github.com/repos/mralexgray/ANTrackBar/contributors', + issue_events_url: + 'https://api.github.com/repos/mralexgray/ANTrackBar/issues/events{/number}', + stargazers_count: 2, + subscription_url: + 'https://api.github.com/repos/mralexgray/ANTrackBar/subscription', + collaborators_url: + 'https://api.github.com/repos/mralexgray/ANTrackBar/collaborators{/collaborator}', + issue_comment_url: + 'https://api.github.com/repos/mralexgray/ANTrackBar/issues/comments{/number}', + notifications_url: + 'https://api.github.com/repos/mralexgray/ANTrackBar/notifications{?since,all,participating}', + open_issues_count: 0, + web_commit_signoff_required: false, + }, + { + id: 16240152, + url: 'https://api.github.com/repos/mralexgray/AOP-in-Objective-C', + fork: true, + name: 'AOP-in-Objective-C', + size: 340, + forks: 1, + owner: { + id: 262517, + url: 'https://api.github.com/users/mralexgray', + type: 'User', + login: 'mralexgray', + node_id: 'MDQ6VXNlcjI2MjUxNw==', + html_url: 'https://github.com/mralexgray', + gists_url: 'https://api.github.com/users/mralexgray/gists{/gist_id}', + repos_url: 'https://api.github.com/users/mralexgray/repos', + avatar_url: 'https://avatars.githubusercontent.com/u/262517?v=4', + events_url: 'https://api.github.com/users/mralexgray/events{/privacy}', + site_admin: false, + gravatar_id: '', + starred_url: + 'https://api.github.com/users/mralexgray/starred{/owner}{/repo}', + followers_url: 'https://api.github.com/users/mralexgray/followers', + following_url: + 'https://api.github.com/users/mralexgray/following{/other_user}', + organizations_url: 'https://api.github.com/users/mralexgray/orgs', + subscriptions_url: + 'https://api.github.com/users/mralexgray/subscriptions', + received_events_url: + 'https://api.github.com/users/mralexgray/received_events', + }, + topics: [], + git_url: 'git://github.com/mralexgray/AOP-in-Objective-C.git', + license: null, + node_id: 'MDEwOlJlcG9zaXRvcnkxNjI0MDE1Mg==', + private: false, + ssh_url: 'git@github.com:mralexgray/AOP-in-Objective-C.git', + svn_url: 'https://github.com/mralexgray/AOP-in-Objective-C', + archived: false, + disabled: false, + has_wiki: true, + homepage: 'http://innoli.hu/en/opensource/', + html_url: 'https://github.com/mralexgray/AOP-in-Objective-C', + keys_url: + 'https://api.github.com/repos/mralexgray/AOP-in-Objective-C/keys{/key_id}', + language: 'Objective-C', + tags_url: 'https://api.github.com/repos/mralexgray/AOP-in-Objective-C/tags', + watchers: 0, + blobs_url: + 'https://api.github.com/repos/mralexgray/AOP-in-Objective-C/git/blobs{/sha}', + clone_url: 'https://github.com/mralexgray/AOP-in-Objective-C.git', + forks_url: + 'https://api.github.com/repos/mralexgray/AOP-in-Objective-C/forks', + full_name: 'mralexgray/AOP-in-Objective-C', + has_pages: false, + hooks_url: + 'https://api.github.com/repos/mralexgray/AOP-in-Objective-C/hooks', + pulls_url: + 'https://api.github.com/repos/mralexgray/AOP-in-Objective-C/pulls{/number}', + pushed_at: '2014-02-12T16:23:20Z', + teams_url: + 'https://api.github.com/repos/mralexgray/AOP-in-Objective-C/teams', + trees_url: + 'https://api.github.com/repos/mralexgray/AOP-in-Objective-C/git/trees{/sha}', + created_at: '2014-01-25T21:18:04Z', + events_url: + 'https://api.github.com/repos/mralexgray/AOP-in-Objective-C/events', + has_issues: false, + issues_url: + 'https://api.github.com/repos/mralexgray/AOP-in-Objective-C/issues{/number}', + labels_url: + 'https://api.github.com/repos/mralexgray/AOP-in-Objective-C/labels{/name}', + merges_url: + 'https://api.github.com/repos/mralexgray/AOP-in-Objective-C/merges', + mirror_url: null, + updated_at: '2014-06-19T19:38:12Z', + visibility: 'public', + archive_url: + 'https://api.github.com/repos/mralexgray/AOP-in-Objective-C/{archive_format}{/ref}', + commits_url: + 'https://api.github.com/repos/mralexgray/AOP-in-Objective-C/commits{/sha}', + compare_url: + 'https://api.github.com/repos/mralexgray/AOP-in-Objective-C/compare/{base}...{head}', + description: + 'An NSProxy based library for easily enabling AOP like functionality in Objective-C.', + forks_count: 1, + is_template: false, + open_issues: 0, + branches_url: + 'https://api.github.com/repos/mralexgray/AOP-in-Objective-C/branches{/branch}', + comments_url: + 'https://api.github.com/repos/mralexgray/AOP-in-Objective-C/comments{/number}', + contents_url: + 'https://api.github.com/repos/mralexgray/AOP-in-Objective-C/contents/{+path}', + git_refs_url: + 'https://api.github.com/repos/mralexgray/AOP-in-Objective-C/git/refs{/sha}', + git_tags_url: + 'https://api.github.com/repos/mralexgray/AOP-in-Objective-C/git/tags{/sha}', + has_projects: true, + releases_url: + 'https://api.github.com/repos/mralexgray/AOP-in-Objective-C/releases{/id}', + statuses_url: + 'https://api.github.com/repos/mralexgray/AOP-in-Objective-C/statuses/{sha}', + allow_forking: true, + assignees_url: + 'https://api.github.com/repos/mralexgray/AOP-in-Objective-C/assignees{/user}', + downloads_url: + 'https://api.github.com/repos/mralexgray/AOP-in-Objective-C/downloads', + has_downloads: true, + languages_url: + 'https://api.github.com/repos/mralexgray/AOP-in-Objective-C/languages', + default_branch: 'travis-coveralls', + milestones_url: + 'https://api.github.com/repos/mralexgray/AOP-in-Objective-C/milestones{/number}', + stargazers_url: + 'https://api.github.com/repos/mralexgray/AOP-in-Objective-C/stargazers', + watchers_count: 0, + deployments_url: + 'https://api.github.com/repos/mralexgray/AOP-in-Objective-C/deployments', + git_commits_url: + 'https://api.github.com/repos/mralexgray/AOP-in-Objective-C/git/commits{/sha}', + subscribers_url: + 'https://api.github.com/repos/mralexgray/AOP-in-Objective-C/subscribers', + contributors_url: + 'https://api.github.com/repos/mralexgray/AOP-in-Objective-C/contributors', + issue_events_url: + 'https://api.github.com/repos/mralexgray/AOP-in-Objective-C/issues/events{/number}', + stargazers_count: 0, + subscription_url: + 'https://api.github.com/repos/mralexgray/AOP-in-Objective-C/subscription', + collaborators_url: + 'https://api.github.com/repos/mralexgray/AOP-in-Objective-C/collaborators{/collaborator}', + issue_comment_url: + 'https://api.github.com/repos/mralexgray/AOP-in-Objective-C/issues/comments{/number}', + notifications_url: + 'https://api.github.com/repos/mralexgray/AOP-in-Objective-C/notifications{?since,all,participating}', + open_issues_count: 0, + web_commit_signoff_required: false, + }, + { + id: 13141936, + url: 'https://api.github.com/repos/mralexgray/Apaxy', + fork: true, + name: 'Apaxy', + size: 113, + forks: 0, + owner: { + id: 262517, + url: 'https://api.github.com/users/mralexgray', + type: 'User', + login: 'mralexgray', + node_id: 'MDQ6VXNlcjI2MjUxNw==', + html_url: 'https://github.com/mralexgray', + gists_url: 'https://api.github.com/users/mralexgray/gists{/gist_id}', + repos_url: 'https://api.github.com/users/mralexgray/repos', + avatar_url: 'https://avatars.githubusercontent.com/u/262517?v=4', + events_url: 'https://api.github.com/users/mralexgray/events{/privacy}', + site_admin: false, + gravatar_id: '', + starred_url: + 'https://api.github.com/users/mralexgray/starred{/owner}{/repo}', + followers_url: 'https://api.github.com/users/mralexgray/followers', + following_url: + 'https://api.github.com/users/mralexgray/following{/other_user}', + organizations_url: 'https://api.github.com/users/mralexgray/orgs', + subscriptions_url: + 'https://api.github.com/users/mralexgray/subscriptions', + received_events_url: + 'https://api.github.com/users/mralexgray/received_events', + }, + topics: [], + git_url: 'git://github.com/mralexgray/Apaxy.git', + license: { + key: 'unlicense', + url: 'https://api.github.com/licenses/unlicense', + name: 'The Unlicense', + node_id: 'MDc6TGljZW5zZTE1', + spdx_id: 'Unlicense', + }, + node_id: 'MDEwOlJlcG9zaXRvcnkxMzE0MTkzNg==', + private: false, + ssh_url: 'git@github.com:mralexgray/Apaxy.git', + svn_url: 'https://github.com/mralexgray/Apaxy', + archived: false, + disabled: false, + has_wiki: true, + homepage: null, + html_url: 'https://github.com/mralexgray/Apaxy', + keys_url: 'https://api.github.com/repos/mralexgray/Apaxy/keys{/key_id}', + language: 'CSS', + tags_url: 'https://api.github.com/repos/mralexgray/Apaxy/tags', + watchers: 0, + blobs_url: 'https://api.github.com/repos/mralexgray/Apaxy/git/blobs{/sha}', + clone_url: 'https://github.com/mralexgray/Apaxy.git', + forks_url: 'https://api.github.com/repos/mralexgray/Apaxy/forks', + full_name: 'mralexgray/Apaxy', + has_pages: false, + hooks_url: 'https://api.github.com/repos/mralexgray/Apaxy/hooks', + pulls_url: 'https://api.github.com/repos/mralexgray/Apaxy/pulls{/number}', + pushed_at: '2013-08-02T16:01:32Z', + teams_url: 'https://api.github.com/repos/mralexgray/Apaxy/teams', + trees_url: 'https://api.github.com/repos/mralexgray/Apaxy/git/trees{/sha}', + created_at: '2013-09-27T05:05:35Z', + events_url: 'https://api.github.com/repos/mralexgray/Apaxy/events', + has_issues: false, + issues_url: 'https://api.github.com/repos/mralexgray/Apaxy/issues{/number}', + labels_url: 'https://api.github.com/repos/mralexgray/Apaxy/labels{/name}', + merges_url: 'https://api.github.com/repos/mralexgray/Apaxy/merges', + mirror_url: null, + updated_at: '2018-02-16T21:40:24Z', + visibility: 'public', + archive_url: + 'https://api.github.com/repos/mralexgray/Apaxy/{archive_format}{/ref}', + commits_url: 'https://api.github.com/repos/mralexgray/Apaxy/commits{/sha}', + compare_url: + 'https://api.github.com/repos/mralexgray/Apaxy/compare/{base}...{head}', + description: + 'A simple, customisable theme for your Apache directory listing.', + forks_count: 0, + is_template: false, + open_issues: 0, + branches_url: + 'https://api.github.com/repos/mralexgray/Apaxy/branches{/branch}', + comments_url: + 'https://api.github.com/repos/mralexgray/Apaxy/comments{/number}', + contents_url: + 'https://api.github.com/repos/mralexgray/Apaxy/contents/{+path}', + git_refs_url: + 'https://api.github.com/repos/mralexgray/Apaxy/git/refs{/sha}', + git_tags_url: + 'https://api.github.com/repos/mralexgray/Apaxy/git/tags{/sha}', + has_projects: true, + releases_url: 'https://api.github.com/repos/mralexgray/Apaxy/releases{/id}', + statuses_url: + 'https://api.github.com/repos/mralexgray/Apaxy/statuses/{sha}', + allow_forking: true, + assignees_url: + 'https://api.github.com/repos/mralexgray/Apaxy/assignees{/user}', + downloads_url: 'https://api.github.com/repos/mralexgray/Apaxy/downloads', + has_downloads: true, + languages_url: 'https://api.github.com/repos/mralexgray/Apaxy/languages', + default_branch: 'master', + milestones_url: + 'https://api.github.com/repos/mralexgray/Apaxy/milestones{/number}', + stargazers_url: 'https://api.github.com/repos/mralexgray/Apaxy/stargazers', + watchers_count: 0, + deployments_url: + 'https://api.github.com/repos/mralexgray/Apaxy/deployments', + git_commits_url: + 'https://api.github.com/repos/mralexgray/Apaxy/git/commits{/sha}', + subscribers_url: + 'https://api.github.com/repos/mralexgray/Apaxy/subscribers', + contributors_url: + 'https://api.github.com/repos/mralexgray/Apaxy/contributors', + issue_events_url: + 'https://api.github.com/repos/mralexgray/Apaxy/issues/events{/number}', + stargazers_count: 0, + subscription_url: + 'https://api.github.com/repos/mralexgray/Apaxy/subscription', + collaborators_url: + 'https://api.github.com/repos/mralexgray/Apaxy/collaborators{/collaborator}', + issue_comment_url: + 'https://api.github.com/repos/mralexgray/Apaxy/issues/comments{/number}', + notifications_url: + 'https://api.github.com/repos/mralexgray/Apaxy/notifications{?since,all,participating}', + open_issues_count: 0, + web_commit_signoff_required: false, + }, + { + id: 20027360, + url: 'https://api.github.com/repos/mralexgray/app', + fork: true, + name: 'app', + size: 1890, + forks: 0, + owner: { + id: 262517, + url: 'https://api.github.com/users/mralexgray', + type: 'User', + login: 'mralexgray', + node_id: 'MDQ6VXNlcjI2MjUxNw==', + html_url: 'https://github.com/mralexgray', + gists_url: 'https://api.github.com/users/mralexgray/gists{/gist_id}', + repos_url: 'https://api.github.com/users/mralexgray/repos', + avatar_url: 'https://avatars.githubusercontent.com/u/262517?v=4', + events_url: 'https://api.github.com/users/mralexgray/events{/privacy}', + site_admin: false, + gravatar_id: '', + starred_url: + 'https://api.github.com/users/mralexgray/starred{/owner}{/repo}', + followers_url: 'https://api.github.com/users/mralexgray/followers', + following_url: + 'https://api.github.com/users/mralexgray/following{/other_user}', + organizations_url: 'https://api.github.com/users/mralexgray/orgs', + subscriptions_url: + 'https://api.github.com/users/mralexgray/subscriptions', + received_events_url: + 'https://api.github.com/users/mralexgray/received_events', + }, + topics: [], + git_url: 'git://github.com/mralexgray/app.git', + license: { + key: 'other', + url: null, + name: 'Other', + node_id: 'MDc6TGljZW5zZTA=', + spdx_id: 'NOASSERTION', + }, + node_id: 'MDEwOlJlcG9zaXRvcnkyMDAyNzM2MA==', + private: false, + ssh_url: 'git@github.com:mralexgray/app.git', + svn_url: 'https://github.com/mralexgray/app', + archived: false, + disabled: false, + has_wiki: true, + homepage: null, + html_url: 'https://github.com/mralexgray/app', + keys_url: 'https://api.github.com/repos/mralexgray/app/keys{/key_id}', + language: 'JavaScript', + tags_url: 'https://api.github.com/repos/mralexgray/app/tags', + watchers: 0, + blobs_url: 'https://api.github.com/repos/mralexgray/app/git/blobs{/sha}', + clone_url: 'https://github.com/mralexgray/app.git', + forks_url: 'https://api.github.com/repos/mralexgray/app/forks', + full_name: 'mralexgray/app', + has_pages: false, + hooks_url: 'https://api.github.com/repos/mralexgray/app/hooks', + pulls_url: 'https://api.github.com/repos/mralexgray/app/pulls{/number}', + pushed_at: '2014-05-20T19:51:38Z', + teams_url: 'https://api.github.com/repos/mralexgray/app/teams', + trees_url: 'https://api.github.com/repos/mralexgray/app/git/trees{/sha}', + created_at: '2014-05-21T15:54:20Z', + events_url: 'https://api.github.com/repos/mralexgray/app/events', + has_issues: false, + issues_url: 'https://api.github.com/repos/mralexgray/app/issues{/number}', + labels_url: 'https://api.github.com/repos/mralexgray/app/labels{/name}', + merges_url: 'https://api.github.com/repos/mralexgray/app/merges', + mirror_url: null, + updated_at: '2014-05-21T15:54:22Z', + visibility: 'public', + archive_url: + 'https://api.github.com/repos/mralexgray/app/{archive_format}{/ref}', + commits_url: 'https://api.github.com/repos/mralexgray/app/commits{/sha}', + compare_url: + 'https://api.github.com/repos/mralexgray/app/compare/{base}...{head}', + description: 'Instant mobile web app creation', + forks_count: 0, + is_template: false, + open_issues: 0, + branches_url: + 'https://api.github.com/repos/mralexgray/app/branches{/branch}', + comments_url: + 'https://api.github.com/repos/mralexgray/app/comments{/number}', + contents_url: + 'https://api.github.com/repos/mralexgray/app/contents/{+path}', + git_refs_url: 'https://api.github.com/repos/mralexgray/app/git/refs{/sha}', + git_tags_url: 'https://api.github.com/repos/mralexgray/app/git/tags{/sha}', + has_projects: true, + releases_url: 'https://api.github.com/repos/mralexgray/app/releases{/id}', + statuses_url: 'https://api.github.com/repos/mralexgray/app/statuses/{sha}', + allow_forking: true, + assignees_url: + 'https://api.github.com/repos/mralexgray/app/assignees{/user}', + downloads_url: 'https://api.github.com/repos/mralexgray/app/downloads', + has_downloads: true, + languages_url: 'https://api.github.com/repos/mralexgray/app/languages', + default_branch: 'master', + milestones_url: + 'https://api.github.com/repos/mralexgray/app/milestones{/number}', + stargazers_url: 'https://api.github.com/repos/mralexgray/app/stargazers', + watchers_count: 0, + deployments_url: 'https://api.github.com/repos/mralexgray/app/deployments', + git_commits_url: + 'https://api.github.com/repos/mralexgray/app/git/commits{/sha}', + subscribers_url: 'https://api.github.com/repos/mralexgray/app/subscribers', + contributors_url: + 'https://api.github.com/repos/mralexgray/app/contributors', + issue_events_url: + 'https://api.github.com/repos/mralexgray/app/issues/events{/number}', + stargazers_count: 0, + subscription_url: + 'https://api.github.com/repos/mralexgray/app/subscription', + collaborators_url: + 'https://api.github.com/repos/mralexgray/app/collaborators{/collaborator}', + issue_comment_url: + 'https://api.github.com/repos/mralexgray/app/issues/comments{/number}', + notifications_url: + 'https://api.github.com/repos/mralexgray/app/notifications{?since,all,participating}', + open_issues_count: 0, + web_commit_signoff_required: false, + }, + ], + data2: [ + { + id: 6104546, + url: 'https://api.github.com/repos/mralexgray/-REPONAME', + fork: false, + name: '-REPONAME', + size: 48, + forks: 0, + owner: { + id: 262517, + url: 'https://api.github.com/users/mralexgray', + type: 'User', + login: 'mralexgray', + node_id: 'MDQ6VXNlcjI2MjUxNw==', + html_url: 'https://github.com/mralexgray', + gists_url: 'https://api.github.com/users/mralexgray/gists{/gist_id}', + repos_url: 'https://api.github.com/users/mralexgray/repos', + avatar_url: 'https://avatars.githubusercontent.com/u/262517?v=4', + events_url: 'https://api.github.com/users/mralexgray/events{/privacy}', + site_admin: false, + gravatar_id: '', + starred_url: + 'https://api.github.com/users/mralexgray/starred{/owner}{/repo}', + followers_url: 'https://api.github.com/users/mralexgray/followers', + following_url: + 'https://api.github.com/users/mralexgray/following{/other_user}', + organizations_url: 'https://api.github.com/users/mralexgray/orgs', + subscriptions_url: + 'https://api.github.com/users/mralexgray/subscriptions', + received_events_url: + 'https://api.github.com/users/mralexgray/received_events', + }, + topics: [], + git_url: 'git://github.com/mralexgray/-REPONAME.git', + license: null, + node_id: 'MDEwOlJlcG9zaXRvcnk2MTA0NTQ2', + private: false, + ssh_url: 'git@github.com:mralexgray/-REPONAME.git', + svn_url: 'https://github.com/mralexgray/-REPONAME', + archived: false, + disabled: false, + has_wiki: true, + homepage: null, + html_url: 'https://github.com/mralexgray/-REPONAME', + keys_url: 'https://api.github.com/repos/mralexgray/-REPONAME/keys{/key_id}', + language: null, + tags_url: 'https://api.github.com/repos/mralexgray/-REPONAME/tags', + watchers: 0, + blobs_url: + 'https://api.github.com/repos/mralexgray/-REPONAME/git/blobs{/sha}', + clone_url: 'https://github.com/mralexgray/-REPONAME.git', + forks_url: 'https://api.github.com/repos/mralexgray/-REPONAME/forks', + full_name: 'mralexgray/-REPONAME', + has_pages: false, + hooks_url: 'https://api.github.com/repos/mralexgray/-REPONAME/hooks', + pulls_url: + 'https://api.github.com/repos/mralexgray/-REPONAME/pulls{/number}', + pushed_at: '2012-10-06T16:37:39Z', + teams_url: 'https://api.github.com/repos/mralexgray/-REPONAME/teams', + trees_url: + 'https://api.github.com/repos/mralexgray/-REPONAME/git/trees{/sha}', + created_at: '2012-10-06T16:37:39Z', + events_url: 'https://api.github.com/repos/mralexgray/-REPONAME/events', + has_issues: true, + issues_url: + 'https://api.github.com/repos/mralexgray/-REPONAME/issues{/number}', + labels_url: + 'https://api.github.com/repos/mralexgray/-REPONAME/labels{/name}', + merges_url: 'https://api.github.com/repos/mralexgray/-REPONAME/merges', + mirror_url: null, + updated_at: '2013-01-12T13:39:30Z', + visibility: 'public', + archive_url: + 'https://api.github.com/repos/mralexgray/-REPONAME/{archive_format}{/ref}', + commits_url: + 'https://api.github.com/repos/mralexgray/-REPONAME/commits{/sha}', + compare_url: + 'https://api.github.com/repos/mralexgray/-REPONAME/compare/{base}...{head}', + description: null, + forks_count: 0, + is_template: false, + open_issues: 0, + branches_url: + 'https://api.github.com/repos/mralexgray/-REPONAME/branches{/branch}', + comments_url: + 'https://api.github.com/repos/mralexgray/-REPONAME/comments{/number}', + contents_url: + 'https://api.github.com/repos/mralexgray/-REPONAME/contents/{+path}', + git_refs_url: + 'https://api.github.com/repos/mralexgray/-REPONAME/git/refs{/sha}', + git_tags_url: + 'https://api.github.com/repos/mralexgray/-REPONAME/git/tags{/sha}', + has_projects: true, + releases_url: + 'https://api.github.com/repos/mralexgray/-REPONAME/releases{/id}', + statuses_url: + 'https://api.github.com/repos/mralexgray/-REPONAME/statuses/{sha}', + allow_forking: true, + assignees_url: + 'https://api.github.com/repos/mralexgray/-REPONAME/assignees{/user}', + downloads_url: + 'https://api.github.com/repos/mralexgray/-REPONAME/downloads', + has_downloads: true, + languages_url: + 'https://api.github.com/repos/mralexgray/-REPONAME/languages', + default_branch: 'master', + milestones_url: + 'https://api.github.com/repos/mralexgray/-REPONAME/milestones{/number}', + stargazers_url: + 'https://api.github.com/repos/mralexgray/-REPONAME/stargazers', + watchers_count: 0, + deployments_url: + 'https://api.github.com/repos/mralexgray/-REPONAME/deployments', + git_commits_url: + 'https://api.github.com/repos/mralexgray/-REPONAME/git/commits{/sha}', + subscribers_url: + 'https://api.github.com/repos/mralexgray/-REPONAME/subscribers', + contributors_url: + 'https://api.github.com/repos/mralexgray/-REPONAME/contributors', + issue_events_url: + 'https://api.github.com/repos/mralexgray/-REPONAME/issues/events{/number}', + stargazers_count: 0, + subscription_url: + 'https://api.github.com/repos/mralexgray/-REPONAME/subscription', + collaborators_url: + 'https://api.github.com/repos/mralexgray/-REPONAME/collaborators{/collaborator}', + issue_comment_url: + 'https://api.github.com/repos/mralexgray/-REPONAME/issues/comments{/number}', + notifications_url: + 'https://api.github.com/repos/mralexgray/-REPONAME/notifications{?since,all,participating}', + open_issues_count: 0, + web_commit_signoff_required: false, + }, + { + id: 104510411, + url: 'https://api.github.com/repos/mralexgray/...', + fork: true, + name: '...', + size: 113, + forks: 0, + owner: { + id: 262517, + url: 'https://api.github.com/users/mralexgray', + type: 'User', + login: 'mralexgray', + node_id: 'MDQ6VXNlcjI2MjUxNw==', + html_url: 'https://github.com/mralexgray', + gists_url: 'https://api.github.com/users/mralexgray/gists{/gist_id}', + repos_url: 'https://api.github.com/users/mralexgray/repos', + avatar_url: 'https://avatars.githubusercontent.com/u/262517?v=4', + events_url: 'https://api.github.com/users/mralexgray/events{/privacy}', + site_admin: false, + gravatar_id: '', + starred_url: + 'https://api.github.com/users/mralexgray/starred{/owner}{/repo}', + followers_url: 'https://api.github.com/users/mralexgray/followers', + following_url: + 'https://api.github.com/users/mralexgray/following{/other_user}', + organizations_url: 'https://api.github.com/users/mralexgray/orgs', + subscriptions_url: + 'https://api.github.com/users/mralexgray/subscriptions', + received_events_url: + 'https://api.github.com/users/mralexgray/received_events', + }, + topics: [], + git_url: 'git://github.com/mralexgray/....git', + license: { + key: 'mit', + url: 'https://api.github.com/licenses/mit', + name: 'MIT License', + node_id: 'MDc6TGljZW5zZTEz', + spdx_id: 'MIT', + }, + node_id: 'MDEwOlJlcG9zaXRvcnkxMDQ1MTA0MTE=', + private: false, + ssh_url: 'git@github.com:mralexgray/....git', + svn_url: 'https://github.com/mralexgray/...', + archived: false, + disabled: false, + has_wiki: false, + homepage: 'https://driesvints.com/blog/getting-started-with-dotfiles', + html_url: 'https://github.com/mralexgray/...', + keys_url: 'https://api.github.com/repos/mralexgray/.../keys{/key_id}', + language: 'Shell', + tags_url: 'https://api.github.com/repos/mralexgray/.../tags', + watchers: 0, + blobs_url: 'https://api.github.com/repos/mralexgray/.../git/blobs{/sha}', + clone_url: 'https://github.com/mralexgray/....git', + forks_url: 'https://api.github.com/repos/mralexgray/.../forks', + full_name: 'mralexgray/...', + has_pages: false, + hooks_url: 'https://api.github.com/repos/mralexgray/.../hooks', + pulls_url: 'https://api.github.com/repos/mralexgray/.../pulls{/number}', + pushed_at: '2017-09-15T08:27:32Z', + teams_url: 'https://api.github.com/repos/mralexgray/.../teams', + trees_url: 'https://api.github.com/repos/mralexgray/.../git/trees{/sha}', + created_at: '2017-09-22T19:19:42Z', + events_url: 'https://api.github.com/repos/mralexgray/.../events', + has_issues: false, + issues_url: 'https://api.github.com/repos/mralexgray/.../issues{/number}', + labels_url: 'https://api.github.com/repos/mralexgray/.../labels{/name}', + merges_url: 'https://api.github.com/repos/mralexgray/.../merges', + mirror_url: null, + updated_at: '2017-09-22T19:20:22Z', + visibility: 'public', + archive_url: + 'https://api.github.com/repos/mralexgray/.../{archive_format}{/ref}', + commits_url: 'https://api.github.com/repos/mralexgray/.../commits{/sha}', + compare_url: + 'https://api.github.com/repos/mralexgray/.../compare/{base}...{head}', + description: ':computer: Public repo for my personal dotfiles.', + forks_count: 0, + is_template: false, + open_issues: 0, + branches_url: + 'https://api.github.com/repos/mralexgray/.../branches{/branch}', + comments_url: + 'https://api.github.com/repos/mralexgray/.../comments{/number}', + contents_url: + 'https://api.github.com/repos/mralexgray/.../contents/{+path}', + git_refs_url: 'https://api.github.com/repos/mralexgray/.../git/refs{/sha}', + git_tags_url: 'https://api.github.com/repos/mralexgray/.../git/tags{/sha}', + has_projects: true, + releases_url: 'https://api.github.com/repos/mralexgray/.../releases{/id}', + statuses_url: 'https://api.github.com/repos/mralexgray/.../statuses/{sha}', + allow_forking: true, + assignees_url: + 'https://api.github.com/repos/mralexgray/.../assignees{/user}', + downloads_url: 'https://api.github.com/repos/mralexgray/.../downloads', + has_downloads: true, + languages_url: 'https://api.github.com/repos/mralexgray/.../languages', + default_branch: 'master', + milestones_url: + 'https://api.github.com/repos/mralexgray/.../milestones{/number}', + stargazers_url: 'https://api.github.com/repos/mralexgray/.../stargazers', + watchers_count: 0, + deployments_url: 'https://api.github.com/repos/mralexgray/.../deployments', + git_commits_url: + 'https://api.github.com/repos/mralexgray/.../git/commits{/sha}', + subscribers_url: 'https://api.github.com/repos/mralexgray/.../subscribers', + contributors_url: + 'https://api.github.com/repos/mralexgray/.../contributors', + issue_events_url: + 'https://api.github.com/repos/mralexgray/.../issues/events{/number}', + stargazers_count: 0, + subscription_url: + 'https://api.github.com/repos/mralexgray/.../subscription', + collaborators_url: + 'https://api.github.com/repos/mralexgray/.../collaborators{/collaborator}', + issue_comment_url: + 'https://api.github.com/repos/mralexgray/.../issues/comments{/number}', + notifications_url: + 'https://api.github.com/repos/mralexgray/.../notifications{?since,all,participating}', + open_issues_count: 0, + web_commit_signoff_required: false, + }, + { + id: 58656723, + url: 'https://api.github.com/repos/mralexgray/2200087-Serial-Protocol', + fork: true, + name: '2200087-Serial-Protocol', + size: 41, + forks: 1, + owner: { + id: 262517, + url: 'https://api.github.com/users/mralexgray', + type: 'User', + login: 'mralexgray', + node_id: 'MDQ6VXNlcjI2MjUxNw==', + html_url: 'https://github.com/mralexgray', + gists_url: 'https://api.github.com/users/mralexgray/gists{/gist_id}', + repos_url: 'https://api.github.com/users/mralexgray/repos', + avatar_url: 'https://avatars.githubusercontent.com/u/262517?v=4', + events_url: 'https://api.github.com/users/mralexgray/events{/privacy}', + site_admin: false, + gravatar_id: '', + starred_url: + 'https://api.github.com/users/mralexgray/starred{/owner}{/repo}', + followers_url: 'https://api.github.com/users/mralexgray/followers', + following_url: + 'https://api.github.com/users/mralexgray/following{/other_user}', + organizations_url: 'https://api.github.com/users/mralexgray/orgs', + subscriptions_url: + 'https://api.github.com/users/mralexgray/subscriptions', + received_events_url: + 'https://api.github.com/users/mralexgray/received_events', + }, + topics: [], + git_url: 'git://github.com/mralexgray/2200087-Serial-Protocol.git', + license: { + key: 'gpl-2.0', + url: 'https://api.github.com/licenses/gpl-2.0', + name: 'GNU General Public License v2.0', + node_id: 'MDc6TGljZW5zZTg=', + spdx_id: 'GPL-2.0', + }, + node_id: 'MDEwOlJlcG9zaXRvcnk1ODY1NjcyMw==', + private: false, + ssh_url: 'git@github.com:mralexgray/2200087-Serial-Protocol.git', + svn_url: 'https://github.com/mralexgray/2200087-Serial-Protocol', + archived: false, + disabled: false, + has_wiki: true, + homepage: 'http://daviddworken.com', + html_url: 'https://github.com/mralexgray/2200087-Serial-Protocol', + keys_url: + 'https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/keys{/key_id}', + language: 'Python', + tags_url: + 'https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/tags', + watchers: 0, + blobs_url: + 'https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/git/blobs{/sha}', + clone_url: 'https://github.com/mralexgray/2200087-Serial-Protocol.git', + forks_url: + 'https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/forks', + full_name: 'mralexgray/2200087-Serial-Protocol', + has_pages: false, + hooks_url: + 'https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/hooks', + pulls_url: + 'https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/pulls{/number}', + pushed_at: '2016-05-12T16:07:24Z', + teams_url: + 'https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/teams', + trees_url: + 'https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/git/trees{/sha}', + created_at: '2016-05-12T16:05:28Z', + events_url: + 'https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/events', + has_issues: false, + issues_url: + 'https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/issues{/number}', + labels_url: + 'https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/labels{/name}', + merges_url: + 'https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/merges', + mirror_url: null, + updated_at: '2016-05-12T16:05:30Z', + visibility: 'public', + archive_url: + 'https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/{archive_format}{/ref}', + commits_url: + 'https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/commits{/sha}', + compare_url: + 'https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/compare/{base}...{head}', + description: + "A reverse engineered protocol description and accompanying code for Radioshack's 2200087 multimeter", + forks_count: 1, + is_template: false, + open_issues: 0, + branches_url: + 'https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/branches{/branch}', + comments_url: + 'https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/comments{/number}', + contents_url: + 'https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/contents/{+path}', + git_refs_url: + 'https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/git/refs{/sha}', + git_tags_url: + 'https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/git/tags{/sha}', + has_projects: true, + releases_url: + 'https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/releases{/id}', + statuses_url: + 'https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/statuses/{sha}', + allow_forking: true, + assignees_url: + 'https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/assignees{/user}', + downloads_url: + 'https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/downloads', + has_downloads: true, + languages_url: + 'https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/languages', + default_branch: 'master', + milestones_url: + 'https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/milestones{/number}', + stargazers_url: + 'https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/stargazers', + watchers_count: 0, + deployments_url: + 'https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/deployments', + git_commits_url: + 'https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/git/commits{/sha}', + subscribers_url: + 'https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/subscribers', + contributors_url: + 'https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/contributors', + issue_events_url: + 'https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/issues/events{/number}', + stargazers_count: 0, + subscription_url: + 'https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/subscription', + collaborators_url: + 'https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/collaborators{/collaborator}', + issue_comment_url: + 'https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/issues/comments{/number}', + notifications_url: + 'https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/notifications{?since,all,participating}', + open_issues_count: 0, + web_commit_signoff_required: false, + }, + { + id: 13121042, + url: 'https://api.github.com/repos/mralexgray/ace', + fork: true, + name: 'ace', + size: 21080, + forks: 1, + owner: { + id: 262517, + url: 'https://api.github.com/users/mralexgray', + type: 'User', + login: 'mralexgray', + node_id: 'MDQ6VXNlcjI2MjUxNw==', + html_url: 'https://github.com/mralexgray', + gists_url: 'https://api.github.com/users/mralexgray/gists{/gist_id}', + repos_url: 'https://api.github.com/users/mralexgray/repos', + avatar_url: 'https://avatars.githubusercontent.com/u/262517?v=4', + events_url: 'https://api.github.com/users/mralexgray/events{/privacy}', + site_admin: false, + gravatar_id: '', + starred_url: + 'https://api.github.com/users/mralexgray/starred{/owner}{/repo}', + followers_url: 'https://api.github.com/users/mralexgray/followers', + following_url: + 'https://api.github.com/users/mralexgray/following{/other_user}', + organizations_url: 'https://api.github.com/users/mralexgray/orgs', + subscriptions_url: + 'https://api.github.com/users/mralexgray/subscriptions', + received_events_url: + 'https://api.github.com/users/mralexgray/received_events', + }, + topics: [], + git_url: 'git://github.com/mralexgray/ace.git', + license: { + key: 'other', + url: null, + name: 'Other', + node_id: 'MDc6TGljZW5zZTA=', + spdx_id: 'NOASSERTION', + }, + node_id: 'MDEwOlJlcG9zaXRvcnkxMzEyMTA0Mg==', + private: false, + ssh_url: 'git@github.com:mralexgray/ace.git', + svn_url: 'https://github.com/mralexgray/ace', + archived: false, + disabled: false, + has_wiki: true, + homepage: 'http://ace.c9.io', + html_url: 'https://github.com/mralexgray/ace', + keys_url: 'https://api.github.com/repos/mralexgray/ace/keys{/key_id}', + language: 'JavaScript', + tags_url: 'https://api.github.com/repos/mralexgray/ace/tags', + watchers: 0, + blobs_url: 'https://api.github.com/repos/mralexgray/ace/git/blobs{/sha}', + clone_url: 'https://github.com/mralexgray/ace.git', + forks_url: 'https://api.github.com/repos/mralexgray/ace/forks', + full_name: 'mralexgray/ace', + has_pages: false, + hooks_url: 'https://api.github.com/repos/mralexgray/ace/hooks', + pulls_url: 'https://api.github.com/repos/mralexgray/ace/pulls{/number}', + pushed_at: '2013-10-26T12:34:48Z', + teams_url: 'https://api.github.com/repos/mralexgray/ace/teams', + trees_url: 'https://api.github.com/repos/mralexgray/ace/git/trees{/sha}', + created_at: '2013-09-26T11:58:10Z', + events_url: 'https://api.github.com/repos/mralexgray/ace/events', + has_issues: false, + issues_url: 'https://api.github.com/repos/mralexgray/ace/issues{/number}', + labels_url: 'https://api.github.com/repos/mralexgray/ace/labels{/name}', + merges_url: 'https://api.github.com/repos/mralexgray/ace/merges', + mirror_url: null, + updated_at: '2013-10-26T12:34:49Z', + visibility: 'public', + archive_url: + 'https://api.github.com/repos/mralexgray/ace/{archive_format}{/ref}', + commits_url: 'https://api.github.com/repos/mralexgray/ace/commits{/sha}', + compare_url: + 'https://api.github.com/repos/mralexgray/ace/compare/{base}...{head}', + description: 'Ace (Ajax.org Cloud9 Editor)', + forks_count: 1, + is_template: false, + open_issues: 0, + branches_url: + 'https://api.github.com/repos/mralexgray/ace/branches{/branch}', + comments_url: + 'https://api.github.com/repos/mralexgray/ace/comments{/number}', + contents_url: + 'https://api.github.com/repos/mralexgray/ace/contents/{+path}', + git_refs_url: 'https://api.github.com/repos/mralexgray/ace/git/refs{/sha}', + git_tags_url: 'https://api.github.com/repos/mralexgray/ace/git/tags{/sha}', + has_projects: true, + releases_url: 'https://api.github.com/repos/mralexgray/ace/releases{/id}', + statuses_url: 'https://api.github.com/repos/mralexgray/ace/statuses/{sha}', + allow_forking: true, + assignees_url: + 'https://api.github.com/repos/mralexgray/ace/assignees{/user}', + downloads_url: 'https://api.github.com/repos/mralexgray/ace/downloads', + has_downloads: true, + languages_url: 'https://api.github.com/repos/mralexgray/ace/languages', + default_branch: 'master', + milestones_url: + 'https://api.github.com/repos/mralexgray/ace/milestones{/number}', + stargazers_url: 'https://api.github.com/repos/mralexgray/ace/stargazers', + watchers_count: 0, + deployments_url: 'https://api.github.com/repos/mralexgray/ace/deployments', + git_commits_url: + 'https://api.github.com/repos/mralexgray/ace/git/commits{/sha}', + subscribers_url: 'https://api.github.com/repos/mralexgray/ace/subscribers', + contributors_url: + 'https://api.github.com/repos/mralexgray/ace/contributors', + issue_events_url: + 'https://api.github.com/repos/mralexgray/ace/issues/events{/number}', + stargazers_count: 0, + subscription_url: + 'https://api.github.com/repos/mralexgray/ace/subscription', + collaborators_url: + 'https://api.github.com/repos/mralexgray/ace/collaborators{/collaborator}', + issue_comment_url: + 'https://api.github.com/repos/mralexgray/ace/issues/comments{/number}', + notifications_url: + 'https://api.github.com/repos/mralexgray/ace/notifications{?since,all,participating}', + open_issues_count: 0, + web_commit_signoff_required: false, + }, + { + id: 10791045, + url: 'https://api.github.com/repos/mralexgray/ACEView', + fork: true, + name: 'ACEView', + size: 1733, + forks: 1, + owner: { + id: 262517, + url: 'https://api.github.com/users/mralexgray', + type: 'User', + login: 'mralexgray', + node_id: 'MDQ6VXNlcjI2MjUxNw==', + html_url: 'https://github.com/mralexgray', + gists_url: 'https://api.github.com/users/mralexgray/gists{/gist_id}', + repos_url: 'https://api.github.com/users/mralexgray/repos', + avatar_url: 'https://avatars.githubusercontent.com/u/262517?v=4', + events_url: 'https://api.github.com/users/mralexgray/events{/privacy}', + site_admin: false, + gravatar_id: '', + starred_url: + 'https://api.github.com/users/mralexgray/starred{/owner}{/repo}', + followers_url: 'https://api.github.com/users/mralexgray/followers', + following_url: + 'https://api.github.com/users/mralexgray/following{/other_user}', + organizations_url: 'https://api.github.com/users/mralexgray/orgs', + subscriptions_url: + 'https://api.github.com/users/mralexgray/subscriptions', + received_events_url: + 'https://api.github.com/users/mralexgray/received_events', + }, + topics: [], + git_url: 'git://github.com/mralexgray/ACEView.git', + license: { + key: 'other', + url: null, + name: 'Other', + node_id: 'MDc6TGljZW5zZTA=', + spdx_id: 'NOASSERTION', + }, + node_id: 'MDEwOlJlcG9zaXRvcnkxMDc5MTA0NQ==', + private: false, + ssh_url: 'git@github.com:mralexgray/ACEView.git', + svn_url: 'https://github.com/mralexgray/ACEView', + archived: false, + disabled: false, + has_wiki: true, + homepage: null, + html_url: 'https://github.com/mralexgray/ACEView', + keys_url: 'https://api.github.com/repos/mralexgray/ACEView/keys{/key_id}', + language: 'Objective-C', + tags_url: 'https://api.github.com/repos/mralexgray/ACEView/tags', + watchers: 0, + blobs_url: + 'https://api.github.com/repos/mralexgray/ACEView/git/blobs{/sha}', + clone_url: 'https://github.com/mralexgray/ACEView.git', + forks_url: 'https://api.github.com/repos/mralexgray/ACEView/forks', + full_name: 'mralexgray/ACEView', + has_pages: false, + hooks_url: 'https://api.github.com/repos/mralexgray/ACEView/hooks', + pulls_url: 'https://api.github.com/repos/mralexgray/ACEView/pulls{/number}', + pushed_at: '2014-05-09T01:36:23Z', + teams_url: 'https://api.github.com/repos/mralexgray/ACEView/teams', + trees_url: + 'https://api.github.com/repos/mralexgray/ACEView/git/trees{/sha}', + created_at: '2013-06-19T12:15:04Z', + events_url: 'https://api.github.com/repos/mralexgray/ACEView/events', + has_issues: false, + issues_url: + 'https://api.github.com/repos/mralexgray/ACEView/issues{/number}', + labels_url: 'https://api.github.com/repos/mralexgray/ACEView/labels{/name}', + merges_url: 'https://api.github.com/repos/mralexgray/ACEView/merges', + mirror_url: null, + updated_at: '2015-11-24T01:14:10Z', + visibility: 'public', + archive_url: + 'https://api.github.com/repos/mralexgray/ACEView/{archive_format}{/ref}', + commits_url: + 'https://api.github.com/repos/mralexgray/ACEView/commits{/sha}', + compare_url: + 'https://api.github.com/repos/mralexgray/ACEView/compare/{base}...{head}', + description: 'Use the wonderful ACE editor in your Cocoa applications', + forks_count: 1, + is_template: false, + open_issues: 0, + branches_url: + 'https://api.github.com/repos/mralexgray/ACEView/branches{/branch}', + comments_url: + 'https://api.github.com/repos/mralexgray/ACEView/comments{/number}', + contents_url: + 'https://api.github.com/repos/mralexgray/ACEView/contents/{+path}', + git_refs_url: + 'https://api.github.com/repos/mralexgray/ACEView/git/refs{/sha}', + git_tags_url: + 'https://api.github.com/repos/mralexgray/ACEView/git/tags{/sha}', + has_projects: true, + releases_url: + 'https://api.github.com/repos/mralexgray/ACEView/releases{/id}', + statuses_url: + 'https://api.github.com/repos/mralexgray/ACEView/statuses/{sha}', + allow_forking: true, + assignees_url: + 'https://api.github.com/repos/mralexgray/ACEView/assignees{/user}', + downloads_url: 'https://api.github.com/repos/mralexgray/ACEView/downloads', + has_downloads: true, + languages_url: 'https://api.github.com/repos/mralexgray/ACEView/languages', + default_branch: 'master', + milestones_url: + 'https://api.github.com/repos/mralexgray/ACEView/milestones{/number}', + stargazers_url: + 'https://api.github.com/repos/mralexgray/ACEView/stargazers', + watchers_count: 0, + deployments_url: + 'https://api.github.com/repos/mralexgray/ACEView/deployments', + git_commits_url: + 'https://api.github.com/repos/mralexgray/ACEView/git/commits{/sha}', + subscribers_url: + 'https://api.github.com/repos/mralexgray/ACEView/subscribers', + contributors_url: + 'https://api.github.com/repos/mralexgray/ACEView/contributors', + issue_events_url: + 'https://api.github.com/repos/mralexgray/ACEView/issues/events{/number}', + stargazers_count: 0, + subscription_url: + 'https://api.github.com/repos/mralexgray/ACEView/subscription', + collaborators_url: + 'https://api.github.com/repos/mralexgray/ACEView/collaborators{/collaborator}', + issue_comment_url: + 'https://api.github.com/repos/mralexgray/ACEView/issues/comments{/number}', + notifications_url: + 'https://api.github.com/repos/mralexgray/ACEView/notifications{?since,all,participating}', + open_issues_count: 0, + web_commit_signoff_required: false, + }, + { + id: 13623648, + url: 'https://api.github.com/repos/mralexgray/ActiveLog', + fork: true, + name: 'ActiveLog', + size: 60, + forks: 0, + owner: { + id: 262517, + url: 'https://api.github.com/users/mralexgray', + type: 'User', + login: 'mralexgray', + node_id: 'MDQ6VXNlcjI2MjUxNw==', + html_url: 'https://github.com/mralexgray', + gists_url: 'https://api.github.com/users/mralexgray/gists{/gist_id}', + repos_url: 'https://api.github.com/users/mralexgray/repos', + avatar_url: 'https://avatars.githubusercontent.com/u/262517?v=4', + events_url: 'https://api.github.com/users/mralexgray/events{/privacy}', + site_admin: false, + gravatar_id: '', + starred_url: + 'https://api.github.com/users/mralexgray/starred{/owner}{/repo}', + followers_url: 'https://api.github.com/users/mralexgray/followers', + following_url: + 'https://api.github.com/users/mralexgray/following{/other_user}', + organizations_url: 'https://api.github.com/users/mralexgray/orgs', + subscriptions_url: + 'https://api.github.com/users/mralexgray/subscriptions', + received_events_url: + 'https://api.github.com/users/mralexgray/received_events', + }, + topics: [], + git_url: 'git://github.com/mralexgray/ActiveLog.git', + license: null, + node_id: 'MDEwOlJlcG9zaXRvcnkxMzYyMzY0OA==', + private: false, + ssh_url: 'git@github.com:mralexgray/ActiveLog.git', + svn_url: 'https://github.com/mralexgray/ActiveLog', + archived: false, + disabled: false, + has_wiki: true, + homepage: 'http://deepitpro.com/en/articles/ActiveLog/info/', + html_url: 'https://github.com/mralexgray/ActiveLog', + keys_url: 'https://api.github.com/repos/mralexgray/ActiveLog/keys{/key_id}', + language: 'Objective-C', + tags_url: 'https://api.github.com/repos/mralexgray/ActiveLog/tags', + watchers: 0, + blobs_url: + 'https://api.github.com/repos/mralexgray/ActiveLog/git/blobs{/sha}', + clone_url: 'https://github.com/mralexgray/ActiveLog.git', + forks_url: 'https://api.github.com/repos/mralexgray/ActiveLog/forks', + full_name: 'mralexgray/ActiveLog', + has_pages: false, + hooks_url: 'https://api.github.com/repos/mralexgray/ActiveLog/hooks', + pulls_url: + 'https://api.github.com/repos/mralexgray/ActiveLog/pulls{/number}', + pushed_at: '2011-07-03T06:28:59Z', + teams_url: 'https://api.github.com/repos/mralexgray/ActiveLog/teams', + trees_url: + 'https://api.github.com/repos/mralexgray/ActiveLog/git/trees{/sha}', + created_at: '2013-10-16T15:52:37Z', + events_url: 'https://api.github.com/repos/mralexgray/ActiveLog/events', + has_issues: false, + issues_url: + 'https://api.github.com/repos/mralexgray/ActiveLog/issues{/number}', + labels_url: + 'https://api.github.com/repos/mralexgray/ActiveLog/labels{/name}', + merges_url: 'https://api.github.com/repos/mralexgray/ActiveLog/merges', + mirror_url: null, + updated_at: '2013-10-16T15:52:37Z', + visibility: 'public', + archive_url: + 'https://api.github.com/repos/mralexgray/ActiveLog/{archive_format}{/ref}', + commits_url: + 'https://api.github.com/repos/mralexgray/ActiveLog/commits{/sha}', + compare_url: + 'https://api.github.com/repos/mralexgray/ActiveLog/compare/{base}...{head}', + description: 'Shut up all logs with active filter.', + forks_count: 0, + is_template: false, + open_issues: 0, + branches_url: + 'https://api.github.com/repos/mralexgray/ActiveLog/branches{/branch}', + comments_url: + 'https://api.github.com/repos/mralexgray/ActiveLog/comments{/number}', + contents_url: + 'https://api.github.com/repos/mralexgray/ActiveLog/contents/{+path}', + git_refs_url: + 'https://api.github.com/repos/mralexgray/ActiveLog/git/refs{/sha}', + git_tags_url: + 'https://api.github.com/repos/mralexgray/ActiveLog/git/tags{/sha}', + has_projects: true, + releases_url: + 'https://api.github.com/repos/mralexgray/ActiveLog/releases{/id}', + statuses_url: + 'https://api.github.com/repos/mralexgray/ActiveLog/statuses/{sha}', + allow_forking: true, + assignees_url: + 'https://api.github.com/repos/mralexgray/ActiveLog/assignees{/user}', + downloads_url: + 'https://api.github.com/repos/mralexgray/ActiveLog/downloads', + has_downloads: true, + languages_url: + 'https://api.github.com/repos/mralexgray/ActiveLog/languages', + default_branch: 'master', + milestones_url: + 'https://api.github.com/repos/mralexgray/ActiveLog/milestones{/number}', + stargazers_url: + 'https://api.github.com/repos/mralexgray/ActiveLog/stargazers', + watchers_count: 0, + deployments_url: + 'https://api.github.com/repos/mralexgray/ActiveLog/deployments', + git_commits_url: + 'https://api.github.com/repos/mralexgray/ActiveLog/git/commits{/sha}', + subscribers_url: + 'https://api.github.com/repos/mralexgray/ActiveLog/subscribers', + contributors_url: + 'https://api.github.com/repos/mralexgray/ActiveLog/contributors', + issue_events_url: + 'https://api.github.com/repos/mralexgray/ActiveLog/issues/events{/number}', + stargazers_count: 0, + subscription_url: + 'https://api.github.com/repos/mralexgray/ActiveLog/subscription', + collaborators_url: + 'https://api.github.com/repos/mralexgray/ActiveLog/collaborators{/collaborator}', + issue_comment_url: + 'https://api.github.com/repos/mralexgray/ActiveLog/issues/comments{/number}', + notifications_url: + 'https://api.github.com/repos/mralexgray/ActiveLog/notifications{?since,all,participating}', + open_issues_count: 0, + web_commit_signoff_required: false, + }, + { + id: 9716210, + url: 'https://api.github.com/repos/mralexgray/adium', + fork: false, + name: 'adium', + size: 277719, + forks: 37, + owner: { + id: 262517, + url: 'https://api.github.com/users/mralexgray', + type: 'User', + login: 'mralexgray', + node_id: 'MDQ6VXNlcjI2MjUxNw==', + html_url: 'https://github.com/mralexgray', + gists_url: 'https://api.github.com/users/mralexgray/gists{/gist_id}', + repos_url: 'https://api.github.com/users/mralexgray/repos', + avatar_url: 'https://avatars.githubusercontent.com/u/262517?v=4', + events_url: 'https://api.github.com/users/mralexgray/events{/privacy}', + site_admin: false, + gravatar_id: '', + starred_url: + 'https://api.github.com/users/mralexgray/starred{/owner}{/repo}', + followers_url: 'https://api.github.com/users/mralexgray/followers', + following_url: + 'https://api.github.com/users/mralexgray/following{/other_user}', + organizations_url: 'https://api.github.com/users/mralexgray/orgs', + subscriptions_url: + 'https://api.github.com/users/mralexgray/subscriptions', + received_events_url: + 'https://api.github.com/users/mralexgray/received_events', + }, + topics: [], + git_url: 'git://github.com/mralexgray/adium.git', + license: { + key: 'other', + url: null, + name: 'Other', + node_id: 'MDc6TGljZW5zZTA=', + spdx_id: 'NOASSERTION', + }, + node_id: 'MDEwOlJlcG9zaXRvcnk5NzE2MjEw', + private: false, + ssh_url: 'git@github.com:mralexgray/adium.git', + svn_url: 'https://github.com/mralexgray/adium', + archived: false, + disabled: false, + has_wiki: false, + homepage: null, + html_url: 'https://github.com/mralexgray/adium', + keys_url: 'https://api.github.com/repos/mralexgray/adium/keys{/key_id}', + language: 'Objective-C', + tags_url: 'https://api.github.com/repos/mralexgray/adium/tags', + watchers: 0, + blobs_url: 'https://api.github.com/repos/mralexgray/adium/git/blobs{/sha}', + clone_url: 'https://github.com/mralexgray/adium.git', + forks_url: 'https://api.github.com/repos/mralexgray/adium/forks', + full_name: 'mralexgray/adium', + has_pages: false, + hooks_url: 'https://api.github.com/repos/mralexgray/adium/hooks', + pulls_url: 'https://api.github.com/repos/mralexgray/adium/pulls{/number}', + pushed_at: '2013-04-26T16:43:53Z', + teams_url: 'https://api.github.com/repos/mralexgray/adium/teams', + trees_url: 'https://api.github.com/repos/mralexgray/adium/git/trees{/sha}', + created_at: '2013-04-27T14:59:33Z', + events_url: 'https://api.github.com/repos/mralexgray/adium/events', + has_issues: false, + issues_url: 'https://api.github.com/repos/mralexgray/adium/issues{/number}', + labels_url: 'https://api.github.com/repos/mralexgray/adium/labels{/name}', + merges_url: 'https://api.github.com/repos/mralexgray/adium/merges', + mirror_url: null, + updated_at: '2019-12-11T06:51:45Z', + visibility: 'public', + archive_url: + 'https://api.github.com/repos/mralexgray/adium/{archive_format}{/ref}', + commits_url: 'https://api.github.com/repos/mralexgray/adium/commits{/sha}', + compare_url: + 'https://api.github.com/repos/mralexgray/adium/compare/{base}...{head}', + description: 'Official mirror of hg.adium.im', + forks_count: 37, + is_template: false, + open_issues: 0, + branches_url: + 'https://api.github.com/repos/mralexgray/adium/branches{/branch}', + comments_url: + 'https://api.github.com/repos/mralexgray/adium/comments{/number}', + contents_url: + 'https://api.github.com/repos/mralexgray/adium/contents/{+path}', + git_refs_url: + 'https://api.github.com/repos/mralexgray/adium/git/refs{/sha}', + git_tags_url: + 'https://api.github.com/repos/mralexgray/adium/git/tags{/sha}', + has_projects: true, + releases_url: 'https://api.github.com/repos/mralexgray/adium/releases{/id}', + statuses_url: + 'https://api.github.com/repos/mralexgray/adium/statuses/{sha}', + allow_forking: true, + assignees_url: + 'https://api.github.com/repos/mralexgray/adium/assignees{/user}', + downloads_url: 'https://api.github.com/repos/mralexgray/adium/downloads', + has_downloads: true, + languages_url: 'https://api.github.com/repos/mralexgray/adium/languages', + default_branch: 'master', + milestones_url: + 'https://api.github.com/repos/mralexgray/adium/milestones{/number}', + stargazers_url: 'https://api.github.com/repos/mralexgray/adium/stargazers', + watchers_count: 0, + deployments_url: + 'https://api.github.com/repos/mralexgray/adium/deployments', + git_commits_url: + 'https://api.github.com/repos/mralexgray/adium/git/commits{/sha}', + subscribers_url: + 'https://api.github.com/repos/mralexgray/adium/subscribers', + contributors_url: + 'https://api.github.com/repos/mralexgray/adium/contributors', + issue_events_url: + 'https://api.github.com/repos/mralexgray/adium/issues/events{/number}', + stargazers_count: 0, + subscription_url: + 'https://api.github.com/repos/mralexgray/adium/subscription', + collaborators_url: + 'https://api.github.com/repos/mralexgray/adium/collaborators{/collaborator}', + issue_comment_url: + 'https://api.github.com/repos/mralexgray/adium/issues/comments{/number}', + notifications_url: + 'https://api.github.com/repos/mralexgray/adium/notifications{?since,all,participating}', + open_issues_count: 0, + web_commit_signoff_required: false, + }, + { + id: 12752329, + url: 'https://api.github.com/repos/mralexgray/ADLivelyTableView', + fork: true, + name: 'ADLivelyTableView', + size: 73, + forks: 0, + owner: { + id: 262517, + url: 'https://api.github.com/users/mralexgray', + type: 'User', + login: 'mralexgray', + node_id: 'MDQ6VXNlcjI2MjUxNw==', + html_url: 'https://github.com/mralexgray', + gists_url: 'https://api.github.com/users/mralexgray/gists{/gist_id}', + repos_url: 'https://api.github.com/users/mralexgray/repos', + avatar_url: 'https://avatars.githubusercontent.com/u/262517?v=4', + events_url: 'https://api.github.com/users/mralexgray/events{/privacy}', + site_admin: false, + gravatar_id: '', + starred_url: + 'https://api.github.com/users/mralexgray/starred{/owner}{/repo}', + followers_url: 'https://api.github.com/users/mralexgray/followers', + following_url: + 'https://api.github.com/users/mralexgray/following{/other_user}', + organizations_url: 'https://api.github.com/users/mralexgray/orgs', + subscriptions_url: + 'https://api.github.com/users/mralexgray/subscriptions', + received_events_url: + 'https://api.github.com/users/mralexgray/received_events', + }, + topics: [], + git_url: 'git://github.com/mralexgray/ADLivelyTableView.git', + license: { + key: 'other', + url: null, + name: 'Other', + node_id: 'MDc6TGljZW5zZTA=', + spdx_id: 'NOASSERTION', + }, + node_id: 'MDEwOlJlcG9zaXRvcnkxMjc1MjMyOQ==', + private: false, + ssh_url: 'git@github.com:mralexgray/ADLivelyTableView.git', + svn_url: 'https://github.com/mralexgray/ADLivelyTableView', + archived: false, + disabled: false, + has_wiki: true, + homepage: 'http://applidium.com/en/news/lively_uitableview/', + html_url: 'https://github.com/mralexgray/ADLivelyTableView', + keys_url: + 'https://api.github.com/repos/mralexgray/ADLivelyTableView/keys{/key_id}', + language: 'Objective-C', + tags_url: 'https://api.github.com/repos/mralexgray/ADLivelyTableView/tags', + watchers: 0, + blobs_url: + 'https://api.github.com/repos/mralexgray/ADLivelyTableView/git/blobs{/sha}', + clone_url: 'https://github.com/mralexgray/ADLivelyTableView.git', + forks_url: + 'https://api.github.com/repos/mralexgray/ADLivelyTableView/forks', + full_name: 'mralexgray/ADLivelyTableView', + has_pages: false, + hooks_url: + 'https://api.github.com/repos/mralexgray/ADLivelyTableView/hooks', + pulls_url: + 'https://api.github.com/repos/mralexgray/ADLivelyTableView/pulls{/number}', + pushed_at: '2012-05-10T10:40:15Z', + teams_url: + 'https://api.github.com/repos/mralexgray/ADLivelyTableView/teams', + trees_url: + 'https://api.github.com/repos/mralexgray/ADLivelyTableView/git/trees{/sha}', + created_at: '2013-09-11T09:18:01Z', + events_url: + 'https://api.github.com/repos/mralexgray/ADLivelyTableView/events', + has_issues: false, + issues_url: + 'https://api.github.com/repos/mralexgray/ADLivelyTableView/issues{/number}', + labels_url: + 'https://api.github.com/repos/mralexgray/ADLivelyTableView/labels{/name}', + merges_url: + 'https://api.github.com/repos/mralexgray/ADLivelyTableView/merges', + mirror_url: null, + updated_at: '2013-09-11T09:18:03Z', + visibility: 'public', + archive_url: + 'https://api.github.com/repos/mralexgray/ADLivelyTableView/{archive_format}{/ref}', + commits_url: + 'https://api.github.com/repos/mralexgray/ADLivelyTableView/commits{/sha}', + compare_url: + 'https://api.github.com/repos/mralexgray/ADLivelyTableView/compare/{base}...{head}', + description: 'Lively UITableView', + forks_count: 0, + is_template: false, + open_issues: 0, + branches_url: + 'https://api.github.com/repos/mralexgray/ADLivelyTableView/branches{/branch}', + comments_url: + 'https://api.github.com/repos/mralexgray/ADLivelyTableView/comments{/number}', + contents_url: + 'https://api.github.com/repos/mralexgray/ADLivelyTableView/contents/{+path}', + git_refs_url: + 'https://api.github.com/repos/mralexgray/ADLivelyTableView/git/refs{/sha}', + git_tags_url: + 'https://api.github.com/repos/mralexgray/ADLivelyTableView/git/tags{/sha}', + has_projects: true, + releases_url: + 'https://api.github.com/repos/mralexgray/ADLivelyTableView/releases{/id}', + statuses_url: + 'https://api.github.com/repos/mralexgray/ADLivelyTableView/statuses/{sha}', + allow_forking: true, + assignees_url: + 'https://api.github.com/repos/mralexgray/ADLivelyTableView/assignees{/user}', + downloads_url: + 'https://api.github.com/repos/mralexgray/ADLivelyTableView/downloads', + has_downloads: true, + languages_url: + 'https://api.github.com/repos/mralexgray/ADLivelyTableView/languages', + default_branch: 'master', + milestones_url: + 'https://api.github.com/repos/mralexgray/ADLivelyTableView/milestones{/number}', + stargazers_url: + 'https://api.github.com/repos/mralexgray/ADLivelyTableView/stargazers', + watchers_count: 0, + deployments_url: + 'https://api.github.com/repos/mralexgray/ADLivelyTableView/deployments', + git_commits_url: + 'https://api.github.com/repos/mralexgray/ADLivelyTableView/git/commits{/sha}', + subscribers_url: + 'https://api.github.com/repos/mralexgray/ADLivelyTableView/subscribers', + contributors_url: + 'https://api.github.com/repos/mralexgray/ADLivelyTableView/contributors', + issue_events_url: + 'https://api.github.com/repos/mralexgray/ADLivelyTableView/issues/events{/number}', + stargazers_count: 0, + subscription_url: + 'https://api.github.com/repos/mralexgray/ADLivelyTableView/subscription', + collaborators_url: + 'https://api.github.com/repos/mralexgray/ADLivelyTableView/collaborators{/collaborator}', + issue_comment_url: + 'https://api.github.com/repos/mralexgray/ADLivelyTableView/issues/comments{/number}', + notifications_url: + 'https://api.github.com/repos/mralexgray/ADLivelyTableView/notifications{?since,all,participating}', + open_issues_count: 0, + web_commit_signoff_required: false, + }, + { + id: 5697379, + url: 'https://api.github.com/repos/mralexgray/AFIncrementalStore', + fork: true, + name: 'AFIncrementalStore', + size: 139, + forks: 0, + owner: { + id: 262517, + url: 'https://api.github.com/users/mralexgray', + type: 'User', + login: 'mralexgray', + node_id: 'MDQ6VXNlcjI2MjUxNw==', + html_url: 'https://github.com/mralexgray', + gists_url: 'https://api.github.com/users/mralexgray/gists{/gist_id}', + repos_url: 'https://api.github.com/users/mralexgray/repos', + avatar_url: 'https://avatars.githubusercontent.com/u/262517?v=4', + events_url: 'https://api.github.com/users/mralexgray/events{/privacy}', + site_admin: false, + gravatar_id: '', + starred_url: + 'https://api.github.com/users/mralexgray/starred{/owner}{/repo}', + followers_url: 'https://api.github.com/users/mralexgray/followers', + following_url: + 'https://api.github.com/users/mralexgray/following{/other_user}', + organizations_url: 'https://api.github.com/users/mralexgray/orgs', + subscriptions_url: + 'https://api.github.com/users/mralexgray/subscriptions', + received_events_url: + 'https://api.github.com/users/mralexgray/received_events', + }, + topics: [], + git_url: 'git://github.com/mralexgray/AFIncrementalStore.git', + license: { + key: 'mit', + url: 'https://api.github.com/licenses/mit', + name: 'MIT License', + node_id: 'MDc6TGljZW5zZTEz', + spdx_id: 'MIT', + }, + node_id: 'MDEwOlJlcG9zaXRvcnk1Njk3Mzc5', + private: false, + ssh_url: 'git@github.com:mralexgray/AFIncrementalStore.git', + svn_url: 'https://github.com/mralexgray/AFIncrementalStore', + archived: false, + disabled: false, + has_wiki: true, + homepage: null, + html_url: 'https://github.com/mralexgray/AFIncrementalStore', + keys_url: + 'https://api.github.com/repos/mralexgray/AFIncrementalStore/keys{/key_id}', + language: 'Objective-C', + tags_url: 'https://api.github.com/repos/mralexgray/AFIncrementalStore/tags', + watchers: 0, + blobs_url: + 'https://api.github.com/repos/mralexgray/AFIncrementalStore/git/blobs{/sha}', + clone_url: 'https://github.com/mralexgray/AFIncrementalStore.git', + forks_url: + 'https://api.github.com/repos/mralexgray/AFIncrementalStore/forks', + full_name: 'mralexgray/AFIncrementalStore', + has_pages: false, + hooks_url: + 'https://api.github.com/repos/mralexgray/AFIncrementalStore/hooks', + pulls_url: + 'https://api.github.com/repos/mralexgray/AFIncrementalStore/pulls{/number}', + pushed_at: '2012-09-01T22:46:25Z', + teams_url: + 'https://api.github.com/repos/mralexgray/AFIncrementalStore/teams', + trees_url: + 'https://api.github.com/repos/mralexgray/AFIncrementalStore/git/trees{/sha}', + created_at: '2012-09-06T04:20:33Z', + events_url: + 'https://api.github.com/repos/mralexgray/AFIncrementalStore/events', + has_issues: false, + issues_url: + 'https://api.github.com/repos/mralexgray/AFIncrementalStore/issues{/number}', + labels_url: + 'https://api.github.com/repos/mralexgray/AFIncrementalStore/labels{/name}', + merges_url: + 'https://api.github.com/repos/mralexgray/AFIncrementalStore/merges', + mirror_url: null, + updated_at: '2013-01-12T03:15:29Z', + visibility: 'public', + archive_url: + 'https://api.github.com/repos/mralexgray/AFIncrementalStore/{archive_format}{/ref}', + commits_url: + 'https://api.github.com/repos/mralexgray/AFIncrementalStore/commits{/sha}', + compare_url: + 'https://api.github.com/repos/mralexgray/AFIncrementalStore/compare/{base}...{head}', + description: 'Core Data Persistence with AFNetworking, Done Right', + forks_count: 0, + is_template: false, + open_issues: 0, + branches_url: + 'https://api.github.com/repos/mralexgray/AFIncrementalStore/branches{/branch}', + comments_url: + 'https://api.github.com/repos/mralexgray/AFIncrementalStore/comments{/number}', + contents_url: + 'https://api.github.com/repos/mralexgray/AFIncrementalStore/contents/{+path}', + git_refs_url: + 'https://api.github.com/repos/mralexgray/AFIncrementalStore/git/refs{/sha}', + git_tags_url: + 'https://api.github.com/repos/mralexgray/AFIncrementalStore/git/tags{/sha}', + has_projects: true, + releases_url: + 'https://api.github.com/repos/mralexgray/AFIncrementalStore/releases{/id}', + statuses_url: + 'https://api.github.com/repos/mralexgray/AFIncrementalStore/statuses/{sha}', + allow_forking: true, + assignees_url: + 'https://api.github.com/repos/mralexgray/AFIncrementalStore/assignees{/user}', + downloads_url: + 'https://api.github.com/repos/mralexgray/AFIncrementalStore/downloads', + has_downloads: true, + languages_url: + 'https://api.github.com/repos/mralexgray/AFIncrementalStore/languages', + default_branch: 'master', + milestones_url: + 'https://api.github.com/repos/mralexgray/AFIncrementalStore/milestones{/number}', + stargazers_url: + 'https://api.github.com/repos/mralexgray/AFIncrementalStore/stargazers', + watchers_count: 0, + deployments_url: + 'https://api.github.com/repos/mralexgray/AFIncrementalStore/deployments', + git_commits_url: + 'https://api.github.com/repos/mralexgray/AFIncrementalStore/git/commits{/sha}', + subscribers_url: + 'https://api.github.com/repos/mralexgray/AFIncrementalStore/subscribers', + contributors_url: + 'https://api.github.com/repos/mralexgray/AFIncrementalStore/contributors', + issue_events_url: + 'https://api.github.com/repos/mralexgray/AFIncrementalStore/issues/events{/number}', + stargazers_count: 0, + subscription_url: + 'https://api.github.com/repos/mralexgray/AFIncrementalStore/subscription', + collaborators_url: + 'https://api.github.com/repos/mralexgray/AFIncrementalStore/collaborators{/collaborator}', + issue_comment_url: + 'https://api.github.com/repos/mralexgray/AFIncrementalStore/issues/comments{/number}', + notifications_url: + 'https://api.github.com/repos/mralexgray/AFIncrementalStore/notifications{?since,all,participating}', + open_issues_count: 0, + web_commit_signoff_required: false, + }, + { + id: 6969621, + url: 'https://api.github.com/repos/mralexgray/AFNetworking', + fork: true, + name: 'AFNetworking', + size: 4341, + forks: 0, + owner: { + id: 262517, + url: 'https://api.github.com/users/mralexgray', + type: 'User', + login: 'mralexgray', + node_id: 'MDQ6VXNlcjI2MjUxNw==', + html_url: 'https://github.com/mralexgray', + gists_url: 'https://api.github.com/users/mralexgray/gists{/gist_id}', + repos_url: 'https://api.github.com/users/mralexgray/repos', + avatar_url: 'https://avatars.githubusercontent.com/u/262517?v=4', + events_url: 'https://api.github.com/users/mralexgray/events{/privacy}', + site_admin: false, + gravatar_id: '', + starred_url: + 'https://api.github.com/users/mralexgray/starred{/owner}{/repo}', + followers_url: 'https://api.github.com/users/mralexgray/followers', + following_url: + 'https://api.github.com/users/mralexgray/following{/other_user}', + organizations_url: 'https://api.github.com/users/mralexgray/orgs', + subscriptions_url: + 'https://api.github.com/users/mralexgray/subscriptions', + received_events_url: + 'https://api.github.com/users/mralexgray/received_events', + }, + topics: [], + git_url: 'git://github.com/mralexgray/AFNetworking.git', + license: { + key: 'mit', + url: 'https://api.github.com/licenses/mit', + name: 'MIT License', + node_id: 'MDc6TGljZW5zZTEz', + spdx_id: 'MIT', + }, + node_id: 'MDEwOlJlcG9zaXRvcnk2OTY5NjIx', + private: false, + ssh_url: 'git@github.com:mralexgray/AFNetworking.git', + svn_url: 'https://github.com/mralexgray/AFNetworking', + archived: false, + disabled: false, + has_wiki: true, + homepage: 'http://afnetworking.com', + html_url: 'https://github.com/mralexgray/AFNetworking', + keys_url: + 'https://api.github.com/repos/mralexgray/AFNetworking/keys{/key_id}', + language: 'Objective-C', + tags_url: 'https://api.github.com/repos/mralexgray/AFNetworking/tags', + watchers: 2, + blobs_url: + 'https://api.github.com/repos/mralexgray/AFNetworking/git/blobs{/sha}', + clone_url: 'https://github.com/mralexgray/AFNetworking.git', + forks_url: 'https://api.github.com/repos/mralexgray/AFNetworking/forks', + full_name: 'mralexgray/AFNetworking', + has_pages: false, + hooks_url: 'https://api.github.com/repos/mralexgray/AFNetworking/hooks', + pulls_url: + 'https://api.github.com/repos/mralexgray/AFNetworking/pulls{/number}', + pushed_at: '2014-01-24T07:14:32Z', + teams_url: 'https://api.github.com/repos/mralexgray/AFNetworking/teams', + trees_url: + 'https://api.github.com/repos/mralexgray/AFNetworking/git/trees{/sha}', + created_at: '2012-12-02T17:00:04Z', + events_url: 'https://api.github.com/repos/mralexgray/AFNetworking/events', + has_issues: false, + issues_url: + 'https://api.github.com/repos/mralexgray/AFNetworking/issues{/number}', + labels_url: + 'https://api.github.com/repos/mralexgray/AFNetworking/labels{/name}', + merges_url: 'https://api.github.com/repos/mralexgray/AFNetworking/merges', + mirror_url: null, + updated_at: '2014-01-24T07:14:33Z', + visibility: 'public', + archive_url: + 'https://api.github.com/repos/mralexgray/AFNetworking/{archive_format}{/ref}', + commits_url: + 'https://api.github.com/repos/mralexgray/AFNetworking/commits{/sha}', + compare_url: + 'https://api.github.com/repos/mralexgray/AFNetworking/compare/{base}...{head}', + description: 'A delightful iOS and OS X networking framework', + forks_count: 0, + is_template: false, + open_issues: 0, + branches_url: + 'https://api.github.com/repos/mralexgray/AFNetworking/branches{/branch}', + comments_url: + 'https://api.github.com/repos/mralexgray/AFNetworking/comments{/number}', + contents_url: + 'https://api.github.com/repos/mralexgray/AFNetworking/contents/{+path}', + git_refs_url: + 'https://api.github.com/repos/mralexgray/AFNetworking/git/refs{/sha}', + git_tags_url: + 'https://api.github.com/repos/mralexgray/AFNetworking/git/tags{/sha}', + has_projects: true, + releases_url: + 'https://api.github.com/repos/mralexgray/AFNetworking/releases{/id}', + statuses_url: + 'https://api.github.com/repos/mralexgray/AFNetworking/statuses/{sha}', + allow_forking: true, + assignees_url: + 'https://api.github.com/repos/mralexgray/AFNetworking/assignees{/user}', + downloads_url: + 'https://api.github.com/repos/mralexgray/AFNetworking/downloads', + has_downloads: true, + languages_url: + 'https://api.github.com/repos/mralexgray/AFNetworking/languages', + default_branch: 'master', + milestones_url: + 'https://api.github.com/repos/mralexgray/AFNetworking/milestones{/number}', + stargazers_url: + 'https://api.github.com/repos/mralexgray/AFNetworking/stargazers', + watchers_count: 2, + deployments_url: + 'https://api.github.com/repos/mralexgray/AFNetworking/deployments', + git_commits_url: + 'https://api.github.com/repos/mralexgray/AFNetworking/git/commits{/sha}', + subscribers_url: + 'https://api.github.com/repos/mralexgray/AFNetworking/subscribers', + contributors_url: + 'https://api.github.com/repos/mralexgray/AFNetworking/contributors', + issue_events_url: + 'https://api.github.com/repos/mralexgray/AFNetworking/issues/events{/number}', + stargazers_count: 2, + subscription_url: + 'https://api.github.com/repos/mralexgray/AFNetworking/subscription', + collaborators_url: + 'https://api.github.com/repos/mralexgray/AFNetworking/collaborators{/collaborator}', + issue_comment_url: + 'https://api.github.com/repos/mralexgray/AFNetworking/issues/comments{/number}', + notifications_url: + 'https://api.github.com/repos/mralexgray/AFNetworking/notifications{?since,all,participating}', + open_issues_count: 0, + web_commit_signoff_required: false, + }, + { + id: 9485541, + url: 'https://api.github.com/repos/mralexgray/AGNSSplitView', + fork: true, + name: 'AGNSSplitView', + size: 68, + forks: 0, + owner: { + id: 262517, + url: 'https://api.github.com/users/mralexgray', + type: 'User', + login: 'mralexgray', + node_id: 'MDQ6VXNlcjI2MjUxNw==', + html_url: 'https://github.com/mralexgray', + gists_url: 'https://api.github.com/users/mralexgray/gists{/gist_id}', + repos_url: 'https://api.github.com/users/mralexgray/repos', + avatar_url: 'https://avatars.githubusercontent.com/u/262517?v=4', + events_url: 'https://api.github.com/users/mralexgray/events{/privacy}', + site_admin: false, + gravatar_id: '', + starred_url: + 'https://api.github.com/users/mralexgray/starred{/owner}{/repo}', + followers_url: 'https://api.github.com/users/mralexgray/followers', + following_url: + 'https://api.github.com/users/mralexgray/following{/other_user}', + organizations_url: 'https://api.github.com/users/mralexgray/orgs', + subscriptions_url: + 'https://api.github.com/users/mralexgray/subscriptions', + received_events_url: + 'https://api.github.com/users/mralexgray/received_events', + }, + topics: [], + git_url: 'git://github.com/mralexgray/AGNSSplitView.git', + license: null, + node_id: 'MDEwOlJlcG9zaXRvcnk5NDg1NTQx', + private: false, + ssh_url: 'git@github.com:mralexgray/AGNSSplitView.git', + svn_url: 'https://github.com/mralexgray/AGNSSplitView', + archived: false, + disabled: false, + has_wiki: true, + homepage: null, + html_url: 'https://github.com/mralexgray/AGNSSplitView', + keys_url: + 'https://api.github.com/repos/mralexgray/AGNSSplitView/keys{/key_id}', + language: 'Objective-C', + tags_url: 'https://api.github.com/repos/mralexgray/AGNSSplitView/tags', + watchers: 0, + blobs_url: + 'https://api.github.com/repos/mralexgray/AGNSSplitView/git/blobs{/sha}', + clone_url: 'https://github.com/mralexgray/AGNSSplitView.git', + forks_url: 'https://api.github.com/repos/mralexgray/AGNSSplitView/forks', + full_name: 'mralexgray/AGNSSplitView', + has_pages: false, + hooks_url: 'https://api.github.com/repos/mralexgray/AGNSSplitView/hooks', + pulls_url: + 'https://api.github.com/repos/mralexgray/AGNSSplitView/pulls{/number}', + pushed_at: '2013-02-26T00:32:32Z', + teams_url: 'https://api.github.com/repos/mralexgray/AGNSSplitView/teams', + trees_url: + 'https://api.github.com/repos/mralexgray/AGNSSplitView/git/trees{/sha}', + created_at: '2013-04-17T00:10:13Z', + events_url: 'https://api.github.com/repos/mralexgray/AGNSSplitView/events', + has_issues: false, + issues_url: + 'https://api.github.com/repos/mralexgray/AGNSSplitView/issues{/number}', + labels_url: + 'https://api.github.com/repos/mralexgray/AGNSSplitView/labels{/name}', + merges_url: 'https://api.github.com/repos/mralexgray/AGNSSplitView/merges', + mirror_url: null, + updated_at: '2013-04-17T00:10:13Z', + visibility: 'public', + archive_url: + 'https://api.github.com/repos/mralexgray/AGNSSplitView/{archive_format}{/ref}', + commits_url: + 'https://api.github.com/repos/mralexgray/AGNSSplitView/commits{/sha}', + compare_url: + 'https://api.github.com/repos/mralexgray/AGNSSplitView/compare/{base}...{head}', + description: 'Simple NSSplitView additions.', + forks_count: 0, + is_template: false, + open_issues: 0, + branches_url: + 'https://api.github.com/repos/mralexgray/AGNSSplitView/branches{/branch}', + comments_url: + 'https://api.github.com/repos/mralexgray/AGNSSplitView/comments{/number}', + contents_url: + 'https://api.github.com/repos/mralexgray/AGNSSplitView/contents/{+path}', + git_refs_url: + 'https://api.github.com/repos/mralexgray/AGNSSplitView/git/refs{/sha}', + git_tags_url: + 'https://api.github.com/repos/mralexgray/AGNSSplitView/git/tags{/sha}', + has_projects: true, + releases_url: + 'https://api.github.com/repos/mralexgray/AGNSSplitView/releases{/id}', + statuses_url: + 'https://api.github.com/repos/mralexgray/AGNSSplitView/statuses/{sha}', + allow_forking: true, + assignees_url: + 'https://api.github.com/repos/mralexgray/AGNSSplitView/assignees{/user}', + downloads_url: + 'https://api.github.com/repos/mralexgray/AGNSSplitView/downloads', + has_downloads: true, + languages_url: + 'https://api.github.com/repos/mralexgray/AGNSSplitView/languages', + default_branch: 'master', + milestones_url: + 'https://api.github.com/repos/mralexgray/AGNSSplitView/milestones{/number}', + stargazers_url: + 'https://api.github.com/repos/mralexgray/AGNSSplitView/stargazers', + watchers_count: 0, + deployments_url: + 'https://api.github.com/repos/mralexgray/AGNSSplitView/deployments', + git_commits_url: + 'https://api.github.com/repos/mralexgray/AGNSSplitView/git/commits{/sha}', + subscribers_url: + 'https://api.github.com/repos/mralexgray/AGNSSplitView/subscribers', + contributors_url: + 'https://api.github.com/repos/mralexgray/AGNSSplitView/contributors', + issue_events_url: + 'https://api.github.com/repos/mralexgray/AGNSSplitView/issues/events{/number}', + stargazers_count: 0, + subscription_url: + 'https://api.github.com/repos/mralexgray/AGNSSplitView/subscription', + collaborators_url: + 'https://api.github.com/repos/mralexgray/AGNSSplitView/collaborators{/collaborator}', + issue_comment_url: + 'https://api.github.com/repos/mralexgray/AGNSSplitView/issues/comments{/number}', + notifications_url: + 'https://api.github.com/repos/mralexgray/AGNSSplitView/notifications{?since,all,participating}', + open_issues_count: 0, + web_commit_signoff_required: false, + }, + { + id: 12767784, + url: 'https://api.github.com/repos/mralexgray/AGScopeBar', + fork: true, + name: 'AGScopeBar', + size: 64, + forks: 0, + owner: { + id: 262517, + url: 'https://api.github.com/users/mralexgray', + type: 'User', + login: 'mralexgray', + node_id: 'MDQ6VXNlcjI2MjUxNw==', + html_url: 'https://github.com/mralexgray', + gists_url: 'https://api.github.com/users/mralexgray/gists{/gist_id}', + repos_url: 'https://api.github.com/users/mralexgray/repos', + avatar_url: 'https://avatars.githubusercontent.com/u/262517?v=4', + events_url: 'https://api.github.com/users/mralexgray/events{/privacy}', + site_admin: false, + gravatar_id: '', + starred_url: + 'https://api.github.com/users/mralexgray/starred{/owner}{/repo}', + followers_url: 'https://api.github.com/users/mralexgray/followers', + following_url: + 'https://api.github.com/users/mralexgray/following{/other_user}', + organizations_url: 'https://api.github.com/users/mralexgray/orgs', + subscriptions_url: + 'https://api.github.com/users/mralexgray/subscriptions', + received_events_url: + 'https://api.github.com/users/mralexgray/received_events', + }, + topics: [], + git_url: 'git://github.com/mralexgray/AGScopeBar.git', + license: null, + node_id: 'MDEwOlJlcG9zaXRvcnkxMjc2Nzc4NA==', + private: false, + ssh_url: 'git@github.com:mralexgray/AGScopeBar.git', + svn_url: 'https://github.com/mralexgray/AGScopeBar', + archived: false, + disabled: false, + has_wiki: true, + homepage: null, + html_url: 'https://github.com/mralexgray/AGScopeBar', + keys_url: + 'https://api.github.com/repos/mralexgray/AGScopeBar/keys{/key_id}', + language: 'Objective-C', + tags_url: 'https://api.github.com/repos/mralexgray/AGScopeBar/tags', + watchers: 0, + blobs_url: + 'https://api.github.com/repos/mralexgray/AGScopeBar/git/blobs{/sha}', + clone_url: 'https://github.com/mralexgray/AGScopeBar.git', + forks_url: 'https://api.github.com/repos/mralexgray/AGScopeBar/forks', + full_name: 'mralexgray/AGScopeBar', + has_pages: false, + hooks_url: 'https://api.github.com/repos/mralexgray/AGScopeBar/hooks', + pulls_url: + 'https://api.github.com/repos/mralexgray/AGScopeBar/pulls{/number}', + pushed_at: '2013-05-07T03:35:29Z', + teams_url: 'https://api.github.com/repos/mralexgray/AGScopeBar/teams', + trees_url: + 'https://api.github.com/repos/mralexgray/AGScopeBar/git/trees{/sha}', + created_at: '2013-09-11T21:06:54Z', + events_url: 'https://api.github.com/repos/mralexgray/AGScopeBar/events', + has_issues: false, + issues_url: + 'https://api.github.com/repos/mralexgray/AGScopeBar/issues{/number}', + labels_url: + 'https://api.github.com/repos/mralexgray/AGScopeBar/labels{/name}', + merges_url: 'https://api.github.com/repos/mralexgray/AGScopeBar/merges', + mirror_url: null, + updated_at: '2013-09-11T21:06:54Z', + visibility: 'public', + archive_url: + 'https://api.github.com/repos/mralexgray/AGScopeBar/{archive_format}{/ref}', + commits_url: + 'https://api.github.com/repos/mralexgray/AGScopeBar/commits{/sha}', + compare_url: + 'https://api.github.com/repos/mralexgray/AGScopeBar/compare/{base}...{head}', + description: 'Custom scope bar implementation for Cocoa', + forks_count: 0, + is_template: false, + open_issues: 0, + branches_url: + 'https://api.github.com/repos/mralexgray/AGScopeBar/branches{/branch}', + comments_url: + 'https://api.github.com/repos/mralexgray/AGScopeBar/comments{/number}', + contents_url: + 'https://api.github.com/repos/mralexgray/AGScopeBar/contents/{+path}', + git_refs_url: + 'https://api.github.com/repos/mralexgray/AGScopeBar/git/refs{/sha}', + git_tags_url: + 'https://api.github.com/repos/mralexgray/AGScopeBar/git/tags{/sha}', + has_projects: true, + releases_url: + 'https://api.github.com/repos/mralexgray/AGScopeBar/releases{/id}', + statuses_url: + 'https://api.github.com/repos/mralexgray/AGScopeBar/statuses/{sha}', + allow_forking: true, + assignees_url: + 'https://api.github.com/repos/mralexgray/AGScopeBar/assignees{/user}', + downloads_url: + 'https://api.github.com/repos/mralexgray/AGScopeBar/downloads', + has_downloads: true, + languages_url: + 'https://api.github.com/repos/mralexgray/AGScopeBar/languages', + default_branch: 'master', + milestones_url: + 'https://api.github.com/repos/mralexgray/AGScopeBar/milestones{/number}', + stargazers_url: + 'https://api.github.com/repos/mralexgray/AGScopeBar/stargazers', + watchers_count: 0, + deployments_url: + 'https://api.github.com/repos/mralexgray/AGScopeBar/deployments', + git_commits_url: + 'https://api.github.com/repos/mralexgray/AGScopeBar/git/commits{/sha}', + subscribers_url: + 'https://api.github.com/repos/mralexgray/AGScopeBar/subscribers', + contributors_url: + 'https://api.github.com/repos/mralexgray/AGScopeBar/contributors', + issue_events_url: + 'https://api.github.com/repos/mralexgray/AGScopeBar/issues/events{/number}', + stargazers_count: 0, + subscription_url: + 'https://api.github.com/repos/mralexgray/AGScopeBar/subscription', + collaborators_url: + 'https://api.github.com/repos/mralexgray/AGScopeBar/collaborators{/collaborator}', + issue_comment_url: + 'https://api.github.com/repos/mralexgray/AGScopeBar/issues/comments{/number}', + notifications_url: + 'https://api.github.com/repos/mralexgray/AGScopeBar/notifications{?since,all,participating}', + open_issues_count: 0, + web_commit_signoff_required: false, + }, + { + id: 31829499, + url: 'https://api.github.com/repos/mralexgray/agvtool-xcode-plugin', + fork: true, + name: 'agvtool-xcode-plugin', + size: 102, + forks: 0, + owner: { + id: 262517, + url: 'https://api.github.com/users/mralexgray', + type: 'User', + login: 'mralexgray', + node_id: 'MDQ6VXNlcjI2MjUxNw==', + html_url: 'https://github.com/mralexgray', + gists_url: 'https://api.github.com/users/mralexgray/gists{/gist_id}', + repos_url: 'https://api.github.com/users/mralexgray/repos', + avatar_url: 'https://avatars.githubusercontent.com/u/262517?v=4', + events_url: 'https://api.github.com/users/mralexgray/events{/privacy}', + site_admin: false, + gravatar_id: '', + starred_url: + 'https://api.github.com/users/mralexgray/starred{/owner}{/repo}', + followers_url: 'https://api.github.com/users/mralexgray/followers', + following_url: + 'https://api.github.com/users/mralexgray/following{/other_user}', + organizations_url: 'https://api.github.com/users/mralexgray/orgs', + subscriptions_url: + 'https://api.github.com/users/mralexgray/subscriptions', + received_events_url: + 'https://api.github.com/users/mralexgray/received_events', + }, + topics: [], + git_url: 'git://github.com/mralexgray/agvtool-xcode-plugin.git', + license: null, + node_id: 'MDEwOlJlcG9zaXRvcnkzMTgyOTQ5OQ==', + private: false, + ssh_url: 'git@github.com:mralexgray/agvtool-xcode-plugin.git', + svn_url: 'https://github.com/mralexgray/agvtool-xcode-plugin', + archived: false, + disabled: false, + has_wiki: true, + homepage: null, + html_url: 'https://github.com/mralexgray/agvtool-xcode-plugin', + keys_url: + 'https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/keys{/key_id}', + language: 'Objective-C', + tags_url: + 'https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/tags', + watchers: 0, + blobs_url: + 'https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/git/blobs{/sha}', + clone_url: 'https://github.com/mralexgray/agvtool-xcode-plugin.git', + forks_url: + 'https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/forks', + full_name: 'mralexgray/agvtool-xcode-plugin', + has_pages: false, + hooks_url: + 'https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/hooks', + pulls_url: + 'https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/pulls{/number}', + pushed_at: '2015-03-08T00:04:31Z', + teams_url: + 'https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/teams', + trees_url: + 'https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/git/trees{/sha}', + created_at: '2015-03-07T22:15:38Z', + events_url: + 'https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/events', + has_issues: false, + issues_url: + 'https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/issues{/number}', + labels_url: + 'https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/labels{/name}', + merges_url: + 'https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/merges', + mirror_url: null, + updated_at: '2015-03-07T22:15:41Z', + visibility: 'public', + archive_url: + 'https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/{archive_format}{/ref}', + commits_url: + 'https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/commits{/sha}', + compare_url: + 'https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/compare/{base}...{head}', + description: 'this is a plugin wrapper for agvtool for xcode.', + forks_count: 0, + is_template: false, + open_issues: 0, + branches_url: + 'https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/branches{/branch}', + comments_url: + 'https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/comments{/number}', + contents_url: + 'https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/contents/{+path}', + git_refs_url: + 'https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/git/refs{/sha}', + git_tags_url: + 'https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/git/tags{/sha}', + has_projects: true, + releases_url: + 'https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/releases{/id}', + statuses_url: + 'https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/statuses/{sha}', + allow_forking: true, + assignees_url: + 'https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/assignees{/user}', + downloads_url: + 'https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/downloads', + has_downloads: true, + languages_url: + 'https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/languages', + default_branch: 'master', + milestones_url: + 'https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/milestones{/number}', + stargazers_url: + 'https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/stargazers', + watchers_count: 0, + deployments_url: + 'https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/deployments', + git_commits_url: + 'https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/git/commits{/sha}', + subscribers_url: + 'https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/subscribers', + contributors_url: + 'https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/contributors', + issue_events_url: + 'https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/issues/events{/number}', + stargazers_count: 0, + subscription_url: + 'https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/subscription', + collaborators_url: + 'https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/collaborators{/collaborator}', + issue_comment_url: + 'https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/issues/comments{/number}', + notifications_url: + 'https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/notifications{?since,all,participating}', + open_issues_count: 0, + web_commit_signoff_required: false, + }, + { + id: 9227846, + url: 'https://api.github.com/repos/mralexgray/AHContentBrowser', + fork: true, + name: 'AHContentBrowser', + size: 223, + forks: 0, + owner: { + id: 262517, + url: 'https://api.github.com/users/mralexgray', + type: 'User', + login: 'mralexgray', + node_id: 'MDQ6VXNlcjI2MjUxNw==', + html_url: 'https://github.com/mralexgray', + gists_url: 'https://api.github.com/users/mralexgray/gists{/gist_id}', + repos_url: 'https://api.github.com/users/mralexgray/repos', + avatar_url: 'https://avatars.githubusercontent.com/u/262517?v=4', + events_url: 'https://api.github.com/users/mralexgray/events{/privacy}', + site_admin: false, + gravatar_id: '', + starred_url: + 'https://api.github.com/users/mralexgray/starred{/owner}{/repo}', + followers_url: 'https://api.github.com/users/mralexgray/followers', + following_url: + 'https://api.github.com/users/mralexgray/following{/other_user}', + organizations_url: 'https://api.github.com/users/mralexgray/orgs', + subscriptions_url: + 'https://api.github.com/users/mralexgray/subscriptions', + received_events_url: + 'https://api.github.com/users/mralexgray/received_events', + }, + topics: [], + git_url: 'git://github.com/mralexgray/AHContentBrowser.git', + license: null, + node_id: 'MDEwOlJlcG9zaXRvcnk5MjI3ODQ2', + private: false, + ssh_url: 'git@github.com:mralexgray/AHContentBrowser.git', + svn_url: 'https://github.com/mralexgray/AHContentBrowser', + archived: false, + disabled: false, + has_wiki: true, + homepage: '', + html_url: 'https://github.com/mralexgray/AHContentBrowser', + keys_url: + 'https://api.github.com/repos/mralexgray/AHContentBrowser/keys{/key_id}', + language: 'Objective-C', + tags_url: 'https://api.github.com/repos/mralexgray/AHContentBrowser/tags', + watchers: 0, + blobs_url: + 'https://api.github.com/repos/mralexgray/AHContentBrowser/git/blobs{/sha}', + clone_url: 'https://github.com/mralexgray/AHContentBrowser.git', + forks_url: 'https://api.github.com/repos/mralexgray/AHContentBrowser/forks', + full_name: 'mralexgray/AHContentBrowser', + has_pages: false, + hooks_url: 'https://api.github.com/repos/mralexgray/AHContentBrowser/hooks', + pulls_url: + 'https://api.github.com/repos/mralexgray/AHContentBrowser/pulls{/number}', + pushed_at: '2013-03-13T17:38:23Z', + teams_url: 'https://api.github.com/repos/mralexgray/AHContentBrowser/teams', + trees_url: + 'https://api.github.com/repos/mralexgray/AHContentBrowser/git/trees{/sha}', + created_at: '2013-04-04T20:56:16Z', + events_url: + 'https://api.github.com/repos/mralexgray/AHContentBrowser/events', + has_issues: false, + issues_url: + 'https://api.github.com/repos/mralexgray/AHContentBrowser/issues{/number}', + labels_url: + 'https://api.github.com/repos/mralexgray/AHContentBrowser/labels{/name}', + merges_url: + 'https://api.github.com/repos/mralexgray/AHContentBrowser/merges', + mirror_url: null, + updated_at: '2015-10-22T05:00:24Z', + visibility: 'public', + archive_url: + 'https://api.github.com/repos/mralexgray/AHContentBrowser/{archive_format}{/ref}', + commits_url: + 'https://api.github.com/repos/mralexgray/AHContentBrowser/commits{/sha}', + compare_url: + 'https://api.github.com/repos/mralexgray/AHContentBrowser/compare/{base}...{head}', + description: + 'A Mac only webview that loads a fast readable version of the website if available.', + forks_count: 0, + is_template: false, + open_issues: 0, + branches_url: + 'https://api.github.com/repos/mralexgray/AHContentBrowser/branches{/branch}', + comments_url: + 'https://api.github.com/repos/mralexgray/AHContentBrowser/comments{/number}', + contents_url: + 'https://api.github.com/repos/mralexgray/AHContentBrowser/contents/{+path}', + git_refs_url: + 'https://api.github.com/repos/mralexgray/AHContentBrowser/git/refs{/sha}', + git_tags_url: + 'https://api.github.com/repos/mralexgray/AHContentBrowser/git/tags{/sha}', + has_projects: true, + releases_url: + 'https://api.github.com/repos/mralexgray/AHContentBrowser/releases{/id}', + statuses_url: + 'https://api.github.com/repos/mralexgray/AHContentBrowser/statuses/{sha}', + allow_forking: true, + assignees_url: + 'https://api.github.com/repos/mralexgray/AHContentBrowser/assignees{/user}', + downloads_url: + 'https://api.github.com/repos/mralexgray/AHContentBrowser/downloads', + has_downloads: true, + languages_url: + 'https://api.github.com/repos/mralexgray/AHContentBrowser/languages', + default_branch: 'master', + milestones_url: + 'https://api.github.com/repos/mralexgray/AHContentBrowser/milestones{/number}', + stargazers_url: + 'https://api.github.com/repos/mralexgray/AHContentBrowser/stargazers', + watchers_count: 0, + deployments_url: + 'https://api.github.com/repos/mralexgray/AHContentBrowser/deployments', + git_commits_url: + 'https://api.github.com/repos/mralexgray/AHContentBrowser/git/commits{/sha}', + subscribers_url: + 'https://api.github.com/repos/mralexgray/AHContentBrowser/subscribers', + contributors_url: + 'https://api.github.com/repos/mralexgray/AHContentBrowser/contributors', + issue_events_url: + 'https://api.github.com/repos/mralexgray/AHContentBrowser/issues/events{/number}', + stargazers_count: 0, + subscription_url: + 'https://api.github.com/repos/mralexgray/AHContentBrowser/subscription', + collaborators_url: + 'https://api.github.com/repos/mralexgray/AHContentBrowser/collaborators{/collaborator}', + issue_comment_url: + 'https://api.github.com/repos/mralexgray/AHContentBrowser/issues/comments{/number}', + notifications_url: + 'https://api.github.com/repos/mralexgray/AHContentBrowser/notifications{?since,all,participating}', + open_issues_count: 0, + web_commit_signoff_required: false, + }, + { + id: 37430328, + url: 'https://api.github.com/repos/mralexgray/AHLaunchCtl', + fork: true, + name: 'AHLaunchCtl', + size: 592, + forks: 0, + owner: { + id: 262517, + url: 'https://api.github.com/users/mralexgray', + type: 'User', + login: 'mralexgray', + node_id: 'MDQ6VXNlcjI2MjUxNw==', + html_url: 'https://github.com/mralexgray', + gists_url: 'https://api.github.com/users/mralexgray/gists{/gist_id}', + repos_url: 'https://api.github.com/users/mralexgray/repos', + avatar_url: 'https://avatars.githubusercontent.com/u/262517?v=4', + events_url: 'https://api.github.com/users/mralexgray/events{/privacy}', + site_admin: false, + gravatar_id: '', + starred_url: + 'https://api.github.com/users/mralexgray/starred{/owner}{/repo}', + followers_url: 'https://api.github.com/users/mralexgray/followers', + following_url: + 'https://api.github.com/users/mralexgray/following{/other_user}', + organizations_url: 'https://api.github.com/users/mralexgray/orgs', + subscriptions_url: + 'https://api.github.com/users/mralexgray/subscriptions', + received_events_url: + 'https://api.github.com/users/mralexgray/received_events', + }, + topics: [], + git_url: 'git://github.com/mralexgray/AHLaunchCtl.git', + license: { + key: 'mit', + url: 'https://api.github.com/licenses/mit', + name: 'MIT License', + node_id: 'MDc6TGljZW5zZTEz', + spdx_id: 'MIT', + }, + node_id: 'MDEwOlJlcG9zaXRvcnkzNzQzMDMyOA==', + private: false, + ssh_url: 'git@github.com:mralexgray/AHLaunchCtl.git', + svn_url: 'https://github.com/mralexgray/AHLaunchCtl', + archived: false, + disabled: false, + has_wiki: true, + homepage: '', + html_url: 'https://github.com/mralexgray/AHLaunchCtl', + keys_url: + 'https://api.github.com/repos/mralexgray/AHLaunchCtl/keys{/key_id}', + language: 'Objective-C', + tags_url: 'https://api.github.com/repos/mralexgray/AHLaunchCtl/tags', + watchers: 0, + blobs_url: + 'https://api.github.com/repos/mralexgray/AHLaunchCtl/git/blobs{/sha}', + clone_url: 'https://github.com/mralexgray/AHLaunchCtl.git', + forks_url: 'https://api.github.com/repos/mralexgray/AHLaunchCtl/forks', + full_name: 'mralexgray/AHLaunchCtl', + has_pages: false, + hooks_url: 'https://api.github.com/repos/mralexgray/AHLaunchCtl/hooks', + pulls_url: + 'https://api.github.com/repos/mralexgray/AHLaunchCtl/pulls{/number}', + pushed_at: '2015-05-26T18:50:48Z', + teams_url: 'https://api.github.com/repos/mralexgray/AHLaunchCtl/teams', + trees_url: + 'https://api.github.com/repos/mralexgray/AHLaunchCtl/git/trees{/sha}', + created_at: '2015-06-14T21:31:03Z', + events_url: 'https://api.github.com/repos/mralexgray/AHLaunchCtl/events', + has_issues: false, + issues_url: + 'https://api.github.com/repos/mralexgray/AHLaunchCtl/issues{/number}', + labels_url: + 'https://api.github.com/repos/mralexgray/AHLaunchCtl/labels{/name}', + merges_url: 'https://api.github.com/repos/mralexgray/AHLaunchCtl/merges', + mirror_url: null, + updated_at: '2015-06-14T21:31:04Z', + visibility: 'public', + archive_url: + 'https://api.github.com/repos/mralexgray/AHLaunchCtl/{archive_format}{/ref}', + commits_url: + 'https://api.github.com/repos/mralexgray/AHLaunchCtl/commits{/sha}', + compare_url: + 'https://api.github.com/repos/mralexgray/AHLaunchCtl/compare/{base}...{head}', + description: 'LaunchD Framework for Cocoa Apps', + forks_count: 0, + is_template: false, + open_issues: 0, + branches_url: + 'https://api.github.com/repos/mralexgray/AHLaunchCtl/branches{/branch}', + comments_url: + 'https://api.github.com/repos/mralexgray/AHLaunchCtl/comments{/number}', + contents_url: + 'https://api.github.com/repos/mralexgray/AHLaunchCtl/contents/{+path}', + git_refs_url: + 'https://api.github.com/repos/mralexgray/AHLaunchCtl/git/refs{/sha}', + git_tags_url: + 'https://api.github.com/repos/mralexgray/AHLaunchCtl/git/tags{/sha}', + has_projects: true, + releases_url: + 'https://api.github.com/repos/mralexgray/AHLaunchCtl/releases{/id}', + statuses_url: + 'https://api.github.com/repos/mralexgray/AHLaunchCtl/statuses/{sha}', + allow_forking: true, + assignees_url: + 'https://api.github.com/repos/mralexgray/AHLaunchCtl/assignees{/user}', + downloads_url: + 'https://api.github.com/repos/mralexgray/AHLaunchCtl/downloads', + has_downloads: true, + languages_url: + 'https://api.github.com/repos/mralexgray/AHLaunchCtl/languages', + default_branch: 'master', + milestones_url: + 'https://api.github.com/repos/mralexgray/AHLaunchCtl/milestones{/number}', + stargazers_url: + 'https://api.github.com/repos/mralexgray/AHLaunchCtl/stargazers', + watchers_count: 0, + deployments_url: + 'https://api.github.com/repos/mralexgray/AHLaunchCtl/deployments', + git_commits_url: + 'https://api.github.com/repos/mralexgray/AHLaunchCtl/git/commits{/sha}', + subscribers_url: + 'https://api.github.com/repos/mralexgray/AHLaunchCtl/subscribers', + contributors_url: + 'https://api.github.com/repos/mralexgray/AHLaunchCtl/contributors', + issue_events_url: + 'https://api.github.com/repos/mralexgray/AHLaunchCtl/issues/events{/number}', + stargazers_count: 0, + subscription_url: + 'https://api.github.com/repos/mralexgray/AHLaunchCtl/subscription', + collaborators_url: + 'https://api.github.com/repos/mralexgray/AHLaunchCtl/collaborators{/collaborator}', + issue_comment_url: + 'https://api.github.com/repos/mralexgray/AHLaunchCtl/issues/comments{/number}', + notifications_url: + 'https://api.github.com/repos/mralexgray/AHLaunchCtl/notifications{?since,all,participating}', + open_issues_count: 0, + web_commit_signoff_required: false, + }, + { + id: 9167473, + url: 'https://api.github.com/repos/mralexgray/AHLayout', + fork: true, + name: 'AHLayout', + size: 359, + forks: 0, + owner: { + id: 262517, + url: 'https://api.github.com/users/mralexgray', + type: 'User', + login: 'mralexgray', + node_id: 'MDQ6VXNlcjI2MjUxNw==', + html_url: 'https://github.com/mralexgray', + gists_url: 'https://api.github.com/users/mralexgray/gists{/gist_id}', + repos_url: 'https://api.github.com/users/mralexgray/repos', + avatar_url: 'https://avatars.githubusercontent.com/u/262517?v=4', + events_url: 'https://api.github.com/users/mralexgray/events{/privacy}', + site_admin: false, + gravatar_id: '', + starred_url: + 'https://api.github.com/users/mralexgray/starred{/owner}{/repo}', + followers_url: 'https://api.github.com/users/mralexgray/followers', + following_url: + 'https://api.github.com/users/mralexgray/following{/other_user}', + organizations_url: 'https://api.github.com/users/mralexgray/orgs', + subscriptions_url: + 'https://api.github.com/users/mralexgray/subscriptions', + received_events_url: + 'https://api.github.com/users/mralexgray/received_events', + }, + topics: [], + git_url: 'git://github.com/mralexgray/AHLayout.git', + license: null, + node_id: 'MDEwOlJlcG9zaXRvcnk5MTY3NDcz', + private: false, + ssh_url: 'git@github.com:mralexgray/AHLayout.git', + svn_url: 'https://github.com/mralexgray/AHLayout', + archived: false, + disabled: false, + has_wiki: true, + homepage: null, + html_url: 'https://github.com/mralexgray/AHLayout', + keys_url: 'https://api.github.com/repos/mralexgray/AHLayout/keys{/key_id}', + language: 'Objective-C', + tags_url: 'https://api.github.com/repos/mralexgray/AHLayout/tags', + watchers: 0, + blobs_url: + 'https://api.github.com/repos/mralexgray/AHLayout/git/blobs{/sha}', + clone_url: 'https://github.com/mralexgray/AHLayout.git', + forks_url: 'https://api.github.com/repos/mralexgray/AHLayout/forks', + full_name: 'mralexgray/AHLayout', + has_pages: false, + hooks_url: 'https://api.github.com/repos/mralexgray/AHLayout/hooks', + pulls_url: + 'https://api.github.com/repos/mralexgray/AHLayout/pulls{/number}', + pushed_at: '2013-07-08T02:31:14Z', + teams_url: 'https://api.github.com/repos/mralexgray/AHLayout/teams', + trees_url: + 'https://api.github.com/repos/mralexgray/AHLayout/git/trees{/sha}', + created_at: '2013-04-02T10:10:30Z', + events_url: 'https://api.github.com/repos/mralexgray/AHLayout/events', + has_issues: false, + issues_url: + 'https://api.github.com/repos/mralexgray/AHLayout/issues{/number}', + labels_url: + 'https://api.github.com/repos/mralexgray/AHLayout/labels{/name}', + merges_url: 'https://api.github.com/repos/mralexgray/AHLayout/merges', + mirror_url: null, + updated_at: '2013-07-08T02:31:17Z', + visibility: 'public', + archive_url: + 'https://api.github.com/repos/mralexgray/AHLayout/{archive_format}{/ref}', + commits_url: + 'https://api.github.com/repos/mralexgray/AHLayout/commits{/sha}', + compare_url: + 'https://api.github.com/repos/mralexgray/AHLayout/compare/{base}...{head}', + description: 'AHLayout', + forks_count: 0, + is_template: false, + open_issues: 0, + branches_url: + 'https://api.github.com/repos/mralexgray/AHLayout/branches{/branch}', + comments_url: + 'https://api.github.com/repos/mralexgray/AHLayout/comments{/number}', + contents_url: + 'https://api.github.com/repos/mralexgray/AHLayout/contents/{+path}', + git_refs_url: + 'https://api.github.com/repos/mralexgray/AHLayout/git/refs{/sha}', + git_tags_url: + 'https://api.github.com/repos/mralexgray/AHLayout/git/tags{/sha}', + has_projects: true, + releases_url: + 'https://api.github.com/repos/mralexgray/AHLayout/releases{/id}', + statuses_url: + 'https://api.github.com/repos/mralexgray/AHLayout/statuses/{sha}', + allow_forking: true, + assignees_url: + 'https://api.github.com/repos/mralexgray/AHLayout/assignees{/user}', + downloads_url: 'https://api.github.com/repos/mralexgray/AHLayout/downloads', + has_downloads: true, + languages_url: 'https://api.github.com/repos/mralexgray/AHLayout/languages', + default_branch: 'master', + milestones_url: + 'https://api.github.com/repos/mralexgray/AHLayout/milestones{/number}', + stargazers_url: + 'https://api.github.com/repos/mralexgray/AHLayout/stargazers', + watchers_count: 0, + deployments_url: + 'https://api.github.com/repos/mralexgray/AHLayout/deployments', + git_commits_url: + 'https://api.github.com/repos/mralexgray/AHLayout/git/commits{/sha}', + subscribers_url: + 'https://api.github.com/repos/mralexgray/AHLayout/subscribers', + contributors_url: + 'https://api.github.com/repos/mralexgray/AHLayout/contributors', + issue_events_url: + 'https://api.github.com/repos/mralexgray/AHLayout/issues/events{/number}', + stargazers_count: 0, + subscription_url: + 'https://api.github.com/repos/mralexgray/AHLayout/subscription', + collaborators_url: + 'https://api.github.com/repos/mralexgray/AHLayout/collaborators{/collaborator}', + issue_comment_url: + 'https://api.github.com/repos/mralexgray/AHLayout/issues/comments{/number}', + notifications_url: + 'https://api.github.com/repos/mralexgray/AHLayout/notifications{?since,all,participating}', + open_issues_count: 0, + web_commit_signoff_required: false, + }, + { + id: 18450201, + url: 'https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework', + fork: true, + name: 'Airmail-Plug-In-Framework', + size: 888, + forks: 0, + owner: { + id: 262517, + url: 'https://api.github.com/users/mralexgray', + type: 'User', + login: 'mralexgray', + node_id: 'MDQ6VXNlcjI2MjUxNw==', + html_url: 'https://github.com/mralexgray', + gists_url: 'https://api.github.com/users/mralexgray/gists{/gist_id}', + repos_url: 'https://api.github.com/users/mralexgray/repos', + avatar_url: 'https://avatars.githubusercontent.com/u/262517?v=4', + events_url: 'https://api.github.com/users/mralexgray/events{/privacy}', + site_admin: false, + gravatar_id: '', + starred_url: + 'https://api.github.com/users/mralexgray/starred{/owner}{/repo}', + followers_url: 'https://api.github.com/users/mralexgray/followers', + following_url: + 'https://api.github.com/users/mralexgray/following{/other_user}', + organizations_url: 'https://api.github.com/users/mralexgray/orgs', + subscriptions_url: + 'https://api.github.com/users/mralexgray/subscriptions', + received_events_url: + 'https://api.github.com/users/mralexgray/received_events', + }, + topics: [], + git_url: 'git://github.com/mralexgray/Airmail-Plug-In-Framework.git', + license: { + key: 'gpl-2.0', + url: 'https://api.github.com/licenses/gpl-2.0', + name: 'GNU General Public License v2.0', + node_id: 'MDc6TGljZW5zZTg=', + spdx_id: 'GPL-2.0', + }, + node_id: 'MDEwOlJlcG9zaXRvcnkxODQ1MDIwMQ==', + private: false, + ssh_url: 'git@github.com:mralexgray/Airmail-Plug-In-Framework.git', + svn_url: 'https://github.com/mralexgray/Airmail-Plug-In-Framework', + archived: false, + disabled: false, + has_wiki: true, + homepage: null, + html_url: 'https://github.com/mralexgray/Airmail-Plug-In-Framework', + keys_url: + 'https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/keys{/key_id}', + language: null, + tags_url: + 'https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/tags', + watchers: 0, + blobs_url: + 'https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/git/blobs{/sha}', + clone_url: 'https://github.com/mralexgray/Airmail-Plug-In-Framework.git', + forks_url: + 'https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/forks', + full_name: 'mralexgray/Airmail-Plug-In-Framework', + has_pages: false, + hooks_url: + 'https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/hooks', + pulls_url: + 'https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/pulls{/number}', + pushed_at: '2014-03-27T15:42:19Z', + teams_url: + 'https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/teams', + trees_url: + 'https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/git/trees{/sha}', + created_at: '2014-04-04T19:33:54Z', + events_url: + 'https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/events', + has_issues: false, + issues_url: + 'https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/issues{/number}', + labels_url: + 'https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/labels{/name}', + merges_url: + 'https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/merges', + mirror_url: null, + updated_at: '2014-11-23T19:31:04Z', + visibility: 'public', + archive_url: + 'https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/{archive_format}{/ref}', + commits_url: + 'https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/commits{/sha}', + compare_url: + 'https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/compare/{base}...{head}', + description: null, + forks_count: 0, + is_template: false, + open_issues: 0, + branches_url: + 'https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/branches{/branch}', + comments_url: + 'https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/comments{/number}', + contents_url: + 'https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/contents/{+path}', + git_refs_url: + 'https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/git/refs{/sha}', + git_tags_url: + 'https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/git/tags{/sha}', + has_projects: true, + releases_url: + 'https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/releases{/id}', + statuses_url: + 'https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/statuses/{sha}', + allow_forking: true, + assignees_url: + 'https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/assignees{/user}', + downloads_url: + 'https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/downloads', + has_downloads: true, + languages_url: + 'https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/languages', + default_branch: 'master', + milestones_url: + 'https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/milestones{/number}', + stargazers_url: + 'https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/stargazers', + watchers_count: 0, + deployments_url: + 'https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/deployments', + git_commits_url: + 'https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/git/commits{/sha}', + subscribers_url: + 'https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/subscribers', + contributors_url: + 'https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/contributors', + issue_events_url: + 'https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/issues/events{/number}', + stargazers_count: 0, + subscription_url: + 'https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/subscription', + collaborators_url: + 'https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/collaborators{/collaborator}', + issue_comment_url: + 'https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/issues/comments{/number}', + notifications_url: + 'https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/notifications{?since,all,participating}', + open_issues_count: 0, + web_commit_signoff_required: false, + }, + { + id: 5203219, + url: 'https://api.github.com/repos/mralexgray/AJS-iTunes-API', + fork: true, + name: 'AJS-iTunes-API', + size: 103, + forks: 0, + owner: { + id: 262517, + url: 'https://api.github.com/users/mralexgray', + type: 'User', + login: 'mralexgray', + node_id: 'MDQ6VXNlcjI2MjUxNw==', + html_url: 'https://github.com/mralexgray', + gists_url: 'https://api.github.com/users/mralexgray/gists{/gist_id}', + repos_url: 'https://api.github.com/users/mralexgray/repos', + avatar_url: 'https://avatars.githubusercontent.com/u/262517?v=4', + events_url: 'https://api.github.com/users/mralexgray/events{/privacy}', + site_admin: false, + gravatar_id: '', + starred_url: + 'https://api.github.com/users/mralexgray/starred{/owner}{/repo}', + followers_url: 'https://api.github.com/users/mralexgray/followers', + following_url: + 'https://api.github.com/users/mralexgray/following{/other_user}', + organizations_url: 'https://api.github.com/users/mralexgray/orgs', + subscriptions_url: + 'https://api.github.com/users/mralexgray/subscriptions', + received_events_url: + 'https://api.github.com/users/mralexgray/received_events', + }, + topics: [], + git_url: 'git://github.com/mralexgray/AJS-iTunes-API.git', + license: null, + node_id: 'MDEwOlJlcG9zaXRvcnk1MjAzMjE5', + private: false, + ssh_url: 'git@github.com:mralexgray/AJS-iTunes-API.git', + svn_url: 'https://github.com/mralexgray/AJS-iTunes-API', + archived: false, + disabled: false, + has_wiki: true, + homepage: '', + html_url: 'https://github.com/mralexgray/AJS-iTunes-API', + keys_url: + 'https://api.github.com/repos/mralexgray/AJS-iTunes-API/keys{/key_id}', + language: 'Objective-C', + tags_url: 'https://api.github.com/repos/mralexgray/AJS-iTunes-API/tags', + watchers: 2, + blobs_url: + 'https://api.github.com/repos/mralexgray/AJS-iTunes-API/git/blobs{/sha}', + clone_url: 'https://github.com/mralexgray/AJS-iTunes-API.git', + forks_url: 'https://api.github.com/repos/mralexgray/AJS-iTunes-API/forks', + full_name: 'mralexgray/AJS-iTunes-API', + has_pages: false, + hooks_url: 'https://api.github.com/repos/mralexgray/AJS-iTunes-API/hooks', + pulls_url: + 'https://api.github.com/repos/mralexgray/AJS-iTunes-API/pulls{/number}', + pushed_at: '2011-10-30T22:26:48Z', + teams_url: 'https://api.github.com/repos/mralexgray/AJS-iTunes-API/teams', + trees_url: + 'https://api.github.com/repos/mralexgray/AJS-iTunes-API/git/trees{/sha}', + created_at: '2012-07-27T10:20:58Z', + events_url: 'https://api.github.com/repos/mralexgray/AJS-iTunes-API/events', + has_issues: false, + issues_url: + 'https://api.github.com/repos/mralexgray/AJS-iTunes-API/issues{/number}', + labels_url: + 'https://api.github.com/repos/mralexgray/AJS-iTunes-API/labels{/name}', + merges_url: 'https://api.github.com/repos/mralexgray/AJS-iTunes-API/merges', + mirror_url: null, + updated_at: '2013-01-11T11:00:05Z', + visibility: 'public', + archive_url: + 'https://api.github.com/repos/mralexgray/AJS-iTunes-API/{archive_format}{/ref}', + commits_url: + 'https://api.github.com/repos/mralexgray/AJS-iTunes-API/commits{/sha}', + compare_url: + 'https://api.github.com/repos/mralexgray/AJS-iTunes-API/compare/{base}...{head}', + description: + 'Cocoa wrapper for the iTunes search API - for iOS and Mac OSX projects', + forks_count: 0, + is_template: false, + open_issues: 0, + branches_url: + 'https://api.github.com/repos/mralexgray/AJS-iTunes-API/branches{/branch}', + comments_url: + 'https://api.github.com/repos/mralexgray/AJS-iTunes-API/comments{/number}', + contents_url: + 'https://api.github.com/repos/mralexgray/AJS-iTunes-API/contents/{+path}', + git_refs_url: + 'https://api.github.com/repos/mralexgray/AJS-iTunes-API/git/refs{/sha}', + git_tags_url: + 'https://api.github.com/repos/mralexgray/AJS-iTunes-API/git/tags{/sha}', + has_projects: true, + releases_url: + 'https://api.github.com/repos/mralexgray/AJS-iTunes-API/releases{/id}', + statuses_url: + 'https://api.github.com/repos/mralexgray/AJS-iTunes-API/statuses/{sha}', + allow_forking: true, + assignees_url: + 'https://api.github.com/repos/mralexgray/AJS-iTunes-API/assignees{/user}', + downloads_url: + 'https://api.github.com/repos/mralexgray/AJS-iTunes-API/downloads', + has_downloads: true, + languages_url: + 'https://api.github.com/repos/mralexgray/AJS-iTunes-API/languages', + default_branch: 'master', + milestones_url: + 'https://api.github.com/repos/mralexgray/AJS-iTunes-API/milestones{/number}', + stargazers_url: + 'https://api.github.com/repos/mralexgray/AJS-iTunes-API/stargazers', + watchers_count: 2, + deployments_url: + 'https://api.github.com/repos/mralexgray/AJS-iTunes-API/deployments', + git_commits_url: + 'https://api.github.com/repos/mralexgray/AJS-iTunes-API/git/commits{/sha}', + subscribers_url: + 'https://api.github.com/repos/mralexgray/AJS-iTunes-API/subscribers', + contributors_url: + 'https://api.github.com/repos/mralexgray/AJS-iTunes-API/contributors', + issue_events_url: + 'https://api.github.com/repos/mralexgray/AJS-iTunes-API/issues/events{/number}', + stargazers_count: 2, + subscription_url: + 'https://api.github.com/repos/mralexgray/AJS-iTunes-API/subscription', + collaborators_url: + 'https://api.github.com/repos/mralexgray/AJS-iTunes-API/collaborators{/collaborator}', + issue_comment_url: + 'https://api.github.com/repos/mralexgray/AJS-iTunes-API/issues/comments{/number}', + notifications_url: + 'https://api.github.com/repos/mralexgray/AJS-iTunes-API/notifications{?since,all,participating}', + open_issues_count: 0, + web_commit_signoff_required: false, + }, + { + id: 10093801, + url: 'https://api.github.com/repos/mralexgray/Alcatraz', + fork: true, + name: 'Alcatraz', + size: 3668, + forks: 0, + owner: { + id: 262517, + url: 'https://api.github.com/users/mralexgray', + type: 'User', + login: 'mralexgray', + node_id: 'MDQ6VXNlcjI2MjUxNw==', + html_url: 'https://github.com/mralexgray', + gists_url: 'https://api.github.com/users/mralexgray/gists{/gist_id}', + repos_url: 'https://api.github.com/users/mralexgray/repos', + avatar_url: 'https://avatars.githubusercontent.com/u/262517?v=4', + events_url: 'https://api.github.com/users/mralexgray/events{/privacy}', + site_admin: false, + gravatar_id: '', + starred_url: + 'https://api.github.com/users/mralexgray/starred{/owner}{/repo}', + followers_url: 'https://api.github.com/users/mralexgray/followers', + following_url: + 'https://api.github.com/users/mralexgray/following{/other_user}', + organizations_url: 'https://api.github.com/users/mralexgray/orgs', + subscriptions_url: + 'https://api.github.com/users/mralexgray/subscriptions', + received_events_url: + 'https://api.github.com/users/mralexgray/received_events', + }, + topics: [], + git_url: 'git://github.com/mralexgray/Alcatraz.git', + license: { + key: 'mit', + url: 'https://api.github.com/licenses/mit', + name: 'MIT License', + node_id: 'MDc6TGljZW5zZTEz', + spdx_id: 'MIT', + }, + node_id: 'MDEwOlJlcG9zaXRvcnkxMDA5MzgwMQ==', + private: false, + ssh_url: 'git@github.com:mralexgray/Alcatraz.git', + svn_url: 'https://github.com/mralexgray/Alcatraz', + archived: false, + disabled: false, + has_wiki: false, + homepage: 'mneorr.github.com/Alcatraz', + html_url: 'https://github.com/mralexgray/Alcatraz', + keys_url: 'https://api.github.com/repos/mralexgray/Alcatraz/keys{/key_id}', + language: 'Objective-C', + tags_url: 'https://api.github.com/repos/mralexgray/Alcatraz/tags', + watchers: 0, + blobs_url: + 'https://api.github.com/repos/mralexgray/Alcatraz/git/blobs{/sha}', + clone_url: 'https://github.com/mralexgray/Alcatraz.git', + forks_url: 'https://api.github.com/repos/mralexgray/Alcatraz/forks', + full_name: 'mralexgray/Alcatraz', + has_pages: false, + hooks_url: 'https://api.github.com/repos/mralexgray/Alcatraz/hooks', + pulls_url: + 'https://api.github.com/repos/mralexgray/Alcatraz/pulls{/number}', + pushed_at: '2014-03-19T12:50:37Z', + teams_url: 'https://api.github.com/repos/mralexgray/Alcatraz/teams', + trees_url: + 'https://api.github.com/repos/mralexgray/Alcatraz/git/trees{/sha}', + created_at: '2013-05-16T04:41:13Z', + events_url: 'https://api.github.com/repos/mralexgray/Alcatraz/events', + has_issues: false, + issues_url: + 'https://api.github.com/repos/mralexgray/Alcatraz/issues{/number}', + labels_url: + 'https://api.github.com/repos/mralexgray/Alcatraz/labels{/name}', + merges_url: 'https://api.github.com/repos/mralexgray/Alcatraz/merges', + mirror_url: null, + updated_at: '2014-03-19T20:38:35Z', + visibility: 'public', + archive_url: + 'https://api.github.com/repos/mralexgray/Alcatraz/{archive_format}{/ref}', + commits_url: + 'https://api.github.com/repos/mralexgray/Alcatraz/commits{/sha}', + compare_url: + 'https://api.github.com/repos/mralexgray/Alcatraz/compare/{base}...{head}', + description: 'The most awesome (and only) Xcode package manager!', + forks_count: 0, + is_template: false, + open_issues: 0, + branches_url: + 'https://api.github.com/repos/mralexgray/Alcatraz/branches{/branch}', + comments_url: + 'https://api.github.com/repos/mralexgray/Alcatraz/comments{/number}', + contents_url: + 'https://api.github.com/repos/mralexgray/Alcatraz/contents/{+path}', + git_refs_url: + 'https://api.github.com/repos/mralexgray/Alcatraz/git/refs{/sha}', + git_tags_url: + 'https://api.github.com/repos/mralexgray/Alcatraz/git/tags{/sha}', + has_projects: true, + releases_url: + 'https://api.github.com/repos/mralexgray/Alcatraz/releases{/id}', + statuses_url: + 'https://api.github.com/repos/mralexgray/Alcatraz/statuses/{sha}', + allow_forking: true, + assignees_url: + 'https://api.github.com/repos/mralexgray/Alcatraz/assignees{/user}', + downloads_url: 'https://api.github.com/repos/mralexgray/Alcatraz/downloads', + has_downloads: true, + languages_url: 'https://api.github.com/repos/mralexgray/Alcatraz/languages', + default_branch: 'master', + milestones_url: + 'https://api.github.com/repos/mralexgray/Alcatraz/milestones{/number}', + stargazers_url: + 'https://api.github.com/repos/mralexgray/Alcatraz/stargazers', + watchers_count: 0, + deployments_url: + 'https://api.github.com/repos/mralexgray/Alcatraz/deployments', + git_commits_url: + 'https://api.github.com/repos/mralexgray/Alcatraz/git/commits{/sha}', + subscribers_url: + 'https://api.github.com/repos/mralexgray/Alcatraz/subscribers', + contributors_url: + 'https://api.github.com/repos/mralexgray/Alcatraz/contributors', + issue_events_url: + 'https://api.github.com/repos/mralexgray/Alcatraz/issues/events{/number}', + stargazers_count: 0, + subscription_url: + 'https://api.github.com/repos/mralexgray/Alcatraz/subscription', + collaborators_url: + 'https://api.github.com/repos/mralexgray/Alcatraz/collaborators{/collaborator}', + issue_comment_url: + 'https://api.github.com/repos/mralexgray/Alcatraz/issues/comments{/number}', + notifications_url: + 'https://api.github.com/repos/mralexgray/Alcatraz/notifications{?since,all,participating}', + open_issues_count: 0, + web_commit_signoff_required: false, + }, + { + id: 12916552, + url: 'https://api.github.com/repos/mralexgray/alcatraz-packages', + fork: true, + name: 'alcatraz-packages', + size: 826, + forks: 0, + owner: { + id: 262517, + url: 'https://api.github.com/users/mralexgray', + type: 'User', + login: 'mralexgray', + node_id: 'MDQ6VXNlcjI2MjUxNw==', + html_url: 'https://github.com/mralexgray', + gists_url: 'https://api.github.com/users/mralexgray/gists{/gist_id}', + repos_url: 'https://api.github.com/users/mralexgray/repos', + avatar_url: 'https://avatars.githubusercontent.com/u/262517?v=4', + events_url: 'https://api.github.com/users/mralexgray/events{/privacy}', + site_admin: false, + gravatar_id: '', + starred_url: + 'https://api.github.com/users/mralexgray/starred{/owner}{/repo}', + followers_url: 'https://api.github.com/users/mralexgray/followers', + following_url: + 'https://api.github.com/users/mralexgray/following{/other_user}', + organizations_url: 'https://api.github.com/users/mralexgray/orgs', + subscriptions_url: + 'https://api.github.com/users/mralexgray/subscriptions', + received_events_url: + 'https://api.github.com/users/mralexgray/received_events', + }, + topics: [], + git_url: 'git://github.com/mralexgray/alcatraz-packages.git', + license: null, + node_id: 'MDEwOlJlcG9zaXRvcnkxMjkxNjU1Mg==', + private: false, + ssh_url: 'git@github.com:mralexgray/alcatraz-packages.git', + svn_url: 'https://github.com/mralexgray/alcatraz-packages', + archived: false, + disabled: false, + has_wiki: true, + homepage: 'mneorr.github.com/Alcatraz', + html_url: 'https://github.com/mralexgray/alcatraz-packages', + keys_url: + 'https://api.github.com/repos/mralexgray/alcatraz-packages/keys{/key_id}', + language: 'Ruby', + tags_url: 'https://api.github.com/repos/mralexgray/alcatraz-packages/tags', + watchers: 0, + blobs_url: + 'https://api.github.com/repos/mralexgray/alcatraz-packages/git/blobs{/sha}', + clone_url: 'https://github.com/mralexgray/alcatraz-packages.git', + forks_url: + 'https://api.github.com/repos/mralexgray/alcatraz-packages/forks', + full_name: 'mralexgray/alcatraz-packages', + has_pages: false, + hooks_url: + 'https://api.github.com/repos/mralexgray/alcatraz-packages/hooks', + pulls_url: + 'https://api.github.com/repos/mralexgray/alcatraz-packages/pulls{/number}', + pushed_at: '2015-12-14T16:21:31Z', + teams_url: + 'https://api.github.com/repos/mralexgray/alcatraz-packages/teams', + trees_url: + 'https://api.github.com/repos/mralexgray/alcatraz-packages/git/trees{/sha}', + created_at: '2013-09-18T07:15:24Z', + events_url: + 'https://api.github.com/repos/mralexgray/alcatraz-packages/events', + has_issues: false, + issues_url: + 'https://api.github.com/repos/mralexgray/alcatraz-packages/issues{/number}', + labels_url: + 'https://api.github.com/repos/mralexgray/alcatraz-packages/labels{/name}', + merges_url: + 'https://api.github.com/repos/mralexgray/alcatraz-packages/merges', + mirror_url: null, + updated_at: '2015-11-10T20:52:30Z', + visibility: 'public', + archive_url: + 'https://api.github.com/repos/mralexgray/alcatraz-packages/{archive_format}{/ref}', + commits_url: + 'https://api.github.com/repos/mralexgray/alcatraz-packages/commits{/sha}', + compare_url: + 'https://api.github.com/repos/mralexgray/alcatraz-packages/compare/{base}...{head}', + description: 'Package list repository for Alcatraz', + forks_count: 0, + is_template: false, + open_issues: 0, + branches_url: + 'https://api.github.com/repos/mralexgray/alcatraz-packages/branches{/branch}', + comments_url: + 'https://api.github.com/repos/mralexgray/alcatraz-packages/comments{/number}', + contents_url: + 'https://api.github.com/repos/mralexgray/alcatraz-packages/contents/{+path}', + git_refs_url: + 'https://api.github.com/repos/mralexgray/alcatraz-packages/git/refs{/sha}', + git_tags_url: + 'https://api.github.com/repos/mralexgray/alcatraz-packages/git/tags{/sha}', + has_projects: true, + releases_url: + 'https://api.github.com/repos/mralexgray/alcatraz-packages/releases{/id}', + statuses_url: + 'https://api.github.com/repos/mralexgray/alcatraz-packages/statuses/{sha}', + allow_forking: true, + assignees_url: + 'https://api.github.com/repos/mralexgray/alcatraz-packages/assignees{/user}', + downloads_url: + 'https://api.github.com/repos/mralexgray/alcatraz-packages/downloads', + has_downloads: true, + languages_url: + 'https://api.github.com/repos/mralexgray/alcatraz-packages/languages', + default_branch: 'master', + milestones_url: + 'https://api.github.com/repos/mralexgray/alcatraz-packages/milestones{/number}', + stargazers_url: + 'https://api.github.com/repos/mralexgray/alcatraz-packages/stargazers', + watchers_count: 0, + deployments_url: + 'https://api.github.com/repos/mralexgray/alcatraz-packages/deployments', + git_commits_url: + 'https://api.github.com/repos/mralexgray/alcatraz-packages/git/commits{/sha}', + subscribers_url: + 'https://api.github.com/repos/mralexgray/alcatraz-packages/subscribers', + contributors_url: + 'https://api.github.com/repos/mralexgray/alcatraz-packages/contributors', + issue_events_url: + 'https://api.github.com/repos/mralexgray/alcatraz-packages/issues/events{/number}', + stargazers_count: 0, + subscription_url: + 'https://api.github.com/repos/mralexgray/alcatraz-packages/subscription', + collaborators_url: + 'https://api.github.com/repos/mralexgray/alcatraz-packages/collaborators{/collaborator}', + issue_comment_url: + 'https://api.github.com/repos/mralexgray/alcatraz-packages/issues/comments{/number}', + notifications_url: + 'https://api.github.com/repos/mralexgray/alcatraz-packages/notifications{?since,all,participating}', + open_issues_count: 0, + web_commit_signoff_required: false, + }, + { + id: 44278362, + url: 'https://api.github.com/repos/mralexgray/alexicons', + fork: true, + name: 'alexicons', + size: 257, + forks: 0, + owner: { + id: 262517, + url: 'https://api.github.com/users/mralexgray', + type: 'User', + login: 'mralexgray', + node_id: 'MDQ6VXNlcjI2MjUxNw==', + html_url: 'https://github.com/mralexgray', + gists_url: 'https://api.github.com/users/mralexgray/gists{/gist_id}', + repos_url: 'https://api.github.com/users/mralexgray/repos', + avatar_url: 'https://avatars.githubusercontent.com/u/262517?v=4', + events_url: 'https://api.github.com/users/mralexgray/events{/privacy}', + site_admin: false, + gravatar_id: '', + starred_url: + 'https://api.github.com/users/mralexgray/starred{/owner}{/repo}', + followers_url: 'https://api.github.com/users/mralexgray/followers', + following_url: + 'https://api.github.com/users/mralexgray/following{/other_user}', + organizations_url: 'https://api.github.com/users/mralexgray/orgs', + subscriptions_url: + 'https://api.github.com/users/mralexgray/subscriptions', + received_events_url: + 'https://api.github.com/users/mralexgray/received_events', + }, + topics: [], + git_url: 'git://github.com/mralexgray/alexicons.git', + license: null, + node_id: 'MDEwOlJlcG9zaXRvcnk0NDI3ODM2Mg==', + private: false, + ssh_url: 'git@github.com:mralexgray/alexicons.git', + svn_url: 'https://github.com/mralexgray/alexicons', + archived: false, + disabled: false, + has_wiki: false, + homepage: null, + html_url: 'https://github.com/mralexgray/alexicons', + keys_url: 'https://api.github.com/repos/mralexgray/alexicons/keys{/key_id}', + language: 'CoffeeScript', + tags_url: 'https://api.github.com/repos/mralexgray/alexicons/tags', + watchers: 0, + blobs_url: + 'https://api.github.com/repos/mralexgray/alexicons/git/blobs{/sha}', + clone_url: 'https://github.com/mralexgray/alexicons.git', + forks_url: 'https://api.github.com/repos/mralexgray/alexicons/forks', + full_name: 'mralexgray/alexicons', + has_pages: false, + hooks_url: 'https://api.github.com/repos/mralexgray/alexicons/hooks', + pulls_url: + 'https://api.github.com/repos/mralexgray/alexicons/pulls{/number}', + pushed_at: '2015-10-16T03:57:51Z', + teams_url: 'https://api.github.com/repos/mralexgray/alexicons/teams', + trees_url: + 'https://api.github.com/repos/mralexgray/alexicons/git/trees{/sha}', + created_at: '2015-10-14T21:49:39Z', + events_url: 'https://api.github.com/repos/mralexgray/alexicons/events', + has_issues: false, + issues_url: + 'https://api.github.com/repos/mralexgray/alexicons/issues{/number}', + labels_url: + 'https://api.github.com/repos/mralexgray/alexicons/labels{/name}', + merges_url: 'https://api.github.com/repos/mralexgray/alexicons/merges', + mirror_url: null, + updated_at: '2015-10-15T06:20:08Z', + visibility: 'public', + archive_url: + 'https://api.github.com/repos/mralexgray/alexicons/{archive_format}{/ref}', + commits_url: + 'https://api.github.com/repos/mralexgray/alexicons/commits{/sha}', + compare_url: + 'https://api.github.com/repos/mralexgray/alexicons/compare/{base}...{head}', + description: 'Get popular cat names', + forks_count: 0, + is_template: false, + open_issues: 0, + branches_url: + 'https://api.github.com/repos/mralexgray/alexicons/branches{/branch}', + comments_url: + 'https://api.github.com/repos/mralexgray/alexicons/comments{/number}', + contents_url: + 'https://api.github.com/repos/mralexgray/alexicons/contents/{+path}', + git_refs_url: + 'https://api.github.com/repos/mralexgray/alexicons/git/refs{/sha}', + git_tags_url: + 'https://api.github.com/repos/mralexgray/alexicons/git/tags{/sha}', + has_projects: true, + releases_url: + 'https://api.github.com/repos/mralexgray/alexicons/releases{/id}', + statuses_url: + 'https://api.github.com/repos/mralexgray/alexicons/statuses/{sha}', + allow_forking: true, + assignees_url: + 'https://api.github.com/repos/mralexgray/alexicons/assignees{/user}', + downloads_url: + 'https://api.github.com/repos/mralexgray/alexicons/downloads', + has_downloads: true, + languages_url: + 'https://api.github.com/repos/mralexgray/alexicons/languages', + default_branch: 'master', + milestones_url: + 'https://api.github.com/repos/mralexgray/alexicons/milestones{/number}', + stargazers_url: + 'https://api.github.com/repos/mralexgray/alexicons/stargazers', + watchers_count: 0, + deployments_url: + 'https://api.github.com/repos/mralexgray/alexicons/deployments', + git_commits_url: + 'https://api.github.com/repos/mralexgray/alexicons/git/commits{/sha}', + subscribers_url: + 'https://api.github.com/repos/mralexgray/alexicons/subscribers', + contributors_url: + 'https://api.github.com/repos/mralexgray/alexicons/contributors', + issue_events_url: + 'https://api.github.com/repos/mralexgray/alexicons/issues/events{/number}', + stargazers_count: 0, + subscription_url: + 'https://api.github.com/repos/mralexgray/alexicons/subscription', + collaborators_url: + 'https://api.github.com/repos/mralexgray/alexicons/collaborators{/collaborator}', + issue_comment_url: + 'https://api.github.com/repos/mralexgray/alexicons/issues/comments{/number}', + notifications_url: + 'https://api.github.com/repos/mralexgray/alexicons/notifications{?since,all,participating}', + open_issues_count: 0, + web_commit_signoff_required: false, + }, + { + id: 10476467, + url: 'https://api.github.com/repos/mralexgray/Alfred-Google-Translate', + fork: true, + name: 'Alfred-Google-Translate', + size: 103, + forks: 0, + owner: { + id: 262517, + url: 'https://api.github.com/users/mralexgray', + type: 'User', + login: 'mralexgray', + node_id: 'MDQ6VXNlcjI2MjUxNw==', + html_url: 'https://github.com/mralexgray', + gists_url: 'https://api.github.com/users/mralexgray/gists{/gist_id}', + repos_url: 'https://api.github.com/users/mralexgray/repos', + avatar_url: 'https://avatars.githubusercontent.com/u/262517?v=4', + events_url: 'https://api.github.com/users/mralexgray/events{/privacy}', + site_admin: false, + gravatar_id: '', + starred_url: + 'https://api.github.com/users/mralexgray/starred{/owner}{/repo}', + followers_url: 'https://api.github.com/users/mralexgray/followers', + following_url: + 'https://api.github.com/users/mralexgray/following{/other_user}', + organizations_url: 'https://api.github.com/users/mralexgray/orgs', + subscriptions_url: + 'https://api.github.com/users/mralexgray/subscriptions', + received_events_url: + 'https://api.github.com/users/mralexgray/received_events', + }, + topics: [], + git_url: 'git://github.com/mralexgray/Alfred-Google-Translate.git', + license: null, + node_id: 'MDEwOlJlcG9zaXRvcnkxMDQ3NjQ2Nw==', + private: false, + ssh_url: 'git@github.com:mralexgray/Alfred-Google-Translate.git', + svn_url: 'https://github.com/mralexgray/Alfred-Google-Translate', + archived: false, + disabled: false, + has_wiki: true, + homepage: null, + html_url: 'https://github.com/mralexgray/Alfred-Google-Translate', + keys_url: + 'https://api.github.com/repos/mralexgray/Alfred-Google-Translate/keys{/key_id}', + language: 'Shell', + tags_url: + 'https://api.github.com/repos/mralexgray/Alfred-Google-Translate/tags', + watchers: 0, + blobs_url: + 'https://api.github.com/repos/mralexgray/Alfred-Google-Translate/git/blobs{/sha}', + clone_url: 'https://github.com/mralexgray/Alfred-Google-Translate.git', + forks_url: + 'https://api.github.com/repos/mralexgray/Alfred-Google-Translate/forks', + full_name: 'mralexgray/Alfred-Google-Translate', + has_pages: false, + hooks_url: + 'https://api.github.com/repos/mralexgray/Alfred-Google-Translate/hooks', + pulls_url: + 'https://api.github.com/repos/mralexgray/Alfred-Google-Translate/pulls{/number}', + pushed_at: '2013-01-12T19:39:03Z', + teams_url: + 'https://api.github.com/repos/mralexgray/Alfred-Google-Translate/teams', + trees_url: + 'https://api.github.com/repos/mralexgray/Alfred-Google-Translate/git/trees{/sha}', + created_at: '2013-06-04T10:45:10Z', + events_url: + 'https://api.github.com/repos/mralexgray/Alfred-Google-Translate/events', + has_issues: false, + issues_url: + 'https://api.github.com/repos/mralexgray/Alfred-Google-Translate/issues{/number}', + labels_url: + 'https://api.github.com/repos/mralexgray/Alfred-Google-Translate/labels{/name}', + merges_url: + 'https://api.github.com/repos/mralexgray/Alfred-Google-Translate/merges', + mirror_url: null, + updated_at: '2013-06-04T10:45:10Z', + visibility: 'public', + archive_url: + 'https://api.github.com/repos/mralexgray/Alfred-Google-Translate/{archive_format}{/ref}', + commits_url: + 'https://api.github.com/repos/mralexgray/Alfred-Google-Translate/commits{/sha}', + compare_url: + 'https://api.github.com/repos/mralexgray/Alfred-Google-Translate/compare/{base}...{head}', + description: 'Extension for Alfred that will do a Google translate for you', + forks_count: 0, + is_template: false, + open_issues: 0, + branches_url: + 'https://api.github.com/repos/mralexgray/Alfred-Google-Translate/branches{/branch}', + comments_url: + 'https://api.github.com/repos/mralexgray/Alfred-Google-Translate/comments{/number}', + contents_url: + 'https://api.github.com/repos/mralexgray/Alfred-Google-Translate/contents/{+path}', + git_refs_url: + 'https://api.github.com/repos/mralexgray/Alfred-Google-Translate/git/refs{/sha}', + git_tags_url: + 'https://api.github.com/repos/mralexgray/Alfred-Google-Translate/git/tags{/sha}', + has_projects: true, + releases_url: + 'https://api.github.com/repos/mralexgray/Alfred-Google-Translate/releases{/id}', + statuses_url: + 'https://api.github.com/repos/mralexgray/Alfred-Google-Translate/statuses/{sha}', + allow_forking: true, + assignees_url: + 'https://api.github.com/repos/mralexgray/Alfred-Google-Translate/assignees{/user}', + downloads_url: + 'https://api.github.com/repos/mralexgray/Alfred-Google-Translate/downloads', + has_downloads: true, + languages_url: + 'https://api.github.com/repos/mralexgray/Alfred-Google-Translate/languages', + default_branch: 'master', + milestones_url: + 'https://api.github.com/repos/mralexgray/Alfred-Google-Translate/milestones{/number}', + stargazers_url: + 'https://api.github.com/repos/mralexgray/Alfred-Google-Translate/stargazers', + watchers_count: 0, + deployments_url: + 'https://api.github.com/repos/mralexgray/Alfred-Google-Translate/deployments', + git_commits_url: + 'https://api.github.com/repos/mralexgray/Alfred-Google-Translate/git/commits{/sha}', + subscribers_url: + 'https://api.github.com/repos/mralexgray/Alfred-Google-Translate/subscribers', + contributors_url: + 'https://api.github.com/repos/mralexgray/Alfred-Google-Translate/contributors', + issue_events_url: + 'https://api.github.com/repos/mralexgray/Alfred-Google-Translate/issues/events{/number}', + stargazers_count: 0, + subscription_url: + 'https://api.github.com/repos/mralexgray/Alfred-Google-Translate/subscription', + collaborators_url: + 'https://api.github.com/repos/mralexgray/Alfred-Google-Translate/collaborators{/collaborator}', + issue_comment_url: + 'https://api.github.com/repos/mralexgray/Alfred-Google-Translate/issues/comments{/number}', + notifications_url: + 'https://api.github.com/repos/mralexgray/Alfred-Google-Translate/notifications{?since,all,participating}', + open_issues_count: 0, + web_commit_signoff_required: false, + }, + { + id: 5524019, + url: 'https://api.github.com/repos/mralexgray/Amber', + fork: false, + name: 'Amber', + size: 48, + forks: 0, + owner: { + id: 262517, + url: 'https://api.github.com/users/mralexgray', + type: 'User', + login: 'mralexgray', + node_id: 'MDQ6VXNlcjI2MjUxNw==', + html_url: 'https://github.com/mralexgray', + gists_url: 'https://api.github.com/users/mralexgray/gists{/gist_id}', + repos_url: 'https://api.github.com/users/mralexgray/repos', + avatar_url: 'https://avatars.githubusercontent.com/u/262517?v=4', + events_url: 'https://api.github.com/users/mralexgray/events{/privacy}', + site_admin: false, + gravatar_id: '', + starred_url: + 'https://api.github.com/users/mralexgray/starred{/owner}{/repo}', + followers_url: 'https://api.github.com/users/mralexgray/followers', + following_url: + 'https://api.github.com/users/mralexgray/following{/other_user}', + organizations_url: 'https://api.github.com/users/mralexgray/orgs', + subscriptions_url: + 'https://api.github.com/users/mralexgray/subscriptions', + received_events_url: + 'https://api.github.com/users/mralexgray/received_events', + }, + topics: [], + git_url: 'git://github.com/mralexgray/Amber.git', + license: null, + node_id: 'MDEwOlJlcG9zaXRvcnk1NTI0MDE5', + private: false, + ssh_url: 'git@github.com:mralexgray/Amber.git', + svn_url: 'https://github.com/mralexgray/Amber', + archived: false, + disabled: false, + has_wiki: true, + homepage: null, + html_url: 'https://github.com/mralexgray/Amber', + keys_url: 'https://api.github.com/repos/mralexgray/Amber/keys{/key_id}', + language: null, + tags_url: 'https://api.github.com/repos/mralexgray/Amber/tags', + watchers: 0, + blobs_url: 'https://api.github.com/repos/mralexgray/Amber/git/blobs{/sha}', + clone_url: 'https://github.com/mralexgray/Amber.git', + forks_url: 'https://api.github.com/repos/mralexgray/Amber/forks', + full_name: 'mralexgray/Amber', + has_pages: false, + hooks_url: 'https://api.github.com/repos/mralexgray/Amber/hooks', + pulls_url: 'https://api.github.com/repos/mralexgray/Amber/pulls{/number}', + pushed_at: '2012-08-23T10:38:25Z', + teams_url: 'https://api.github.com/repos/mralexgray/Amber/teams', + trees_url: 'https://api.github.com/repos/mralexgray/Amber/git/trees{/sha}', + created_at: '2012-08-23T10:38:24Z', + events_url: 'https://api.github.com/repos/mralexgray/Amber/events', + has_issues: true, + issues_url: 'https://api.github.com/repos/mralexgray/Amber/issues{/number}', + labels_url: 'https://api.github.com/repos/mralexgray/Amber/labels{/name}', + merges_url: 'https://api.github.com/repos/mralexgray/Amber/merges', + mirror_url: null, + updated_at: '2013-01-11T22:25:35Z', + visibility: 'public', + archive_url: + 'https://api.github.com/repos/mralexgray/Amber/{archive_format}{/ref}', + commits_url: 'https://api.github.com/repos/mralexgray/Amber/commits{/sha}', + compare_url: + 'https://api.github.com/repos/mralexgray/Amber/compare/{base}...{head}', + description: 'Fork of the difficult-to-deal-with Amber.framework', + forks_count: 0, + is_template: false, + open_issues: 0, + branches_url: + 'https://api.github.com/repos/mralexgray/Amber/branches{/branch}', + comments_url: + 'https://api.github.com/repos/mralexgray/Amber/comments{/number}', + contents_url: + 'https://api.github.com/repos/mralexgray/Amber/contents/{+path}', + git_refs_url: + 'https://api.github.com/repos/mralexgray/Amber/git/refs{/sha}', + git_tags_url: + 'https://api.github.com/repos/mralexgray/Amber/git/tags{/sha}', + has_projects: true, + releases_url: 'https://api.github.com/repos/mralexgray/Amber/releases{/id}', + statuses_url: + 'https://api.github.com/repos/mralexgray/Amber/statuses/{sha}', + allow_forking: true, + assignees_url: + 'https://api.github.com/repos/mralexgray/Amber/assignees{/user}', + downloads_url: 'https://api.github.com/repos/mralexgray/Amber/downloads', + has_downloads: true, + languages_url: 'https://api.github.com/repos/mralexgray/Amber/languages', + default_branch: 'master', + milestones_url: + 'https://api.github.com/repos/mralexgray/Amber/milestones{/number}', + stargazers_url: 'https://api.github.com/repos/mralexgray/Amber/stargazers', + watchers_count: 0, + deployments_url: + 'https://api.github.com/repos/mralexgray/Amber/deployments', + git_commits_url: + 'https://api.github.com/repos/mralexgray/Amber/git/commits{/sha}', + subscribers_url: + 'https://api.github.com/repos/mralexgray/Amber/subscribers', + contributors_url: + 'https://api.github.com/repos/mralexgray/Amber/contributors', + issue_events_url: + 'https://api.github.com/repos/mralexgray/Amber/issues/events{/number}', + stargazers_count: 0, + subscription_url: + 'https://api.github.com/repos/mralexgray/Amber/subscription', + collaborators_url: + 'https://api.github.com/repos/mralexgray/Amber/collaborators{/collaborator}', + issue_comment_url: + 'https://api.github.com/repos/mralexgray/Amber/issues/comments{/number}', + notifications_url: + 'https://api.github.com/repos/mralexgray/Amber/notifications{?since,all,participating}', + open_issues_count: 0, + web_commit_signoff_required: false, + }, + { + id: 10809060, + url: 'https://api.github.com/repos/mralexgray/Amethyst', + fork: true, + name: 'Amethyst', + size: 12623, + forks: 0, + owner: { + id: 262517, + url: 'https://api.github.com/users/mralexgray', + type: 'User', + login: 'mralexgray', + node_id: 'MDQ6VXNlcjI2MjUxNw==', + html_url: 'https://github.com/mralexgray', + gists_url: 'https://api.github.com/users/mralexgray/gists{/gist_id}', + repos_url: 'https://api.github.com/users/mralexgray/repos', + avatar_url: 'https://avatars.githubusercontent.com/u/262517?v=4', + events_url: 'https://api.github.com/users/mralexgray/events{/privacy}', + site_admin: false, + gravatar_id: '', + starred_url: + 'https://api.github.com/users/mralexgray/starred{/owner}{/repo}', + followers_url: 'https://api.github.com/users/mralexgray/followers', + following_url: + 'https://api.github.com/users/mralexgray/following{/other_user}', + organizations_url: 'https://api.github.com/users/mralexgray/orgs', + subscriptions_url: + 'https://api.github.com/users/mralexgray/subscriptions', + received_events_url: + 'https://api.github.com/users/mralexgray/received_events', + }, + topics: [], + git_url: 'git://github.com/mralexgray/Amethyst.git', + license: { + key: 'mit', + url: 'https://api.github.com/licenses/mit', + name: 'MIT License', + node_id: 'MDc6TGljZW5zZTEz', + spdx_id: 'MIT', + }, + node_id: 'MDEwOlJlcG9zaXRvcnkxMDgwOTA2MA==', + private: false, + ssh_url: 'git@github.com:mralexgray/Amethyst.git', + svn_url: 'https://github.com/mralexgray/Amethyst', + archived: false, + disabled: false, + has_wiki: true, + homepage: 'http://ianyh.github.io/Amethyst/', + html_url: 'https://github.com/mralexgray/Amethyst', + keys_url: 'https://api.github.com/repos/mralexgray/Amethyst/keys{/key_id}', + language: 'Objective-C', + tags_url: 'https://api.github.com/repos/mralexgray/Amethyst/tags', + watchers: 0, + blobs_url: + 'https://api.github.com/repos/mralexgray/Amethyst/git/blobs{/sha}', + clone_url: 'https://github.com/mralexgray/Amethyst.git', + forks_url: 'https://api.github.com/repos/mralexgray/Amethyst/forks', + full_name: 'mralexgray/Amethyst', + has_pages: false, + hooks_url: 'https://api.github.com/repos/mralexgray/Amethyst/hooks', + pulls_url: + 'https://api.github.com/repos/mralexgray/Amethyst/pulls{/number}', + pushed_at: '2013-06-18T02:54:11Z', + teams_url: 'https://api.github.com/repos/mralexgray/Amethyst/teams', + trees_url: + 'https://api.github.com/repos/mralexgray/Amethyst/git/trees{/sha}', + created_at: '2013-06-20T00:34:22Z', + events_url: 'https://api.github.com/repos/mralexgray/Amethyst/events', + has_issues: false, + issues_url: + 'https://api.github.com/repos/mralexgray/Amethyst/issues{/number}', + labels_url: + 'https://api.github.com/repos/mralexgray/Amethyst/labels{/name}', + merges_url: 'https://api.github.com/repos/mralexgray/Amethyst/merges', + mirror_url: null, + updated_at: '2013-06-20T00:34:22Z', + visibility: 'public', + archive_url: + 'https://api.github.com/repos/mralexgray/Amethyst/{archive_format}{/ref}', + commits_url: + 'https://api.github.com/repos/mralexgray/Amethyst/commits{/sha}', + compare_url: + 'https://api.github.com/repos/mralexgray/Amethyst/compare/{base}...{head}', + description: 'Tiling window manager for OS X.', + forks_count: 0, + is_template: false, + open_issues: 0, + branches_url: + 'https://api.github.com/repos/mralexgray/Amethyst/branches{/branch}', + comments_url: + 'https://api.github.com/repos/mralexgray/Amethyst/comments{/number}', + contents_url: + 'https://api.github.com/repos/mralexgray/Amethyst/contents/{+path}', + git_refs_url: + 'https://api.github.com/repos/mralexgray/Amethyst/git/refs{/sha}', + git_tags_url: + 'https://api.github.com/repos/mralexgray/Amethyst/git/tags{/sha}', + has_projects: true, + releases_url: + 'https://api.github.com/repos/mralexgray/Amethyst/releases{/id}', + statuses_url: + 'https://api.github.com/repos/mralexgray/Amethyst/statuses/{sha}', + allow_forking: true, + assignees_url: + 'https://api.github.com/repos/mralexgray/Amethyst/assignees{/user}', + downloads_url: 'https://api.github.com/repos/mralexgray/Amethyst/downloads', + has_downloads: true, + languages_url: 'https://api.github.com/repos/mralexgray/Amethyst/languages', + default_branch: 'master', + milestones_url: + 'https://api.github.com/repos/mralexgray/Amethyst/milestones{/number}', + stargazers_url: + 'https://api.github.com/repos/mralexgray/Amethyst/stargazers', + watchers_count: 0, + deployments_url: + 'https://api.github.com/repos/mralexgray/Amethyst/deployments', + git_commits_url: + 'https://api.github.com/repos/mralexgray/Amethyst/git/commits{/sha}', + subscribers_url: + 'https://api.github.com/repos/mralexgray/Amethyst/subscribers', + contributors_url: + 'https://api.github.com/repos/mralexgray/Amethyst/contributors', + issue_events_url: + 'https://api.github.com/repos/mralexgray/Amethyst/issues/events{/number}', + stargazers_count: 0, + subscription_url: + 'https://api.github.com/repos/mralexgray/Amethyst/subscription', + collaborators_url: + 'https://api.github.com/repos/mralexgray/Amethyst/collaborators{/collaborator}', + issue_comment_url: + 'https://api.github.com/repos/mralexgray/Amethyst/issues/comments{/number}', + notifications_url: + 'https://api.github.com/repos/mralexgray/Amethyst/notifications{?since,all,participating}', + open_issues_count: 0, + web_commit_signoff_required: false, + }, + { + id: 3684286, + url: 'https://api.github.com/repos/mralexgray/Animated-Paths', + fork: true, + name: 'Animated-Paths', + size: 411, + forks: 0, + owner: { + id: 262517, + url: 'https://api.github.com/users/mralexgray', + type: 'User', + login: 'mralexgray', + node_id: 'MDQ6VXNlcjI2MjUxNw==', + html_url: 'https://github.com/mralexgray', + gists_url: 'https://api.github.com/users/mralexgray/gists{/gist_id}', + repos_url: 'https://api.github.com/users/mralexgray/repos', + avatar_url: 'https://avatars.githubusercontent.com/u/262517?v=4', + events_url: 'https://api.github.com/users/mralexgray/events{/privacy}', + site_admin: false, + gravatar_id: '', + starred_url: + 'https://api.github.com/users/mralexgray/starred{/owner}{/repo}', + followers_url: 'https://api.github.com/users/mralexgray/followers', + following_url: + 'https://api.github.com/users/mralexgray/following{/other_user}', + organizations_url: 'https://api.github.com/users/mralexgray/orgs', + subscriptions_url: + 'https://api.github.com/users/mralexgray/subscriptions', + received_events_url: + 'https://api.github.com/users/mralexgray/received_events', + }, + topics: [], + git_url: 'git://github.com/mralexgray/Animated-Paths.git', + license: { + key: 'other', + url: null, + name: 'Other', + node_id: 'MDc6TGljZW5zZTA=', + spdx_id: 'NOASSERTION', + }, + node_id: 'MDEwOlJlcG9zaXRvcnkzNjg0Mjg2', + private: false, + ssh_url: 'git@github.com:mralexgray/Animated-Paths.git', + svn_url: 'https://github.com/mralexgray/Animated-Paths', + archived: false, + disabled: false, + has_wiki: true, + homepage: + 'http://oleb.net/blog/2010/12/animating-drawing-of-cgpath-with-cashapelayer/', + html_url: 'https://github.com/mralexgray/Animated-Paths', + keys_url: + 'https://api.github.com/repos/mralexgray/Animated-Paths/keys{/key_id}', + language: 'Objective-C', + tags_url: 'https://api.github.com/repos/mralexgray/Animated-Paths/tags', + watchers: 2, + blobs_url: + 'https://api.github.com/repos/mralexgray/Animated-Paths/git/blobs{/sha}', + clone_url: 'https://github.com/mralexgray/Animated-Paths.git', + forks_url: 'https://api.github.com/repos/mralexgray/Animated-Paths/forks', + full_name: 'mralexgray/Animated-Paths', + has_pages: false, + hooks_url: 'https://api.github.com/repos/mralexgray/Animated-Paths/hooks', + pulls_url: + 'https://api.github.com/repos/mralexgray/Animated-Paths/pulls{/number}', + pushed_at: '2010-12-30T20:56:51Z', + teams_url: 'https://api.github.com/repos/mralexgray/Animated-Paths/teams', + trees_url: + 'https://api.github.com/repos/mralexgray/Animated-Paths/git/trees{/sha}', + created_at: '2012-03-11T02:56:38Z', + events_url: 'https://api.github.com/repos/mralexgray/Animated-Paths/events', + has_issues: false, + issues_url: + 'https://api.github.com/repos/mralexgray/Animated-Paths/issues{/number}', + labels_url: + 'https://api.github.com/repos/mralexgray/Animated-Paths/labels{/name}', + merges_url: 'https://api.github.com/repos/mralexgray/Animated-Paths/merges', + mirror_url: null, + updated_at: '2013-01-08T04:12:21Z', + visibility: 'public', + archive_url: + 'https://api.github.com/repos/mralexgray/Animated-Paths/{archive_format}{/ref}', + commits_url: + 'https://api.github.com/repos/mralexgray/Animated-Paths/commits{/sha}', + compare_url: + 'https://api.github.com/repos/mralexgray/Animated-Paths/compare/{base}...{head}', + description: + 'Demo project: Animating the drawing of a CGPath with CAShapeLayer.strokeEnd', + forks_count: 0, + is_template: false, + open_issues: 0, + branches_url: + 'https://api.github.com/repos/mralexgray/Animated-Paths/branches{/branch}', + comments_url: + 'https://api.github.com/repos/mralexgray/Animated-Paths/comments{/number}', + contents_url: + 'https://api.github.com/repos/mralexgray/Animated-Paths/contents/{+path}', + git_refs_url: + 'https://api.github.com/repos/mralexgray/Animated-Paths/git/refs{/sha}', + git_tags_url: + 'https://api.github.com/repos/mralexgray/Animated-Paths/git/tags{/sha}', + has_projects: true, + releases_url: + 'https://api.github.com/repos/mralexgray/Animated-Paths/releases{/id}', + statuses_url: + 'https://api.github.com/repos/mralexgray/Animated-Paths/statuses/{sha}', + allow_forking: true, + assignees_url: + 'https://api.github.com/repos/mralexgray/Animated-Paths/assignees{/user}', + downloads_url: + 'https://api.github.com/repos/mralexgray/Animated-Paths/downloads', + has_downloads: true, + languages_url: + 'https://api.github.com/repos/mralexgray/Animated-Paths/languages', + default_branch: 'master', + milestones_url: + 'https://api.github.com/repos/mralexgray/Animated-Paths/milestones{/number}', + stargazers_url: + 'https://api.github.com/repos/mralexgray/Animated-Paths/stargazers', + watchers_count: 2, + deployments_url: + 'https://api.github.com/repos/mralexgray/Animated-Paths/deployments', + git_commits_url: + 'https://api.github.com/repos/mralexgray/Animated-Paths/git/commits{/sha}', + subscribers_url: + 'https://api.github.com/repos/mralexgray/Animated-Paths/subscribers', + contributors_url: + 'https://api.github.com/repos/mralexgray/Animated-Paths/contributors', + issue_events_url: + 'https://api.github.com/repos/mralexgray/Animated-Paths/issues/events{/number}', + stargazers_count: 2, + subscription_url: + 'https://api.github.com/repos/mralexgray/Animated-Paths/subscription', + collaborators_url: + 'https://api.github.com/repos/mralexgray/Animated-Paths/collaborators{/collaborator}', + issue_comment_url: + 'https://api.github.com/repos/mralexgray/Animated-Paths/issues/comments{/number}', + notifications_url: + 'https://api.github.com/repos/mralexgray/Animated-Paths/notifications{?since,all,participating}', + open_issues_count: 0, + web_commit_signoff_required: false, + }, + { + id: 16662874, + url: 'https://api.github.com/repos/mralexgray/AnsiLove.framework', + fork: true, + name: 'AnsiLove.framework', + size: 3780, + forks: 0, + owner: { + id: 262517, + url: 'https://api.github.com/users/mralexgray', + type: 'User', + login: 'mralexgray', + node_id: 'MDQ6VXNlcjI2MjUxNw==', + html_url: 'https://github.com/mralexgray', + gists_url: 'https://api.github.com/users/mralexgray/gists{/gist_id}', + repos_url: 'https://api.github.com/users/mralexgray/repos', + avatar_url: 'https://avatars.githubusercontent.com/u/262517?v=4', + events_url: 'https://api.github.com/users/mralexgray/events{/privacy}', + site_admin: false, + gravatar_id: '', + starred_url: + 'https://api.github.com/users/mralexgray/starred{/owner}{/repo}', + followers_url: 'https://api.github.com/users/mralexgray/followers', + following_url: + 'https://api.github.com/users/mralexgray/following{/other_user}', + organizations_url: 'https://api.github.com/users/mralexgray/orgs', + subscriptions_url: + 'https://api.github.com/users/mralexgray/subscriptions', + received_events_url: + 'https://api.github.com/users/mralexgray/received_events', + }, + topics: [], + git_url: 'git://github.com/mralexgray/AnsiLove.framework.git', + license: { + key: 'other', + url: null, + name: 'Other', + node_id: 'MDc6TGljZW5zZTA=', + spdx_id: 'NOASSERTION', + }, + node_id: 'MDEwOlJlcG9zaXRvcnkxNjY2Mjg3NA==', + private: false, + ssh_url: 'git@github.com:mralexgray/AnsiLove.framework.git', + svn_url: 'https://github.com/mralexgray/AnsiLove.framework', + archived: false, + disabled: false, + has_wiki: false, + homepage: 'http://byteproject.net', + html_url: 'https://github.com/mralexgray/AnsiLove.framework', + keys_url: + 'https://api.github.com/repos/mralexgray/AnsiLove.framework/keys{/key_id}', + language: 'M', + tags_url: 'https://api.github.com/repos/mralexgray/AnsiLove.framework/tags', + watchers: 0, + blobs_url: + 'https://api.github.com/repos/mralexgray/AnsiLove.framework/git/blobs{/sha}', + clone_url: 'https://github.com/mralexgray/AnsiLove.framework.git', + forks_url: + 'https://api.github.com/repos/mralexgray/AnsiLove.framework/forks', + full_name: 'mralexgray/AnsiLove.framework', + has_pages: false, + hooks_url: + 'https://api.github.com/repos/mralexgray/AnsiLove.framework/hooks', + pulls_url: + 'https://api.github.com/repos/mralexgray/AnsiLove.framework/pulls{/number}', + pushed_at: '2013-10-04T14:08:38Z', + teams_url: + 'https://api.github.com/repos/mralexgray/AnsiLove.framework/teams', + trees_url: + 'https://api.github.com/repos/mralexgray/AnsiLove.framework/git/trees{/sha}', + created_at: '2014-02-09T08:30:27Z', + events_url: + 'https://api.github.com/repos/mralexgray/AnsiLove.framework/events', + has_issues: false, + issues_url: + 'https://api.github.com/repos/mralexgray/AnsiLove.framework/issues{/number}', + labels_url: + 'https://api.github.com/repos/mralexgray/AnsiLove.framework/labels{/name}', + merges_url: + 'https://api.github.com/repos/mralexgray/AnsiLove.framework/merges', + mirror_url: null, + updated_at: '2015-01-13T20:41:46Z', + visibility: 'public', + archive_url: + 'https://api.github.com/repos/mralexgray/AnsiLove.framework/{archive_format}{/ref}', + commits_url: + 'https://api.github.com/repos/mralexgray/AnsiLove.framework/commits{/sha}', + compare_url: + 'https://api.github.com/repos/mralexgray/AnsiLove.framework/compare/{base}...{head}', + description: 'Cocoa Framework for rendering ANSi / ASCII art', + forks_count: 0, + is_template: false, + open_issues: 0, + branches_url: + 'https://api.github.com/repos/mralexgray/AnsiLove.framework/branches{/branch}', + comments_url: + 'https://api.github.com/repos/mralexgray/AnsiLove.framework/comments{/number}', + contents_url: + 'https://api.github.com/repos/mralexgray/AnsiLove.framework/contents/{+path}', + git_refs_url: + 'https://api.github.com/repos/mralexgray/AnsiLove.framework/git/refs{/sha}', + git_tags_url: + 'https://api.github.com/repos/mralexgray/AnsiLove.framework/git/tags{/sha}', + has_projects: true, + releases_url: + 'https://api.github.com/repos/mralexgray/AnsiLove.framework/releases{/id}', + statuses_url: + 'https://api.github.com/repos/mralexgray/AnsiLove.framework/statuses/{sha}', + allow_forking: true, + assignees_url: + 'https://api.github.com/repos/mralexgray/AnsiLove.framework/assignees{/user}', + downloads_url: + 'https://api.github.com/repos/mralexgray/AnsiLove.framework/downloads', + has_downloads: true, + languages_url: + 'https://api.github.com/repos/mralexgray/AnsiLove.framework/languages', + default_branch: 'master', + milestones_url: + 'https://api.github.com/repos/mralexgray/AnsiLove.framework/milestones{/number}', + stargazers_url: + 'https://api.github.com/repos/mralexgray/AnsiLove.framework/stargazers', + watchers_count: 0, + deployments_url: + 'https://api.github.com/repos/mralexgray/AnsiLove.framework/deployments', + git_commits_url: + 'https://api.github.com/repos/mralexgray/AnsiLove.framework/git/commits{/sha}', + subscribers_url: + 'https://api.github.com/repos/mralexgray/AnsiLove.framework/subscribers', + contributors_url: + 'https://api.github.com/repos/mralexgray/AnsiLove.framework/contributors', + issue_events_url: + 'https://api.github.com/repos/mralexgray/AnsiLove.framework/issues/events{/number}', + stargazers_count: 0, + subscription_url: + 'https://api.github.com/repos/mralexgray/AnsiLove.framework/subscription', + collaborators_url: + 'https://api.github.com/repos/mralexgray/AnsiLove.framework/collaborators{/collaborator}', + issue_comment_url: + 'https://api.github.com/repos/mralexgray/AnsiLove.framework/issues/comments{/number}', + notifications_url: + 'https://api.github.com/repos/mralexgray/AnsiLove.framework/notifications{?since,all,participating}', + open_issues_count: 0, + web_commit_signoff_required: false, + }, + { + id: 5189563, + url: 'https://api.github.com/repos/mralexgray/ANTrackBar', + fork: true, + name: 'ANTrackBar', + size: 94, + forks: 0, + owner: { + id: 262517, + url: 'https://api.github.com/users/mralexgray', + type: 'User', + login: 'mralexgray', + node_id: 'MDQ6VXNlcjI2MjUxNw==', + html_url: 'https://github.com/mralexgray', + gists_url: 'https://api.github.com/users/mralexgray/gists{/gist_id}', + repos_url: 'https://api.github.com/users/mralexgray/repos', + avatar_url: 'https://avatars.githubusercontent.com/u/262517?v=4', + events_url: 'https://api.github.com/users/mralexgray/events{/privacy}', + site_admin: false, + gravatar_id: '', + starred_url: + 'https://api.github.com/users/mralexgray/starred{/owner}{/repo}', + followers_url: 'https://api.github.com/users/mralexgray/followers', + following_url: + 'https://api.github.com/users/mralexgray/following{/other_user}', + organizations_url: 'https://api.github.com/users/mralexgray/orgs', + subscriptions_url: + 'https://api.github.com/users/mralexgray/subscriptions', + received_events_url: + 'https://api.github.com/users/mralexgray/received_events', + }, + topics: [], + git_url: 'git://github.com/mralexgray/ANTrackBar.git', + license: null, + node_id: 'MDEwOlJlcG9zaXRvcnk1MTg5NTYz', + private: false, + ssh_url: 'git@github.com:mralexgray/ANTrackBar.git', + svn_url: 'https://github.com/mralexgray/ANTrackBar', + archived: false, + disabled: false, + has_wiki: true, + homepage: '', + html_url: 'https://github.com/mralexgray/ANTrackBar', + keys_url: + 'https://api.github.com/repos/mralexgray/ANTrackBar/keys{/key_id}', + language: 'Objective-C', + tags_url: 'https://api.github.com/repos/mralexgray/ANTrackBar/tags', + watchers: 2, + blobs_url: + 'https://api.github.com/repos/mralexgray/ANTrackBar/git/blobs{/sha}', + clone_url: 'https://github.com/mralexgray/ANTrackBar.git', + forks_url: 'https://api.github.com/repos/mralexgray/ANTrackBar/forks', + full_name: 'mralexgray/ANTrackBar', + has_pages: false, + hooks_url: 'https://api.github.com/repos/mralexgray/ANTrackBar/hooks', + pulls_url: + 'https://api.github.com/repos/mralexgray/ANTrackBar/pulls{/number}', + pushed_at: '2012-03-09T01:40:02Z', + teams_url: 'https://api.github.com/repos/mralexgray/ANTrackBar/teams', + trees_url: + 'https://api.github.com/repos/mralexgray/ANTrackBar/git/trees{/sha}', + created_at: '2012-07-26T08:17:22Z', + events_url: 'https://api.github.com/repos/mralexgray/ANTrackBar/events', + has_issues: false, + issues_url: + 'https://api.github.com/repos/mralexgray/ANTrackBar/issues{/number}', + labels_url: + 'https://api.github.com/repos/mralexgray/ANTrackBar/labels{/name}', + merges_url: 'https://api.github.com/repos/mralexgray/ANTrackBar/merges', + mirror_url: null, + updated_at: '2013-01-11T10:29:56Z', + visibility: 'public', + archive_url: + 'https://api.github.com/repos/mralexgray/ANTrackBar/{archive_format}{/ref}', + commits_url: + 'https://api.github.com/repos/mralexgray/ANTrackBar/commits{/sha}', + compare_url: + 'https://api.github.com/repos/mralexgray/ANTrackBar/compare/{base}...{head}', + description: 'An easy-to-use Cocoa seek bar with a pleasing appearance', + forks_count: 0, + is_template: false, + open_issues: 0, + branches_url: + 'https://api.github.com/repos/mralexgray/ANTrackBar/branches{/branch}', + comments_url: + 'https://api.github.com/repos/mralexgray/ANTrackBar/comments{/number}', + contents_url: + 'https://api.github.com/repos/mralexgray/ANTrackBar/contents/{+path}', + git_refs_url: + 'https://api.github.com/repos/mralexgray/ANTrackBar/git/refs{/sha}', + git_tags_url: + 'https://api.github.com/repos/mralexgray/ANTrackBar/git/tags{/sha}', + has_projects: true, + releases_url: + 'https://api.github.com/repos/mralexgray/ANTrackBar/releases{/id}', + statuses_url: + 'https://api.github.com/repos/mralexgray/ANTrackBar/statuses/{sha}', + allow_forking: true, + assignees_url: + 'https://api.github.com/repos/mralexgray/ANTrackBar/assignees{/user}', + downloads_url: + 'https://api.github.com/repos/mralexgray/ANTrackBar/downloads', + has_downloads: true, + languages_url: + 'https://api.github.com/repos/mralexgray/ANTrackBar/languages', + default_branch: 'master', + milestones_url: + 'https://api.github.com/repos/mralexgray/ANTrackBar/milestones{/number}', + stargazers_url: + 'https://api.github.com/repos/mralexgray/ANTrackBar/stargazers', + watchers_count: 2, + deployments_url: + 'https://api.github.com/repos/mralexgray/ANTrackBar/deployments', + git_commits_url: + 'https://api.github.com/repos/mralexgray/ANTrackBar/git/commits{/sha}', + subscribers_url: + 'https://api.github.com/repos/mralexgray/ANTrackBar/subscribers', + contributors_url: + 'https://api.github.com/repos/mralexgray/ANTrackBar/contributors', + issue_events_url: + 'https://api.github.com/repos/mralexgray/ANTrackBar/issues/events{/number}', + stargazers_count: 2, + subscription_url: + 'https://api.github.com/repos/mralexgray/ANTrackBar/subscription', + collaborators_url: + 'https://api.github.com/repos/mralexgray/ANTrackBar/collaborators{/collaborator}', + issue_comment_url: + 'https://api.github.com/repos/mralexgray/ANTrackBar/issues/comments{/number}', + notifications_url: + 'https://api.github.com/repos/mralexgray/ANTrackBar/notifications{?since,all,participating}', + open_issues_count: 0, + web_commit_signoff_required: false, + }, + { + id: 16240152, + url: 'https://api.github.com/repos/mralexgray/AOP-in-Objective-C', + fork: true, + name: 'AOP-in-Objective-C', + size: 340, + forks: 1, + owner: { + id: 262517, + url: 'https://api.github.com/users/mralexgray', + type: 'User', + login: 'mralexgray', + node_id: 'MDQ6VXNlcjI2MjUxNw==', + html_url: 'https://github.com/mralexgray', + gists_url: 'https://api.github.com/users/mralexgray/gists{/gist_id}', + repos_url: 'https://api.github.com/users/mralexgray/repos', + avatar_url: 'https://avatars.githubusercontent.com/u/262517?v=4', + events_url: 'https://api.github.com/users/mralexgray/events{/privacy}', + site_admin: false, + gravatar_id: '', + starred_url: + 'https://api.github.com/users/mralexgray/starred{/owner}{/repo}', + followers_url: 'https://api.github.com/users/mralexgray/followers', + following_url: + 'https://api.github.com/users/mralexgray/following{/other_user}', + organizations_url: 'https://api.github.com/users/mralexgray/orgs', + subscriptions_url: + 'https://api.github.com/users/mralexgray/subscriptions', + received_events_url: + 'https://api.github.com/users/mralexgray/received_events', + }, + topics: [], + git_url: 'git://github.com/mralexgray/AOP-in-Objective-C.git', + license: null, + node_id: 'MDEwOlJlcG9zaXRvcnkxNjI0MDE1Mg==', + private: false, + ssh_url: 'git@github.com:mralexgray/AOP-in-Objective-C.git', + svn_url: 'https://github.com/mralexgray/AOP-in-Objective-C', + archived: false, + disabled: false, + has_wiki: true, + homepage: 'http://innoli.hu/en/opensource/', + html_url: 'https://github.com/mralexgray/AOP-in-Objective-C', + keys_url: + 'https://api.github.com/repos/mralexgray/AOP-in-Objective-C/keys{/key_id}', + language: 'Objective-C', + tags_url: 'https://api.github.com/repos/mralexgray/AOP-in-Objective-C/tags', + watchers: 0, + blobs_url: + 'https://api.github.com/repos/mralexgray/AOP-in-Objective-C/git/blobs{/sha}', + clone_url: 'https://github.com/mralexgray/AOP-in-Objective-C.git', + forks_url: + 'https://api.github.com/repos/mralexgray/AOP-in-Objective-C/forks', + full_name: 'mralexgray/AOP-in-Objective-C', + has_pages: false, + hooks_url: + 'https://api.github.com/repos/mralexgray/AOP-in-Objective-C/hooks', + pulls_url: + 'https://api.github.com/repos/mralexgray/AOP-in-Objective-C/pulls{/number}', + pushed_at: '2014-02-12T16:23:20Z', + teams_url: + 'https://api.github.com/repos/mralexgray/AOP-in-Objective-C/teams', + trees_url: + 'https://api.github.com/repos/mralexgray/AOP-in-Objective-C/git/trees{/sha}', + created_at: '2014-01-25T21:18:04Z', + events_url: + 'https://api.github.com/repos/mralexgray/AOP-in-Objective-C/events', + has_issues: false, + issues_url: + 'https://api.github.com/repos/mralexgray/AOP-in-Objective-C/issues{/number}', + labels_url: + 'https://api.github.com/repos/mralexgray/AOP-in-Objective-C/labels{/name}', + merges_url: + 'https://api.github.com/repos/mralexgray/AOP-in-Objective-C/merges', + mirror_url: null, + updated_at: '2014-06-19T19:38:12Z', + visibility: 'public', + archive_url: + 'https://api.github.com/repos/mralexgray/AOP-in-Objective-C/{archive_format}{/ref}', + commits_url: + 'https://api.github.com/repos/mralexgray/AOP-in-Objective-C/commits{/sha}', + compare_url: + 'https://api.github.com/repos/mralexgray/AOP-in-Objective-C/compare/{base}...{head}', + description: + 'An NSProxy based library for easily enabling AOP like functionality in Objective-C.', + forks_count: 1, + is_template: false, + open_issues: 0, + branches_url: + 'https://api.github.com/repos/mralexgray/AOP-in-Objective-C/branches{/branch}', + comments_url: + 'https://api.github.com/repos/mralexgray/AOP-in-Objective-C/comments{/number}', + contents_url: + 'https://api.github.com/repos/mralexgray/AOP-in-Objective-C/contents/{+path}', + git_refs_url: + 'https://api.github.com/repos/mralexgray/AOP-in-Objective-C/git/refs{/sha}', + git_tags_url: + 'https://api.github.com/repos/mralexgray/AOP-in-Objective-C/git/tags{/sha}', + has_projects: true, + releases_url: + 'https://api.github.com/repos/mralexgray/AOP-in-Objective-C/releases{/id}', + statuses_url: + 'https://api.github.com/repos/mralexgray/AOP-in-Objective-C/statuses/{sha}', + allow_forking: true, + assignees_url: + 'https://api.github.com/repos/mralexgray/AOP-in-Objective-C/assignees{/user}', + downloads_url: + 'https://api.github.com/repos/mralexgray/AOP-in-Objective-C/downloads', + has_downloads: true, + languages_url: + 'https://api.github.com/repos/mralexgray/AOP-in-Objective-C/languages', + default_branch: 'travis-coveralls', + milestones_url: + 'https://api.github.com/repos/mralexgray/AOP-in-Objective-C/milestones{/number}', + stargazers_url: + 'https://api.github.com/repos/mralexgray/AOP-in-Objective-C/stargazers', + watchers_count: 0, + deployments_url: + 'https://api.github.com/repos/mralexgray/AOP-in-Objective-C/deployments', + git_commits_url: + 'https://api.github.com/repos/mralexgray/AOP-in-Objective-C/git/commits{/sha}', + subscribers_url: + 'https://api.github.com/repos/mralexgray/AOP-in-Objective-C/subscribers', + contributors_url: + 'https://api.github.com/repos/mralexgray/AOP-in-Objective-C/contributors', + issue_events_url: + 'https://api.github.com/repos/mralexgray/AOP-in-Objective-C/issues/events{/number}', + stargazers_count: 0, + subscription_url: + 'https://api.github.com/repos/mralexgray/AOP-in-Objective-C/subscription', + collaborators_url: + 'https://api.github.com/repos/mralexgray/AOP-in-Objective-C/collaborators{/collaborator}', + issue_comment_url: + 'https://api.github.com/repos/mralexgray/AOP-in-Objective-C/issues/comments{/number}', + notifications_url: + 'https://api.github.com/repos/mralexgray/AOP-in-Objective-C/notifications{?since,all,participating}', + open_issues_count: 0, + web_commit_signoff_required: false, + }, + { + id: 13141936, + url: 'https://api.github.com/repos/mralexgray/Apaxy', + fork: true, + name: 'Apaxy', + size: 113, + forks: 0, + owner: { + id: 262517, + url: 'https://api.github.com/users/mralexgray', + type: 'User', + login: 'mralexgray', + node_id: 'MDQ6VXNlcjI2MjUxNw==', + html_url: 'https://github.com/mralexgray', + gists_url: 'https://api.github.com/users/mralexgray/gists{/gist_id}', + repos_url: 'https://api.github.com/users/mralexgray/repos', + avatar_url: 'https://avatars.githubusercontent.com/u/262517?v=4', + events_url: 'https://api.github.com/users/mralexgray/events{/privacy}', + site_admin: false, + gravatar_id: '', + starred_url: + 'https://api.github.com/users/mralexgray/starred{/owner}{/repo}', + followers_url: 'https://api.github.com/users/mralexgray/followers', + following_url: + 'https://api.github.com/users/mralexgray/following{/other_user}', + organizations_url: 'https://api.github.com/users/mralexgray/orgs', + subscriptions_url: + 'https://api.github.com/users/mralexgray/subscriptions', + received_events_url: + 'https://api.github.com/users/mralexgray/received_events', + }, + topics: [], + git_url: 'git://github.com/mralexgray/Apaxy.git', + license: { + key: 'unlicense', + url: 'https://api.github.com/licenses/unlicense', + name: 'The Unlicense', + node_id: 'MDc6TGljZW5zZTE1', + spdx_id: 'Unlicense', + }, + node_id: 'MDEwOlJlcG9zaXRvcnkxMzE0MTkzNg==', + private: false, + ssh_url: 'git@github.com:mralexgray/Apaxy.git', + svn_url: 'https://github.com/mralexgray/Apaxy', + archived: false, + disabled: false, + has_wiki: true, + homepage: null, + html_url: 'https://github.com/mralexgray/Apaxy', + keys_url: 'https://api.github.com/repos/mralexgray/Apaxy/keys{/key_id}', + language: 'CSS', + tags_url: 'https://api.github.com/repos/mralexgray/Apaxy/tags', + watchers: 0, + blobs_url: 'https://api.github.com/repos/mralexgray/Apaxy/git/blobs{/sha}', + clone_url: 'https://github.com/mralexgray/Apaxy.git', + forks_url: 'https://api.github.com/repos/mralexgray/Apaxy/forks', + full_name: 'mralexgray/Apaxy', + has_pages: false, + hooks_url: 'https://api.github.com/repos/mralexgray/Apaxy/hooks', + pulls_url: 'https://api.github.com/repos/mralexgray/Apaxy/pulls{/number}', + pushed_at: '2013-08-02T16:01:32Z', + teams_url: 'https://api.github.com/repos/mralexgray/Apaxy/teams', + trees_url: 'https://api.github.com/repos/mralexgray/Apaxy/git/trees{/sha}', + created_at: '2013-09-27T05:05:35Z', + events_url: 'https://api.github.com/repos/mralexgray/Apaxy/events', + has_issues: false, + issues_url: 'https://api.github.com/repos/mralexgray/Apaxy/issues{/number}', + labels_url: 'https://api.github.com/repos/mralexgray/Apaxy/labels{/name}', + merges_url: 'https://api.github.com/repos/mralexgray/Apaxy/merges', + mirror_url: null, + updated_at: '2018-02-16T21:40:24Z', + visibility: 'public', + archive_url: + 'https://api.github.com/repos/mralexgray/Apaxy/{archive_format}{/ref}', + commits_url: 'https://api.github.com/repos/mralexgray/Apaxy/commits{/sha}', + compare_url: + 'https://api.github.com/repos/mralexgray/Apaxy/compare/{base}...{head}', + description: + 'A simple, customisable theme for your Apache directory listing.', + forks_count: 0, + is_template: false, + open_issues: 0, + branches_url: + 'https://api.github.com/repos/mralexgray/Apaxy/branches{/branch}', + comments_url: + 'https://api.github.com/repos/mralexgray/Apaxy/comments{/number}', + contents_url: + 'https://api.github.com/repos/mralexgray/Apaxy/contents/{+path}', + git_refs_url: + 'https://api.github.com/repos/mralexgray/Apaxy/git/refs{/sha}', + git_tags_url: + 'https://api.github.com/repos/mralexgray/Apaxy/git/tags{/sha}', + has_projects: true, + releases_url: 'https://api.github.com/repos/mralexgray/Apaxy/releases{/id}', + statuses_url: + 'https://api.github.com/repos/mralexgray/Apaxy/statuses/{sha}', + allow_forking: true, + assignees_url: + 'https://api.github.com/repos/mralexgray/Apaxy/assignees{/user}', + downloads_url: 'https://api.github.com/repos/mralexgray/Apaxy/downloads', + has_downloads: true, + languages_url: 'https://api.github.com/repos/mralexgray/Apaxy/languages', + default_branch: 'master', + milestones_url: + 'https://api.github.com/repos/mralexgray/Apaxy/milestones{/number}', + stargazers_url: 'https://api.github.com/repos/mralexgray/Apaxy/stargazers', + watchers_count: 0, + deployments_url: + 'https://api.github.com/repos/mralexgray/Apaxy/deployments', + git_commits_url: + 'https://api.github.com/repos/mralexgray/Apaxy/git/commits{/sha}', + subscribers_url: + 'https://api.github.com/repos/mralexgray/Apaxy/subscribers', + contributors_url: + 'https://api.github.com/repos/mralexgray/Apaxy/contributors', + issue_events_url: + 'https://api.github.com/repos/mralexgray/Apaxy/issues/events{/number}', + stargazers_count: 0, + subscription_url: + 'https://api.github.com/repos/mralexgray/Apaxy/subscription', + collaborators_url: + 'https://api.github.com/repos/mralexgray/Apaxy/collaborators{/collaborator}', + issue_comment_url: + 'https://api.github.com/repos/mralexgray/Apaxy/issues/comments{/number}', + notifications_url: + 'https://api.github.com/repos/mralexgray/Apaxy/notifications{?since,all,participating}', + open_issues_count: 0, + web_commit_signoff_required: false, + }, + { + id: 20027360, + url: 'https://api.github.com/repos/mralexgray/app', + fork: true, + name: 'app', + size: 1890, + forks: 0, + owner: { + id: 262517, + url: 'https://api.github.com/users/mralexgray', + type: 'User', + login: 'mralexgray', + node_id: 'MDQ6VXNlcjI2MjUxNw==', + html_url: 'https://github.com/mralexgray', + gists_url: 'https://api.github.com/users/mralexgray/gists{/gist_id}', + repos_url: 'https://api.github.com/users/mralexgray/repos', + avatar_url: 'https://avatars.githubusercontent.com/u/262517?v=4', + events_url: 'https://api.github.com/users/mralexgray/events{/privacy}', + site_admin: false, + gravatar_id: '', + starred_url: + 'https://api.github.com/users/mralexgray/starred{/owner}{/repo}', + followers_url: 'https://api.github.com/users/mralexgray/followers', + following_url: + 'https://api.github.com/users/mralexgray/following{/other_user}', + organizations_url: 'https://api.github.com/users/mralexgray/orgs', + subscriptions_url: + 'https://api.github.com/users/mralexgray/subscriptions', + received_events_url: + 'https://api.github.com/users/mralexgray/received_events', + }, + topics: [], + git_url: 'git://github.com/mralexgray/app.git', + license: { + key: 'other', + url: null, + name: 'Other', + node_id: 'MDc6TGljZW5zZTA=', + spdx_id: 'NOASSERTION', + }, + node_id: 'MDEwOlJlcG9zaXRvcnkyMDAyNzM2MA==', + private: false, + ssh_url: 'git@github.com:mralexgray/app.git', + svn_url: 'https://github.com/mralexgray/app', + archived: false, + disabled: false, + has_wiki: true, + homepage: null, + html_url: 'https://github.com/mralexgray/app', + keys_url: 'https://api.github.com/repos/mralexgray/app/keys{/key_id}', + language: 'JavaScript', + tags_url: 'https://api.github.com/repos/mralexgray/app/tags', + watchers: 0, + blobs_url: 'https://api.github.com/repos/mralexgray/app/git/blobs{/sha}', + clone_url: 'https://github.com/mralexgray/app.git', + forks_url: 'https://api.github.com/repos/mralexgray/app/forks', + full_name: 'mralexgray/app', + has_pages: false, + hooks_url: 'https://api.github.com/repos/mralexgray/app/hooks', + pulls_url: 'https://api.github.com/repos/mralexgray/app/pulls{/number}', + pushed_at: '2014-05-20T19:51:38Z', + teams_url: 'https://api.github.com/repos/mralexgray/app/teams', + trees_url: 'https://api.github.com/repos/mralexgray/app/git/trees{/sha}', + created_at: '2014-05-21T15:54:20Z', + events_url: 'https://api.github.com/repos/mralexgray/app/events', + has_issues: false, + issues_url: 'https://api.github.com/repos/mralexgray/app/issues{/number}', + labels_url: 'https://api.github.com/repos/mralexgray/app/labels{/name}', + merges_url: 'https://api.github.com/repos/mralexgray/app/merges', + mirror_url: null, + updated_at: '2014-05-21T15:54:22Z', + visibility: 'public', + archive_url: + 'https://api.github.com/repos/mralexgray/app/{archive_format}{/ref}', + commits_url: 'https://api.github.com/repos/mralexgray/app/commits{/sha}', + compare_url: + 'https://api.github.com/repos/mralexgray/app/compare/{base}...{head}', + description: 'Instant mobile web app creation', + forks_count: 0, + is_template: false, + open_issues: 0, + branches_url: + 'https://api.github.com/repos/mralexgray/app/branches{/branch}', + comments_url: + 'https://api.github.com/repos/mralexgray/app/comments{/number}', + contents_url: + 'https://api.github.com/repos/mralexgray/app/contents/{+path}', + git_refs_url: 'https://api.github.com/repos/mralexgray/app/git/refs{/sha}', + git_tags_url: 'https://api.github.com/repos/mralexgray/app/git/tags{/sha}', + has_projects: true, + releases_url: 'https://api.github.com/repos/mralexgray/app/releases{/id}', + statuses_url: 'https://api.github.com/repos/mralexgray/app/statuses/{sha}', + allow_forking: true, + assignees_url: + 'https://api.github.com/repos/mralexgray/app/assignees{/user}', + downloads_url: 'https://api.github.com/repos/mralexgray/app/downloads', + has_downloads: true, + languages_url: 'https://api.github.com/repos/mralexgray/app/languages', + default_branch: 'master', + milestones_url: + 'https://api.github.com/repos/mralexgray/app/milestones{/number}', + stargazers_url: 'https://api.github.com/repos/mralexgray/app/stargazers', + watchers_count: 0, + deployments_url: 'https://api.github.com/repos/mralexgray/app/deployments', + git_commits_url: + 'https://api.github.com/repos/mralexgray/app/git/commits{/sha}', + subscribers_url: 'https://api.github.com/repos/mralexgray/app/subscribers', + contributors_url: + 'https://api.github.com/repos/mralexgray/app/contributors', + issue_events_url: + 'https://api.github.com/repos/mralexgray/app/issues/events{/number}', + stargazers_count: 0, + subscription_url: + 'https://api.github.com/repos/mralexgray/app/subscription', + collaborators_url: + 'https://api.github.com/repos/mralexgray/app/collaborators{/collaborator}', + issue_comment_url: + 'https://api.github.com/repos/mralexgray/app/issues/comments{/number}', + notifications_url: + 'https://api.github.com/repos/mralexgray/app/notifications{?since,all,participating}', + open_issues_count: 0, + web_commit_signoff_required: false, + }, + ], + trait1: 'new-val', + }, + library: { + name: 'http', + }, + }, + rudderId: 'daf823fb-e8d3-413a-8313-d34cd756f968', + messageId: 'c864b4cd-8f07-4922-b3d0-82ef04c987d3', + timestamp: '2020-02-02T00:23:09.544Z', + receivedAt: '2022-08-18T08:43:13.521+05:30', + request_ip: '[::1]', + anonymousId: 'anon-id-new', + originalTimestamp: '2022-08-18T08:43:15.539+05:30', + }, + metadata: { + userId: 'anon-id-new<<>>identified user id', + jobId: 31, + sourceId: '2DTlLPQxignYp4ag9sISgGN2uY7', + destinationId: '2DTozIMGtBwTGNJtuvdPByFSL2Z', + attemptNum: 0, + receivedAt: '2022-08-18T08:43:13.521+05:30', + createdAt: '2022-08-18T03:13:15.549Z', + firstAttemptedAt: '', + transformAt: 'router', + workspaceId: '2DTlBMipxWfJZzZ1SsjELQWvkwd', + secret: null, + jobsT: { + UUID: '47b3937a-1fef-49fa-85c8-649673bd7170', + JobID: 31, + UserID: 'anon-id-new<<>>identified user id', + CreatedAt: '2022-08-18T03:13:15.549078Z', + ExpireAt: '2022-08-18T03:13:15.549078Z', + CustomVal: 'LAMBDA', + EventCount: 1, + EventPayload: { + type: 'identify', + sentAt: '2022-08-18T08:43:15.539+05:30', + userId: 'identified user id', + context: { + ip: '14.5.67.21', + traits: { + data: [ + { + id: 6104546, + url: 'https://api.github.com/repos/mralexgray/-REPONAME', + fork: false, + name: '-REPONAME', + size: 48, + forks: 0, + owner: { + id: 262517, + url: 'https://api.github.com/users/mralexgray', + type: 'User', + login: 'mralexgray', + node_id: 'MDQ6VXNlcjI2MjUxNw==', + html_url: 'https://github.com/mralexgray', + gists_url: 'https://api.github.com/users/mralexgray/gists{/gist_id}', + repos_url: 'https://api.github.com/users/mralexgray/repos', + avatar_url: 'https://avatars.githubusercontent.com/u/262517?v=4', + events_url: + 'https://api.github.com/users/mralexgray/events{/privacy}', + site_admin: false, + gravatar_id: '', + starred_url: + 'https://api.github.com/users/mralexgray/starred{/owner}{/repo}', + followers_url: 'https://api.github.com/users/mralexgray/followers', + following_url: + 'https://api.github.com/users/mralexgray/following{/other_user}', + organizations_url: 'https://api.github.com/users/mralexgray/orgs', + subscriptions_url: + 'https://api.github.com/users/mralexgray/subscriptions', + received_events_url: + 'https://api.github.com/users/mralexgray/received_events', + }, + topics: [], + git_url: 'git://github.com/mralexgray/-REPONAME.git', + license: null, + node_id: 'MDEwOlJlcG9zaXRvcnk2MTA0NTQ2', + private: false, + ssh_url: 'git@github.com:mralexgray/-REPONAME.git', + svn_url: 'https://github.com/mralexgray/-REPONAME', + archived: false, + disabled: false, + has_wiki: true, + homepage: null, + html_url: 'https://github.com/mralexgray/-REPONAME', + keys_url: + 'https://api.github.com/repos/mralexgray/-REPONAME/keys{/key_id}', + language: null, + tags_url: 'https://api.github.com/repos/mralexgray/-REPONAME/tags', + watchers: 0, + blobs_url: + 'https://api.github.com/repos/mralexgray/-REPONAME/git/blobs{/sha}', + clone_url: 'https://github.com/mralexgray/-REPONAME.git', + forks_url: 'https://api.github.com/repos/mralexgray/-REPONAME/forks', + full_name: 'mralexgray/-REPONAME', + has_pages: false, + hooks_url: 'https://api.github.com/repos/mralexgray/-REPONAME/hooks', + pulls_url: + 'https://api.github.com/repos/mralexgray/-REPONAME/pulls{/number}', + pushed_at: '2012-10-06T16:37:39Z', + teams_url: 'https://api.github.com/repos/mralexgray/-REPONAME/teams', + trees_url: + 'https://api.github.com/repos/mralexgray/-REPONAME/git/trees{/sha}', + created_at: '2012-10-06T16:37:39Z', + events_url: 'https://api.github.com/repos/mralexgray/-REPONAME/events', + has_issues: true, + issues_url: + 'https://api.github.com/repos/mralexgray/-REPONAME/issues{/number}', + labels_url: + 'https://api.github.com/repos/mralexgray/-REPONAME/labels{/name}', + merges_url: 'https://api.github.com/repos/mralexgray/-REPONAME/merges', + mirror_url: null, + updated_at: '2013-01-12T13:39:30Z', + visibility: 'public', + archive_url: + 'https://api.github.com/repos/mralexgray/-REPONAME/{archive_format}{/ref}', + commits_url: + 'https://api.github.com/repos/mralexgray/-REPONAME/commits{/sha}', + compare_url: + 'https://api.github.com/repos/mralexgray/-REPONAME/compare/{base}...{head}', + description: null, + forks_count: 0, + is_template: false, + open_issues: 0, + branches_url: + 'https://api.github.com/repos/mralexgray/-REPONAME/branches{/branch}', + comments_url: + 'https://api.github.com/repos/mralexgray/-REPONAME/comments{/number}', + contents_url: + 'https://api.github.com/repos/mralexgray/-REPONAME/contents/{+path}', + git_refs_url: + 'https://api.github.com/repos/mralexgray/-REPONAME/git/refs{/sha}', + git_tags_url: + 'https://api.github.com/repos/mralexgray/-REPONAME/git/tags{/sha}', + has_projects: true, + releases_url: + 'https://api.github.com/repos/mralexgray/-REPONAME/releases{/id}', + statuses_url: + 'https://api.github.com/repos/mralexgray/-REPONAME/statuses/{sha}', + allow_forking: true, + assignees_url: + 'https://api.github.com/repos/mralexgray/-REPONAME/assignees{/user}', + downloads_url: + 'https://api.github.com/repos/mralexgray/-REPONAME/downloads', + has_downloads: true, + languages_url: + 'https://api.github.com/repos/mralexgray/-REPONAME/languages', + default_branch: 'master', + milestones_url: + 'https://api.github.com/repos/mralexgray/-REPONAME/milestones{/number}', + stargazers_url: + 'https://api.github.com/repos/mralexgray/-REPONAME/stargazers', + watchers_count: 0, + deployments_url: + 'https://api.github.com/repos/mralexgray/-REPONAME/deployments', + git_commits_url: + 'https://api.github.com/repos/mralexgray/-REPONAME/git/commits{/sha}', + subscribers_url: + 'https://api.github.com/repos/mralexgray/-REPONAME/subscribers', + contributors_url: + 'https://api.github.com/repos/mralexgray/-REPONAME/contributors', + issue_events_url: + 'https://api.github.com/repos/mralexgray/-REPONAME/issues/events{/number}', + stargazers_count: 0, + subscription_url: + 'https://api.github.com/repos/mralexgray/-REPONAME/subscription', + collaborators_url: + 'https://api.github.com/repos/mralexgray/-REPONAME/collaborators{/collaborator}', + issue_comment_url: + 'https://api.github.com/repos/mralexgray/-REPONAME/issues/comments{/number}', + notifications_url: + 'https://api.github.com/repos/mralexgray/-REPONAME/notifications{?since,all,participating}', + open_issues_count: 0, + web_commit_signoff_required: false, + }, + { + id: 104510411, + url: 'https://api.github.com/repos/mralexgray/...', + fork: true, + name: '...', + size: 113, + forks: 0, + owner: { + id: 262517, + url: 'https://api.github.com/users/mralexgray', + type: 'User', + login: 'mralexgray', + node_id: 'MDQ6VXNlcjI2MjUxNw==', + html_url: 'https://github.com/mralexgray', + gists_url: 'https://api.github.com/users/mralexgray/gists{/gist_id}', + repos_url: 'https://api.github.com/users/mralexgray/repos', + avatar_url: 'https://avatars.githubusercontent.com/u/262517?v=4', + events_url: + 'https://api.github.com/users/mralexgray/events{/privacy}', + site_admin: false, + gravatar_id: '', + starred_url: + 'https://api.github.com/users/mralexgray/starred{/owner}{/repo}', + followers_url: 'https://api.github.com/users/mralexgray/followers', + following_url: + 'https://api.github.com/users/mralexgray/following{/other_user}', + organizations_url: 'https://api.github.com/users/mralexgray/orgs', + subscriptions_url: + 'https://api.github.com/users/mralexgray/subscriptions', + received_events_url: + 'https://api.github.com/users/mralexgray/received_events', + }, + topics: [], + git_url: 'git://github.com/mralexgray/....git', + license: { + key: 'mit', + url: 'https://api.github.com/licenses/mit', + name: 'MIT License', + node_id: 'MDc6TGljZW5zZTEz', + spdx_id: 'MIT', + }, + node_id: 'MDEwOlJlcG9zaXRvcnkxMDQ1MTA0MTE=', + private: false, + ssh_url: 'git@github.com:mralexgray/....git', + svn_url: 'https://github.com/mralexgray/...', + archived: false, + disabled: false, + has_wiki: false, + homepage: 'https://driesvints.com/blog/getting-started-with-dotfiles', + html_url: 'https://github.com/mralexgray/...', + keys_url: 'https://api.github.com/repos/mralexgray/.../keys{/key_id}', + language: 'Shell', + tags_url: 'https://api.github.com/repos/mralexgray/.../tags', + watchers: 0, + blobs_url: + 'https://api.github.com/repos/mralexgray/.../git/blobs{/sha}', + clone_url: 'https://github.com/mralexgray/....git', + forks_url: 'https://api.github.com/repos/mralexgray/.../forks', + full_name: 'mralexgray/...', + has_pages: false, + hooks_url: 'https://api.github.com/repos/mralexgray/.../hooks', + pulls_url: 'https://api.github.com/repos/mralexgray/.../pulls{/number}', + pushed_at: '2017-09-15T08:27:32Z', + teams_url: 'https://api.github.com/repos/mralexgray/.../teams', + trees_url: + 'https://api.github.com/repos/mralexgray/.../git/trees{/sha}', + created_at: '2017-09-22T19:19:42Z', + events_url: 'https://api.github.com/repos/mralexgray/.../events', + has_issues: false, + issues_url: + 'https://api.github.com/repos/mralexgray/.../issues{/number}', + labels_url: 'https://api.github.com/repos/mralexgray/.../labels{/name}', + merges_url: 'https://api.github.com/repos/mralexgray/.../merges', + mirror_url: null, + updated_at: '2017-09-22T19:20:22Z', + visibility: 'public', + archive_url: + 'https://api.github.com/repos/mralexgray/.../{archive_format}{/ref}', + commits_url: + 'https://api.github.com/repos/mralexgray/.../commits{/sha}', + compare_url: + 'https://api.github.com/repos/mralexgray/.../compare/{base}...{head}', + description: ':computer: Public repo for my personal dotfiles.', + forks_count: 0, + is_template: false, + open_issues: 0, + branches_url: + 'https://api.github.com/repos/mralexgray/.../branches{/branch}', + comments_url: + 'https://api.github.com/repos/mralexgray/.../comments{/number}', + contents_url: + 'https://api.github.com/repos/mralexgray/.../contents/{+path}', + git_refs_url: + 'https://api.github.com/repos/mralexgray/.../git/refs{/sha}', + git_tags_url: + 'https://api.github.com/repos/mralexgray/.../git/tags{/sha}', + has_projects: true, + releases_url: + 'https://api.github.com/repos/mralexgray/.../releases{/id}', + statuses_url: + 'https://api.github.com/repos/mralexgray/.../statuses/{sha}', + allow_forking: true, + assignees_url: + 'https://api.github.com/repos/mralexgray/.../assignees{/user}', + downloads_url: 'https://api.github.com/repos/mralexgray/.../downloads', + has_downloads: true, + languages_url: 'https://api.github.com/repos/mralexgray/.../languages', + default_branch: 'master', + milestones_url: + 'https://api.github.com/repos/mralexgray/.../milestones{/number}', + stargazers_url: + 'https://api.github.com/repos/mralexgray/.../stargazers', + watchers_count: 0, + deployments_url: + 'https://api.github.com/repos/mralexgray/.../deployments', + git_commits_url: + 'https://api.github.com/repos/mralexgray/.../git/commits{/sha}', + subscribers_url: + 'https://api.github.com/repos/mralexgray/.../subscribers', + contributors_url: + 'https://api.github.com/repos/mralexgray/.../contributors', + issue_events_url: + 'https://api.github.com/repos/mralexgray/.../issues/events{/number}', + stargazers_count: 0, + subscription_url: + 'https://api.github.com/repos/mralexgray/.../subscription', + collaborators_url: + 'https://api.github.com/repos/mralexgray/.../collaborators{/collaborator}', + issue_comment_url: + 'https://api.github.com/repos/mralexgray/.../issues/comments{/number}', + notifications_url: + 'https://api.github.com/repos/mralexgray/.../notifications{?since,all,participating}', + open_issues_count: 0, + web_commit_signoff_required: false, + }, + { + id: 58656723, + url: 'https://api.github.com/repos/mralexgray/2200087-Serial-Protocol', + fork: true, + name: '2200087-Serial-Protocol', + size: 41, + forks: 1, + owner: { + id: 262517, + url: 'https://api.github.com/users/mralexgray', + type: 'User', + login: 'mralexgray', + node_id: 'MDQ6VXNlcjI2MjUxNw==', + html_url: 'https://github.com/mralexgray', + gists_url: 'https://api.github.com/users/mralexgray/gists{/gist_id}', + repos_url: 'https://api.github.com/users/mralexgray/repos', + avatar_url: 'https://avatars.githubusercontent.com/u/262517?v=4', + events_url: + 'https://api.github.com/users/mralexgray/events{/privacy}', + site_admin: false, + gravatar_id: '', + starred_url: + 'https://api.github.com/users/mralexgray/starred{/owner}{/repo}', + followers_url: 'https://api.github.com/users/mralexgray/followers', + following_url: + 'https://api.github.com/users/mralexgray/following{/other_user}', + organizations_url: 'https://api.github.com/users/mralexgray/orgs', + subscriptions_url: + 'https://api.github.com/users/mralexgray/subscriptions', + received_events_url: + 'https://api.github.com/users/mralexgray/received_events', + }, + topics: [], + git_url: 'git://github.com/mralexgray/2200087-Serial-Protocol.git', + license: { + key: 'gpl-2.0', + url: 'https://api.github.com/licenses/gpl-2.0', + name: 'GNU General Public License v2.0', + node_id: 'MDc6TGljZW5zZTg=', + spdx_id: 'GPL-2.0', + }, + node_id: 'MDEwOlJlcG9zaXRvcnk1ODY1NjcyMw==', + private: false, + ssh_url: 'git@github.com:mralexgray/2200087-Serial-Protocol.git', + svn_url: 'https://github.com/mralexgray/2200087-Serial-Protocol', + archived: false, + disabled: false, + has_wiki: true, + homepage: 'http://daviddworken.com', + html_url: 'https://github.com/mralexgray/2200087-Serial-Protocol', + keys_url: + 'https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/keys{/key_id}', + language: 'Python', + tags_url: + 'https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/tags', + watchers: 0, + blobs_url: + 'https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/git/blobs{/sha}', + clone_url: 'https://github.com/mralexgray/2200087-Serial-Protocol.git', + forks_url: + 'https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/forks', + full_name: 'mralexgray/2200087-Serial-Protocol', + has_pages: false, + hooks_url: + 'https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/hooks', + pulls_url: + 'https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/pulls{/number}', + pushed_at: '2016-05-12T16:07:24Z', + teams_url: + 'https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/teams', + trees_url: + 'https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/git/trees{/sha}', + created_at: '2016-05-12T16:05:28Z', + events_url: + 'https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/events', + has_issues: false, + issues_url: + 'https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/issues{/number}', + labels_url: + 'https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/labels{/name}', + merges_url: + 'https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/merges', + mirror_url: null, + updated_at: '2016-05-12T16:05:30Z', + visibility: 'public', + archive_url: + 'https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/{archive_format}{/ref}', + commits_url: + 'https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/commits{/sha}', + compare_url: + 'https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/compare/{base}...{head}', + description: + "A reverse engineered protocol description and accompanying code for Radioshack's 2200087 multimeter", + forks_count: 1, + is_template: false, + open_issues: 0, + branches_url: + 'https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/branches{/branch}', + comments_url: + 'https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/comments{/number}', + contents_url: + 'https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/contents/{+path}', + git_refs_url: + 'https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/git/refs{/sha}', + git_tags_url: + 'https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/git/tags{/sha}', + has_projects: true, + releases_url: + 'https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/releases{/id}', + statuses_url: + 'https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/statuses/{sha}', + allow_forking: true, + assignees_url: + 'https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/assignees{/user}', + downloads_url: + 'https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/downloads', + has_downloads: true, + languages_url: + 'https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/languages', + default_branch: 'master', + milestones_url: + 'https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/milestones{/number}', + stargazers_url: + 'https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/stargazers', + watchers_count: 0, + deployments_url: + 'https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/deployments', + git_commits_url: + 'https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/git/commits{/sha}', + subscribers_url: + 'https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/subscribers', + contributors_url: + 'https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/contributors', + issue_events_url: + 'https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/issues/events{/number}', + stargazers_count: 0, + subscription_url: + 'https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/subscription', + collaborators_url: + 'https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/collaborators{/collaborator}', + issue_comment_url: + 'https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/issues/comments{/number}', + notifications_url: + 'https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/notifications{?since,all,participating}', + open_issues_count: 0, + web_commit_signoff_required: false, + }, + { + id: 13121042, + url: 'https://api.github.com/repos/mralexgray/ace', + fork: true, + name: 'ace', + size: 21080, + forks: 1, + owner: { + id: 262517, + url: 'https://api.github.com/users/mralexgray', + type: 'User', + login: 'mralexgray', + node_id: 'MDQ6VXNlcjI2MjUxNw==', + html_url: 'https://github.com/mralexgray', + gists_url: 'https://api.github.com/users/mralexgray/gists{/gist_id}', + repos_url: 'https://api.github.com/users/mralexgray/repos', + avatar_url: 'https://avatars.githubusercontent.com/u/262517?v=4', + events_url: + 'https://api.github.com/users/mralexgray/events{/privacy}', + site_admin: false, + gravatar_id: '', + starred_url: + 'https://api.github.com/users/mralexgray/starred{/owner}{/repo}', + followers_url: 'https://api.github.com/users/mralexgray/followers', + following_url: + 'https://api.github.com/users/mralexgray/following{/other_user}', + organizations_url: 'https://api.github.com/users/mralexgray/orgs', + subscriptions_url: + 'https://api.github.com/users/mralexgray/subscriptions', + received_events_url: + 'https://api.github.com/users/mralexgray/received_events', + }, + topics: [], + git_url: 'git://github.com/mralexgray/ace.git', + license: { + key: 'other', + url: null, + name: 'Other', + node_id: 'MDc6TGljZW5zZTA=', + spdx_id: 'NOASSERTION', + }, + node_id: 'MDEwOlJlcG9zaXRvcnkxMzEyMTA0Mg==', + private: false, + ssh_url: 'git@github.com:mralexgray/ace.git', + svn_url: 'https://github.com/mralexgray/ace', + archived: false, + disabled: false, + has_wiki: true, + homepage: 'http://ace.c9.io', + html_url: 'https://github.com/mralexgray/ace', + keys_url: 'https://api.github.com/repos/mralexgray/ace/keys{/key_id}', + language: 'JavaScript', + tags_url: 'https://api.github.com/repos/mralexgray/ace/tags', + watchers: 0, + blobs_url: + 'https://api.github.com/repos/mralexgray/ace/git/blobs{/sha}', + clone_url: 'https://github.com/mralexgray/ace.git', + forks_url: 'https://api.github.com/repos/mralexgray/ace/forks', + full_name: 'mralexgray/ace', + has_pages: false, + hooks_url: 'https://api.github.com/repos/mralexgray/ace/hooks', + pulls_url: 'https://api.github.com/repos/mralexgray/ace/pulls{/number}', + pushed_at: '2013-10-26T12:34:48Z', + teams_url: 'https://api.github.com/repos/mralexgray/ace/teams', + trees_url: + 'https://api.github.com/repos/mralexgray/ace/git/trees{/sha}', + created_at: '2013-09-26T11:58:10Z', + events_url: 'https://api.github.com/repos/mralexgray/ace/events', + has_issues: false, + issues_url: + 'https://api.github.com/repos/mralexgray/ace/issues{/number}', + labels_url: 'https://api.github.com/repos/mralexgray/ace/labels{/name}', + merges_url: 'https://api.github.com/repos/mralexgray/ace/merges', + mirror_url: null, + updated_at: '2013-10-26T12:34:49Z', + visibility: 'public', + archive_url: + 'https://api.github.com/repos/mralexgray/ace/{archive_format}{/ref}', + commits_url: + 'https://api.github.com/repos/mralexgray/ace/commits{/sha}', + compare_url: + 'https://api.github.com/repos/mralexgray/ace/compare/{base}...{head}', + description: 'Ace (Ajax.org Cloud9 Editor)', + forks_count: 1, + is_template: false, + open_issues: 0, + branches_url: + 'https://api.github.com/repos/mralexgray/ace/branches{/branch}', + comments_url: + 'https://api.github.com/repos/mralexgray/ace/comments{/number}', + contents_url: + 'https://api.github.com/repos/mralexgray/ace/contents/{+path}', + git_refs_url: + 'https://api.github.com/repos/mralexgray/ace/git/refs{/sha}', + git_tags_url: + 'https://api.github.com/repos/mralexgray/ace/git/tags{/sha}', + has_projects: true, + releases_url: + 'https://api.github.com/repos/mralexgray/ace/releases{/id}', + statuses_url: + 'https://api.github.com/repos/mralexgray/ace/statuses/{sha}', + allow_forking: true, + assignees_url: + 'https://api.github.com/repos/mralexgray/ace/assignees{/user}', + downloads_url: 'https://api.github.com/repos/mralexgray/ace/downloads', + has_downloads: true, + languages_url: 'https://api.github.com/repos/mralexgray/ace/languages', + default_branch: 'master', + milestones_url: + 'https://api.github.com/repos/mralexgray/ace/milestones{/number}', + stargazers_url: + 'https://api.github.com/repos/mralexgray/ace/stargazers', + watchers_count: 0, + deployments_url: + 'https://api.github.com/repos/mralexgray/ace/deployments', + git_commits_url: + 'https://api.github.com/repos/mralexgray/ace/git/commits{/sha}', + subscribers_url: + 'https://api.github.com/repos/mralexgray/ace/subscribers', + contributors_url: + 'https://api.github.com/repos/mralexgray/ace/contributors', + issue_events_url: + 'https://api.github.com/repos/mralexgray/ace/issues/events{/number}', + stargazers_count: 0, + subscription_url: + 'https://api.github.com/repos/mralexgray/ace/subscription', + collaborators_url: + 'https://api.github.com/repos/mralexgray/ace/collaborators{/collaborator}', + issue_comment_url: + 'https://api.github.com/repos/mralexgray/ace/issues/comments{/number}', + notifications_url: + 'https://api.github.com/repos/mralexgray/ace/notifications{?since,all,participating}', + open_issues_count: 0, + web_commit_signoff_required: false, + }, + { + id: 10791045, + url: 'https://api.github.com/repos/mralexgray/ACEView', + fork: true, + name: 'ACEView', + size: 1733, + forks: 1, + owner: { + id: 262517, + url: 'https://api.github.com/users/mralexgray', + type: 'User', + login: 'mralexgray', + node_id: 'MDQ6VXNlcjI2MjUxNw==', + html_url: 'https://github.com/mralexgray', + gists_url: 'https://api.github.com/users/mralexgray/gists{/gist_id}', + repos_url: 'https://api.github.com/users/mralexgray/repos', + avatar_url: 'https://avatars.githubusercontent.com/u/262517?v=4', + events_url: + 'https://api.github.com/users/mralexgray/events{/privacy}', + site_admin: false, + gravatar_id: '', + starred_url: + 'https://api.github.com/users/mralexgray/starred{/owner}{/repo}', + followers_url: 'https://api.github.com/users/mralexgray/followers', + following_url: + 'https://api.github.com/users/mralexgray/following{/other_user}', + organizations_url: 'https://api.github.com/users/mralexgray/orgs', + subscriptions_url: + 'https://api.github.com/users/mralexgray/subscriptions', + received_events_url: + 'https://api.github.com/users/mralexgray/received_events', + }, + topics: [], + git_url: 'git://github.com/mralexgray/ACEView.git', + license: { + key: 'other', + url: null, + name: 'Other', + node_id: 'MDc6TGljZW5zZTA=', + spdx_id: 'NOASSERTION', + }, + node_id: 'MDEwOlJlcG9zaXRvcnkxMDc5MTA0NQ==', + private: false, + ssh_url: 'git@github.com:mralexgray/ACEView.git', + svn_url: 'https://github.com/mralexgray/ACEView', + archived: false, + disabled: false, + has_wiki: true, + homepage: null, + html_url: 'https://github.com/mralexgray/ACEView', + keys_url: + 'https://api.github.com/repos/mralexgray/ACEView/keys{/key_id}', + language: 'Objective-C', + tags_url: 'https://api.github.com/repos/mralexgray/ACEView/tags', + watchers: 0, + blobs_url: + 'https://api.github.com/repos/mralexgray/ACEView/git/blobs{/sha}', + clone_url: 'https://github.com/mralexgray/ACEView.git', + forks_url: 'https://api.github.com/repos/mralexgray/ACEView/forks', + full_name: 'mralexgray/ACEView', + has_pages: false, + hooks_url: 'https://api.github.com/repos/mralexgray/ACEView/hooks', + pulls_url: + 'https://api.github.com/repos/mralexgray/ACEView/pulls{/number}', + pushed_at: '2014-05-09T01:36:23Z', + teams_url: 'https://api.github.com/repos/mralexgray/ACEView/teams', + trees_url: + 'https://api.github.com/repos/mralexgray/ACEView/git/trees{/sha}', + created_at: '2013-06-19T12:15:04Z', + events_url: 'https://api.github.com/repos/mralexgray/ACEView/events', + has_issues: false, + issues_url: + 'https://api.github.com/repos/mralexgray/ACEView/issues{/number}', + labels_url: + 'https://api.github.com/repos/mralexgray/ACEView/labels{/name}', + merges_url: 'https://api.github.com/repos/mralexgray/ACEView/merges', + mirror_url: null, + updated_at: '2015-11-24T01:14:10Z', + visibility: 'public', + archive_url: + 'https://api.github.com/repos/mralexgray/ACEView/{archive_format}{/ref}', + commits_url: + 'https://api.github.com/repos/mralexgray/ACEView/commits{/sha}', + compare_url: + 'https://api.github.com/repos/mralexgray/ACEView/compare/{base}...{head}', + description: 'Use the wonderful ACE editor in your Cocoa applications', + forks_count: 1, + is_template: false, + open_issues: 0, + branches_url: + 'https://api.github.com/repos/mralexgray/ACEView/branches{/branch}', + comments_url: + 'https://api.github.com/repos/mralexgray/ACEView/comments{/number}', + contents_url: + 'https://api.github.com/repos/mralexgray/ACEView/contents/{+path}', + git_refs_url: + 'https://api.github.com/repos/mralexgray/ACEView/git/refs{/sha}', + git_tags_url: + 'https://api.github.com/repos/mralexgray/ACEView/git/tags{/sha}', + has_projects: true, + releases_url: + 'https://api.github.com/repos/mralexgray/ACEView/releases{/id}', + statuses_url: + 'https://api.github.com/repos/mralexgray/ACEView/statuses/{sha}', + allow_forking: true, + assignees_url: + 'https://api.github.com/repos/mralexgray/ACEView/assignees{/user}', + downloads_url: + 'https://api.github.com/repos/mralexgray/ACEView/downloads', + has_downloads: true, + languages_url: + 'https://api.github.com/repos/mralexgray/ACEView/languages', + default_branch: 'master', + milestones_url: + 'https://api.github.com/repos/mralexgray/ACEView/milestones{/number}', + stargazers_url: + 'https://api.github.com/repos/mralexgray/ACEView/stargazers', + watchers_count: 0, + deployments_url: + 'https://api.github.com/repos/mralexgray/ACEView/deployments', + git_commits_url: + 'https://api.github.com/repos/mralexgray/ACEView/git/commits{/sha}', + subscribers_url: + 'https://api.github.com/repos/mralexgray/ACEView/subscribers', + contributors_url: + 'https://api.github.com/repos/mralexgray/ACEView/contributors', + issue_events_url: + 'https://api.github.com/repos/mralexgray/ACEView/issues/events{/number}', + stargazers_count: 0, + subscription_url: + 'https://api.github.com/repos/mralexgray/ACEView/subscription', + collaborators_url: + 'https://api.github.com/repos/mralexgray/ACEView/collaborators{/collaborator}', + issue_comment_url: + 'https://api.github.com/repos/mralexgray/ACEView/issues/comments{/number}', + notifications_url: + 'https://api.github.com/repos/mralexgray/ACEView/notifications{?since,all,participating}', + open_issues_count: 0, + web_commit_signoff_required: false, + }, + { + id: 13623648, + url: 'https://api.github.com/repos/mralexgray/ActiveLog', + fork: true, + name: 'ActiveLog', + size: 60, + forks: 0, + owner: { + id: 262517, + url: 'https://api.github.com/users/mralexgray', + type: 'User', + login: 'mralexgray', + node_id: 'MDQ6VXNlcjI2MjUxNw==', + html_url: 'https://github.com/mralexgray', + gists_url: 'https://api.github.com/users/mralexgray/gists{/gist_id}', + repos_url: 'https://api.github.com/users/mralexgray/repos', + avatar_url: 'https://avatars.githubusercontent.com/u/262517?v=4', + events_url: + 'https://api.github.com/users/mralexgray/events{/privacy}', + site_admin: false, + gravatar_id: '', + starred_url: + 'https://api.github.com/users/mralexgray/starred{/owner}{/repo}', + followers_url: 'https://api.github.com/users/mralexgray/followers', + following_url: + 'https://api.github.com/users/mralexgray/following{/other_user}', + organizations_url: 'https://api.github.com/users/mralexgray/orgs', + subscriptions_url: + 'https://api.github.com/users/mralexgray/subscriptions', + received_events_url: + 'https://api.github.com/users/mralexgray/received_events', + }, + topics: [], + git_url: 'git://github.com/mralexgray/ActiveLog.git', + license: null, + node_id: 'MDEwOlJlcG9zaXRvcnkxMzYyMzY0OA==', + private: false, + ssh_url: 'git@github.com:mralexgray/ActiveLog.git', + svn_url: 'https://github.com/mralexgray/ActiveLog', + archived: false, + disabled: false, + has_wiki: true, + homepage: 'http://deepitpro.com/en/articles/ActiveLog/info/', + html_url: 'https://github.com/mralexgray/ActiveLog', + keys_url: + 'https://api.github.com/repos/mralexgray/ActiveLog/keys{/key_id}', + language: 'Objective-C', + tags_url: 'https://api.github.com/repos/mralexgray/ActiveLog/tags', + watchers: 0, + blobs_url: + 'https://api.github.com/repos/mralexgray/ActiveLog/git/blobs{/sha}', + clone_url: 'https://github.com/mralexgray/ActiveLog.git', + forks_url: 'https://api.github.com/repos/mralexgray/ActiveLog/forks', + full_name: 'mralexgray/ActiveLog', + has_pages: false, + hooks_url: 'https://api.github.com/repos/mralexgray/ActiveLog/hooks', + pulls_url: + 'https://api.github.com/repos/mralexgray/ActiveLog/pulls{/number}', + pushed_at: '2011-07-03T06:28:59Z', + teams_url: 'https://api.github.com/repos/mralexgray/ActiveLog/teams', + trees_url: + 'https://api.github.com/repos/mralexgray/ActiveLog/git/trees{/sha}', + created_at: '2013-10-16T15:52:37Z', + events_url: 'https://api.github.com/repos/mralexgray/ActiveLog/events', + has_issues: false, + issues_url: + 'https://api.github.com/repos/mralexgray/ActiveLog/issues{/number}', + labels_url: + 'https://api.github.com/repos/mralexgray/ActiveLog/labels{/name}', + merges_url: 'https://api.github.com/repos/mralexgray/ActiveLog/merges', + mirror_url: null, + updated_at: '2013-10-16T15:52:37Z', + visibility: 'public', + archive_url: + 'https://api.github.com/repos/mralexgray/ActiveLog/{archive_format}{/ref}', + commits_url: + 'https://api.github.com/repos/mralexgray/ActiveLog/commits{/sha}', + compare_url: + 'https://api.github.com/repos/mralexgray/ActiveLog/compare/{base}...{head}', + description: 'Shut up all logs with active filter.', + forks_count: 0, + is_template: false, + open_issues: 0, + branches_url: + 'https://api.github.com/repos/mralexgray/ActiveLog/branches{/branch}', + comments_url: + 'https://api.github.com/repos/mralexgray/ActiveLog/comments{/number}', + contents_url: + 'https://api.github.com/repos/mralexgray/ActiveLog/contents/{+path}', + git_refs_url: + 'https://api.github.com/repos/mralexgray/ActiveLog/git/refs{/sha}', + git_tags_url: + 'https://api.github.com/repos/mralexgray/ActiveLog/git/tags{/sha}', + has_projects: true, + releases_url: + 'https://api.github.com/repos/mralexgray/ActiveLog/releases{/id}', + statuses_url: + 'https://api.github.com/repos/mralexgray/ActiveLog/statuses/{sha}', + allow_forking: true, + assignees_url: + 'https://api.github.com/repos/mralexgray/ActiveLog/assignees{/user}', + downloads_url: + 'https://api.github.com/repos/mralexgray/ActiveLog/downloads', + has_downloads: true, + languages_url: + 'https://api.github.com/repos/mralexgray/ActiveLog/languages', + default_branch: 'master', + milestones_url: + 'https://api.github.com/repos/mralexgray/ActiveLog/milestones{/number}', + stargazers_url: + 'https://api.github.com/repos/mralexgray/ActiveLog/stargazers', + watchers_count: 0, + deployments_url: + 'https://api.github.com/repos/mralexgray/ActiveLog/deployments', + git_commits_url: + 'https://api.github.com/repos/mralexgray/ActiveLog/git/commits{/sha}', + subscribers_url: + 'https://api.github.com/repos/mralexgray/ActiveLog/subscribers', + contributors_url: + 'https://api.github.com/repos/mralexgray/ActiveLog/contributors', + issue_events_url: + 'https://api.github.com/repos/mralexgray/ActiveLog/issues/events{/number}', + stargazers_count: 0, + subscription_url: + 'https://api.github.com/repos/mralexgray/ActiveLog/subscription', + collaborators_url: + 'https://api.github.com/repos/mralexgray/ActiveLog/collaborators{/collaborator}', + issue_comment_url: + 'https://api.github.com/repos/mralexgray/ActiveLog/issues/comments{/number}', + notifications_url: + 'https://api.github.com/repos/mralexgray/ActiveLog/notifications{?since,all,participating}', + open_issues_count: 0, + web_commit_signoff_required: false, + }, + { + id: 9716210, + url: 'https://api.github.com/repos/mralexgray/adium', + fork: false, + name: 'adium', + size: 277719, + forks: 37, + owner: { + id: 262517, + url: 'https://api.github.com/users/mralexgray', + type: 'User', + login: 'mralexgray', + node_id: 'MDQ6VXNlcjI2MjUxNw==', + html_url: 'https://github.com/mralexgray', + gists_url: 'https://api.github.com/users/mralexgray/gists{/gist_id}', + repos_url: 'https://api.github.com/users/mralexgray/repos', + avatar_url: 'https://avatars.githubusercontent.com/u/262517?v=4', + events_url: + 'https://api.github.com/users/mralexgray/events{/privacy}', + site_admin: false, + gravatar_id: '', + starred_url: + 'https://api.github.com/users/mralexgray/starred{/owner}{/repo}', + followers_url: 'https://api.github.com/users/mralexgray/followers', + following_url: + 'https://api.github.com/users/mralexgray/following{/other_user}', + organizations_url: 'https://api.github.com/users/mralexgray/orgs', + subscriptions_url: + 'https://api.github.com/users/mralexgray/subscriptions', + received_events_url: + 'https://api.github.com/users/mralexgray/received_events', + }, + topics: [], + git_url: 'git://github.com/mralexgray/adium.git', + license: { + key: 'other', + url: null, + name: 'Other', + node_id: 'MDc6TGljZW5zZTA=', + spdx_id: 'NOASSERTION', + }, + node_id: 'MDEwOlJlcG9zaXRvcnk5NzE2MjEw', + private: false, + ssh_url: 'git@github.com:mralexgray/adium.git', + svn_url: 'https://github.com/mralexgray/adium', + archived: false, + disabled: false, + has_wiki: false, + homepage: null, + html_url: 'https://github.com/mralexgray/adium', + keys_url: 'https://api.github.com/repos/mralexgray/adium/keys{/key_id}', + language: 'Objective-C', + tags_url: 'https://api.github.com/repos/mralexgray/adium/tags', + watchers: 0, + blobs_url: + 'https://api.github.com/repos/mralexgray/adium/git/blobs{/sha}', + clone_url: 'https://github.com/mralexgray/adium.git', + forks_url: 'https://api.github.com/repos/mralexgray/adium/forks', + full_name: 'mralexgray/adium', + has_pages: false, + hooks_url: 'https://api.github.com/repos/mralexgray/adium/hooks', + pulls_url: + 'https://api.github.com/repos/mralexgray/adium/pulls{/number}', + pushed_at: '2013-04-26T16:43:53Z', + teams_url: 'https://api.github.com/repos/mralexgray/adium/teams', + trees_url: + 'https://api.github.com/repos/mralexgray/adium/git/trees{/sha}', + created_at: '2013-04-27T14:59:33Z', + events_url: 'https://api.github.com/repos/mralexgray/adium/events', + has_issues: false, + issues_url: + 'https://api.github.com/repos/mralexgray/adium/issues{/number}', + labels_url: + 'https://api.github.com/repos/mralexgray/adium/labels{/name}', + merges_url: 'https://api.github.com/repos/mralexgray/adium/merges', + mirror_url: null, + updated_at: '2019-12-11T06:51:45Z', + visibility: 'public', + archive_url: + 'https://api.github.com/repos/mralexgray/adium/{archive_format}{/ref}', + commits_url: + 'https://api.github.com/repos/mralexgray/adium/commits{/sha}', + compare_url: + 'https://api.github.com/repos/mralexgray/adium/compare/{base}...{head}', + description: 'Official mirror of hg.adium.im', + forks_count: 37, + is_template: false, + open_issues: 0, + branches_url: + 'https://api.github.com/repos/mralexgray/adium/branches{/branch}', + comments_url: + 'https://api.github.com/repos/mralexgray/adium/comments{/number}', + contents_url: + 'https://api.github.com/repos/mralexgray/adium/contents/{+path}', + git_refs_url: + 'https://api.github.com/repos/mralexgray/adium/git/refs{/sha}', + git_tags_url: + 'https://api.github.com/repos/mralexgray/adium/git/tags{/sha}', + has_projects: true, + releases_url: + 'https://api.github.com/repos/mralexgray/adium/releases{/id}', + statuses_url: + 'https://api.github.com/repos/mralexgray/adium/statuses/{sha}', + allow_forking: true, + assignees_url: + 'https://api.github.com/repos/mralexgray/adium/assignees{/user}', + downloads_url: + 'https://api.github.com/repos/mralexgray/adium/downloads', + has_downloads: true, + languages_url: + 'https://api.github.com/repos/mralexgray/adium/languages', + default_branch: 'master', + milestones_url: + 'https://api.github.com/repos/mralexgray/adium/milestones{/number}', + stargazers_url: + 'https://api.github.com/repos/mralexgray/adium/stargazers', + watchers_count: 0, + deployments_url: + 'https://api.github.com/repos/mralexgray/adium/deployments', + git_commits_url: + 'https://api.github.com/repos/mralexgray/adium/git/commits{/sha}', + subscribers_url: + 'https://api.github.com/repos/mralexgray/adium/subscribers', + contributors_url: + 'https://api.github.com/repos/mralexgray/adium/contributors', + issue_events_url: + 'https://api.github.com/repos/mralexgray/adium/issues/events{/number}', + stargazers_count: 0, + subscription_url: + 'https://api.github.com/repos/mralexgray/adium/subscription', + collaborators_url: + 'https://api.github.com/repos/mralexgray/adium/collaborators{/collaborator}', + issue_comment_url: + 'https://api.github.com/repos/mralexgray/adium/issues/comments{/number}', + notifications_url: + 'https://api.github.com/repos/mralexgray/adium/notifications{?since,all,participating}', + open_issues_count: 0, + web_commit_signoff_required: false, + }, + { + id: 12752329, + url: 'https://api.github.com/repos/mralexgray/ADLivelyTableView', + fork: true, + name: 'ADLivelyTableView', + size: 73, + forks: 0, + owner: { + id: 262517, + url: 'https://api.github.com/users/mralexgray', + type: 'User', + login: 'mralexgray', + node_id: 'MDQ6VXNlcjI2MjUxNw==', + html_url: 'https://github.com/mralexgray', + gists_url: 'https://api.github.com/users/mralexgray/gists{/gist_id}', + repos_url: 'https://api.github.com/users/mralexgray/repos', + avatar_url: 'https://avatars.githubusercontent.com/u/262517?v=4', + events_url: + 'https://api.github.com/users/mralexgray/events{/privacy}', + site_admin: false, + gravatar_id: '', + starred_url: + 'https://api.github.com/users/mralexgray/starred{/owner}{/repo}', + followers_url: 'https://api.github.com/users/mralexgray/followers', + following_url: + 'https://api.github.com/users/mralexgray/following{/other_user}', + organizations_url: 'https://api.github.com/users/mralexgray/orgs', + subscriptions_url: + 'https://api.github.com/users/mralexgray/subscriptions', + received_events_url: + 'https://api.github.com/users/mralexgray/received_events', + }, + topics: [], + git_url: 'git://github.com/mralexgray/ADLivelyTableView.git', + license: { + key: 'other', + url: null, + name: 'Other', + node_id: 'MDc6TGljZW5zZTA=', + spdx_id: 'NOASSERTION', + }, + node_id: 'MDEwOlJlcG9zaXRvcnkxMjc1MjMyOQ==', + private: false, + ssh_url: 'git@github.com:mralexgray/ADLivelyTableView.git', + svn_url: 'https://github.com/mralexgray/ADLivelyTableView', + archived: false, + disabled: false, + has_wiki: true, + homepage: 'http://applidium.com/en/news/lively_uitableview/', + html_url: 'https://github.com/mralexgray/ADLivelyTableView', + keys_url: + 'https://api.github.com/repos/mralexgray/ADLivelyTableView/keys{/key_id}', + language: 'Objective-C', + tags_url: + 'https://api.github.com/repos/mralexgray/ADLivelyTableView/tags', + watchers: 0, + blobs_url: + 'https://api.github.com/repos/mralexgray/ADLivelyTableView/git/blobs{/sha}', + clone_url: 'https://github.com/mralexgray/ADLivelyTableView.git', + forks_url: + 'https://api.github.com/repos/mralexgray/ADLivelyTableView/forks', + full_name: 'mralexgray/ADLivelyTableView', + has_pages: false, + hooks_url: + 'https://api.github.com/repos/mralexgray/ADLivelyTableView/hooks', + pulls_url: + 'https://api.github.com/repos/mralexgray/ADLivelyTableView/pulls{/number}', + pushed_at: '2012-05-10T10:40:15Z', + teams_url: + 'https://api.github.com/repos/mralexgray/ADLivelyTableView/teams', + trees_url: + 'https://api.github.com/repos/mralexgray/ADLivelyTableView/git/trees{/sha}', + created_at: '2013-09-11T09:18:01Z', + events_url: + 'https://api.github.com/repos/mralexgray/ADLivelyTableView/events', + has_issues: false, + issues_url: + 'https://api.github.com/repos/mralexgray/ADLivelyTableView/issues{/number}', + labels_url: + 'https://api.github.com/repos/mralexgray/ADLivelyTableView/labels{/name}', + merges_url: + 'https://api.github.com/repos/mralexgray/ADLivelyTableView/merges', + mirror_url: null, + updated_at: '2013-09-11T09:18:03Z', + visibility: 'public', + archive_url: + 'https://api.github.com/repos/mralexgray/ADLivelyTableView/{archive_format}{/ref}', + commits_url: + 'https://api.github.com/repos/mralexgray/ADLivelyTableView/commits{/sha}', + compare_url: + 'https://api.github.com/repos/mralexgray/ADLivelyTableView/compare/{base}...{head}', + description: 'Lively UITableView', + forks_count: 0, + is_template: false, + open_issues: 0, + branches_url: + 'https://api.github.com/repos/mralexgray/ADLivelyTableView/branches{/branch}', + comments_url: + 'https://api.github.com/repos/mralexgray/ADLivelyTableView/comments{/number}', + contents_url: + 'https://api.github.com/repos/mralexgray/ADLivelyTableView/contents/{+path}', + git_refs_url: + 'https://api.github.com/repos/mralexgray/ADLivelyTableView/git/refs{/sha}', + git_tags_url: + 'https://api.github.com/repos/mralexgray/ADLivelyTableView/git/tags{/sha}', + has_projects: true, + releases_url: + 'https://api.github.com/repos/mralexgray/ADLivelyTableView/releases{/id}', + statuses_url: + 'https://api.github.com/repos/mralexgray/ADLivelyTableView/statuses/{sha}', + allow_forking: true, + assignees_url: + 'https://api.github.com/repos/mralexgray/ADLivelyTableView/assignees{/user}', + downloads_url: + 'https://api.github.com/repos/mralexgray/ADLivelyTableView/downloads', + has_downloads: true, + languages_url: + 'https://api.github.com/repos/mralexgray/ADLivelyTableView/languages', + default_branch: 'master', + milestones_url: + 'https://api.github.com/repos/mralexgray/ADLivelyTableView/milestones{/number}', + stargazers_url: + 'https://api.github.com/repos/mralexgray/ADLivelyTableView/stargazers', + watchers_count: 0, + deployments_url: + 'https://api.github.com/repos/mralexgray/ADLivelyTableView/deployments', + git_commits_url: + 'https://api.github.com/repos/mralexgray/ADLivelyTableView/git/commits{/sha}', + subscribers_url: + 'https://api.github.com/repos/mralexgray/ADLivelyTableView/subscribers', + contributors_url: + 'https://api.github.com/repos/mralexgray/ADLivelyTableView/contributors', + issue_events_url: + 'https://api.github.com/repos/mralexgray/ADLivelyTableView/issues/events{/number}', + stargazers_count: 0, + subscription_url: + 'https://api.github.com/repos/mralexgray/ADLivelyTableView/subscription', + collaborators_url: + 'https://api.github.com/repos/mralexgray/ADLivelyTableView/collaborators{/collaborator}', + issue_comment_url: + 'https://api.github.com/repos/mralexgray/ADLivelyTableView/issues/comments{/number}', + notifications_url: + 'https://api.github.com/repos/mralexgray/ADLivelyTableView/notifications{?since,all,participating}', + open_issues_count: 0, + web_commit_signoff_required: false, + }, + { + id: 5697379, + url: 'https://api.github.com/repos/mralexgray/AFIncrementalStore', + fork: true, + name: 'AFIncrementalStore', + size: 139, + forks: 0, + owner: { + id: 262517, + url: 'https://api.github.com/users/mralexgray', + type: 'User', + login: 'mralexgray', + node_id: 'MDQ6VXNlcjI2MjUxNw==', + html_url: 'https://github.com/mralexgray', + gists_url: 'https://api.github.com/users/mralexgray/gists{/gist_id}', + repos_url: 'https://api.github.com/users/mralexgray/repos', + avatar_url: 'https://avatars.githubusercontent.com/u/262517?v=4', + events_url: + 'https://api.github.com/users/mralexgray/events{/privacy}', + site_admin: false, + gravatar_id: '', + starred_url: + 'https://api.github.com/users/mralexgray/starred{/owner}{/repo}', + followers_url: 'https://api.github.com/users/mralexgray/followers', + following_url: + 'https://api.github.com/users/mralexgray/following{/other_user}', + organizations_url: 'https://api.github.com/users/mralexgray/orgs', + subscriptions_url: + 'https://api.github.com/users/mralexgray/subscriptions', + received_events_url: + 'https://api.github.com/users/mralexgray/received_events', + }, + topics: [], + git_url: 'git://github.com/mralexgray/AFIncrementalStore.git', + license: { + key: 'mit', + url: 'https://api.github.com/licenses/mit', + name: 'MIT License', + node_id: 'MDc6TGljZW5zZTEz', + spdx_id: 'MIT', + }, + node_id: 'MDEwOlJlcG9zaXRvcnk1Njk3Mzc5', + private: false, + ssh_url: 'git@github.com:mralexgray/AFIncrementalStore.git', + svn_url: 'https://github.com/mralexgray/AFIncrementalStore', + archived: false, + disabled: false, + has_wiki: true, + homepage: null, + html_url: 'https://github.com/mralexgray/AFIncrementalStore', + keys_url: + 'https://api.github.com/repos/mralexgray/AFIncrementalStore/keys{/key_id}', + language: 'Objective-C', + tags_url: + 'https://api.github.com/repos/mralexgray/AFIncrementalStore/tags', + watchers: 0, + blobs_url: + 'https://api.github.com/repos/mralexgray/AFIncrementalStore/git/blobs{/sha}', + clone_url: 'https://github.com/mralexgray/AFIncrementalStore.git', + forks_url: + 'https://api.github.com/repos/mralexgray/AFIncrementalStore/forks', + full_name: 'mralexgray/AFIncrementalStore', + has_pages: false, + hooks_url: + 'https://api.github.com/repos/mralexgray/AFIncrementalStore/hooks', + pulls_url: + 'https://api.github.com/repos/mralexgray/AFIncrementalStore/pulls{/number}', + pushed_at: '2012-09-01T22:46:25Z', + teams_url: + 'https://api.github.com/repos/mralexgray/AFIncrementalStore/teams', + trees_url: + 'https://api.github.com/repos/mralexgray/AFIncrementalStore/git/trees{/sha}', + created_at: '2012-09-06T04:20:33Z', + events_url: + 'https://api.github.com/repos/mralexgray/AFIncrementalStore/events', + has_issues: false, + issues_url: + 'https://api.github.com/repos/mralexgray/AFIncrementalStore/issues{/number}', + labels_url: + 'https://api.github.com/repos/mralexgray/AFIncrementalStore/labels{/name}', + merges_url: + 'https://api.github.com/repos/mralexgray/AFIncrementalStore/merges', + mirror_url: null, + updated_at: '2013-01-12T03:15:29Z', + visibility: 'public', + archive_url: + 'https://api.github.com/repos/mralexgray/AFIncrementalStore/{archive_format}{/ref}', + commits_url: + 'https://api.github.com/repos/mralexgray/AFIncrementalStore/commits{/sha}', + compare_url: + 'https://api.github.com/repos/mralexgray/AFIncrementalStore/compare/{base}...{head}', + description: 'Core Data Persistence with AFNetworking, Done Right', + forks_count: 0, + is_template: false, + open_issues: 0, + branches_url: + 'https://api.github.com/repos/mralexgray/AFIncrementalStore/branches{/branch}', + comments_url: + 'https://api.github.com/repos/mralexgray/AFIncrementalStore/comments{/number}', + contents_url: + 'https://api.github.com/repos/mralexgray/AFIncrementalStore/contents/{+path}', + git_refs_url: + 'https://api.github.com/repos/mralexgray/AFIncrementalStore/git/refs{/sha}', + git_tags_url: + 'https://api.github.com/repos/mralexgray/AFIncrementalStore/git/tags{/sha}', + has_projects: true, + releases_url: + 'https://api.github.com/repos/mralexgray/AFIncrementalStore/releases{/id}', + statuses_url: + 'https://api.github.com/repos/mralexgray/AFIncrementalStore/statuses/{sha}', + allow_forking: true, + assignees_url: + 'https://api.github.com/repos/mralexgray/AFIncrementalStore/assignees{/user}', + downloads_url: + 'https://api.github.com/repos/mralexgray/AFIncrementalStore/downloads', + has_downloads: true, + languages_url: + 'https://api.github.com/repos/mralexgray/AFIncrementalStore/languages', + default_branch: 'master', + milestones_url: + 'https://api.github.com/repos/mralexgray/AFIncrementalStore/milestones{/number}', + stargazers_url: + 'https://api.github.com/repos/mralexgray/AFIncrementalStore/stargazers', + watchers_count: 0, + deployments_url: + 'https://api.github.com/repos/mralexgray/AFIncrementalStore/deployments', + git_commits_url: + 'https://api.github.com/repos/mralexgray/AFIncrementalStore/git/commits{/sha}', + subscribers_url: + 'https://api.github.com/repos/mralexgray/AFIncrementalStore/subscribers', + contributors_url: + 'https://api.github.com/repos/mralexgray/AFIncrementalStore/contributors', + issue_events_url: + 'https://api.github.com/repos/mralexgray/AFIncrementalStore/issues/events{/number}', + stargazers_count: 0, + subscription_url: + 'https://api.github.com/repos/mralexgray/AFIncrementalStore/subscription', + collaborators_url: + 'https://api.github.com/repos/mralexgray/AFIncrementalStore/collaborators{/collaborator}', + issue_comment_url: + 'https://api.github.com/repos/mralexgray/AFIncrementalStore/issues/comments{/number}', + notifications_url: + 'https://api.github.com/repos/mralexgray/AFIncrementalStore/notifications{?since,all,participating}', + open_issues_count: 0, + web_commit_signoff_required: false, + }, + { + id: 6969621, + url: 'https://api.github.com/repos/mralexgray/AFNetworking', + fork: true, + name: 'AFNetworking', + size: 4341, + forks: 0, + owner: { + id: 262517, + url: 'https://api.github.com/users/mralexgray', + type: 'User', + login: 'mralexgray', + node_id: 'MDQ6VXNlcjI2MjUxNw==', + html_url: 'https://github.com/mralexgray', + gists_url: 'https://api.github.com/users/mralexgray/gists{/gist_id}', + repos_url: 'https://api.github.com/users/mralexgray/repos', + avatar_url: 'https://avatars.githubusercontent.com/u/262517?v=4', + events_url: + 'https://api.github.com/users/mralexgray/events{/privacy}', + site_admin: false, + gravatar_id: '', + starred_url: + 'https://api.github.com/users/mralexgray/starred{/owner}{/repo}', + followers_url: 'https://api.github.com/users/mralexgray/followers', + following_url: + 'https://api.github.com/users/mralexgray/following{/other_user}', + organizations_url: 'https://api.github.com/users/mralexgray/orgs', + subscriptions_url: + 'https://api.github.com/users/mralexgray/subscriptions', + received_events_url: + 'https://api.github.com/users/mralexgray/received_events', + }, + topics: [], + git_url: 'git://github.com/mralexgray/AFNetworking.git', + license: { + key: 'mit', + url: 'https://api.github.com/licenses/mit', + name: 'MIT License', + node_id: 'MDc6TGljZW5zZTEz', + spdx_id: 'MIT', + }, + node_id: 'MDEwOlJlcG9zaXRvcnk2OTY5NjIx', + private: false, + ssh_url: 'git@github.com:mralexgray/AFNetworking.git', + svn_url: 'https://github.com/mralexgray/AFNetworking', + archived: false, + disabled: false, + has_wiki: true, + homepage: 'http://afnetworking.com', + html_url: 'https://github.com/mralexgray/AFNetworking', + keys_url: + 'https://api.github.com/repos/mralexgray/AFNetworking/keys{/key_id}', + language: 'Objective-C', + tags_url: 'https://api.github.com/repos/mralexgray/AFNetworking/tags', + watchers: 2, + blobs_url: + 'https://api.github.com/repos/mralexgray/AFNetworking/git/blobs{/sha}', + clone_url: 'https://github.com/mralexgray/AFNetworking.git', + forks_url: 'https://api.github.com/repos/mralexgray/AFNetworking/forks', + full_name: 'mralexgray/AFNetworking', + has_pages: false, + hooks_url: 'https://api.github.com/repos/mralexgray/AFNetworking/hooks', + pulls_url: + 'https://api.github.com/repos/mralexgray/AFNetworking/pulls{/number}', + pushed_at: '2014-01-24T07:14:32Z', + teams_url: 'https://api.github.com/repos/mralexgray/AFNetworking/teams', + trees_url: + 'https://api.github.com/repos/mralexgray/AFNetworking/git/trees{/sha}', + created_at: '2012-12-02T17:00:04Z', + events_url: + 'https://api.github.com/repos/mralexgray/AFNetworking/events', + has_issues: false, + issues_url: + 'https://api.github.com/repos/mralexgray/AFNetworking/issues{/number}', + labels_url: + 'https://api.github.com/repos/mralexgray/AFNetworking/labels{/name}', + merges_url: + 'https://api.github.com/repos/mralexgray/AFNetworking/merges', + mirror_url: null, + updated_at: '2014-01-24T07:14:33Z', + visibility: 'public', + archive_url: + 'https://api.github.com/repos/mralexgray/AFNetworking/{archive_format}{/ref}', + commits_url: + 'https://api.github.com/repos/mralexgray/AFNetworking/commits{/sha}', + compare_url: + 'https://api.github.com/repos/mralexgray/AFNetworking/compare/{base}...{head}', + description: 'A delightful iOS and OS X networking framework', + forks_count: 0, + is_template: false, + open_issues: 0, + branches_url: + 'https://api.github.com/repos/mralexgray/AFNetworking/branches{/branch}', + comments_url: + 'https://api.github.com/repos/mralexgray/AFNetworking/comments{/number}', + contents_url: + 'https://api.github.com/repos/mralexgray/AFNetworking/contents/{+path}', + git_refs_url: + 'https://api.github.com/repos/mralexgray/AFNetworking/git/refs{/sha}', + git_tags_url: + 'https://api.github.com/repos/mralexgray/AFNetworking/git/tags{/sha}', + has_projects: true, + releases_url: + 'https://api.github.com/repos/mralexgray/AFNetworking/releases{/id}', + statuses_url: + 'https://api.github.com/repos/mralexgray/AFNetworking/statuses/{sha}', + allow_forking: true, + assignees_url: + 'https://api.github.com/repos/mralexgray/AFNetworking/assignees{/user}', + downloads_url: + 'https://api.github.com/repos/mralexgray/AFNetworking/downloads', + has_downloads: true, + languages_url: + 'https://api.github.com/repos/mralexgray/AFNetworking/languages', + default_branch: 'master', + milestones_url: + 'https://api.github.com/repos/mralexgray/AFNetworking/milestones{/number}', + stargazers_url: + 'https://api.github.com/repos/mralexgray/AFNetworking/stargazers', + watchers_count: 2, + deployments_url: + 'https://api.github.com/repos/mralexgray/AFNetworking/deployments', + git_commits_url: + 'https://api.github.com/repos/mralexgray/AFNetworking/git/commits{/sha}', + subscribers_url: + 'https://api.github.com/repos/mralexgray/AFNetworking/subscribers', + contributors_url: + 'https://api.github.com/repos/mralexgray/AFNetworking/contributors', + issue_events_url: + 'https://api.github.com/repos/mralexgray/AFNetworking/issues/events{/number}', + stargazers_count: 2, + subscription_url: + 'https://api.github.com/repos/mralexgray/AFNetworking/subscription', + collaborators_url: + 'https://api.github.com/repos/mralexgray/AFNetworking/collaborators{/collaborator}', + issue_comment_url: + 'https://api.github.com/repos/mralexgray/AFNetworking/issues/comments{/number}', + notifications_url: + 'https://api.github.com/repos/mralexgray/AFNetworking/notifications{?since,all,participating}', + open_issues_count: 0, + web_commit_signoff_required: false, + }, + { + id: 9485541, + url: 'https://api.github.com/repos/mralexgray/AGNSSplitView', + fork: true, + name: 'AGNSSplitView', + size: 68, + forks: 0, + owner: { + id: 262517, + url: 'https://api.github.com/users/mralexgray', + type: 'User', + login: 'mralexgray', + node_id: 'MDQ6VXNlcjI2MjUxNw==', + html_url: 'https://github.com/mralexgray', + gists_url: 'https://api.github.com/users/mralexgray/gists{/gist_id}', + repos_url: 'https://api.github.com/users/mralexgray/repos', + avatar_url: 'https://avatars.githubusercontent.com/u/262517?v=4', + events_url: + 'https://api.github.com/users/mralexgray/events{/privacy}', + site_admin: false, + gravatar_id: '', + starred_url: + 'https://api.github.com/users/mralexgray/starred{/owner}{/repo}', + followers_url: 'https://api.github.com/users/mralexgray/followers', + following_url: + 'https://api.github.com/users/mralexgray/following{/other_user}', + organizations_url: 'https://api.github.com/users/mralexgray/orgs', + subscriptions_url: + 'https://api.github.com/users/mralexgray/subscriptions', + received_events_url: + 'https://api.github.com/users/mralexgray/received_events', + }, + topics: [], + git_url: 'git://github.com/mralexgray/AGNSSplitView.git', + license: null, + node_id: 'MDEwOlJlcG9zaXRvcnk5NDg1NTQx', + private: false, + ssh_url: 'git@github.com:mralexgray/AGNSSplitView.git', + svn_url: 'https://github.com/mralexgray/AGNSSplitView', + archived: false, + disabled: false, + has_wiki: true, + homepage: null, + html_url: 'https://github.com/mralexgray/AGNSSplitView', + keys_url: + 'https://api.github.com/repos/mralexgray/AGNSSplitView/keys{/key_id}', + language: 'Objective-C', + tags_url: 'https://api.github.com/repos/mralexgray/AGNSSplitView/tags', + watchers: 0, + blobs_url: + 'https://api.github.com/repos/mralexgray/AGNSSplitView/git/blobs{/sha}', + clone_url: 'https://github.com/mralexgray/AGNSSplitView.git', + forks_url: + 'https://api.github.com/repos/mralexgray/AGNSSplitView/forks', + full_name: 'mralexgray/AGNSSplitView', + has_pages: false, + hooks_url: + 'https://api.github.com/repos/mralexgray/AGNSSplitView/hooks', + pulls_url: + 'https://api.github.com/repos/mralexgray/AGNSSplitView/pulls{/number}', + pushed_at: '2013-02-26T00:32:32Z', + teams_url: + 'https://api.github.com/repos/mralexgray/AGNSSplitView/teams', + trees_url: + 'https://api.github.com/repos/mralexgray/AGNSSplitView/git/trees{/sha}', + created_at: '2013-04-17T00:10:13Z', + events_url: + 'https://api.github.com/repos/mralexgray/AGNSSplitView/events', + has_issues: false, + issues_url: + 'https://api.github.com/repos/mralexgray/AGNSSplitView/issues{/number}', + labels_url: + 'https://api.github.com/repos/mralexgray/AGNSSplitView/labels{/name}', + merges_url: + 'https://api.github.com/repos/mralexgray/AGNSSplitView/merges', + mirror_url: null, + updated_at: '2013-04-17T00:10:13Z', + visibility: 'public', + archive_url: + 'https://api.github.com/repos/mralexgray/AGNSSplitView/{archive_format}{/ref}', + commits_url: + 'https://api.github.com/repos/mralexgray/AGNSSplitView/commits{/sha}', + compare_url: + 'https://api.github.com/repos/mralexgray/AGNSSplitView/compare/{base}...{head}', + description: 'Simple NSSplitView additions.', + forks_count: 0, + is_template: false, + open_issues: 0, + branches_url: + 'https://api.github.com/repos/mralexgray/AGNSSplitView/branches{/branch}', + comments_url: + 'https://api.github.com/repos/mralexgray/AGNSSplitView/comments{/number}', + contents_url: + 'https://api.github.com/repos/mralexgray/AGNSSplitView/contents/{+path}', + git_refs_url: + 'https://api.github.com/repos/mralexgray/AGNSSplitView/git/refs{/sha}', + git_tags_url: + 'https://api.github.com/repos/mralexgray/AGNSSplitView/git/tags{/sha}', + has_projects: true, + releases_url: + 'https://api.github.com/repos/mralexgray/AGNSSplitView/releases{/id}', + statuses_url: + 'https://api.github.com/repos/mralexgray/AGNSSplitView/statuses/{sha}', + allow_forking: true, + assignees_url: + 'https://api.github.com/repos/mralexgray/AGNSSplitView/assignees{/user}', + downloads_url: + 'https://api.github.com/repos/mralexgray/AGNSSplitView/downloads', + has_downloads: true, + languages_url: + 'https://api.github.com/repos/mralexgray/AGNSSplitView/languages', + default_branch: 'master', + milestones_url: + 'https://api.github.com/repos/mralexgray/AGNSSplitView/milestones{/number}', + stargazers_url: + 'https://api.github.com/repos/mralexgray/AGNSSplitView/stargazers', + watchers_count: 0, + deployments_url: + 'https://api.github.com/repos/mralexgray/AGNSSplitView/deployments', + git_commits_url: + 'https://api.github.com/repos/mralexgray/AGNSSplitView/git/commits{/sha}', + subscribers_url: + 'https://api.github.com/repos/mralexgray/AGNSSplitView/subscribers', + contributors_url: + 'https://api.github.com/repos/mralexgray/AGNSSplitView/contributors', + issue_events_url: + 'https://api.github.com/repos/mralexgray/AGNSSplitView/issues/events{/number}', + stargazers_count: 0, + subscription_url: + 'https://api.github.com/repos/mralexgray/AGNSSplitView/subscription', + collaborators_url: + 'https://api.github.com/repos/mralexgray/AGNSSplitView/collaborators{/collaborator}', + issue_comment_url: + 'https://api.github.com/repos/mralexgray/AGNSSplitView/issues/comments{/number}', + notifications_url: + 'https://api.github.com/repos/mralexgray/AGNSSplitView/notifications{?since,all,participating}', + open_issues_count: 0, + web_commit_signoff_required: false, + }, + { + id: 12767784, + url: 'https://api.github.com/repos/mralexgray/AGScopeBar', + fork: true, + name: 'AGScopeBar', + size: 64, + forks: 0, + owner: { + id: 262517, + url: 'https://api.github.com/users/mralexgray', + type: 'User', + login: 'mralexgray', + node_id: 'MDQ6VXNlcjI2MjUxNw==', + html_url: 'https://github.com/mralexgray', + gists_url: 'https://api.github.com/users/mralexgray/gists{/gist_id}', + repos_url: 'https://api.github.com/users/mralexgray/repos', + avatar_url: 'https://avatars.githubusercontent.com/u/262517?v=4', + events_url: + 'https://api.github.com/users/mralexgray/events{/privacy}', + site_admin: false, + gravatar_id: '', + starred_url: + 'https://api.github.com/users/mralexgray/starred{/owner}{/repo}', + followers_url: 'https://api.github.com/users/mralexgray/followers', + following_url: + 'https://api.github.com/users/mralexgray/following{/other_user}', + organizations_url: 'https://api.github.com/users/mralexgray/orgs', + subscriptions_url: + 'https://api.github.com/users/mralexgray/subscriptions', + received_events_url: + 'https://api.github.com/users/mralexgray/received_events', + }, + topics: [], + git_url: 'git://github.com/mralexgray/AGScopeBar.git', + license: null, + node_id: 'MDEwOlJlcG9zaXRvcnkxMjc2Nzc4NA==', + private: false, + ssh_url: 'git@github.com:mralexgray/AGScopeBar.git', + svn_url: 'https://github.com/mralexgray/AGScopeBar', + archived: false, + disabled: false, + has_wiki: true, + homepage: null, + html_url: 'https://github.com/mralexgray/AGScopeBar', + keys_url: + 'https://api.github.com/repos/mralexgray/AGScopeBar/keys{/key_id}', + language: 'Objective-C', + tags_url: 'https://api.github.com/repos/mralexgray/AGScopeBar/tags', + watchers: 0, + blobs_url: + 'https://api.github.com/repos/mralexgray/AGScopeBar/git/blobs{/sha}', + clone_url: 'https://github.com/mralexgray/AGScopeBar.git', + forks_url: 'https://api.github.com/repos/mralexgray/AGScopeBar/forks', + full_name: 'mralexgray/AGScopeBar', + has_pages: false, + hooks_url: 'https://api.github.com/repos/mralexgray/AGScopeBar/hooks', + pulls_url: + 'https://api.github.com/repos/mralexgray/AGScopeBar/pulls{/number}', + pushed_at: '2013-05-07T03:35:29Z', + teams_url: 'https://api.github.com/repos/mralexgray/AGScopeBar/teams', + trees_url: + 'https://api.github.com/repos/mralexgray/AGScopeBar/git/trees{/sha}', + created_at: '2013-09-11T21:06:54Z', + events_url: 'https://api.github.com/repos/mralexgray/AGScopeBar/events', + has_issues: false, + issues_url: + 'https://api.github.com/repos/mralexgray/AGScopeBar/issues{/number}', + labels_url: + 'https://api.github.com/repos/mralexgray/AGScopeBar/labels{/name}', + merges_url: 'https://api.github.com/repos/mralexgray/AGScopeBar/merges', + mirror_url: null, + updated_at: '2013-09-11T21:06:54Z', + visibility: 'public', + archive_url: + 'https://api.github.com/repos/mralexgray/AGScopeBar/{archive_format}{/ref}', + commits_url: + 'https://api.github.com/repos/mralexgray/AGScopeBar/commits{/sha}', + compare_url: + 'https://api.github.com/repos/mralexgray/AGScopeBar/compare/{base}...{head}', + description: 'Custom scope bar implementation for Cocoa', + forks_count: 0, + is_template: false, + open_issues: 0, + branches_url: + 'https://api.github.com/repos/mralexgray/AGScopeBar/branches{/branch}', + comments_url: + 'https://api.github.com/repos/mralexgray/AGScopeBar/comments{/number}', + contents_url: + 'https://api.github.com/repos/mralexgray/AGScopeBar/contents/{+path}', + git_refs_url: + 'https://api.github.com/repos/mralexgray/AGScopeBar/git/refs{/sha}', + git_tags_url: + 'https://api.github.com/repos/mralexgray/AGScopeBar/git/tags{/sha}', + has_projects: true, + releases_url: + 'https://api.github.com/repos/mralexgray/AGScopeBar/releases{/id}', + statuses_url: + 'https://api.github.com/repos/mralexgray/AGScopeBar/statuses/{sha}', + allow_forking: true, + assignees_url: + 'https://api.github.com/repos/mralexgray/AGScopeBar/assignees{/user}', + downloads_url: + 'https://api.github.com/repos/mralexgray/AGScopeBar/downloads', + has_downloads: true, + languages_url: + 'https://api.github.com/repos/mralexgray/AGScopeBar/languages', + default_branch: 'master', + milestones_url: + 'https://api.github.com/repos/mralexgray/AGScopeBar/milestones{/number}', + stargazers_url: + 'https://api.github.com/repos/mralexgray/AGScopeBar/stargazers', + watchers_count: 0, + deployments_url: + 'https://api.github.com/repos/mralexgray/AGScopeBar/deployments', + git_commits_url: + 'https://api.github.com/repos/mralexgray/AGScopeBar/git/commits{/sha}', + subscribers_url: + 'https://api.github.com/repos/mralexgray/AGScopeBar/subscribers', + contributors_url: + 'https://api.github.com/repos/mralexgray/AGScopeBar/contributors', + issue_events_url: + 'https://api.github.com/repos/mralexgray/AGScopeBar/issues/events{/number}', + stargazers_count: 0, + subscription_url: + 'https://api.github.com/repos/mralexgray/AGScopeBar/subscription', + collaborators_url: + 'https://api.github.com/repos/mralexgray/AGScopeBar/collaborators{/collaborator}', + issue_comment_url: + 'https://api.github.com/repos/mralexgray/AGScopeBar/issues/comments{/number}', + notifications_url: + 'https://api.github.com/repos/mralexgray/AGScopeBar/notifications{?since,all,participating}', + open_issues_count: 0, + web_commit_signoff_required: false, + }, + { + id: 31829499, + url: 'https://api.github.com/repos/mralexgray/agvtool-xcode-plugin', + fork: true, + name: 'agvtool-xcode-plugin', + size: 102, + forks: 0, + owner: { + id: 262517, + url: 'https://api.github.com/users/mralexgray', + type: 'User', + login: 'mralexgray', + node_id: 'MDQ6VXNlcjI2MjUxNw==', + html_url: 'https://github.com/mralexgray', + gists_url: 'https://api.github.com/users/mralexgray/gists{/gist_id}', + repos_url: 'https://api.github.com/users/mralexgray/repos', + avatar_url: 'https://avatars.githubusercontent.com/u/262517?v=4', + events_url: + 'https://api.github.com/users/mralexgray/events{/privacy}', + site_admin: false, + gravatar_id: '', + starred_url: + 'https://api.github.com/users/mralexgray/starred{/owner}{/repo}', + followers_url: 'https://api.github.com/users/mralexgray/followers', + following_url: + 'https://api.github.com/users/mralexgray/following{/other_user}', + organizations_url: 'https://api.github.com/users/mralexgray/orgs', + subscriptions_url: + 'https://api.github.com/users/mralexgray/subscriptions', + received_events_url: + 'https://api.github.com/users/mralexgray/received_events', + }, + topics: [], + git_url: 'git://github.com/mralexgray/agvtool-xcode-plugin.git', + license: null, + node_id: 'MDEwOlJlcG9zaXRvcnkzMTgyOTQ5OQ==', + private: false, + ssh_url: 'git@github.com:mralexgray/agvtool-xcode-plugin.git', + svn_url: 'https://github.com/mralexgray/agvtool-xcode-plugin', + archived: false, + disabled: false, + has_wiki: true, + homepage: null, + html_url: 'https://github.com/mralexgray/agvtool-xcode-plugin', + keys_url: + 'https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/keys{/key_id}', + language: 'Objective-C', + tags_url: + 'https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/tags', + watchers: 0, + blobs_url: + 'https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/git/blobs{/sha}', + clone_url: 'https://github.com/mralexgray/agvtool-xcode-plugin.git', + forks_url: + 'https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/forks', + full_name: 'mralexgray/agvtool-xcode-plugin', + has_pages: false, + hooks_url: + 'https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/hooks', + pulls_url: + 'https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/pulls{/number}', + pushed_at: '2015-03-08T00:04:31Z', + teams_url: + 'https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/teams', + trees_url: + 'https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/git/trees{/sha}', + created_at: '2015-03-07T22:15:38Z', + events_url: + 'https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/events', + has_issues: false, + issues_url: + 'https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/issues{/number}', + labels_url: + 'https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/labels{/name}', + merges_url: + 'https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/merges', + mirror_url: null, + updated_at: '2015-03-07T22:15:41Z', + visibility: 'public', + archive_url: + 'https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/{archive_format}{/ref}', + commits_url: + 'https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/commits{/sha}', + compare_url: + 'https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/compare/{base}...{head}', + description: 'this is a plugin wrapper for agvtool for xcode.', + forks_count: 0, + is_template: false, + open_issues: 0, + branches_url: + 'https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/branches{/branch}', + comments_url: + 'https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/comments{/number}', + contents_url: + 'https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/contents/{+path}', + git_refs_url: + 'https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/git/refs{/sha}', + git_tags_url: + 'https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/git/tags{/sha}', + has_projects: true, + releases_url: + 'https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/releases{/id}', + statuses_url: + 'https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/statuses/{sha}', + allow_forking: true, + assignees_url: + 'https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/assignees{/user}', + downloads_url: + 'https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/downloads', + has_downloads: true, + languages_url: + 'https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/languages', + default_branch: 'master', + milestones_url: + 'https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/milestones{/number}', + stargazers_url: + 'https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/stargazers', + watchers_count: 0, + deployments_url: + 'https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/deployments', + git_commits_url: + 'https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/git/commits{/sha}', + subscribers_url: + 'https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/subscribers', + contributors_url: + 'https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/contributors', + issue_events_url: + 'https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/issues/events{/number}', + stargazers_count: 0, + subscription_url: + 'https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/subscription', + collaborators_url: + 'https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/collaborators{/collaborator}', + issue_comment_url: + 'https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/issues/comments{/number}', + notifications_url: + 'https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/notifications{?since,all,participating}', + open_issues_count: 0, + web_commit_signoff_required: false, + }, + { + id: 9227846, + url: 'https://api.github.com/repos/mralexgray/AHContentBrowser', + fork: true, + name: 'AHContentBrowser', + size: 223, + forks: 0, + owner: { + id: 262517, + url: 'https://api.github.com/users/mralexgray', + type: 'User', + login: 'mralexgray', + node_id: 'MDQ6VXNlcjI2MjUxNw==', + html_url: 'https://github.com/mralexgray', + gists_url: 'https://api.github.com/users/mralexgray/gists{/gist_id}', + repos_url: 'https://api.github.com/users/mralexgray/repos', + avatar_url: 'https://avatars.githubusercontent.com/u/262517?v=4', + events_url: + 'https://api.github.com/users/mralexgray/events{/privacy}', + site_admin: false, + gravatar_id: '', + starred_url: + 'https://api.github.com/users/mralexgray/starred{/owner}{/repo}', + followers_url: 'https://api.github.com/users/mralexgray/followers', + following_url: + 'https://api.github.com/users/mralexgray/following{/other_user}', + organizations_url: 'https://api.github.com/users/mralexgray/orgs', + subscriptions_url: + 'https://api.github.com/users/mralexgray/subscriptions', + received_events_url: + 'https://api.github.com/users/mralexgray/received_events', + }, + topics: [], + git_url: 'git://github.com/mralexgray/AHContentBrowser.git', + license: null, + node_id: 'MDEwOlJlcG9zaXRvcnk5MjI3ODQ2', + private: false, + ssh_url: 'git@github.com:mralexgray/AHContentBrowser.git', + svn_url: 'https://github.com/mralexgray/AHContentBrowser', + archived: false, + disabled: false, + has_wiki: true, + homepage: '', + html_url: 'https://github.com/mralexgray/AHContentBrowser', + keys_url: + 'https://api.github.com/repos/mralexgray/AHContentBrowser/keys{/key_id}', + language: 'Objective-C', + tags_url: + 'https://api.github.com/repos/mralexgray/AHContentBrowser/tags', + watchers: 0, + blobs_url: + 'https://api.github.com/repos/mralexgray/AHContentBrowser/git/blobs{/sha}', + clone_url: 'https://github.com/mralexgray/AHContentBrowser.git', + forks_url: + 'https://api.github.com/repos/mralexgray/AHContentBrowser/forks', + full_name: 'mralexgray/AHContentBrowser', + has_pages: false, + hooks_url: + 'https://api.github.com/repos/mralexgray/AHContentBrowser/hooks', + pulls_url: + 'https://api.github.com/repos/mralexgray/AHContentBrowser/pulls{/number}', + pushed_at: '2013-03-13T17:38:23Z', + teams_url: + 'https://api.github.com/repos/mralexgray/AHContentBrowser/teams', + trees_url: + 'https://api.github.com/repos/mralexgray/AHContentBrowser/git/trees{/sha}', + created_at: '2013-04-04T20:56:16Z', + events_url: + 'https://api.github.com/repos/mralexgray/AHContentBrowser/events', + has_issues: false, + issues_url: + 'https://api.github.com/repos/mralexgray/AHContentBrowser/issues{/number}', + labels_url: + 'https://api.github.com/repos/mralexgray/AHContentBrowser/labels{/name}', + merges_url: + 'https://api.github.com/repos/mralexgray/AHContentBrowser/merges', + mirror_url: null, + updated_at: '2015-10-22T05:00:24Z', + visibility: 'public', + archive_url: + 'https://api.github.com/repos/mralexgray/AHContentBrowser/{archive_format}{/ref}', + commits_url: + 'https://api.github.com/repos/mralexgray/AHContentBrowser/commits{/sha}', + compare_url: + 'https://api.github.com/repos/mralexgray/AHContentBrowser/compare/{base}...{head}', + description: + 'A Mac only webview that loads a fast readable version of the website if available.', + forks_count: 0, + is_template: false, + open_issues: 0, + branches_url: + 'https://api.github.com/repos/mralexgray/AHContentBrowser/branches{/branch}', + comments_url: + 'https://api.github.com/repos/mralexgray/AHContentBrowser/comments{/number}', + contents_url: + 'https://api.github.com/repos/mralexgray/AHContentBrowser/contents/{+path}', + git_refs_url: + 'https://api.github.com/repos/mralexgray/AHContentBrowser/git/refs{/sha}', + git_tags_url: + 'https://api.github.com/repos/mralexgray/AHContentBrowser/git/tags{/sha}', + has_projects: true, + releases_url: + 'https://api.github.com/repos/mralexgray/AHContentBrowser/releases{/id}', + statuses_url: + 'https://api.github.com/repos/mralexgray/AHContentBrowser/statuses/{sha}', + allow_forking: true, + assignees_url: + 'https://api.github.com/repos/mralexgray/AHContentBrowser/assignees{/user}', + downloads_url: + 'https://api.github.com/repos/mralexgray/AHContentBrowser/downloads', + has_downloads: true, + languages_url: + 'https://api.github.com/repos/mralexgray/AHContentBrowser/languages', + default_branch: 'master', + milestones_url: + 'https://api.github.com/repos/mralexgray/AHContentBrowser/milestones{/number}', + stargazers_url: + 'https://api.github.com/repos/mralexgray/AHContentBrowser/stargazers', + watchers_count: 0, + deployments_url: + 'https://api.github.com/repos/mralexgray/AHContentBrowser/deployments', + git_commits_url: + 'https://api.github.com/repos/mralexgray/AHContentBrowser/git/commits{/sha}', + subscribers_url: + 'https://api.github.com/repos/mralexgray/AHContentBrowser/subscribers', + contributors_url: + 'https://api.github.com/repos/mralexgray/AHContentBrowser/contributors', + issue_events_url: + 'https://api.github.com/repos/mralexgray/AHContentBrowser/issues/events{/number}', + stargazers_count: 0, + subscription_url: + 'https://api.github.com/repos/mralexgray/AHContentBrowser/subscription', + collaborators_url: + 'https://api.github.com/repos/mralexgray/AHContentBrowser/collaborators{/collaborator}', + issue_comment_url: + 'https://api.github.com/repos/mralexgray/AHContentBrowser/issues/comments{/number}', + notifications_url: + 'https://api.github.com/repos/mralexgray/AHContentBrowser/notifications{?since,all,participating}', + open_issues_count: 0, + web_commit_signoff_required: false, + }, + { + id: 37430328, + url: 'https://api.github.com/repos/mralexgray/AHLaunchCtl', + fork: true, + name: 'AHLaunchCtl', + size: 592, + forks: 0, + owner: { + id: 262517, + url: 'https://api.github.com/users/mralexgray', + type: 'User', + login: 'mralexgray', + node_id: 'MDQ6VXNlcjI2MjUxNw==', + html_url: 'https://github.com/mralexgray', + gists_url: 'https://api.github.com/users/mralexgray/gists{/gist_id}', + repos_url: 'https://api.github.com/users/mralexgray/repos', + avatar_url: 'https://avatars.githubusercontent.com/u/262517?v=4', + events_url: + 'https://api.github.com/users/mralexgray/events{/privacy}', + site_admin: false, + gravatar_id: '', + starred_url: + 'https://api.github.com/users/mralexgray/starred{/owner}{/repo}', + followers_url: 'https://api.github.com/users/mralexgray/followers', + following_url: + 'https://api.github.com/users/mralexgray/following{/other_user}', + organizations_url: 'https://api.github.com/users/mralexgray/orgs', + subscriptions_url: + 'https://api.github.com/users/mralexgray/subscriptions', + received_events_url: + 'https://api.github.com/users/mralexgray/received_events', + }, + topics: [], + git_url: 'git://github.com/mralexgray/AHLaunchCtl.git', + license: { + key: 'mit', + url: 'https://api.github.com/licenses/mit', + name: 'MIT License', + node_id: 'MDc6TGljZW5zZTEz', + spdx_id: 'MIT', + }, + node_id: 'MDEwOlJlcG9zaXRvcnkzNzQzMDMyOA==', + private: false, + ssh_url: 'git@github.com:mralexgray/AHLaunchCtl.git', + svn_url: 'https://github.com/mralexgray/AHLaunchCtl', + archived: false, + disabled: false, + has_wiki: true, + homepage: '', + html_url: 'https://github.com/mralexgray/AHLaunchCtl', + keys_url: + 'https://api.github.com/repos/mralexgray/AHLaunchCtl/keys{/key_id}', + language: 'Objective-C', + tags_url: 'https://api.github.com/repos/mralexgray/AHLaunchCtl/tags', + watchers: 0, + blobs_url: + 'https://api.github.com/repos/mralexgray/AHLaunchCtl/git/blobs{/sha}', + clone_url: 'https://github.com/mralexgray/AHLaunchCtl.git', + forks_url: 'https://api.github.com/repos/mralexgray/AHLaunchCtl/forks', + full_name: 'mralexgray/AHLaunchCtl', + has_pages: false, + hooks_url: 'https://api.github.com/repos/mralexgray/AHLaunchCtl/hooks', + pulls_url: + 'https://api.github.com/repos/mralexgray/AHLaunchCtl/pulls{/number}', + pushed_at: '2015-05-26T18:50:48Z', + teams_url: 'https://api.github.com/repos/mralexgray/AHLaunchCtl/teams', + trees_url: + 'https://api.github.com/repos/mralexgray/AHLaunchCtl/git/trees{/sha}', + created_at: '2015-06-14T21:31:03Z', + events_url: + 'https://api.github.com/repos/mralexgray/AHLaunchCtl/events', + has_issues: false, + issues_url: + 'https://api.github.com/repos/mralexgray/AHLaunchCtl/issues{/number}', + labels_url: + 'https://api.github.com/repos/mralexgray/AHLaunchCtl/labels{/name}', + merges_url: + 'https://api.github.com/repos/mralexgray/AHLaunchCtl/merges', + mirror_url: null, + updated_at: '2015-06-14T21:31:04Z', + visibility: 'public', + archive_url: + 'https://api.github.com/repos/mralexgray/AHLaunchCtl/{archive_format}{/ref}', + commits_url: + 'https://api.github.com/repos/mralexgray/AHLaunchCtl/commits{/sha}', + compare_url: + 'https://api.github.com/repos/mralexgray/AHLaunchCtl/compare/{base}...{head}', + description: 'LaunchD Framework for Cocoa Apps', + forks_count: 0, + is_template: false, + open_issues: 0, + branches_url: + 'https://api.github.com/repos/mralexgray/AHLaunchCtl/branches{/branch}', + comments_url: + 'https://api.github.com/repos/mralexgray/AHLaunchCtl/comments{/number}', + contents_url: + 'https://api.github.com/repos/mralexgray/AHLaunchCtl/contents/{+path}', + git_refs_url: + 'https://api.github.com/repos/mralexgray/AHLaunchCtl/git/refs{/sha}', + git_tags_url: + 'https://api.github.com/repos/mralexgray/AHLaunchCtl/git/tags{/sha}', + has_projects: true, + releases_url: + 'https://api.github.com/repos/mralexgray/AHLaunchCtl/releases{/id}', + statuses_url: + 'https://api.github.com/repos/mralexgray/AHLaunchCtl/statuses/{sha}', + allow_forking: true, + assignees_url: + 'https://api.github.com/repos/mralexgray/AHLaunchCtl/assignees{/user}', + downloads_url: + 'https://api.github.com/repos/mralexgray/AHLaunchCtl/downloads', + has_downloads: true, + languages_url: + 'https://api.github.com/repos/mralexgray/AHLaunchCtl/languages', + default_branch: 'master', + milestones_url: + 'https://api.github.com/repos/mralexgray/AHLaunchCtl/milestones{/number}', + stargazers_url: + 'https://api.github.com/repos/mralexgray/AHLaunchCtl/stargazers', + watchers_count: 0, + deployments_url: + 'https://api.github.com/repos/mralexgray/AHLaunchCtl/deployments', + git_commits_url: + 'https://api.github.com/repos/mralexgray/AHLaunchCtl/git/commits{/sha}', + subscribers_url: + 'https://api.github.com/repos/mralexgray/AHLaunchCtl/subscribers', + contributors_url: + 'https://api.github.com/repos/mralexgray/AHLaunchCtl/contributors', + issue_events_url: + 'https://api.github.com/repos/mralexgray/AHLaunchCtl/issues/events{/number}', + stargazers_count: 0, + subscription_url: + 'https://api.github.com/repos/mralexgray/AHLaunchCtl/subscription', + collaborators_url: + 'https://api.github.com/repos/mralexgray/AHLaunchCtl/collaborators{/collaborator}', + issue_comment_url: + 'https://api.github.com/repos/mralexgray/AHLaunchCtl/issues/comments{/number}', + notifications_url: + 'https://api.github.com/repos/mralexgray/AHLaunchCtl/notifications{?since,all,participating}', + open_issues_count: 0, + web_commit_signoff_required: false, + }, + { + id: 9167473, + url: 'https://api.github.com/repos/mralexgray/AHLayout', + fork: true, + name: 'AHLayout', + size: 359, + forks: 0, + owner: { + id: 262517, + url: 'https://api.github.com/users/mralexgray', + type: 'User', + login: 'mralexgray', + node_id: 'MDQ6VXNlcjI2MjUxNw==', + html_url: 'https://github.com/mralexgray', + gists_url: 'https://api.github.com/users/mralexgray/gists{/gist_id}', + repos_url: 'https://api.github.com/users/mralexgray/repos', + avatar_url: 'https://avatars.githubusercontent.com/u/262517?v=4', + events_url: + 'https://api.github.com/users/mralexgray/events{/privacy}', + site_admin: false, + gravatar_id: '', + starred_url: + 'https://api.github.com/users/mralexgray/starred{/owner}{/repo}', + followers_url: 'https://api.github.com/users/mralexgray/followers', + following_url: + 'https://api.github.com/users/mralexgray/following{/other_user}', + organizations_url: 'https://api.github.com/users/mralexgray/orgs', + subscriptions_url: + 'https://api.github.com/users/mralexgray/subscriptions', + received_events_url: + 'https://api.github.com/users/mralexgray/received_events', + }, + topics: [], + git_url: 'git://github.com/mralexgray/AHLayout.git', + license: null, + node_id: 'MDEwOlJlcG9zaXRvcnk5MTY3NDcz', + private: false, + ssh_url: 'git@github.com:mralexgray/AHLayout.git', + svn_url: 'https://github.com/mralexgray/AHLayout', + archived: false, + disabled: false, + has_wiki: true, + homepage: null, + html_url: 'https://github.com/mralexgray/AHLayout', + keys_url: + 'https://api.github.com/repos/mralexgray/AHLayout/keys{/key_id}', + language: 'Objective-C', + tags_url: 'https://api.github.com/repos/mralexgray/AHLayout/tags', + watchers: 0, + blobs_url: + 'https://api.github.com/repos/mralexgray/AHLayout/git/blobs{/sha}', + clone_url: 'https://github.com/mralexgray/AHLayout.git', + forks_url: 'https://api.github.com/repos/mralexgray/AHLayout/forks', + full_name: 'mralexgray/AHLayout', + has_pages: false, + hooks_url: 'https://api.github.com/repos/mralexgray/AHLayout/hooks', + pulls_url: + 'https://api.github.com/repos/mralexgray/AHLayout/pulls{/number}', + pushed_at: '2013-07-08T02:31:14Z', + teams_url: 'https://api.github.com/repos/mralexgray/AHLayout/teams', + trees_url: + 'https://api.github.com/repos/mralexgray/AHLayout/git/trees{/sha}', + created_at: '2013-04-02T10:10:30Z', + events_url: 'https://api.github.com/repos/mralexgray/AHLayout/events', + has_issues: false, + issues_url: + 'https://api.github.com/repos/mralexgray/AHLayout/issues{/number}', + labels_url: + 'https://api.github.com/repos/mralexgray/AHLayout/labels{/name}', + merges_url: 'https://api.github.com/repos/mralexgray/AHLayout/merges', + mirror_url: null, + updated_at: '2013-07-08T02:31:17Z', + visibility: 'public', + archive_url: + 'https://api.github.com/repos/mralexgray/AHLayout/{archive_format}{/ref}', + commits_url: + 'https://api.github.com/repos/mralexgray/AHLayout/commits{/sha}', + compare_url: + 'https://api.github.com/repos/mralexgray/AHLayout/compare/{base}...{head}', + description: 'AHLayout', + forks_count: 0, + is_template: false, + open_issues: 0, + branches_url: + 'https://api.github.com/repos/mralexgray/AHLayout/branches{/branch}', + comments_url: + 'https://api.github.com/repos/mralexgray/AHLayout/comments{/number}', + contents_url: + 'https://api.github.com/repos/mralexgray/AHLayout/contents/{+path}', + git_refs_url: + 'https://api.github.com/repos/mralexgray/AHLayout/git/refs{/sha}', + git_tags_url: + 'https://api.github.com/repos/mralexgray/AHLayout/git/tags{/sha}', + has_projects: true, + releases_url: + 'https://api.github.com/repos/mralexgray/AHLayout/releases{/id}', + statuses_url: + 'https://api.github.com/repos/mralexgray/AHLayout/statuses/{sha}', + allow_forking: true, + assignees_url: + 'https://api.github.com/repos/mralexgray/AHLayout/assignees{/user}', + downloads_url: + 'https://api.github.com/repos/mralexgray/AHLayout/downloads', + has_downloads: true, + languages_url: + 'https://api.github.com/repos/mralexgray/AHLayout/languages', + default_branch: 'master', + milestones_url: + 'https://api.github.com/repos/mralexgray/AHLayout/milestones{/number}', + stargazers_url: + 'https://api.github.com/repos/mralexgray/AHLayout/stargazers', + watchers_count: 0, + deployments_url: + 'https://api.github.com/repos/mralexgray/AHLayout/deployments', + git_commits_url: + 'https://api.github.com/repos/mralexgray/AHLayout/git/commits{/sha}', + subscribers_url: + 'https://api.github.com/repos/mralexgray/AHLayout/subscribers', + contributors_url: + 'https://api.github.com/repos/mralexgray/AHLayout/contributors', + issue_events_url: + 'https://api.github.com/repos/mralexgray/AHLayout/issues/events{/number}', + stargazers_count: 0, + subscription_url: + 'https://api.github.com/repos/mralexgray/AHLayout/subscription', + collaborators_url: + 'https://api.github.com/repos/mralexgray/AHLayout/collaborators{/collaborator}', + issue_comment_url: + 'https://api.github.com/repos/mralexgray/AHLayout/issues/comments{/number}', + notifications_url: + 'https://api.github.com/repos/mralexgray/AHLayout/notifications{?since,all,participating}', + open_issues_count: 0, + web_commit_signoff_required: false, + }, + { + id: 18450201, + url: 'https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework', + fork: true, + name: 'Airmail-Plug-In-Framework', + size: 888, + forks: 0, + owner: { + id: 262517, + url: 'https://api.github.com/users/mralexgray', + type: 'User', + login: 'mralexgray', + node_id: 'MDQ6VXNlcjI2MjUxNw==', + html_url: 'https://github.com/mralexgray', + gists_url: 'https://api.github.com/users/mralexgray/gists{/gist_id}', + repos_url: 'https://api.github.com/users/mralexgray/repos', + avatar_url: 'https://avatars.githubusercontent.com/u/262517?v=4', + events_url: + 'https://api.github.com/users/mralexgray/events{/privacy}', + site_admin: false, + gravatar_id: '', + starred_url: + 'https://api.github.com/users/mralexgray/starred{/owner}{/repo}', + followers_url: 'https://api.github.com/users/mralexgray/followers', + following_url: + 'https://api.github.com/users/mralexgray/following{/other_user}', + organizations_url: 'https://api.github.com/users/mralexgray/orgs', + subscriptions_url: + 'https://api.github.com/users/mralexgray/subscriptions', + received_events_url: + 'https://api.github.com/users/mralexgray/received_events', + }, + topics: [], + git_url: 'git://github.com/mralexgray/Airmail-Plug-In-Framework.git', + license: { + key: 'gpl-2.0', + url: 'https://api.github.com/licenses/gpl-2.0', + name: 'GNU General Public License v2.0', + node_id: 'MDc6TGljZW5zZTg=', + spdx_id: 'GPL-2.0', + }, + node_id: 'MDEwOlJlcG9zaXRvcnkxODQ1MDIwMQ==', + private: false, + ssh_url: 'git@github.com:mralexgray/Airmail-Plug-In-Framework.git', + svn_url: 'https://github.com/mralexgray/Airmail-Plug-In-Framework', + archived: false, + disabled: false, + has_wiki: true, + homepage: null, + html_url: 'https://github.com/mralexgray/Airmail-Plug-In-Framework', + keys_url: + 'https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/keys{/key_id}', + language: null, + tags_url: + 'https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/tags', + watchers: 0, + blobs_url: + 'https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/git/blobs{/sha}', + clone_url: + 'https://github.com/mralexgray/Airmail-Plug-In-Framework.git', + forks_url: + 'https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/forks', + full_name: 'mralexgray/Airmail-Plug-In-Framework', + has_pages: false, + hooks_url: + 'https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/hooks', + pulls_url: + 'https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/pulls{/number}', + pushed_at: '2014-03-27T15:42:19Z', + teams_url: + 'https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/teams', + trees_url: + 'https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/git/trees{/sha}', + created_at: '2014-04-04T19:33:54Z', + events_url: + 'https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/events', + has_issues: false, + issues_url: + 'https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/issues{/number}', + labels_url: + 'https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/labels{/name}', + merges_url: + 'https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/merges', + mirror_url: null, + updated_at: '2014-11-23T19:31:04Z', + visibility: 'public', + archive_url: + 'https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/{archive_format}{/ref}', + commits_url: + 'https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/commits{/sha}', + compare_url: + 'https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/compare/{base}...{head}', + description: null, + forks_count: 0, + is_template: false, + open_issues: 0, + branches_url: + 'https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/branches{/branch}', + comments_url: + 'https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/comments{/number}', + contents_url: + 'https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/contents/{+path}', + git_refs_url: + 'https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/git/refs{/sha}', + git_tags_url: + 'https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/git/tags{/sha}', + has_projects: true, + releases_url: + 'https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/releases{/id}', + statuses_url: + 'https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/statuses/{sha}', + allow_forking: true, + assignees_url: + 'https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/assignees{/user}', + downloads_url: + 'https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/downloads', + has_downloads: true, + languages_url: + 'https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/languages', + default_branch: 'master', + milestones_url: + 'https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/milestones{/number}', + stargazers_url: + 'https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/stargazers', + watchers_count: 0, + deployments_url: + 'https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/deployments', + git_commits_url: + 'https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/git/commits{/sha}', + subscribers_url: + 'https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/subscribers', + contributors_url: + 'https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/contributors', + issue_events_url: + 'https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/issues/events{/number}', + stargazers_count: 0, + subscription_url: + 'https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/subscription', + collaborators_url: + 'https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/collaborators{/collaborator}', + issue_comment_url: + 'https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/issues/comments{/number}', + notifications_url: + 'https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/notifications{?since,all,participating}', + open_issues_count: 0, + web_commit_signoff_required: false, + }, + { + id: 5203219, + url: 'https://api.github.com/repos/mralexgray/AJS-iTunes-API', + fork: true, + name: 'AJS-iTunes-API', + size: 103, + forks: 0, + owner: { + id: 262517, + url: 'https://api.github.com/users/mralexgray', + type: 'User', + login: 'mralexgray', + node_id: 'MDQ6VXNlcjI2MjUxNw==', + html_url: 'https://github.com/mralexgray', + gists_url: 'https://api.github.com/users/mralexgray/gists{/gist_id}', + repos_url: 'https://api.github.com/users/mralexgray/repos', + avatar_url: 'https://avatars.githubusercontent.com/u/262517?v=4', + events_url: + 'https://api.github.com/users/mralexgray/events{/privacy}', + site_admin: false, + gravatar_id: '', + starred_url: + 'https://api.github.com/users/mralexgray/starred{/owner}{/repo}', + followers_url: 'https://api.github.com/users/mralexgray/followers', + following_url: + 'https://api.github.com/users/mralexgray/following{/other_user}', + organizations_url: 'https://api.github.com/users/mralexgray/orgs', + subscriptions_url: + 'https://api.github.com/users/mralexgray/subscriptions', + received_events_url: + 'https://api.github.com/users/mralexgray/received_events', + }, + topics: [], + git_url: 'git://github.com/mralexgray/AJS-iTunes-API.git', + license: null, + node_id: 'MDEwOlJlcG9zaXRvcnk1MjAzMjE5', + private: false, + ssh_url: 'git@github.com:mralexgray/AJS-iTunes-API.git', + svn_url: 'https://github.com/mralexgray/AJS-iTunes-API', + archived: false, + disabled: false, + has_wiki: true, + homepage: '', + html_url: 'https://github.com/mralexgray/AJS-iTunes-API', + keys_url: + 'https://api.github.com/repos/mralexgray/AJS-iTunes-API/keys{/key_id}', + language: 'Objective-C', + tags_url: 'https://api.github.com/repos/mralexgray/AJS-iTunes-API/tags', + watchers: 2, + blobs_url: + 'https://api.github.com/repos/mralexgray/AJS-iTunes-API/git/blobs{/sha}', + clone_url: 'https://github.com/mralexgray/AJS-iTunes-API.git', + forks_url: + 'https://api.github.com/repos/mralexgray/AJS-iTunes-API/forks', + full_name: 'mralexgray/AJS-iTunes-API', + has_pages: false, + hooks_url: + 'https://api.github.com/repos/mralexgray/AJS-iTunes-API/hooks', + pulls_url: + 'https://api.github.com/repos/mralexgray/AJS-iTunes-API/pulls{/number}', + pushed_at: '2011-10-30T22:26:48Z', + teams_url: + 'https://api.github.com/repos/mralexgray/AJS-iTunes-API/teams', + trees_url: + 'https://api.github.com/repos/mralexgray/AJS-iTunes-API/git/trees{/sha}', + created_at: '2012-07-27T10:20:58Z', + events_url: + 'https://api.github.com/repos/mralexgray/AJS-iTunes-API/events', + has_issues: false, + issues_url: + 'https://api.github.com/repos/mralexgray/AJS-iTunes-API/issues{/number}', + labels_url: + 'https://api.github.com/repos/mralexgray/AJS-iTunes-API/labels{/name}', + merges_url: + 'https://api.github.com/repos/mralexgray/AJS-iTunes-API/merges', + mirror_url: null, + updated_at: '2013-01-11T11:00:05Z', + visibility: 'public', + archive_url: + 'https://api.github.com/repos/mralexgray/AJS-iTunes-API/{archive_format}{/ref}', + commits_url: + 'https://api.github.com/repos/mralexgray/AJS-iTunes-API/commits{/sha}', + compare_url: + 'https://api.github.com/repos/mralexgray/AJS-iTunes-API/compare/{base}...{head}', + description: + 'Cocoa wrapper for the iTunes search API - for iOS and Mac OSX projects', + forks_count: 0, + is_template: false, + open_issues: 0, + branches_url: + 'https://api.github.com/repos/mralexgray/AJS-iTunes-API/branches{/branch}', + comments_url: + 'https://api.github.com/repos/mralexgray/AJS-iTunes-API/comments{/number}', + contents_url: + 'https://api.github.com/repos/mralexgray/AJS-iTunes-API/contents/{+path}', + git_refs_url: + 'https://api.github.com/repos/mralexgray/AJS-iTunes-API/git/refs{/sha}', + git_tags_url: + 'https://api.github.com/repos/mralexgray/AJS-iTunes-API/git/tags{/sha}', + has_projects: true, + releases_url: + 'https://api.github.com/repos/mralexgray/AJS-iTunes-API/releases{/id}', + statuses_url: + 'https://api.github.com/repos/mralexgray/AJS-iTunes-API/statuses/{sha}', + allow_forking: true, + assignees_url: + 'https://api.github.com/repos/mralexgray/AJS-iTunes-API/assignees{/user}', + downloads_url: + 'https://api.github.com/repos/mralexgray/AJS-iTunes-API/downloads', + has_downloads: true, + languages_url: + 'https://api.github.com/repos/mralexgray/AJS-iTunes-API/languages', + default_branch: 'master', + milestones_url: + 'https://api.github.com/repos/mralexgray/AJS-iTunes-API/milestones{/number}', + stargazers_url: + 'https://api.github.com/repos/mralexgray/AJS-iTunes-API/stargazers', + watchers_count: 2, + deployments_url: + 'https://api.github.com/repos/mralexgray/AJS-iTunes-API/deployments', + git_commits_url: + 'https://api.github.com/repos/mralexgray/AJS-iTunes-API/git/commits{/sha}', + subscribers_url: + 'https://api.github.com/repos/mralexgray/AJS-iTunes-API/subscribers', + contributors_url: + 'https://api.github.com/repos/mralexgray/AJS-iTunes-API/contributors', + issue_events_url: + 'https://api.github.com/repos/mralexgray/AJS-iTunes-API/issues/events{/number}', + stargazers_count: 2, + subscription_url: + 'https://api.github.com/repos/mralexgray/AJS-iTunes-API/subscription', + collaborators_url: + 'https://api.github.com/repos/mralexgray/AJS-iTunes-API/collaborators{/collaborator}', + issue_comment_url: + 'https://api.github.com/repos/mralexgray/AJS-iTunes-API/issues/comments{/number}', + notifications_url: + 'https://api.github.com/repos/mralexgray/AJS-iTunes-API/notifications{?since,all,participating}', + open_issues_count: 0, + web_commit_signoff_required: false, + }, + { + id: 10093801, + url: 'https://api.github.com/repos/mralexgray/Alcatraz', + fork: true, + name: 'Alcatraz', + size: 3668, + forks: 0, + owner: { + id: 262517, + url: 'https://api.github.com/users/mralexgray', + type: 'User', + login: 'mralexgray', + node_id: 'MDQ6VXNlcjI2MjUxNw==', + html_url: 'https://github.com/mralexgray', + gists_url: 'https://api.github.com/users/mralexgray/gists{/gist_id}', + repos_url: 'https://api.github.com/users/mralexgray/repos', + avatar_url: 'https://avatars.githubusercontent.com/u/262517?v=4', + events_url: + 'https://api.github.com/users/mralexgray/events{/privacy}', + site_admin: false, + gravatar_id: '', + starred_url: + 'https://api.github.com/users/mralexgray/starred{/owner}{/repo}', + followers_url: 'https://api.github.com/users/mralexgray/followers', + following_url: + 'https://api.github.com/users/mralexgray/following{/other_user}', + organizations_url: 'https://api.github.com/users/mralexgray/orgs', + subscriptions_url: + 'https://api.github.com/users/mralexgray/subscriptions', + received_events_url: + 'https://api.github.com/users/mralexgray/received_events', + }, + topics: [], + git_url: 'git://github.com/mralexgray/Alcatraz.git', + license: { + key: 'mit', + url: 'https://api.github.com/licenses/mit', + name: 'MIT License', + node_id: 'MDc6TGljZW5zZTEz', + spdx_id: 'MIT', + }, + node_id: 'MDEwOlJlcG9zaXRvcnkxMDA5MzgwMQ==', + private: false, + ssh_url: 'git@github.com:mralexgray/Alcatraz.git', + svn_url: 'https://github.com/mralexgray/Alcatraz', + archived: false, + disabled: false, + has_wiki: false, + homepage: 'mneorr.github.com/Alcatraz', + html_url: 'https://github.com/mralexgray/Alcatraz', + keys_url: + 'https://api.github.com/repos/mralexgray/Alcatraz/keys{/key_id}', + language: 'Objective-C', + tags_url: 'https://api.github.com/repos/mralexgray/Alcatraz/tags', + watchers: 0, + blobs_url: + 'https://api.github.com/repos/mralexgray/Alcatraz/git/blobs{/sha}', + clone_url: 'https://github.com/mralexgray/Alcatraz.git', + forks_url: 'https://api.github.com/repos/mralexgray/Alcatraz/forks', + full_name: 'mralexgray/Alcatraz', + has_pages: false, + hooks_url: 'https://api.github.com/repos/mralexgray/Alcatraz/hooks', + pulls_url: + 'https://api.github.com/repos/mralexgray/Alcatraz/pulls{/number}', + pushed_at: '2014-03-19T12:50:37Z', + teams_url: 'https://api.github.com/repos/mralexgray/Alcatraz/teams', + trees_url: + 'https://api.github.com/repos/mralexgray/Alcatraz/git/trees{/sha}', + created_at: '2013-05-16T04:41:13Z', + events_url: 'https://api.github.com/repos/mralexgray/Alcatraz/events', + has_issues: false, + issues_url: + 'https://api.github.com/repos/mralexgray/Alcatraz/issues{/number}', + labels_url: + 'https://api.github.com/repos/mralexgray/Alcatraz/labels{/name}', + merges_url: 'https://api.github.com/repos/mralexgray/Alcatraz/merges', + mirror_url: null, + updated_at: '2014-03-19T20:38:35Z', + visibility: 'public', + archive_url: + 'https://api.github.com/repos/mralexgray/Alcatraz/{archive_format}{/ref}', + commits_url: + 'https://api.github.com/repos/mralexgray/Alcatraz/commits{/sha}', + compare_url: + 'https://api.github.com/repos/mralexgray/Alcatraz/compare/{base}...{head}', + description: 'The most awesome (and only) Xcode package manager!', + forks_count: 0, + is_template: false, + open_issues: 0, + branches_url: + 'https://api.github.com/repos/mralexgray/Alcatraz/branches{/branch}', + comments_url: + 'https://api.github.com/repos/mralexgray/Alcatraz/comments{/number}', + contents_url: + 'https://api.github.com/repos/mralexgray/Alcatraz/contents/{+path}', + git_refs_url: + 'https://api.github.com/repos/mralexgray/Alcatraz/git/refs{/sha}', + git_tags_url: + 'https://api.github.com/repos/mralexgray/Alcatraz/git/tags{/sha}', + has_projects: true, + releases_url: + 'https://api.github.com/repos/mralexgray/Alcatraz/releases{/id}', + statuses_url: + 'https://api.github.com/repos/mralexgray/Alcatraz/statuses/{sha}', + allow_forking: true, + assignees_url: + 'https://api.github.com/repos/mralexgray/Alcatraz/assignees{/user}', + downloads_url: + 'https://api.github.com/repos/mralexgray/Alcatraz/downloads', + has_downloads: true, + languages_url: + 'https://api.github.com/repos/mralexgray/Alcatraz/languages', + default_branch: 'master', + milestones_url: + 'https://api.github.com/repos/mralexgray/Alcatraz/milestones{/number}', + stargazers_url: + 'https://api.github.com/repos/mralexgray/Alcatraz/stargazers', + watchers_count: 0, + deployments_url: + 'https://api.github.com/repos/mralexgray/Alcatraz/deployments', + git_commits_url: + 'https://api.github.com/repos/mralexgray/Alcatraz/git/commits{/sha}', + subscribers_url: + 'https://api.github.com/repos/mralexgray/Alcatraz/subscribers', + contributors_url: + 'https://api.github.com/repos/mralexgray/Alcatraz/contributors', + issue_events_url: + 'https://api.github.com/repos/mralexgray/Alcatraz/issues/events{/number}', + stargazers_count: 0, + subscription_url: + 'https://api.github.com/repos/mralexgray/Alcatraz/subscription', + collaborators_url: + 'https://api.github.com/repos/mralexgray/Alcatraz/collaborators{/collaborator}', + issue_comment_url: + 'https://api.github.com/repos/mralexgray/Alcatraz/issues/comments{/number}', + notifications_url: + 'https://api.github.com/repos/mralexgray/Alcatraz/notifications{?since,all,participating}', + open_issues_count: 0, + web_commit_signoff_required: false, + }, + { + id: 12916552, + url: 'https://api.github.com/repos/mralexgray/alcatraz-packages', + fork: true, + name: 'alcatraz-packages', + size: 826, + forks: 0, + owner: { + id: 262517, + url: 'https://api.github.com/users/mralexgray', + type: 'User', + login: 'mralexgray', + node_id: 'MDQ6VXNlcjI2MjUxNw==', + html_url: 'https://github.com/mralexgray', + gists_url: 'https://api.github.com/users/mralexgray/gists{/gist_id}', + repos_url: 'https://api.github.com/users/mralexgray/repos', + avatar_url: 'https://avatars.githubusercontent.com/u/262517?v=4', + events_url: + 'https://api.github.com/users/mralexgray/events{/privacy}', + site_admin: false, + gravatar_id: '', + starred_url: + 'https://api.github.com/users/mralexgray/starred{/owner}{/repo}', + followers_url: 'https://api.github.com/users/mralexgray/followers', + following_url: + 'https://api.github.com/users/mralexgray/following{/other_user}', + organizations_url: 'https://api.github.com/users/mralexgray/orgs', + subscriptions_url: + 'https://api.github.com/users/mralexgray/subscriptions', + received_events_url: + 'https://api.github.com/users/mralexgray/received_events', + }, + topics: [], + git_url: 'git://github.com/mralexgray/alcatraz-packages.git', + license: null, + node_id: 'MDEwOlJlcG9zaXRvcnkxMjkxNjU1Mg==', + private: false, + ssh_url: 'git@github.com:mralexgray/alcatraz-packages.git', + svn_url: 'https://github.com/mralexgray/alcatraz-packages', + archived: false, + disabled: false, + has_wiki: true, + homepage: 'mneorr.github.com/Alcatraz', + html_url: 'https://github.com/mralexgray/alcatraz-packages', + keys_url: + 'https://api.github.com/repos/mralexgray/alcatraz-packages/keys{/key_id}', + language: 'Ruby', + tags_url: + 'https://api.github.com/repos/mralexgray/alcatraz-packages/tags', + watchers: 0, + blobs_url: + 'https://api.github.com/repos/mralexgray/alcatraz-packages/git/blobs{/sha}', + clone_url: 'https://github.com/mralexgray/alcatraz-packages.git', + forks_url: + 'https://api.github.com/repos/mralexgray/alcatraz-packages/forks', + full_name: 'mralexgray/alcatraz-packages', + has_pages: false, + hooks_url: + 'https://api.github.com/repos/mralexgray/alcatraz-packages/hooks', + pulls_url: + 'https://api.github.com/repos/mralexgray/alcatraz-packages/pulls{/number}', + pushed_at: '2015-12-14T16:21:31Z', + teams_url: + 'https://api.github.com/repos/mralexgray/alcatraz-packages/teams', + trees_url: + 'https://api.github.com/repos/mralexgray/alcatraz-packages/git/trees{/sha}', + created_at: '2013-09-18T07:15:24Z', + events_url: + 'https://api.github.com/repos/mralexgray/alcatraz-packages/events', + has_issues: false, + issues_url: + 'https://api.github.com/repos/mralexgray/alcatraz-packages/issues{/number}', + labels_url: + 'https://api.github.com/repos/mralexgray/alcatraz-packages/labels{/name}', + merges_url: + 'https://api.github.com/repos/mralexgray/alcatraz-packages/merges', + mirror_url: null, + updated_at: '2015-11-10T20:52:30Z', + visibility: 'public', + archive_url: + 'https://api.github.com/repos/mralexgray/alcatraz-packages/{archive_format}{/ref}', + commits_url: + 'https://api.github.com/repos/mralexgray/alcatraz-packages/commits{/sha}', + compare_url: + 'https://api.github.com/repos/mralexgray/alcatraz-packages/compare/{base}...{head}', + description: 'Package list repository for Alcatraz', + forks_count: 0, + is_template: false, + open_issues: 0, + branches_url: + 'https://api.github.com/repos/mralexgray/alcatraz-packages/branches{/branch}', + comments_url: + 'https://api.github.com/repos/mralexgray/alcatraz-packages/comments{/number}', + contents_url: + 'https://api.github.com/repos/mralexgray/alcatraz-packages/contents/{+path}', + git_refs_url: + 'https://api.github.com/repos/mralexgray/alcatraz-packages/git/refs{/sha}', + git_tags_url: + 'https://api.github.com/repos/mralexgray/alcatraz-packages/git/tags{/sha}', + has_projects: true, + releases_url: + 'https://api.github.com/repos/mralexgray/alcatraz-packages/releases{/id}', + statuses_url: + 'https://api.github.com/repos/mralexgray/alcatraz-packages/statuses/{sha}', + allow_forking: true, + assignees_url: + 'https://api.github.com/repos/mralexgray/alcatraz-packages/assignees{/user}', + downloads_url: + 'https://api.github.com/repos/mralexgray/alcatraz-packages/downloads', + has_downloads: true, + languages_url: + 'https://api.github.com/repos/mralexgray/alcatraz-packages/languages', + default_branch: 'master', + milestones_url: + 'https://api.github.com/repos/mralexgray/alcatraz-packages/milestones{/number}', + stargazers_url: + 'https://api.github.com/repos/mralexgray/alcatraz-packages/stargazers', + watchers_count: 0, + deployments_url: + 'https://api.github.com/repos/mralexgray/alcatraz-packages/deployments', + git_commits_url: + 'https://api.github.com/repos/mralexgray/alcatraz-packages/git/commits{/sha}', + subscribers_url: + 'https://api.github.com/repos/mralexgray/alcatraz-packages/subscribers', + contributors_url: + 'https://api.github.com/repos/mralexgray/alcatraz-packages/contributors', + issue_events_url: + 'https://api.github.com/repos/mralexgray/alcatraz-packages/issues/events{/number}', + stargazers_count: 0, + subscription_url: + 'https://api.github.com/repos/mralexgray/alcatraz-packages/subscription', + collaborators_url: + 'https://api.github.com/repos/mralexgray/alcatraz-packages/collaborators{/collaborator}', + issue_comment_url: + 'https://api.github.com/repos/mralexgray/alcatraz-packages/issues/comments{/number}', + notifications_url: + 'https://api.github.com/repos/mralexgray/alcatraz-packages/notifications{?since,all,participating}', + open_issues_count: 0, + web_commit_signoff_required: false, + }, + { + id: 44278362, + url: 'https://api.github.com/repos/mralexgray/alexicons', + fork: true, + name: 'alexicons', + size: 257, + forks: 0, + owner: { + id: 262517, + url: 'https://api.github.com/users/mralexgray', + type: 'User', + login: 'mralexgray', + node_id: 'MDQ6VXNlcjI2MjUxNw==', + html_url: 'https://github.com/mralexgray', + gists_url: 'https://api.github.com/users/mralexgray/gists{/gist_id}', + repos_url: 'https://api.github.com/users/mralexgray/repos', + avatar_url: 'https://avatars.githubusercontent.com/u/262517?v=4', + events_url: + 'https://api.github.com/users/mralexgray/events{/privacy}', + site_admin: false, + gravatar_id: '', + starred_url: + 'https://api.github.com/users/mralexgray/starred{/owner}{/repo}', + followers_url: 'https://api.github.com/users/mralexgray/followers', + following_url: + 'https://api.github.com/users/mralexgray/following{/other_user}', + organizations_url: 'https://api.github.com/users/mralexgray/orgs', + subscriptions_url: + 'https://api.github.com/users/mralexgray/subscriptions', + received_events_url: + 'https://api.github.com/users/mralexgray/received_events', + }, + topics: [], + git_url: 'git://github.com/mralexgray/alexicons.git', + license: null, + node_id: 'MDEwOlJlcG9zaXRvcnk0NDI3ODM2Mg==', + private: false, + ssh_url: 'git@github.com:mralexgray/alexicons.git', + svn_url: 'https://github.com/mralexgray/alexicons', + archived: false, + disabled: false, + has_wiki: false, + homepage: null, + html_url: 'https://github.com/mralexgray/alexicons', + keys_url: + 'https://api.github.com/repos/mralexgray/alexicons/keys{/key_id}', + language: 'CoffeeScript', + tags_url: 'https://api.github.com/repos/mralexgray/alexicons/tags', + watchers: 0, + blobs_url: + 'https://api.github.com/repos/mralexgray/alexicons/git/blobs{/sha}', + clone_url: 'https://github.com/mralexgray/alexicons.git', + forks_url: 'https://api.github.com/repos/mralexgray/alexicons/forks', + full_name: 'mralexgray/alexicons', + has_pages: false, + hooks_url: 'https://api.github.com/repos/mralexgray/alexicons/hooks', + pulls_url: + 'https://api.github.com/repos/mralexgray/alexicons/pulls{/number}', + pushed_at: '2015-10-16T03:57:51Z', + teams_url: 'https://api.github.com/repos/mralexgray/alexicons/teams', + trees_url: + 'https://api.github.com/repos/mralexgray/alexicons/git/trees{/sha}', + created_at: '2015-10-14T21:49:39Z', + events_url: 'https://api.github.com/repos/mralexgray/alexicons/events', + has_issues: false, + issues_url: + 'https://api.github.com/repos/mralexgray/alexicons/issues{/number}', + labels_url: + 'https://api.github.com/repos/mralexgray/alexicons/labels{/name}', + merges_url: 'https://api.github.com/repos/mralexgray/alexicons/merges', + mirror_url: null, + updated_at: '2015-10-15T06:20:08Z', + visibility: 'public', + archive_url: + 'https://api.github.com/repos/mralexgray/alexicons/{archive_format}{/ref}', + commits_url: + 'https://api.github.com/repos/mralexgray/alexicons/commits{/sha}', + compare_url: + 'https://api.github.com/repos/mralexgray/alexicons/compare/{base}...{head}', + description: 'Get popular cat names', + forks_count: 0, + is_template: false, + open_issues: 0, + branches_url: + 'https://api.github.com/repos/mralexgray/alexicons/branches{/branch}', + comments_url: + 'https://api.github.com/repos/mralexgray/alexicons/comments{/number}', + contents_url: + 'https://api.github.com/repos/mralexgray/alexicons/contents/{+path}', + git_refs_url: + 'https://api.github.com/repos/mralexgray/alexicons/git/refs{/sha}', + git_tags_url: + 'https://api.github.com/repos/mralexgray/alexicons/git/tags{/sha}', + has_projects: true, + releases_url: + 'https://api.github.com/repos/mralexgray/alexicons/releases{/id}', + statuses_url: + 'https://api.github.com/repos/mralexgray/alexicons/statuses/{sha}', + allow_forking: true, + assignees_url: + 'https://api.github.com/repos/mralexgray/alexicons/assignees{/user}', + downloads_url: + 'https://api.github.com/repos/mralexgray/alexicons/downloads', + has_downloads: true, + languages_url: + 'https://api.github.com/repos/mralexgray/alexicons/languages', + default_branch: 'master', + milestones_url: + 'https://api.github.com/repos/mralexgray/alexicons/milestones{/number}', + stargazers_url: + 'https://api.github.com/repos/mralexgray/alexicons/stargazers', + watchers_count: 0, + deployments_url: + 'https://api.github.com/repos/mralexgray/alexicons/deployments', + git_commits_url: + 'https://api.github.com/repos/mralexgray/alexicons/git/commits{/sha}', + subscribers_url: + 'https://api.github.com/repos/mralexgray/alexicons/subscribers', + contributors_url: + 'https://api.github.com/repos/mralexgray/alexicons/contributors', + issue_events_url: + 'https://api.github.com/repos/mralexgray/alexicons/issues/events{/number}', + stargazers_count: 0, + subscription_url: + 'https://api.github.com/repos/mralexgray/alexicons/subscription', + collaborators_url: + 'https://api.github.com/repos/mralexgray/alexicons/collaborators{/collaborator}', + issue_comment_url: + 'https://api.github.com/repos/mralexgray/alexicons/issues/comments{/number}', + notifications_url: + 'https://api.github.com/repos/mralexgray/alexicons/notifications{?since,all,participating}', + open_issues_count: 0, + web_commit_signoff_required: false, + }, + { + id: 10476467, + url: 'https://api.github.com/repos/mralexgray/Alfred-Google-Translate', + fork: true, + name: 'Alfred-Google-Translate', + size: 103, + forks: 0, + owner: { + id: 262517, + url: 'https://api.github.com/users/mralexgray', + type: 'User', + login: 'mralexgray', + node_id: 'MDQ6VXNlcjI2MjUxNw==', + html_url: 'https://github.com/mralexgray', + gists_url: 'https://api.github.com/users/mralexgray/gists{/gist_id}', + repos_url: 'https://api.github.com/users/mralexgray/repos', + avatar_url: 'https://avatars.githubusercontent.com/u/262517?v=4', + events_url: + 'https://api.github.com/users/mralexgray/events{/privacy}', + site_admin: false, + gravatar_id: '', + starred_url: + 'https://api.github.com/users/mralexgray/starred{/owner}{/repo}', + followers_url: 'https://api.github.com/users/mralexgray/followers', + following_url: + 'https://api.github.com/users/mralexgray/following{/other_user}', + organizations_url: 'https://api.github.com/users/mralexgray/orgs', + subscriptions_url: + 'https://api.github.com/users/mralexgray/subscriptions', + received_events_url: + 'https://api.github.com/users/mralexgray/received_events', + }, + topics: [], + git_url: 'git://github.com/mralexgray/Alfred-Google-Translate.git', + license: null, + node_id: 'MDEwOlJlcG9zaXRvcnkxMDQ3NjQ2Nw==', + private: false, + ssh_url: 'git@github.com:mralexgray/Alfred-Google-Translate.git', + svn_url: 'https://github.com/mralexgray/Alfred-Google-Translate', + archived: false, + disabled: false, + has_wiki: true, + homepage: null, + html_url: 'https://github.com/mralexgray/Alfred-Google-Translate', + keys_url: + 'https://api.github.com/repos/mralexgray/Alfred-Google-Translate/keys{/key_id}', + language: 'Shell', + tags_url: + 'https://api.github.com/repos/mralexgray/Alfred-Google-Translate/tags', + watchers: 0, + blobs_url: + 'https://api.github.com/repos/mralexgray/Alfred-Google-Translate/git/blobs{/sha}', + clone_url: 'https://github.com/mralexgray/Alfred-Google-Translate.git', + forks_url: + 'https://api.github.com/repos/mralexgray/Alfred-Google-Translate/forks', + full_name: 'mralexgray/Alfred-Google-Translate', + has_pages: false, + hooks_url: + 'https://api.github.com/repos/mralexgray/Alfred-Google-Translate/hooks', + pulls_url: + 'https://api.github.com/repos/mralexgray/Alfred-Google-Translate/pulls{/number}', + pushed_at: '2013-01-12T19:39:03Z', + teams_url: + 'https://api.github.com/repos/mralexgray/Alfred-Google-Translate/teams', + trees_url: + 'https://api.github.com/repos/mralexgray/Alfred-Google-Translate/git/trees{/sha}', + created_at: '2013-06-04T10:45:10Z', + events_url: + 'https://api.github.com/repos/mralexgray/Alfred-Google-Translate/events', + has_issues: false, + issues_url: + 'https://api.github.com/repos/mralexgray/Alfred-Google-Translate/issues{/number}', + labels_url: + 'https://api.github.com/repos/mralexgray/Alfred-Google-Translate/labels{/name}', + merges_url: + 'https://api.github.com/repos/mralexgray/Alfred-Google-Translate/merges', + mirror_url: null, + updated_at: '2013-06-04T10:45:10Z', + visibility: 'public', + archive_url: + 'https://api.github.com/repos/mralexgray/Alfred-Google-Translate/{archive_format}{/ref}', + commits_url: + 'https://api.github.com/repos/mralexgray/Alfred-Google-Translate/commits{/sha}', + compare_url: + 'https://api.github.com/repos/mralexgray/Alfred-Google-Translate/compare/{base}...{head}', + description: + 'Extension for Alfred that will do a Google translate for you', + forks_count: 0, + is_template: false, + open_issues: 0, + branches_url: + 'https://api.github.com/repos/mralexgray/Alfred-Google-Translate/branches{/branch}', + comments_url: + 'https://api.github.com/repos/mralexgray/Alfred-Google-Translate/comments{/number}', + contents_url: + 'https://api.github.com/repos/mralexgray/Alfred-Google-Translate/contents/{+path}', + git_refs_url: + 'https://api.github.com/repos/mralexgray/Alfred-Google-Translate/git/refs{/sha}', + git_tags_url: + 'https://api.github.com/repos/mralexgray/Alfred-Google-Translate/git/tags{/sha}', + has_projects: true, + releases_url: + 'https://api.github.com/repos/mralexgray/Alfred-Google-Translate/releases{/id}', + statuses_url: + 'https://api.github.com/repos/mralexgray/Alfred-Google-Translate/statuses/{sha}', + allow_forking: true, + assignees_url: + 'https://api.github.com/repos/mralexgray/Alfred-Google-Translate/assignees{/user}', + downloads_url: + 'https://api.github.com/repos/mralexgray/Alfred-Google-Translate/downloads', + has_downloads: true, + languages_url: + 'https://api.github.com/repos/mralexgray/Alfred-Google-Translate/languages', + default_branch: 'master', + milestones_url: + 'https://api.github.com/repos/mralexgray/Alfred-Google-Translate/milestones{/number}', + stargazers_url: + 'https://api.github.com/repos/mralexgray/Alfred-Google-Translate/stargazers', + watchers_count: 0, + deployments_url: + 'https://api.github.com/repos/mralexgray/Alfred-Google-Translate/deployments', + git_commits_url: + 'https://api.github.com/repos/mralexgray/Alfred-Google-Translate/git/commits{/sha}', + subscribers_url: + 'https://api.github.com/repos/mralexgray/Alfred-Google-Translate/subscribers', + contributors_url: + 'https://api.github.com/repos/mralexgray/Alfred-Google-Translate/contributors', + issue_events_url: + 'https://api.github.com/repos/mralexgray/Alfred-Google-Translate/issues/events{/number}', + stargazers_count: 0, + subscription_url: + 'https://api.github.com/repos/mralexgray/Alfred-Google-Translate/subscription', + collaborators_url: + 'https://api.github.com/repos/mralexgray/Alfred-Google-Translate/collaborators{/collaborator}', + issue_comment_url: + 'https://api.github.com/repos/mralexgray/Alfred-Google-Translate/issues/comments{/number}', + notifications_url: + 'https://api.github.com/repos/mralexgray/Alfred-Google-Translate/notifications{?since,all,participating}', + open_issues_count: 0, + web_commit_signoff_required: false, + }, + { + id: 5524019, + url: 'https://api.github.com/repos/mralexgray/Amber', + fork: false, + name: 'Amber', + size: 48, + forks: 0, + owner: { + id: 262517, + url: 'https://api.github.com/users/mralexgray', + type: 'User', + login: 'mralexgray', + node_id: 'MDQ6VXNlcjI2MjUxNw==', + html_url: 'https://github.com/mralexgray', + gists_url: 'https://api.github.com/users/mralexgray/gists{/gist_id}', + repos_url: 'https://api.github.com/users/mralexgray/repos', + avatar_url: 'https://avatars.githubusercontent.com/u/262517?v=4', + events_url: + 'https://api.github.com/users/mralexgray/events{/privacy}', + site_admin: false, + gravatar_id: '', + starred_url: + 'https://api.github.com/users/mralexgray/starred{/owner}{/repo}', + followers_url: 'https://api.github.com/users/mralexgray/followers', + following_url: + 'https://api.github.com/users/mralexgray/following{/other_user}', + organizations_url: 'https://api.github.com/users/mralexgray/orgs', + subscriptions_url: + 'https://api.github.com/users/mralexgray/subscriptions', + received_events_url: + 'https://api.github.com/users/mralexgray/received_events', + }, + topics: [], + git_url: 'git://github.com/mralexgray/Amber.git', + license: null, + node_id: 'MDEwOlJlcG9zaXRvcnk1NTI0MDE5', + private: false, + ssh_url: 'git@github.com:mralexgray/Amber.git', + svn_url: 'https://github.com/mralexgray/Amber', + archived: false, + disabled: false, + has_wiki: true, + homepage: null, + html_url: 'https://github.com/mralexgray/Amber', + keys_url: 'https://api.github.com/repos/mralexgray/Amber/keys{/key_id}', + language: null, + tags_url: 'https://api.github.com/repos/mralexgray/Amber/tags', + watchers: 0, + blobs_url: + 'https://api.github.com/repos/mralexgray/Amber/git/blobs{/sha}', + clone_url: 'https://github.com/mralexgray/Amber.git', + forks_url: 'https://api.github.com/repos/mralexgray/Amber/forks', + full_name: 'mralexgray/Amber', + has_pages: false, + hooks_url: 'https://api.github.com/repos/mralexgray/Amber/hooks', + pulls_url: + 'https://api.github.com/repos/mralexgray/Amber/pulls{/number}', + pushed_at: '2012-08-23T10:38:25Z', + teams_url: 'https://api.github.com/repos/mralexgray/Amber/teams', + trees_url: + 'https://api.github.com/repos/mralexgray/Amber/git/trees{/sha}', + created_at: '2012-08-23T10:38:24Z', + events_url: 'https://api.github.com/repos/mralexgray/Amber/events', + has_issues: true, + issues_url: + 'https://api.github.com/repos/mralexgray/Amber/issues{/number}', + labels_url: + 'https://api.github.com/repos/mralexgray/Amber/labels{/name}', + merges_url: 'https://api.github.com/repos/mralexgray/Amber/merges', + mirror_url: null, + updated_at: '2013-01-11T22:25:35Z', + visibility: 'public', + archive_url: + 'https://api.github.com/repos/mralexgray/Amber/{archive_format}{/ref}', + commits_url: + 'https://api.github.com/repos/mralexgray/Amber/commits{/sha}', + compare_url: + 'https://api.github.com/repos/mralexgray/Amber/compare/{base}...{head}', + description: 'Fork of the difficult-to-deal-with Amber.framework', + forks_count: 0, + is_template: false, + open_issues: 0, + branches_url: + 'https://api.github.com/repos/mralexgray/Amber/branches{/branch}', + comments_url: + 'https://api.github.com/repos/mralexgray/Amber/comments{/number}', + contents_url: + 'https://api.github.com/repos/mralexgray/Amber/contents/{+path}', + git_refs_url: + 'https://api.github.com/repos/mralexgray/Amber/git/refs{/sha}', + git_tags_url: + 'https://api.github.com/repos/mralexgray/Amber/git/tags{/sha}', + has_projects: true, + releases_url: + 'https://api.github.com/repos/mralexgray/Amber/releases{/id}', + statuses_url: + 'https://api.github.com/repos/mralexgray/Amber/statuses/{sha}', + allow_forking: true, + assignees_url: + 'https://api.github.com/repos/mralexgray/Amber/assignees{/user}', + downloads_url: + 'https://api.github.com/repos/mralexgray/Amber/downloads', + has_downloads: true, + languages_url: + 'https://api.github.com/repos/mralexgray/Amber/languages', + default_branch: 'master', + milestones_url: + 'https://api.github.com/repos/mralexgray/Amber/milestones{/number}', + stargazers_url: + 'https://api.github.com/repos/mralexgray/Amber/stargazers', + watchers_count: 0, + deployments_url: + 'https://api.github.com/repos/mralexgray/Amber/deployments', + git_commits_url: + 'https://api.github.com/repos/mralexgray/Amber/git/commits{/sha}', + subscribers_url: + 'https://api.github.com/repos/mralexgray/Amber/subscribers', + contributors_url: + 'https://api.github.com/repos/mralexgray/Amber/contributors', + issue_events_url: + 'https://api.github.com/repos/mralexgray/Amber/issues/events{/number}', + stargazers_count: 0, + subscription_url: + 'https://api.github.com/repos/mralexgray/Amber/subscription', + collaborators_url: + 'https://api.github.com/repos/mralexgray/Amber/collaborators{/collaborator}', + issue_comment_url: + 'https://api.github.com/repos/mralexgray/Amber/issues/comments{/number}', + notifications_url: + 'https://api.github.com/repos/mralexgray/Amber/notifications{?since,all,participating}', + open_issues_count: 0, + web_commit_signoff_required: false, + }, + { + id: 10809060, + url: 'https://api.github.com/repos/mralexgray/Amethyst', + fork: true, + name: 'Amethyst', + size: 12623, + forks: 0, + owner: { + id: 262517, + url: 'https://api.github.com/users/mralexgray', + type: 'User', + login: 'mralexgray', + node_id: 'MDQ6VXNlcjI2MjUxNw==', + html_url: 'https://github.com/mralexgray', + gists_url: 'https://api.github.com/users/mralexgray/gists{/gist_id}', + repos_url: 'https://api.github.com/users/mralexgray/repos', + avatar_url: 'https://avatars.githubusercontent.com/u/262517?v=4', + events_url: + 'https://api.github.com/users/mralexgray/events{/privacy}', + site_admin: false, + gravatar_id: '', + starred_url: + 'https://api.github.com/users/mralexgray/starred{/owner}{/repo}', + followers_url: 'https://api.github.com/users/mralexgray/followers', + following_url: + 'https://api.github.com/users/mralexgray/following{/other_user}', + organizations_url: 'https://api.github.com/users/mralexgray/orgs', + subscriptions_url: + 'https://api.github.com/users/mralexgray/subscriptions', + received_events_url: + 'https://api.github.com/users/mralexgray/received_events', + }, + topics: [], + git_url: 'git://github.com/mralexgray/Amethyst.git', + license: { + key: 'mit', + url: 'https://api.github.com/licenses/mit', + name: 'MIT License', + node_id: 'MDc6TGljZW5zZTEz', + spdx_id: 'MIT', + }, + node_id: 'MDEwOlJlcG9zaXRvcnkxMDgwOTA2MA==', + private: false, + ssh_url: 'git@github.com:mralexgray/Amethyst.git', + svn_url: 'https://github.com/mralexgray/Amethyst', + archived: false, + disabled: false, + has_wiki: true, + homepage: 'http://ianyh.github.io/Amethyst/', + html_url: 'https://github.com/mralexgray/Amethyst', + keys_url: + 'https://api.github.com/repos/mralexgray/Amethyst/keys{/key_id}', + language: 'Objective-C', + tags_url: 'https://api.github.com/repos/mralexgray/Amethyst/tags', + watchers: 0, + blobs_url: + 'https://api.github.com/repos/mralexgray/Amethyst/git/blobs{/sha}', + clone_url: 'https://github.com/mralexgray/Amethyst.git', + forks_url: 'https://api.github.com/repos/mralexgray/Amethyst/forks', + full_name: 'mralexgray/Amethyst', + has_pages: false, + hooks_url: 'https://api.github.com/repos/mralexgray/Amethyst/hooks', + pulls_url: + 'https://api.github.com/repos/mralexgray/Amethyst/pulls{/number}', + pushed_at: '2013-06-18T02:54:11Z', + teams_url: 'https://api.github.com/repos/mralexgray/Amethyst/teams', + trees_url: + 'https://api.github.com/repos/mralexgray/Amethyst/git/trees{/sha}', + created_at: '2013-06-20T00:34:22Z', + events_url: 'https://api.github.com/repos/mralexgray/Amethyst/events', + has_issues: false, + issues_url: + 'https://api.github.com/repos/mralexgray/Amethyst/issues{/number}', + labels_url: + 'https://api.github.com/repos/mralexgray/Amethyst/labels{/name}', + merges_url: 'https://api.github.com/repos/mralexgray/Amethyst/merges', + mirror_url: null, + updated_at: '2013-06-20T00:34:22Z', + visibility: 'public', + archive_url: + 'https://api.github.com/repos/mralexgray/Amethyst/{archive_format}{/ref}', + commits_url: + 'https://api.github.com/repos/mralexgray/Amethyst/commits{/sha}', + compare_url: + 'https://api.github.com/repos/mralexgray/Amethyst/compare/{base}...{head}', + description: 'Tiling window manager for OS X.', + forks_count: 0, + is_template: false, + open_issues: 0, + branches_url: + 'https://api.github.com/repos/mralexgray/Amethyst/branches{/branch}', + comments_url: + 'https://api.github.com/repos/mralexgray/Amethyst/comments{/number}', + contents_url: + 'https://api.github.com/repos/mralexgray/Amethyst/contents/{+path}', + git_refs_url: + 'https://api.github.com/repos/mralexgray/Amethyst/git/refs{/sha}', + git_tags_url: + 'https://api.github.com/repos/mralexgray/Amethyst/git/tags{/sha}', + has_projects: true, + releases_url: + 'https://api.github.com/repos/mralexgray/Amethyst/releases{/id}', + statuses_url: + 'https://api.github.com/repos/mralexgray/Amethyst/statuses/{sha}', + allow_forking: true, + assignees_url: + 'https://api.github.com/repos/mralexgray/Amethyst/assignees{/user}', + downloads_url: + 'https://api.github.com/repos/mralexgray/Amethyst/downloads', + has_downloads: true, + languages_url: + 'https://api.github.com/repos/mralexgray/Amethyst/languages', + default_branch: 'master', + milestones_url: + 'https://api.github.com/repos/mralexgray/Amethyst/milestones{/number}', + stargazers_url: + 'https://api.github.com/repos/mralexgray/Amethyst/stargazers', + watchers_count: 0, + deployments_url: + 'https://api.github.com/repos/mralexgray/Amethyst/deployments', + git_commits_url: + 'https://api.github.com/repos/mralexgray/Amethyst/git/commits{/sha}', + subscribers_url: + 'https://api.github.com/repos/mralexgray/Amethyst/subscribers', + contributors_url: + 'https://api.github.com/repos/mralexgray/Amethyst/contributors', + issue_events_url: + 'https://api.github.com/repos/mralexgray/Amethyst/issues/events{/number}', + stargazers_count: 0, + subscription_url: + 'https://api.github.com/repos/mralexgray/Amethyst/subscription', + collaborators_url: + 'https://api.github.com/repos/mralexgray/Amethyst/collaborators{/collaborator}', + issue_comment_url: + 'https://api.github.com/repos/mralexgray/Amethyst/issues/comments{/number}', + notifications_url: + 'https://api.github.com/repos/mralexgray/Amethyst/notifications{?since,all,participating}', + open_issues_count: 0, + web_commit_signoff_required: false, + }, + { + id: 3684286, + url: 'https://api.github.com/repos/mralexgray/Animated-Paths', + fork: true, + name: 'Animated-Paths', + size: 411, + forks: 0, + owner: { + id: 262517, + url: 'https://api.github.com/users/mralexgray', + type: 'User', + login: 'mralexgray', + node_id: 'MDQ6VXNlcjI2MjUxNw==', + html_url: 'https://github.com/mralexgray', + gists_url: 'https://api.github.com/users/mralexgray/gists{/gist_id}', + repos_url: 'https://api.github.com/users/mralexgray/repos', + avatar_url: 'https://avatars.githubusercontent.com/u/262517?v=4', + events_url: + 'https://api.github.com/users/mralexgray/events{/privacy}', + site_admin: false, + gravatar_id: '', + starred_url: + 'https://api.github.com/users/mralexgray/starred{/owner}{/repo}', + followers_url: 'https://api.github.com/users/mralexgray/followers', + following_url: + 'https://api.github.com/users/mralexgray/following{/other_user}', + organizations_url: 'https://api.github.com/users/mralexgray/orgs', + subscriptions_url: + 'https://api.github.com/users/mralexgray/subscriptions', + received_events_url: + 'https://api.github.com/users/mralexgray/received_events', + }, + topics: [], + git_url: 'git://github.com/mralexgray/Animated-Paths.git', + license: { + key: 'other', + url: null, + name: 'Other', + node_id: 'MDc6TGljZW5zZTA=', + spdx_id: 'NOASSERTION', + }, + node_id: 'MDEwOlJlcG9zaXRvcnkzNjg0Mjg2', + private: false, + ssh_url: 'git@github.com:mralexgray/Animated-Paths.git', + svn_url: 'https://github.com/mralexgray/Animated-Paths', + archived: false, + disabled: false, + has_wiki: true, + homepage: + 'http://oleb.net/blog/2010/12/animating-drawing-of-cgpath-with-cashapelayer/', + html_url: 'https://github.com/mralexgray/Animated-Paths', + keys_url: + 'https://api.github.com/repos/mralexgray/Animated-Paths/keys{/key_id}', + language: 'Objective-C', + tags_url: 'https://api.github.com/repos/mralexgray/Animated-Paths/tags', + watchers: 2, + blobs_url: + 'https://api.github.com/repos/mralexgray/Animated-Paths/git/blobs{/sha}', + clone_url: 'https://github.com/mralexgray/Animated-Paths.git', + forks_url: + 'https://api.github.com/repos/mralexgray/Animated-Paths/forks', + full_name: 'mralexgray/Animated-Paths', + has_pages: false, + hooks_url: + 'https://api.github.com/repos/mralexgray/Animated-Paths/hooks', + pulls_url: + 'https://api.github.com/repos/mralexgray/Animated-Paths/pulls{/number}', + pushed_at: '2010-12-30T20:56:51Z', + teams_url: + 'https://api.github.com/repos/mralexgray/Animated-Paths/teams', + trees_url: + 'https://api.github.com/repos/mralexgray/Animated-Paths/git/trees{/sha}', + created_at: '2012-03-11T02:56:38Z', + events_url: + 'https://api.github.com/repos/mralexgray/Animated-Paths/events', + has_issues: false, + issues_url: + 'https://api.github.com/repos/mralexgray/Animated-Paths/issues{/number}', + labels_url: + 'https://api.github.com/repos/mralexgray/Animated-Paths/labels{/name}', + merges_url: + 'https://api.github.com/repos/mralexgray/Animated-Paths/merges', + mirror_url: null, + updated_at: '2013-01-08T04:12:21Z', + visibility: 'public', + archive_url: + 'https://api.github.com/repos/mralexgray/Animated-Paths/{archive_format}{/ref}', + commits_url: + 'https://api.github.com/repos/mralexgray/Animated-Paths/commits{/sha}', + compare_url: + 'https://api.github.com/repos/mralexgray/Animated-Paths/compare/{base}...{head}', + description: + 'Demo project: Animating the drawing of a CGPath with CAShapeLayer.strokeEnd', + forks_count: 0, + is_template: false, + open_issues: 0, + branches_url: + 'https://api.github.com/repos/mralexgray/Animated-Paths/branches{/branch}', + comments_url: + 'https://api.github.com/repos/mralexgray/Animated-Paths/comments{/number}', + contents_url: + 'https://api.github.com/repos/mralexgray/Animated-Paths/contents/{+path}', + git_refs_url: + 'https://api.github.com/repos/mralexgray/Animated-Paths/git/refs{/sha}', + git_tags_url: + 'https://api.github.com/repos/mralexgray/Animated-Paths/git/tags{/sha}', + has_projects: true, + releases_url: + 'https://api.github.com/repos/mralexgray/Animated-Paths/releases{/id}', + statuses_url: + 'https://api.github.com/repos/mralexgray/Animated-Paths/statuses/{sha}', + allow_forking: true, + assignees_url: + 'https://api.github.com/repos/mralexgray/Animated-Paths/assignees{/user}', + downloads_url: + 'https://api.github.com/repos/mralexgray/Animated-Paths/downloads', + has_downloads: true, + languages_url: + 'https://api.github.com/repos/mralexgray/Animated-Paths/languages', + default_branch: 'master', + milestones_url: + 'https://api.github.com/repos/mralexgray/Animated-Paths/milestones{/number}', + stargazers_url: + 'https://api.github.com/repos/mralexgray/Animated-Paths/stargazers', + watchers_count: 2, + deployments_url: + 'https://api.github.com/repos/mralexgray/Animated-Paths/deployments', + git_commits_url: + 'https://api.github.com/repos/mralexgray/Animated-Paths/git/commits{/sha}', + subscribers_url: + 'https://api.github.com/repos/mralexgray/Animated-Paths/subscribers', + contributors_url: + 'https://api.github.com/repos/mralexgray/Animated-Paths/contributors', + issue_events_url: + 'https://api.github.com/repos/mralexgray/Animated-Paths/issues/events{/number}', + stargazers_count: 2, + subscription_url: + 'https://api.github.com/repos/mralexgray/Animated-Paths/subscription', + collaborators_url: + 'https://api.github.com/repos/mralexgray/Animated-Paths/collaborators{/collaborator}', + issue_comment_url: + 'https://api.github.com/repos/mralexgray/Animated-Paths/issues/comments{/number}', + notifications_url: + 'https://api.github.com/repos/mralexgray/Animated-Paths/notifications{?since,all,participating}', + open_issues_count: 0, + web_commit_signoff_required: false, + }, + { + id: 16662874, + url: 'https://api.github.com/repos/mralexgray/AnsiLove.framework', + fork: true, + name: 'AnsiLove.framework', + size: 3780, + forks: 0, + owner: { + id: 262517, + url: 'https://api.github.com/users/mralexgray', + type: 'User', + login: 'mralexgray', + node_id: 'MDQ6VXNlcjI2MjUxNw==', + html_url: 'https://github.com/mralexgray', + gists_url: 'https://api.github.com/users/mralexgray/gists{/gist_id}', + repos_url: 'https://api.github.com/users/mralexgray/repos', + avatar_url: 'https://avatars.githubusercontent.com/u/262517?v=4', + events_url: + 'https://api.github.com/users/mralexgray/events{/privacy}', + site_admin: false, + gravatar_id: '', + starred_url: + 'https://api.github.com/users/mralexgray/starred{/owner}{/repo}', + followers_url: 'https://api.github.com/users/mralexgray/followers', + following_url: + 'https://api.github.com/users/mralexgray/following{/other_user}', + organizations_url: 'https://api.github.com/users/mralexgray/orgs', + subscriptions_url: + 'https://api.github.com/users/mralexgray/subscriptions', + received_events_url: + 'https://api.github.com/users/mralexgray/received_events', + }, + topics: [], + git_url: 'git://github.com/mralexgray/AnsiLove.framework.git', + license: { + key: 'other', + url: null, + name: 'Other', + node_id: 'MDc6TGljZW5zZTA=', + spdx_id: 'NOASSERTION', + }, + node_id: 'MDEwOlJlcG9zaXRvcnkxNjY2Mjg3NA==', + private: false, + ssh_url: 'git@github.com:mralexgray/AnsiLove.framework.git', + svn_url: 'https://github.com/mralexgray/AnsiLove.framework', + archived: false, + disabled: false, + has_wiki: false, + homepage: 'http://byteproject.net', + html_url: 'https://github.com/mralexgray/AnsiLove.framework', + keys_url: + 'https://api.github.com/repos/mralexgray/AnsiLove.framework/keys{/key_id}', + language: 'M', + tags_url: + 'https://api.github.com/repos/mralexgray/AnsiLove.framework/tags', + watchers: 0, + blobs_url: + 'https://api.github.com/repos/mralexgray/AnsiLove.framework/git/blobs{/sha}', + clone_url: 'https://github.com/mralexgray/AnsiLove.framework.git', + forks_url: + 'https://api.github.com/repos/mralexgray/AnsiLove.framework/forks', + full_name: 'mralexgray/AnsiLove.framework', + has_pages: false, + hooks_url: + 'https://api.github.com/repos/mralexgray/AnsiLove.framework/hooks', + pulls_url: + 'https://api.github.com/repos/mralexgray/AnsiLove.framework/pulls{/number}', + pushed_at: '2013-10-04T14:08:38Z', + teams_url: + 'https://api.github.com/repos/mralexgray/AnsiLove.framework/teams', + trees_url: + 'https://api.github.com/repos/mralexgray/AnsiLove.framework/git/trees{/sha}', + created_at: '2014-02-09T08:30:27Z', + events_url: + 'https://api.github.com/repos/mralexgray/AnsiLove.framework/events', + has_issues: false, + issues_url: + 'https://api.github.com/repos/mralexgray/AnsiLove.framework/issues{/number}', + labels_url: + 'https://api.github.com/repos/mralexgray/AnsiLove.framework/labels{/name}', + merges_url: + 'https://api.github.com/repos/mralexgray/AnsiLove.framework/merges', + mirror_url: null, + updated_at: '2015-01-13T20:41:46Z', + visibility: 'public', + archive_url: + 'https://api.github.com/repos/mralexgray/AnsiLove.framework/{archive_format}{/ref}', + commits_url: + 'https://api.github.com/repos/mralexgray/AnsiLove.framework/commits{/sha}', + compare_url: + 'https://api.github.com/repos/mralexgray/AnsiLove.framework/compare/{base}...{head}', + description: 'Cocoa Framework for rendering ANSi / ASCII art', + forks_count: 0, + is_template: false, + open_issues: 0, + branches_url: + 'https://api.github.com/repos/mralexgray/AnsiLove.framework/branches{/branch}', + comments_url: + 'https://api.github.com/repos/mralexgray/AnsiLove.framework/comments{/number}', + contents_url: + 'https://api.github.com/repos/mralexgray/AnsiLove.framework/contents/{+path}', + git_refs_url: + 'https://api.github.com/repos/mralexgray/AnsiLove.framework/git/refs{/sha}', + git_tags_url: + 'https://api.github.com/repos/mralexgray/AnsiLove.framework/git/tags{/sha}', + has_projects: true, + releases_url: + 'https://api.github.com/repos/mralexgray/AnsiLove.framework/releases{/id}', + statuses_url: + 'https://api.github.com/repos/mralexgray/AnsiLove.framework/statuses/{sha}', + allow_forking: true, + assignees_url: + 'https://api.github.com/repos/mralexgray/AnsiLove.framework/assignees{/user}', + downloads_url: + 'https://api.github.com/repos/mralexgray/AnsiLove.framework/downloads', + has_downloads: true, + languages_url: + 'https://api.github.com/repos/mralexgray/AnsiLove.framework/languages', + default_branch: 'master', + milestones_url: + 'https://api.github.com/repos/mralexgray/AnsiLove.framework/milestones{/number}', + stargazers_url: + 'https://api.github.com/repos/mralexgray/AnsiLove.framework/stargazers', + watchers_count: 0, + deployments_url: + 'https://api.github.com/repos/mralexgray/AnsiLove.framework/deployments', + git_commits_url: + 'https://api.github.com/repos/mralexgray/AnsiLove.framework/git/commits{/sha}', + subscribers_url: + 'https://api.github.com/repos/mralexgray/AnsiLove.framework/subscribers', + contributors_url: + 'https://api.github.com/repos/mralexgray/AnsiLove.framework/contributors', + issue_events_url: + 'https://api.github.com/repos/mralexgray/AnsiLove.framework/issues/events{/number}', + stargazers_count: 0, + subscription_url: + 'https://api.github.com/repos/mralexgray/AnsiLove.framework/subscription', + collaborators_url: + 'https://api.github.com/repos/mralexgray/AnsiLove.framework/collaborators{/collaborator}', + issue_comment_url: + 'https://api.github.com/repos/mralexgray/AnsiLove.framework/issues/comments{/number}', + notifications_url: + 'https://api.github.com/repos/mralexgray/AnsiLove.framework/notifications{?since,all,participating}', + open_issues_count: 0, + web_commit_signoff_required: false, + }, + { + id: 5189563, + url: 'https://api.github.com/repos/mralexgray/ANTrackBar', + fork: true, + name: 'ANTrackBar', + size: 94, + forks: 0, + owner: { + id: 262517, + url: 'https://api.github.com/users/mralexgray', + type: 'User', + login: 'mralexgray', + node_id: 'MDQ6VXNlcjI2MjUxNw==', + html_url: 'https://github.com/mralexgray', + gists_url: 'https://api.github.com/users/mralexgray/gists{/gist_id}', + repos_url: 'https://api.github.com/users/mralexgray/repos', + avatar_url: 'https://avatars.githubusercontent.com/u/262517?v=4', + events_url: + 'https://api.github.com/users/mralexgray/events{/privacy}', + site_admin: false, + gravatar_id: '', + starred_url: + 'https://api.github.com/users/mralexgray/starred{/owner}{/repo}', + followers_url: 'https://api.github.com/users/mralexgray/followers', + following_url: + 'https://api.github.com/users/mralexgray/following{/other_user}', + organizations_url: 'https://api.github.com/users/mralexgray/orgs', + subscriptions_url: + 'https://api.github.com/users/mralexgray/subscriptions', + received_events_url: + 'https://api.github.com/users/mralexgray/received_events', + }, + topics: [], + git_url: 'git://github.com/mralexgray/ANTrackBar.git', + license: null, + node_id: 'MDEwOlJlcG9zaXRvcnk1MTg5NTYz', + private: false, + ssh_url: 'git@github.com:mralexgray/ANTrackBar.git', + svn_url: 'https://github.com/mralexgray/ANTrackBar', + archived: false, + disabled: false, + has_wiki: true, + homepage: '', + html_url: 'https://github.com/mralexgray/ANTrackBar', + keys_url: + 'https://api.github.com/repos/mralexgray/ANTrackBar/keys{/key_id}', + language: 'Objective-C', + tags_url: 'https://api.github.com/repos/mralexgray/ANTrackBar/tags', + watchers: 2, + blobs_url: + 'https://api.github.com/repos/mralexgray/ANTrackBar/git/blobs{/sha}', + clone_url: 'https://github.com/mralexgray/ANTrackBar.git', + forks_url: 'https://api.github.com/repos/mralexgray/ANTrackBar/forks', + full_name: 'mralexgray/ANTrackBar', + has_pages: false, + hooks_url: 'https://api.github.com/repos/mralexgray/ANTrackBar/hooks', + pulls_url: + 'https://api.github.com/repos/mralexgray/ANTrackBar/pulls{/number}', + pushed_at: '2012-03-09T01:40:02Z', + teams_url: 'https://api.github.com/repos/mralexgray/ANTrackBar/teams', + trees_url: + 'https://api.github.com/repos/mralexgray/ANTrackBar/git/trees{/sha}', + created_at: '2012-07-26T08:17:22Z', + events_url: 'https://api.github.com/repos/mralexgray/ANTrackBar/events', + has_issues: false, + issues_url: + 'https://api.github.com/repos/mralexgray/ANTrackBar/issues{/number}', + labels_url: + 'https://api.github.com/repos/mralexgray/ANTrackBar/labels{/name}', + merges_url: 'https://api.github.com/repos/mralexgray/ANTrackBar/merges', + mirror_url: null, + updated_at: '2013-01-11T10:29:56Z', + visibility: 'public', + archive_url: + 'https://api.github.com/repos/mralexgray/ANTrackBar/{archive_format}{/ref}', + commits_url: + 'https://api.github.com/repos/mralexgray/ANTrackBar/commits{/sha}', + compare_url: + 'https://api.github.com/repos/mralexgray/ANTrackBar/compare/{base}...{head}', + description: 'An easy-to-use Cocoa seek bar with a pleasing appearance', + forks_count: 0, + is_template: false, + open_issues: 0, + branches_url: + 'https://api.github.com/repos/mralexgray/ANTrackBar/branches{/branch}', + comments_url: + 'https://api.github.com/repos/mralexgray/ANTrackBar/comments{/number}', + contents_url: + 'https://api.github.com/repos/mralexgray/ANTrackBar/contents/{+path}', + git_refs_url: + 'https://api.github.com/repos/mralexgray/ANTrackBar/git/refs{/sha}', + git_tags_url: + 'https://api.github.com/repos/mralexgray/ANTrackBar/git/tags{/sha}', + has_projects: true, + releases_url: + 'https://api.github.com/repos/mralexgray/ANTrackBar/releases{/id}', + statuses_url: + 'https://api.github.com/repos/mralexgray/ANTrackBar/statuses/{sha}', + allow_forking: true, + assignees_url: + 'https://api.github.com/repos/mralexgray/ANTrackBar/assignees{/user}', + downloads_url: + 'https://api.github.com/repos/mralexgray/ANTrackBar/downloads', + has_downloads: true, + languages_url: + 'https://api.github.com/repos/mralexgray/ANTrackBar/languages', + default_branch: 'master', + milestones_url: + 'https://api.github.com/repos/mralexgray/ANTrackBar/milestones{/number}', + stargazers_url: + 'https://api.github.com/repos/mralexgray/ANTrackBar/stargazers', + watchers_count: 2, + deployments_url: + 'https://api.github.com/repos/mralexgray/ANTrackBar/deployments', + git_commits_url: + 'https://api.github.com/repos/mralexgray/ANTrackBar/git/commits{/sha}', + subscribers_url: + 'https://api.github.com/repos/mralexgray/ANTrackBar/subscribers', + contributors_url: + 'https://api.github.com/repos/mralexgray/ANTrackBar/contributors', + issue_events_url: + 'https://api.github.com/repos/mralexgray/ANTrackBar/issues/events{/number}', + stargazers_count: 2, + subscription_url: + 'https://api.github.com/repos/mralexgray/ANTrackBar/subscription', + collaborators_url: + 'https://api.github.com/repos/mralexgray/ANTrackBar/collaborators{/collaborator}', + issue_comment_url: + 'https://api.github.com/repos/mralexgray/ANTrackBar/issues/comments{/number}', + notifications_url: + 'https://api.github.com/repos/mralexgray/ANTrackBar/notifications{?since,all,participating}', + open_issues_count: 0, + web_commit_signoff_required: false, + }, + { + id: 16240152, + url: 'https://api.github.com/repos/mralexgray/AOP-in-Objective-C', + fork: true, + name: 'AOP-in-Objective-C', + size: 340, + forks: 1, + owner: { + id: 262517, + url: 'https://api.github.com/users/mralexgray', + type: 'User', + login: 'mralexgray', + node_id: 'MDQ6VXNlcjI2MjUxNw==', + html_url: 'https://github.com/mralexgray', + gists_url: 'https://api.github.com/users/mralexgray/gists{/gist_id}', + repos_url: 'https://api.github.com/users/mralexgray/repos', + avatar_url: 'https://avatars.githubusercontent.com/u/262517?v=4', + events_url: + 'https://api.github.com/users/mralexgray/events{/privacy}', + site_admin: false, + gravatar_id: '', + starred_url: + 'https://api.github.com/users/mralexgray/starred{/owner}{/repo}', + followers_url: 'https://api.github.com/users/mralexgray/followers', + following_url: + 'https://api.github.com/users/mralexgray/following{/other_user}', + organizations_url: 'https://api.github.com/users/mralexgray/orgs', + subscriptions_url: + 'https://api.github.com/users/mralexgray/subscriptions', + received_events_url: + 'https://api.github.com/users/mralexgray/received_events', + }, + topics: [], + git_url: 'git://github.com/mralexgray/AOP-in-Objective-C.git', + license: null, + node_id: 'MDEwOlJlcG9zaXRvcnkxNjI0MDE1Mg==', + private: false, + ssh_url: 'git@github.com:mralexgray/AOP-in-Objective-C.git', + svn_url: 'https://github.com/mralexgray/AOP-in-Objective-C', + archived: false, + disabled: false, + has_wiki: true, + homepage: 'http://innoli.hu/en/opensource/', + html_url: 'https://github.com/mralexgray/AOP-in-Objective-C', + keys_url: + 'https://api.github.com/repos/mralexgray/AOP-in-Objective-C/keys{/key_id}', + language: 'Objective-C', + tags_url: + 'https://api.github.com/repos/mralexgray/AOP-in-Objective-C/tags', + watchers: 0, + blobs_url: + 'https://api.github.com/repos/mralexgray/AOP-in-Objective-C/git/blobs{/sha}', + clone_url: 'https://github.com/mralexgray/AOP-in-Objective-C.git', + forks_url: + 'https://api.github.com/repos/mralexgray/AOP-in-Objective-C/forks', + full_name: 'mralexgray/AOP-in-Objective-C', + has_pages: false, + hooks_url: + 'https://api.github.com/repos/mralexgray/AOP-in-Objective-C/hooks', + pulls_url: + 'https://api.github.com/repos/mralexgray/AOP-in-Objective-C/pulls{/number}', + pushed_at: '2014-02-12T16:23:20Z', + teams_url: + 'https://api.github.com/repos/mralexgray/AOP-in-Objective-C/teams', + trees_url: + 'https://api.github.com/repos/mralexgray/AOP-in-Objective-C/git/trees{/sha}', + created_at: '2014-01-25T21:18:04Z', + events_url: + 'https://api.github.com/repos/mralexgray/AOP-in-Objective-C/events', + has_issues: false, + issues_url: + 'https://api.github.com/repos/mralexgray/AOP-in-Objective-C/issues{/number}', + labels_url: + 'https://api.github.com/repos/mralexgray/AOP-in-Objective-C/labels{/name}', + merges_url: + 'https://api.github.com/repos/mralexgray/AOP-in-Objective-C/merges', + mirror_url: null, + updated_at: '2014-06-19T19:38:12Z', + visibility: 'public', + archive_url: + 'https://api.github.com/repos/mralexgray/AOP-in-Objective-C/{archive_format}{/ref}', + commits_url: + 'https://api.github.com/repos/mralexgray/AOP-in-Objective-C/commits{/sha}', + compare_url: + 'https://api.github.com/repos/mralexgray/AOP-in-Objective-C/compare/{base}...{head}', + description: + 'An NSProxy based library for easily enabling AOP like functionality in Objective-C.', + forks_count: 1, + is_template: false, + open_issues: 0, + branches_url: + 'https://api.github.com/repos/mralexgray/AOP-in-Objective-C/branches{/branch}', + comments_url: + 'https://api.github.com/repos/mralexgray/AOP-in-Objective-C/comments{/number}', + contents_url: + 'https://api.github.com/repos/mralexgray/AOP-in-Objective-C/contents/{+path}', + git_refs_url: + 'https://api.github.com/repos/mralexgray/AOP-in-Objective-C/git/refs{/sha}', + git_tags_url: + 'https://api.github.com/repos/mralexgray/AOP-in-Objective-C/git/tags{/sha}', + has_projects: true, + releases_url: + 'https://api.github.com/repos/mralexgray/AOP-in-Objective-C/releases{/id}', + statuses_url: + 'https://api.github.com/repos/mralexgray/AOP-in-Objective-C/statuses/{sha}', + allow_forking: true, + assignees_url: + 'https://api.github.com/repos/mralexgray/AOP-in-Objective-C/assignees{/user}', + downloads_url: + 'https://api.github.com/repos/mralexgray/AOP-in-Objective-C/downloads', + has_downloads: true, + languages_url: + 'https://api.github.com/repos/mralexgray/AOP-in-Objective-C/languages', + default_branch: 'travis-coveralls', + milestones_url: + 'https://api.github.com/repos/mralexgray/AOP-in-Objective-C/milestones{/number}', + stargazers_url: + 'https://api.github.com/repos/mralexgray/AOP-in-Objective-C/stargazers', + watchers_count: 0, + deployments_url: + 'https://api.github.com/repos/mralexgray/AOP-in-Objective-C/deployments', + git_commits_url: + 'https://api.github.com/repos/mralexgray/AOP-in-Objective-C/git/commits{/sha}', + subscribers_url: + 'https://api.github.com/repos/mralexgray/AOP-in-Objective-C/subscribers', + contributors_url: + 'https://api.github.com/repos/mralexgray/AOP-in-Objective-C/contributors', + issue_events_url: + 'https://api.github.com/repos/mralexgray/AOP-in-Objective-C/issues/events{/number}', + stargazers_count: 0, + subscription_url: + 'https://api.github.com/repos/mralexgray/AOP-in-Objective-C/subscription', + collaborators_url: + 'https://api.github.com/repos/mralexgray/AOP-in-Objective-C/collaborators{/collaborator}', + issue_comment_url: + 'https://api.github.com/repos/mralexgray/AOP-in-Objective-C/issues/comments{/number}', + notifications_url: + 'https://api.github.com/repos/mralexgray/AOP-in-Objective-C/notifications{?since,all,participating}', + open_issues_count: 0, + web_commit_signoff_required: false, + }, + { + id: 13141936, + url: 'https://api.github.com/repos/mralexgray/Apaxy', + fork: true, + name: 'Apaxy', + size: 113, + forks: 0, + owner: { + id: 262517, + url: 'https://api.github.com/users/mralexgray', + type: 'User', + login: 'mralexgray', + node_id: 'MDQ6VXNlcjI2MjUxNw==', + html_url: 'https://github.com/mralexgray', + gists_url: 'https://api.github.com/users/mralexgray/gists{/gist_id}', + repos_url: 'https://api.github.com/users/mralexgray/repos', + avatar_url: 'https://avatars.githubusercontent.com/u/262517?v=4', + events_url: + 'https://api.github.com/users/mralexgray/events{/privacy}', + site_admin: false, + gravatar_id: '', + starred_url: + 'https://api.github.com/users/mralexgray/starred{/owner}{/repo}', + followers_url: 'https://api.github.com/users/mralexgray/followers', + following_url: + 'https://api.github.com/users/mralexgray/following{/other_user}', + organizations_url: 'https://api.github.com/users/mralexgray/orgs', + subscriptions_url: + 'https://api.github.com/users/mralexgray/subscriptions', + received_events_url: + 'https://api.github.com/users/mralexgray/received_events', + }, + topics: [], + git_url: 'git://github.com/mralexgray/Apaxy.git', + license: { + key: 'unlicense', + url: 'https://api.github.com/licenses/unlicense', + name: 'The Unlicense', + node_id: 'MDc6TGljZW5zZTE1', + spdx_id: 'Unlicense', + }, + node_id: 'MDEwOlJlcG9zaXRvcnkxMzE0MTkzNg==', + private: false, + ssh_url: 'git@github.com:mralexgray/Apaxy.git', + svn_url: 'https://github.com/mralexgray/Apaxy', + archived: false, + disabled: false, + has_wiki: true, + homepage: null, + html_url: 'https://github.com/mralexgray/Apaxy', + keys_url: 'https://api.github.com/repos/mralexgray/Apaxy/keys{/key_id}', + language: 'CSS', + tags_url: 'https://api.github.com/repos/mralexgray/Apaxy/tags', + watchers: 0, + blobs_url: + 'https://api.github.com/repos/mralexgray/Apaxy/git/blobs{/sha}', + clone_url: 'https://github.com/mralexgray/Apaxy.git', + forks_url: 'https://api.github.com/repos/mralexgray/Apaxy/forks', + full_name: 'mralexgray/Apaxy', + has_pages: false, + hooks_url: 'https://api.github.com/repos/mralexgray/Apaxy/hooks', + pulls_url: + 'https://api.github.com/repos/mralexgray/Apaxy/pulls{/number}', + pushed_at: '2013-08-02T16:01:32Z', + teams_url: 'https://api.github.com/repos/mralexgray/Apaxy/teams', + trees_url: + 'https://api.github.com/repos/mralexgray/Apaxy/git/trees{/sha}', + created_at: '2013-09-27T05:05:35Z', + events_url: 'https://api.github.com/repos/mralexgray/Apaxy/events', + has_issues: false, + issues_url: + 'https://api.github.com/repos/mralexgray/Apaxy/issues{/number}', + labels_url: + 'https://api.github.com/repos/mralexgray/Apaxy/labels{/name}', + merges_url: 'https://api.github.com/repos/mralexgray/Apaxy/merges', + mirror_url: null, + updated_at: '2018-02-16T21:40:24Z', + visibility: 'public', + archive_url: + 'https://api.github.com/repos/mralexgray/Apaxy/{archive_format}{/ref}', + commits_url: + 'https://api.github.com/repos/mralexgray/Apaxy/commits{/sha}', + compare_url: + 'https://api.github.com/repos/mralexgray/Apaxy/compare/{base}...{head}', + description: + 'A simple, customisable theme for your Apache directory listing.', + forks_count: 0, + is_template: false, + open_issues: 0, + branches_url: + 'https://api.github.com/repos/mralexgray/Apaxy/branches{/branch}', + comments_url: + 'https://api.github.com/repos/mralexgray/Apaxy/comments{/number}', + contents_url: + 'https://api.github.com/repos/mralexgray/Apaxy/contents/{+path}', + git_refs_url: + 'https://api.github.com/repos/mralexgray/Apaxy/git/refs{/sha}', + git_tags_url: + 'https://api.github.com/repos/mralexgray/Apaxy/git/tags{/sha}', + has_projects: true, + releases_url: + 'https://api.github.com/repos/mralexgray/Apaxy/releases{/id}', + statuses_url: + 'https://api.github.com/repos/mralexgray/Apaxy/statuses/{sha}', + allow_forking: true, + assignees_url: + 'https://api.github.com/repos/mralexgray/Apaxy/assignees{/user}', + downloads_url: + 'https://api.github.com/repos/mralexgray/Apaxy/downloads', + has_downloads: true, + languages_url: + 'https://api.github.com/repos/mralexgray/Apaxy/languages', + default_branch: 'master', + milestones_url: + 'https://api.github.com/repos/mralexgray/Apaxy/milestones{/number}', + stargazers_url: + 'https://api.github.com/repos/mralexgray/Apaxy/stargazers', + watchers_count: 0, + deployments_url: + 'https://api.github.com/repos/mralexgray/Apaxy/deployments', + git_commits_url: + 'https://api.github.com/repos/mralexgray/Apaxy/git/commits{/sha}', + subscribers_url: + 'https://api.github.com/repos/mralexgray/Apaxy/subscribers', + contributors_url: + 'https://api.github.com/repos/mralexgray/Apaxy/contributors', + issue_events_url: + 'https://api.github.com/repos/mralexgray/Apaxy/issues/events{/number}', + stargazers_count: 0, + subscription_url: + 'https://api.github.com/repos/mralexgray/Apaxy/subscription', + collaborators_url: + 'https://api.github.com/repos/mralexgray/Apaxy/collaborators{/collaborator}', + issue_comment_url: + 'https://api.github.com/repos/mralexgray/Apaxy/issues/comments{/number}', + notifications_url: + 'https://api.github.com/repos/mralexgray/Apaxy/notifications{?since,all,participating}', + open_issues_count: 0, + web_commit_signoff_required: false, + }, + { + id: 20027360, + url: 'https://api.github.com/repos/mralexgray/app', + fork: true, + name: 'app', + size: 1890, + forks: 0, + owner: { + id: 262517, + url: 'https://api.github.com/users/mralexgray', + type: 'User', + login: 'mralexgray', + node_id: 'MDQ6VXNlcjI2MjUxNw==', + html_url: 'https://github.com/mralexgray', + gists_url: 'https://api.github.com/users/mralexgray/gists{/gist_id}', + repos_url: 'https://api.github.com/users/mralexgray/repos', + avatar_url: 'https://avatars.githubusercontent.com/u/262517?v=4', + events_url: + 'https://api.github.com/users/mralexgray/events{/privacy}', + site_admin: false, + gravatar_id: '', + starred_url: + 'https://api.github.com/users/mralexgray/starred{/owner}{/repo}', + followers_url: 'https://api.github.com/users/mralexgray/followers', + following_url: + 'https://api.github.com/users/mralexgray/following{/other_user}', + organizations_url: 'https://api.github.com/users/mralexgray/orgs', + subscriptions_url: + 'https://api.github.com/users/mralexgray/subscriptions', + received_events_url: + 'https://api.github.com/users/mralexgray/received_events', + }, + topics: [], + git_url: 'git://github.com/mralexgray/app.git', + license: { + key: 'other', + url: null, + name: 'Other', + node_id: 'MDc6TGljZW5zZTA=', + spdx_id: 'NOASSERTION', + }, + node_id: 'MDEwOlJlcG9zaXRvcnkyMDAyNzM2MA==', + private: false, + ssh_url: 'git@github.com:mralexgray/app.git', + svn_url: 'https://github.com/mralexgray/app', + archived: false, + disabled: false, + has_wiki: true, + homepage: null, + html_url: 'https://github.com/mralexgray/app', + keys_url: 'https://api.github.com/repos/mralexgray/app/keys{/key_id}', + language: 'JavaScript', + tags_url: 'https://api.github.com/repos/mralexgray/app/tags', + watchers: 0, + blobs_url: + 'https://api.github.com/repos/mralexgray/app/git/blobs{/sha}', + clone_url: 'https://github.com/mralexgray/app.git', + forks_url: 'https://api.github.com/repos/mralexgray/app/forks', + full_name: 'mralexgray/app', + has_pages: false, + hooks_url: 'https://api.github.com/repos/mralexgray/app/hooks', + pulls_url: 'https://api.github.com/repos/mralexgray/app/pulls{/number}', + pushed_at: '2014-05-20T19:51:38Z', + teams_url: 'https://api.github.com/repos/mralexgray/app/teams', + trees_url: + 'https://api.github.com/repos/mralexgray/app/git/trees{/sha}', + created_at: '2014-05-21T15:54:20Z', + events_url: 'https://api.github.com/repos/mralexgray/app/events', + has_issues: false, + issues_url: + 'https://api.github.com/repos/mralexgray/app/issues{/number}', + labels_url: 'https://api.github.com/repos/mralexgray/app/labels{/name}', + merges_url: 'https://api.github.com/repos/mralexgray/app/merges', + mirror_url: null, + updated_at: '2014-05-21T15:54:22Z', + visibility: 'public', + archive_url: + 'https://api.github.com/repos/mralexgray/app/{archive_format}{/ref}', + commits_url: + 'https://api.github.com/repos/mralexgray/app/commits{/sha}', + compare_url: + 'https://api.github.com/repos/mralexgray/app/compare/{base}...{head}', + description: 'Instant mobile web app creation', + forks_count: 0, + is_template: false, + open_issues: 0, + branches_url: + 'https://api.github.com/repos/mralexgray/app/branches{/branch}', + comments_url: + 'https://api.github.com/repos/mralexgray/app/comments{/number}', + contents_url: + 'https://api.github.com/repos/mralexgray/app/contents/{+path}', + git_refs_url: + 'https://api.github.com/repos/mralexgray/app/git/refs{/sha}', + git_tags_url: + 'https://api.github.com/repos/mralexgray/app/git/tags{/sha}', + has_projects: true, + releases_url: + 'https://api.github.com/repos/mralexgray/app/releases{/id}', + statuses_url: + 'https://api.github.com/repos/mralexgray/app/statuses/{sha}', + allow_forking: true, + assignees_url: + 'https://api.github.com/repos/mralexgray/app/assignees{/user}', + downloads_url: 'https://api.github.com/repos/mralexgray/app/downloads', + has_downloads: true, + languages_url: 'https://api.github.com/repos/mralexgray/app/languages', + default_branch: 'master', + milestones_url: + 'https://api.github.com/repos/mralexgray/app/milestones{/number}', + stargazers_url: + 'https://api.github.com/repos/mralexgray/app/stargazers', + watchers_count: 0, + deployments_url: + 'https://api.github.com/repos/mralexgray/app/deployments', + git_commits_url: + 'https://api.github.com/repos/mralexgray/app/git/commits{/sha}', + subscribers_url: + 'https://api.github.com/repos/mralexgray/app/subscribers', + contributors_url: + 'https://api.github.com/repos/mralexgray/app/contributors', + issue_events_url: + 'https://api.github.com/repos/mralexgray/app/issues/events{/number}', + stargazers_count: 0, + subscription_url: + 'https://api.github.com/repos/mralexgray/app/subscription', + collaborators_url: + 'https://api.github.com/repos/mralexgray/app/collaborators{/collaborator}', + issue_comment_url: + 'https://api.github.com/repos/mralexgray/app/issues/comments{/number}', + notifications_url: + 'https://api.github.com/repos/mralexgray/app/notifications{?since,all,participating}', + open_issues_count: 0, + web_commit_signoff_required: false, + }, + ], + data2: [ + { + id: 6104546, + url: 'https://api.github.com/repos/mralexgray/-REPONAME', + fork: false, + name: '-REPONAME', + size: 48, + forks: 0, + owner: { + id: 262517, + url: 'https://api.github.com/users/mralexgray', + type: 'User', + login: 'mralexgray', + node_id: 'MDQ6VXNlcjI2MjUxNw==', + html_url: 'https://github.com/mralexgray', + gists_url: 'https://api.github.com/users/mralexgray/gists{/gist_id}', + repos_url: 'https://api.github.com/users/mralexgray/repos', + avatar_url: 'https://avatars.githubusercontent.com/u/262517?v=4', + events_url: + 'https://api.github.com/users/mralexgray/events{/privacy}', + site_admin: false, + gravatar_id: '', + starred_url: + 'https://api.github.com/users/mralexgray/starred{/owner}{/repo}', + followers_url: 'https://api.github.com/users/mralexgray/followers', + following_url: + 'https://api.github.com/users/mralexgray/following{/other_user}', + organizations_url: 'https://api.github.com/users/mralexgray/orgs', + subscriptions_url: + 'https://api.github.com/users/mralexgray/subscriptions', + received_events_url: + 'https://api.github.com/users/mralexgray/received_events', + }, + topics: [], + git_url: 'git://github.com/mralexgray/-REPONAME.git', + license: null, + node_id: 'MDEwOlJlcG9zaXRvcnk2MTA0NTQ2', + private: false, + ssh_url: 'git@github.com:mralexgray/-REPONAME.git', + svn_url: 'https://github.com/mralexgray/-REPONAME', + archived: false, + disabled: false, + has_wiki: true, + homepage: null, + html_url: 'https://github.com/mralexgray/-REPONAME', + keys_url: + 'https://api.github.com/repos/mralexgray/-REPONAME/keys{/key_id}', + language: null, + tags_url: 'https://api.github.com/repos/mralexgray/-REPONAME/tags', + watchers: 0, + blobs_url: + 'https://api.github.com/repos/mralexgray/-REPONAME/git/blobs{/sha}', + clone_url: 'https://github.com/mralexgray/-REPONAME.git', + forks_url: 'https://api.github.com/repos/mralexgray/-REPONAME/forks', + full_name: 'mralexgray/-REPONAME', + has_pages: false, + hooks_url: 'https://api.github.com/repos/mralexgray/-REPONAME/hooks', + pulls_url: + 'https://api.github.com/repos/mralexgray/-REPONAME/pulls{/number}', + pushed_at: '2012-10-06T16:37:39Z', + teams_url: 'https://api.github.com/repos/mralexgray/-REPONAME/teams', + trees_url: + 'https://api.github.com/repos/mralexgray/-REPONAME/git/trees{/sha}', + created_at: '2012-10-06T16:37:39Z', + events_url: 'https://api.github.com/repos/mralexgray/-REPONAME/events', + has_issues: true, + issues_url: + 'https://api.github.com/repos/mralexgray/-REPONAME/issues{/number}', + labels_url: + 'https://api.github.com/repos/mralexgray/-REPONAME/labels{/name}', + merges_url: 'https://api.github.com/repos/mralexgray/-REPONAME/merges', + mirror_url: null, + updated_at: '2013-01-12T13:39:30Z', + visibility: 'public', + archive_url: + 'https://api.github.com/repos/mralexgray/-REPONAME/{archive_format}{/ref}', + commits_url: + 'https://api.github.com/repos/mralexgray/-REPONAME/commits{/sha}', + compare_url: + 'https://api.github.com/repos/mralexgray/-REPONAME/compare/{base}...{head}', + description: null, + forks_count: 0, + is_template: false, + open_issues: 0, + branches_url: + 'https://api.github.com/repos/mralexgray/-REPONAME/branches{/branch}', + comments_url: + 'https://api.github.com/repos/mralexgray/-REPONAME/comments{/number}', + contents_url: + 'https://api.github.com/repos/mralexgray/-REPONAME/contents/{+path}', + git_refs_url: + 'https://api.github.com/repos/mralexgray/-REPONAME/git/refs{/sha}', + git_tags_url: + 'https://api.github.com/repos/mralexgray/-REPONAME/git/tags{/sha}', + has_projects: true, + releases_url: + 'https://api.github.com/repos/mralexgray/-REPONAME/releases{/id}', + statuses_url: + 'https://api.github.com/repos/mralexgray/-REPONAME/statuses/{sha}', + allow_forking: true, + assignees_url: + 'https://api.github.com/repos/mralexgray/-REPONAME/assignees{/user}', + downloads_url: + 'https://api.github.com/repos/mralexgray/-REPONAME/downloads', + has_downloads: true, + languages_url: + 'https://api.github.com/repos/mralexgray/-REPONAME/languages', + default_branch: 'master', + milestones_url: + 'https://api.github.com/repos/mralexgray/-REPONAME/milestones{/number}', + stargazers_url: + 'https://api.github.com/repos/mralexgray/-REPONAME/stargazers', + watchers_count: 0, + deployments_url: + 'https://api.github.com/repos/mralexgray/-REPONAME/deployments', + git_commits_url: + 'https://api.github.com/repos/mralexgray/-REPONAME/git/commits{/sha}', + subscribers_url: + 'https://api.github.com/repos/mralexgray/-REPONAME/subscribers', + contributors_url: + 'https://api.github.com/repos/mralexgray/-REPONAME/contributors', + issue_events_url: + 'https://api.github.com/repos/mralexgray/-REPONAME/issues/events{/number}', + stargazers_count: 0, + subscription_url: + 'https://api.github.com/repos/mralexgray/-REPONAME/subscription', + collaborators_url: + 'https://api.github.com/repos/mralexgray/-REPONAME/collaborators{/collaborator}', + issue_comment_url: + 'https://api.github.com/repos/mralexgray/-REPONAME/issues/comments{/number}', + notifications_url: + 'https://api.github.com/repos/mralexgray/-REPONAME/notifications{?since,all,participating}', + open_issues_count: 0, + web_commit_signoff_required: false, + }, + { + id: 104510411, + url: 'https://api.github.com/repos/mralexgray/...', + fork: true, + name: '...', + size: 113, + forks: 0, + owner: { + id: 262517, + url: 'https://api.github.com/users/mralexgray', + type: 'User', + login: 'mralexgray', + node_id: 'MDQ6VXNlcjI2MjUxNw==', + html_url: 'https://github.com/mralexgray', + gists_url: 'https://api.github.com/users/mralexgray/gists{/gist_id}', + repos_url: 'https://api.github.com/users/mralexgray/repos', + avatar_url: 'https://avatars.githubusercontent.com/u/262517?v=4', + events_url: + 'https://api.github.com/users/mralexgray/events{/privacy}', + site_admin: false, + gravatar_id: '', + starred_url: + 'https://api.github.com/users/mralexgray/starred{/owner}{/repo}', + followers_url: 'https://api.github.com/users/mralexgray/followers', + following_url: + 'https://api.github.com/users/mralexgray/following{/other_user}', + organizations_url: 'https://api.github.com/users/mralexgray/orgs', + subscriptions_url: + 'https://api.github.com/users/mralexgray/subscriptions', + received_events_url: + 'https://api.github.com/users/mralexgray/received_events', + }, + topics: [], + git_url: 'git://github.com/mralexgray/....git', + license: { + key: 'mit', + url: 'https://api.github.com/licenses/mit', + name: 'MIT License', + node_id: 'MDc6TGljZW5zZTEz', + spdx_id: 'MIT', + }, + node_id: 'MDEwOlJlcG9zaXRvcnkxMDQ1MTA0MTE=', + private: false, + ssh_url: 'git@github.com:mralexgray/....git', + svn_url: 'https://github.com/mralexgray/...', + archived: false, + disabled: false, + has_wiki: false, + homepage: 'https://driesvints.com/blog/getting-started-with-dotfiles', + html_url: 'https://github.com/mralexgray/...', + keys_url: 'https://api.github.com/repos/mralexgray/.../keys{/key_id}', + language: 'Shell', + tags_url: 'https://api.github.com/repos/mralexgray/.../tags', + watchers: 0, + blobs_url: + 'https://api.github.com/repos/mralexgray/.../git/blobs{/sha}', + clone_url: 'https://github.com/mralexgray/....git', + forks_url: 'https://api.github.com/repos/mralexgray/.../forks', + full_name: 'mralexgray/...', + has_pages: false, + hooks_url: 'https://api.github.com/repos/mralexgray/.../hooks', + pulls_url: 'https://api.github.com/repos/mralexgray/.../pulls{/number}', + pushed_at: '2017-09-15T08:27:32Z', + teams_url: 'https://api.github.com/repos/mralexgray/.../teams', + trees_url: + 'https://api.github.com/repos/mralexgray/.../git/trees{/sha}', + created_at: '2017-09-22T19:19:42Z', + events_url: 'https://api.github.com/repos/mralexgray/.../events', + has_issues: false, + issues_url: + 'https://api.github.com/repos/mralexgray/.../issues{/number}', + labels_url: 'https://api.github.com/repos/mralexgray/.../labels{/name}', + merges_url: 'https://api.github.com/repos/mralexgray/.../merges', + mirror_url: null, + updated_at: '2017-09-22T19:20:22Z', + visibility: 'public', + archive_url: + 'https://api.github.com/repos/mralexgray/.../{archive_format}{/ref}', + commits_url: + 'https://api.github.com/repos/mralexgray/.../commits{/sha}', + compare_url: + 'https://api.github.com/repos/mralexgray/.../compare/{base}...{head}', + description: ':computer: Public repo for my personal dotfiles.', + forks_count: 0, + is_template: false, + open_issues: 0, + branches_url: + 'https://api.github.com/repos/mralexgray/.../branches{/branch}', + comments_url: + 'https://api.github.com/repos/mralexgray/.../comments{/number}', + contents_url: + 'https://api.github.com/repos/mralexgray/.../contents/{+path}', + git_refs_url: + 'https://api.github.com/repos/mralexgray/.../git/refs{/sha}', + git_tags_url: + 'https://api.github.com/repos/mralexgray/.../git/tags{/sha}', + has_projects: true, + releases_url: + 'https://api.github.com/repos/mralexgray/.../releases{/id}', + statuses_url: + 'https://api.github.com/repos/mralexgray/.../statuses/{sha}', + allow_forking: true, + assignees_url: + 'https://api.github.com/repos/mralexgray/.../assignees{/user}', + downloads_url: 'https://api.github.com/repos/mralexgray/.../downloads', + has_downloads: true, + languages_url: 'https://api.github.com/repos/mralexgray/.../languages', + default_branch: 'master', + milestones_url: + 'https://api.github.com/repos/mralexgray/.../milestones{/number}', + stargazers_url: + 'https://api.github.com/repos/mralexgray/.../stargazers', + watchers_count: 0, + deployments_url: + 'https://api.github.com/repos/mralexgray/.../deployments', + git_commits_url: + 'https://api.github.com/repos/mralexgray/.../git/commits{/sha}', + subscribers_url: + 'https://api.github.com/repos/mralexgray/.../subscribers', + contributors_url: + 'https://api.github.com/repos/mralexgray/.../contributors', + issue_events_url: + 'https://api.github.com/repos/mralexgray/.../issues/events{/number}', + stargazers_count: 0, + subscription_url: + 'https://api.github.com/repos/mralexgray/.../subscription', + collaborators_url: + 'https://api.github.com/repos/mralexgray/.../collaborators{/collaborator}', + issue_comment_url: + 'https://api.github.com/repos/mralexgray/.../issues/comments{/number}', + notifications_url: + 'https://api.github.com/repos/mralexgray/.../notifications{?since,all,participating}', + open_issues_count: 0, + web_commit_signoff_required: false, + }, + { + id: 58656723, + url: 'https://api.github.com/repos/mralexgray/2200087-Serial-Protocol', + fork: true, + name: '2200087-Serial-Protocol', + size: 41, + forks: 1, + owner: { + id: 262517, + url: 'https://api.github.com/users/mralexgray', + type: 'User', + login: 'mralexgray', + node_id: 'MDQ6VXNlcjI2MjUxNw==', + html_url: 'https://github.com/mralexgray', + gists_url: 'https://api.github.com/users/mralexgray/gists{/gist_id}', + repos_url: 'https://api.github.com/users/mralexgray/repos', + avatar_url: 'https://avatars.githubusercontent.com/u/262517?v=4', + events_url: + 'https://api.github.com/users/mralexgray/events{/privacy}', + site_admin: false, + gravatar_id: '', + starred_url: + 'https://api.github.com/users/mralexgray/starred{/owner}{/repo}', + followers_url: 'https://api.github.com/users/mralexgray/followers', + following_url: + 'https://api.github.com/users/mralexgray/following{/other_user}', + organizations_url: 'https://api.github.com/users/mralexgray/orgs', + subscriptions_url: + 'https://api.github.com/users/mralexgray/subscriptions', + received_events_url: + 'https://api.github.com/users/mralexgray/received_events', + }, + topics: [], + git_url: 'git://github.com/mralexgray/2200087-Serial-Protocol.git', + license: { + key: 'gpl-2.0', + url: 'https://api.github.com/licenses/gpl-2.0', + name: 'GNU General Public License v2.0', + node_id: 'MDc6TGljZW5zZTg=', + spdx_id: 'GPL-2.0', + }, + node_id: 'MDEwOlJlcG9zaXRvcnk1ODY1NjcyMw==', + private: false, + ssh_url: 'git@github.com:mralexgray/2200087-Serial-Protocol.git', + svn_url: 'https://github.com/mralexgray/2200087-Serial-Protocol', + archived: false, + disabled: false, + has_wiki: true, + homepage: 'http://daviddworken.com', + html_url: 'https://github.com/mralexgray/2200087-Serial-Protocol', + keys_url: + 'https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/keys{/key_id}', + language: 'Python', + tags_url: + 'https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/tags', + watchers: 0, + blobs_url: + 'https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/git/blobs{/sha}', + clone_url: 'https://github.com/mralexgray/2200087-Serial-Protocol.git', + forks_url: + 'https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/forks', + full_name: 'mralexgray/2200087-Serial-Protocol', + has_pages: false, + hooks_url: + 'https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/hooks', + pulls_url: + 'https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/pulls{/number}', + pushed_at: '2016-05-12T16:07:24Z', + teams_url: + 'https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/teams', + trees_url: + 'https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/git/trees{/sha}', + created_at: '2016-05-12T16:05:28Z', + events_url: + 'https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/events', + has_issues: false, + issues_url: + 'https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/issues{/number}', + labels_url: + 'https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/labels{/name}', + merges_url: + 'https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/merges', + mirror_url: null, + updated_at: '2016-05-12T16:05:30Z', + visibility: 'public', + archive_url: + 'https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/{archive_format}{/ref}', + commits_url: + 'https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/commits{/sha}', + compare_url: + 'https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/compare/{base}...{head}', + description: + "A reverse engineered protocol description and accompanying code for Radioshack's 2200087 multimeter", + forks_count: 1, + is_template: false, + open_issues: 0, + branches_url: + 'https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/branches{/branch}', + comments_url: + 'https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/comments{/number}', + contents_url: + 'https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/contents/{+path}', + git_refs_url: + 'https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/git/refs{/sha}', + git_tags_url: + 'https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/git/tags{/sha}', + has_projects: true, + releases_url: + 'https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/releases{/id}', + statuses_url: + 'https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/statuses/{sha}', + allow_forking: true, + assignees_url: + 'https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/assignees{/user}', + downloads_url: + 'https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/downloads', + has_downloads: true, + languages_url: + 'https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/languages', + default_branch: 'master', + milestones_url: + 'https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/milestones{/number}', + stargazers_url: + 'https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/stargazers', + watchers_count: 0, + deployments_url: + 'https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/deployments', + git_commits_url: + 'https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/git/commits{/sha}', + subscribers_url: + 'https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/subscribers', + contributors_url: + 'https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/contributors', + issue_events_url: + 'https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/issues/events{/number}', + stargazers_count: 0, + subscription_url: + 'https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/subscription', + collaborators_url: + 'https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/collaborators{/collaborator}', + issue_comment_url: + 'https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/issues/comments{/number}', + notifications_url: + 'https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/notifications{?since,all,participating}', + open_issues_count: 0, + web_commit_signoff_required: false, + }, + { + id: 13121042, + url: 'https://api.github.com/repos/mralexgray/ace', + fork: true, + name: 'ace', + size: 21080, + forks: 1, + owner: { + id: 262517, + url: 'https://api.github.com/users/mralexgray', + type: 'User', + login: 'mralexgray', + node_id: 'MDQ6VXNlcjI2MjUxNw==', + html_url: 'https://github.com/mralexgray', + gists_url: 'https://api.github.com/users/mralexgray/gists{/gist_id}', + repos_url: 'https://api.github.com/users/mralexgray/repos', + avatar_url: 'https://avatars.githubusercontent.com/u/262517?v=4', + events_url: + 'https://api.github.com/users/mralexgray/events{/privacy}', + site_admin: false, + gravatar_id: '', + starred_url: + 'https://api.github.com/users/mralexgray/starred{/owner}{/repo}', + followers_url: 'https://api.github.com/users/mralexgray/followers', + following_url: + 'https://api.github.com/users/mralexgray/following{/other_user}', + organizations_url: 'https://api.github.com/users/mralexgray/orgs', + subscriptions_url: + 'https://api.github.com/users/mralexgray/subscriptions', + received_events_url: + 'https://api.github.com/users/mralexgray/received_events', + }, + topics: [], + git_url: 'git://github.com/mralexgray/ace.git', + license: { + key: 'other', + url: null, + name: 'Other', + node_id: 'MDc6TGljZW5zZTA=', + spdx_id: 'NOASSERTION', + }, + node_id: 'MDEwOlJlcG9zaXRvcnkxMzEyMTA0Mg==', + private: false, + ssh_url: 'git@github.com:mralexgray/ace.git', + svn_url: 'https://github.com/mralexgray/ace', + archived: false, + disabled: false, + has_wiki: true, + homepage: 'http://ace.c9.io', + html_url: 'https://github.com/mralexgray/ace', + keys_url: 'https://api.github.com/repos/mralexgray/ace/keys{/key_id}', + language: 'JavaScript', + tags_url: 'https://api.github.com/repos/mralexgray/ace/tags', + watchers: 0, + blobs_url: + 'https://api.github.com/repos/mralexgray/ace/git/blobs{/sha}', + clone_url: 'https://github.com/mralexgray/ace.git', + forks_url: 'https://api.github.com/repos/mralexgray/ace/forks', + full_name: 'mralexgray/ace', + has_pages: false, + hooks_url: 'https://api.github.com/repos/mralexgray/ace/hooks', + pulls_url: 'https://api.github.com/repos/mralexgray/ace/pulls{/number}', + pushed_at: '2013-10-26T12:34:48Z', + teams_url: 'https://api.github.com/repos/mralexgray/ace/teams', + trees_url: + 'https://api.github.com/repos/mralexgray/ace/git/trees{/sha}', + created_at: '2013-09-26T11:58:10Z', + events_url: 'https://api.github.com/repos/mralexgray/ace/events', + has_issues: false, + issues_url: + 'https://api.github.com/repos/mralexgray/ace/issues{/number}', + labels_url: 'https://api.github.com/repos/mralexgray/ace/labels{/name}', + merges_url: 'https://api.github.com/repos/mralexgray/ace/merges', + mirror_url: null, + updated_at: '2013-10-26T12:34:49Z', + visibility: 'public', + archive_url: + 'https://api.github.com/repos/mralexgray/ace/{archive_format}{/ref}', + commits_url: + 'https://api.github.com/repos/mralexgray/ace/commits{/sha}', + compare_url: + 'https://api.github.com/repos/mralexgray/ace/compare/{base}...{head}', + description: 'Ace (Ajax.org Cloud9 Editor)', + forks_count: 1, + is_template: false, + open_issues: 0, + branches_url: + 'https://api.github.com/repos/mralexgray/ace/branches{/branch}', + comments_url: + 'https://api.github.com/repos/mralexgray/ace/comments{/number}', + contents_url: + 'https://api.github.com/repos/mralexgray/ace/contents/{+path}', + git_refs_url: + 'https://api.github.com/repos/mralexgray/ace/git/refs{/sha}', + git_tags_url: + 'https://api.github.com/repos/mralexgray/ace/git/tags{/sha}', + has_projects: true, + releases_url: + 'https://api.github.com/repos/mralexgray/ace/releases{/id}', + statuses_url: + 'https://api.github.com/repos/mralexgray/ace/statuses/{sha}', + allow_forking: true, + assignees_url: + 'https://api.github.com/repos/mralexgray/ace/assignees{/user}', + downloads_url: 'https://api.github.com/repos/mralexgray/ace/downloads', + has_downloads: true, + languages_url: 'https://api.github.com/repos/mralexgray/ace/languages', + default_branch: 'master', + milestones_url: + 'https://api.github.com/repos/mralexgray/ace/milestones{/number}', + stargazers_url: + 'https://api.github.com/repos/mralexgray/ace/stargazers', + watchers_count: 0, + deployments_url: + 'https://api.github.com/repos/mralexgray/ace/deployments', + git_commits_url: + 'https://api.github.com/repos/mralexgray/ace/git/commits{/sha}', + subscribers_url: + 'https://api.github.com/repos/mralexgray/ace/subscribers', + contributors_url: + 'https://api.github.com/repos/mralexgray/ace/contributors', + issue_events_url: + 'https://api.github.com/repos/mralexgray/ace/issues/events{/number}', + stargazers_count: 0, + subscription_url: + 'https://api.github.com/repos/mralexgray/ace/subscription', + collaborators_url: + 'https://api.github.com/repos/mralexgray/ace/collaborators{/collaborator}', + issue_comment_url: + 'https://api.github.com/repos/mralexgray/ace/issues/comments{/number}', + notifications_url: + 'https://api.github.com/repos/mralexgray/ace/notifications{?since,all,participating}', + open_issues_count: 0, + web_commit_signoff_required: false, + }, + { + id: 10791045, + url: 'https://api.github.com/repos/mralexgray/ACEView', + fork: true, + name: 'ACEView', + size: 1733, + forks: 1, + owner: { + id: 262517, + url: 'https://api.github.com/users/mralexgray', + type: 'User', + login: 'mralexgray', + node_id: 'MDQ6VXNlcjI2MjUxNw==', + html_url: 'https://github.com/mralexgray', + gists_url: 'https://api.github.com/users/mralexgray/gists{/gist_id}', + repos_url: 'https://api.github.com/users/mralexgray/repos', + avatar_url: 'https://avatars.githubusercontent.com/u/262517?v=4', + events_url: + 'https://api.github.com/users/mralexgray/events{/privacy}', + site_admin: false, + gravatar_id: '', + starred_url: + 'https://api.github.com/users/mralexgray/starred{/owner}{/repo}', + followers_url: 'https://api.github.com/users/mralexgray/followers', + following_url: + 'https://api.github.com/users/mralexgray/following{/other_user}', + organizations_url: 'https://api.github.com/users/mralexgray/orgs', + subscriptions_url: + 'https://api.github.com/users/mralexgray/subscriptions', + received_events_url: + 'https://api.github.com/users/mralexgray/received_events', + }, + topics: [], + git_url: 'git://github.com/mralexgray/ACEView.git', + license: { + key: 'other', + url: null, + name: 'Other', + node_id: 'MDc6TGljZW5zZTA=', + spdx_id: 'NOASSERTION', + }, + node_id: 'MDEwOlJlcG9zaXRvcnkxMDc5MTA0NQ==', + private: false, + ssh_url: 'git@github.com:mralexgray/ACEView.git', + svn_url: 'https://github.com/mralexgray/ACEView', + archived: false, + disabled: false, + has_wiki: true, + homepage: null, + html_url: 'https://github.com/mralexgray/ACEView', + keys_url: + 'https://api.github.com/repos/mralexgray/ACEView/keys{/key_id}', + language: 'Objective-C', + tags_url: 'https://api.github.com/repos/mralexgray/ACEView/tags', + watchers: 0, + blobs_url: + 'https://api.github.com/repos/mralexgray/ACEView/git/blobs{/sha}', + clone_url: 'https://github.com/mralexgray/ACEView.git', + forks_url: 'https://api.github.com/repos/mralexgray/ACEView/forks', + full_name: 'mralexgray/ACEView', + has_pages: false, + hooks_url: 'https://api.github.com/repos/mralexgray/ACEView/hooks', + pulls_url: + 'https://api.github.com/repos/mralexgray/ACEView/pulls{/number}', + pushed_at: '2014-05-09T01:36:23Z', + teams_url: 'https://api.github.com/repos/mralexgray/ACEView/teams', + trees_url: + 'https://api.github.com/repos/mralexgray/ACEView/git/trees{/sha}', + created_at: '2013-06-19T12:15:04Z', + events_url: 'https://api.github.com/repos/mralexgray/ACEView/events', + has_issues: false, + issues_url: + 'https://api.github.com/repos/mralexgray/ACEView/issues{/number}', + labels_url: + 'https://api.github.com/repos/mralexgray/ACEView/labels{/name}', + merges_url: 'https://api.github.com/repos/mralexgray/ACEView/merges', + mirror_url: null, + updated_at: '2015-11-24T01:14:10Z', + visibility: 'public', + archive_url: + 'https://api.github.com/repos/mralexgray/ACEView/{archive_format}{/ref}', + commits_url: + 'https://api.github.com/repos/mralexgray/ACEView/commits{/sha}', + compare_url: + 'https://api.github.com/repos/mralexgray/ACEView/compare/{base}...{head}', + description: 'Use the wonderful ACE editor in your Cocoa applications', + forks_count: 1, + is_template: false, + open_issues: 0, + branches_url: + 'https://api.github.com/repos/mralexgray/ACEView/branches{/branch}', + comments_url: + 'https://api.github.com/repos/mralexgray/ACEView/comments{/number}', + contents_url: + 'https://api.github.com/repos/mralexgray/ACEView/contents/{+path}', + git_refs_url: + 'https://api.github.com/repos/mralexgray/ACEView/git/refs{/sha}', + git_tags_url: + 'https://api.github.com/repos/mralexgray/ACEView/git/tags{/sha}', + has_projects: true, + releases_url: + 'https://api.github.com/repos/mralexgray/ACEView/releases{/id}', + statuses_url: + 'https://api.github.com/repos/mralexgray/ACEView/statuses/{sha}', + allow_forking: true, + assignees_url: + 'https://api.github.com/repos/mralexgray/ACEView/assignees{/user}', + downloads_url: + 'https://api.github.com/repos/mralexgray/ACEView/downloads', + has_downloads: true, + languages_url: + 'https://api.github.com/repos/mralexgray/ACEView/languages', + default_branch: 'master', + milestones_url: + 'https://api.github.com/repos/mralexgray/ACEView/milestones{/number}', + stargazers_url: + 'https://api.github.com/repos/mralexgray/ACEView/stargazers', + watchers_count: 0, + deployments_url: + 'https://api.github.com/repos/mralexgray/ACEView/deployments', + git_commits_url: + 'https://api.github.com/repos/mralexgray/ACEView/git/commits{/sha}', + subscribers_url: + 'https://api.github.com/repos/mralexgray/ACEView/subscribers', + contributors_url: + 'https://api.github.com/repos/mralexgray/ACEView/contributors', + issue_events_url: + 'https://api.github.com/repos/mralexgray/ACEView/issues/events{/number}', + stargazers_count: 0, + subscription_url: + 'https://api.github.com/repos/mralexgray/ACEView/subscription', + collaborators_url: + 'https://api.github.com/repos/mralexgray/ACEView/collaborators{/collaborator}', + issue_comment_url: + 'https://api.github.com/repos/mralexgray/ACEView/issues/comments{/number}', + notifications_url: + 'https://api.github.com/repos/mralexgray/ACEView/notifications{?since,all,participating}', + open_issues_count: 0, + web_commit_signoff_required: false, + }, + { + id: 13623648, + url: 'https://api.github.com/repos/mralexgray/ActiveLog', + fork: true, + name: 'ActiveLog', + size: 60, + forks: 0, + owner: { + id: 262517, + url: 'https://api.github.com/users/mralexgray', + type: 'User', + login: 'mralexgray', + node_id: 'MDQ6VXNlcjI2MjUxNw==', + html_url: 'https://github.com/mralexgray', + gists_url: 'https://api.github.com/users/mralexgray/gists{/gist_id}', + repos_url: 'https://api.github.com/users/mralexgray/repos', + avatar_url: 'https://avatars.githubusercontent.com/u/262517?v=4', + events_url: + 'https://api.github.com/users/mralexgray/events{/privacy}', + site_admin: false, + gravatar_id: '', + starred_url: + 'https://api.github.com/users/mralexgray/starred{/owner}{/repo}', + followers_url: 'https://api.github.com/users/mralexgray/followers', + following_url: + 'https://api.github.com/users/mralexgray/following{/other_user}', + organizations_url: 'https://api.github.com/users/mralexgray/orgs', + subscriptions_url: + 'https://api.github.com/users/mralexgray/subscriptions', + received_events_url: + 'https://api.github.com/users/mralexgray/received_events', + }, + topics: [], + git_url: 'git://github.com/mralexgray/ActiveLog.git', + license: null, + node_id: 'MDEwOlJlcG9zaXRvcnkxMzYyMzY0OA==', + private: false, + ssh_url: 'git@github.com:mralexgray/ActiveLog.git', + svn_url: 'https://github.com/mralexgray/ActiveLog', + archived: false, + disabled: false, + has_wiki: true, + homepage: 'http://deepitpro.com/en/articles/ActiveLog/info/', + html_url: 'https://github.com/mralexgray/ActiveLog', + keys_url: + 'https://api.github.com/repos/mralexgray/ActiveLog/keys{/key_id}', + language: 'Objective-C', + tags_url: 'https://api.github.com/repos/mralexgray/ActiveLog/tags', + watchers: 0, + blobs_url: + 'https://api.github.com/repos/mralexgray/ActiveLog/git/blobs{/sha}', + clone_url: 'https://github.com/mralexgray/ActiveLog.git', + forks_url: 'https://api.github.com/repos/mralexgray/ActiveLog/forks', + full_name: 'mralexgray/ActiveLog', + has_pages: false, + hooks_url: 'https://api.github.com/repos/mralexgray/ActiveLog/hooks', + pulls_url: + 'https://api.github.com/repos/mralexgray/ActiveLog/pulls{/number}', + pushed_at: '2011-07-03T06:28:59Z', + teams_url: 'https://api.github.com/repos/mralexgray/ActiveLog/teams', + trees_url: + 'https://api.github.com/repos/mralexgray/ActiveLog/git/trees{/sha}', + created_at: '2013-10-16T15:52:37Z', + events_url: 'https://api.github.com/repos/mralexgray/ActiveLog/events', + has_issues: false, + issues_url: + 'https://api.github.com/repos/mralexgray/ActiveLog/issues{/number}', + labels_url: + 'https://api.github.com/repos/mralexgray/ActiveLog/labels{/name}', + merges_url: 'https://api.github.com/repos/mralexgray/ActiveLog/merges', + mirror_url: null, + updated_at: '2013-10-16T15:52:37Z', + visibility: 'public', + archive_url: + 'https://api.github.com/repos/mralexgray/ActiveLog/{archive_format}{/ref}', + commits_url: + 'https://api.github.com/repos/mralexgray/ActiveLog/commits{/sha}', + compare_url: + 'https://api.github.com/repos/mralexgray/ActiveLog/compare/{base}...{head}', + description: 'Shut up all logs with active filter.', + forks_count: 0, + is_template: false, + open_issues: 0, + branches_url: + 'https://api.github.com/repos/mralexgray/ActiveLog/branches{/branch}', + comments_url: + 'https://api.github.com/repos/mralexgray/ActiveLog/comments{/number}', + contents_url: + 'https://api.github.com/repos/mralexgray/ActiveLog/contents/{+path}', + git_refs_url: + 'https://api.github.com/repos/mralexgray/ActiveLog/git/refs{/sha}', + git_tags_url: + 'https://api.github.com/repos/mralexgray/ActiveLog/git/tags{/sha}', + has_projects: true, + releases_url: + 'https://api.github.com/repos/mralexgray/ActiveLog/releases{/id}', + statuses_url: + 'https://api.github.com/repos/mralexgray/ActiveLog/statuses/{sha}', + allow_forking: true, + assignees_url: + 'https://api.github.com/repos/mralexgray/ActiveLog/assignees{/user}', + downloads_url: + 'https://api.github.com/repos/mralexgray/ActiveLog/downloads', + has_downloads: true, + languages_url: + 'https://api.github.com/repos/mralexgray/ActiveLog/languages', + default_branch: 'master', + milestones_url: + 'https://api.github.com/repos/mralexgray/ActiveLog/milestones{/number}', + stargazers_url: + 'https://api.github.com/repos/mralexgray/ActiveLog/stargazers', + watchers_count: 0, + deployments_url: + 'https://api.github.com/repos/mralexgray/ActiveLog/deployments', + git_commits_url: + 'https://api.github.com/repos/mralexgray/ActiveLog/git/commits{/sha}', + subscribers_url: + 'https://api.github.com/repos/mralexgray/ActiveLog/subscribers', + contributors_url: + 'https://api.github.com/repos/mralexgray/ActiveLog/contributors', + issue_events_url: + 'https://api.github.com/repos/mralexgray/ActiveLog/issues/events{/number}', + stargazers_count: 0, + subscription_url: + 'https://api.github.com/repos/mralexgray/ActiveLog/subscription', + collaborators_url: + 'https://api.github.com/repos/mralexgray/ActiveLog/collaborators{/collaborator}', + issue_comment_url: + 'https://api.github.com/repos/mralexgray/ActiveLog/issues/comments{/number}', + notifications_url: + 'https://api.github.com/repos/mralexgray/ActiveLog/notifications{?since,all,participating}', + open_issues_count: 0, + web_commit_signoff_required: false, + }, + { + id: 9716210, + url: 'https://api.github.com/repos/mralexgray/adium', + fork: false, + name: 'adium', + size: 277719, + forks: 37, + owner: { + id: 262517, + url: 'https://api.github.com/users/mralexgray', + type: 'User', + login: 'mralexgray', + node_id: 'MDQ6VXNlcjI2MjUxNw==', + html_url: 'https://github.com/mralexgray', + gists_url: 'https://api.github.com/users/mralexgray/gists{/gist_id}', + repos_url: 'https://api.github.com/users/mralexgray/repos', + avatar_url: 'https://avatars.githubusercontent.com/u/262517?v=4', + events_url: + 'https://api.github.com/users/mralexgray/events{/privacy}', + site_admin: false, + gravatar_id: '', + starred_url: + 'https://api.github.com/users/mralexgray/starred{/owner}{/repo}', + followers_url: 'https://api.github.com/users/mralexgray/followers', + following_url: + 'https://api.github.com/users/mralexgray/following{/other_user}', + organizations_url: 'https://api.github.com/users/mralexgray/orgs', + subscriptions_url: + 'https://api.github.com/users/mralexgray/subscriptions', + received_events_url: + 'https://api.github.com/users/mralexgray/received_events', + }, + topics: [], + git_url: 'git://github.com/mralexgray/adium.git', + license: { + key: 'other', + url: null, + name: 'Other', + node_id: 'MDc6TGljZW5zZTA=', + spdx_id: 'NOASSERTION', + }, + node_id: 'MDEwOlJlcG9zaXRvcnk5NzE2MjEw', + private: false, + ssh_url: 'git@github.com:mralexgray/adium.git', + svn_url: 'https://github.com/mralexgray/adium', + archived: false, + disabled: false, + has_wiki: false, + homepage: null, + html_url: 'https://github.com/mralexgray/adium', + keys_url: 'https://api.github.com/repos/mralexgray/adium/keys{/key_id}', + language: 'Objective-C', + tags_url: 'https://api.github.com/repos/mralexgray/adium/tags', + watchers: 0, + blobs_url: + 'https://api.github.com/repos/mralexgray/adium/git/blobs{/sha}', + clone_url: 'https://github.com/mralexgray/adium.git', + forks_url: 'https://api.github.com/repos/mralexgray/adium/forks', + full_name: 'mralexgray/adium', + has_pages: false, + hooks_url: 'https://api.github.com/repos/mralexgray/adium/hooks', + pulls_url: + 'https://api.github.com/repos/mralexgray/adium/pulls{/number}', + pushed_at: '2013-04-26T16:43:53Z', + teams_url: 'https://api.github.com/repos/mralexgray/adium/teams', + trees_url: + 'https://api.github.com/repos/mralexgray/adium/git/trees{/sha}', + created_at: '2013-04-27T14:59:33Z', + events_url: 'https://api.github.com/repos/mralexgray/adium/events', + has_issues: false, + issues_url: + 'https://api.github.com/repos/mralexgray/adium/issues{/number}', + labels_url: + 'https://api.github.com/repos/mralexgray/adium/labels{/name}', + merges_url: 'https://api.github.com/repos/mralexgray/adium/merges', + mirror_url: null, + updated_at: '2019-12-11T06:51:45Z', + visibility: 'public', + archive_url: + 'https://api.github.com/repos/mralexgray/adium/{archive_format}{/ref}', + commits_url: + 'https://api.github.com/repos/mralexgray/adium/commits{/sha}', + compare_url: + 'https://api.github.com/repos/mralexgray/adium/compare/{base}...{head}', + description: 'Official mirror of hg.adium.im', + forks_count: 37, + is_template: false, + open_issues: 0, + branches_url: + 'https://api.github.com/repos/mralexgray/adium/branches{/branch}', + comments_url: + 'https://api.github.com/repos/mralexgray/adium/comments{/number}', + contents_url: + 'https://api.github.com/repos/mralexgray/adium/contents/{+path}', + git_refs_url: + 'https://api.github.com/repos/mralexgray/adium/git/refs{/sha}', + git_tags_url: + 'https://api.github.com/repos/mralexgray/adium/git/tags{/sha}', + has_projects: true, + releases_url: + 'https://api.github.com/repos/mralexgray/adium/releases{/id}', + statuses_url: + 'https://api.github.com/repos/mralexgray/adium/statuses/{sha}', + allow_forking: true, + assignees_url: + 'https://api.github.com/repos/mralexgray/adium/assignees{/user}', + downloads_url: + 'https://api.github.com/repos/mralexgray/adium/downloads', + has_downloads: true, + languages_url: + 'https://api.github.com/repos/mralexgray/adium/languages', + default_branch: 'master', + milestones_url: + 'https://api.github.com/repos/mralexgray/adium/milestones{/number}', + stargazers_url: + 'https://api.github.com/repos/mralexgray/adium/stargazers', + watchers_count: 0, + deployments_url: + 'https://api.github.com/repos/mralexgray/adium/deployments', + git_commits_url: + 'https://api.github.com/repos/mralexgray/adium/git/commits{/sha}', + subscribers_url: + 'https://api.github.com/repos/mralexgray/adium/subscribers', + contributors_url: + 'https://api.github.com/repos/mralexgray/adium/contributors', + issue_events_url: + 'https://api.github.com/repos/mralexgray/adium/issues/events{/number}', + stargazers_count: 0, + subscription_url: + 'https://api.github.com/repos/mralexgray/adium/subscription', + collaborators_url: + 'https://api.github.com/repos/mralexgray/adium/collaborators{/collaborator}', + issue_comment_url: + 'https://api.github.com/repos/mralexgray/adium/issues/comments{/number}', + notifications_url: + 'https://api.github.com/repos/mralexgray/adium/notifications{?since,all,participating}', + open_issues_count: 0, + web_commit_signoff_required: false, + }, + { + id: 12752329, + url: 'https://api.github.com/repos/mralexgray/ADLivelyTableView', + fork: true, + name: 'ADLivelyTableView', + size: 73, + forks: 0, + owner: { + id: 262517, + url: 'https://api.github.com/users/mralexgray', + type: 'User', + login: 'mralexgray', + node_id: 'MDQ6VXNlcjI2MjUxNw==', + html_url: 'https://github.com/mralexgray', + gists_url: 'https://api.github.com/users/mralexgray/gists{/gist_id}', + repos_url: 'https://api.github.com/users/mralexgray/repos', + avatar_url: 'https://avatars.githubusercontent.com/u/262517?v=4', + events_url: + 'https://api.github.com/users/mralexgray/events{/privacy}', + site_admin: false, + gravatar_id: '', + starred_url: + 'https://api.github.com/users/mralexgray/starred{/owner}{/repo}', + followers_url: 'https://api.github.com/users/mralexgray/followers', + following_url: + 'https://api.github.com/users/mralexgray/following{/other_user}', + organizations_url: 'https://api.github.com/users/mralexgray/orgs', + subscriptions_url: + 'https://api.github.com/users/mralexgray/subscriptions', + received_events_url: + 'https://api.github.com/users/mralexgray/received_events', + }, + topics: [], + git_url: 'git://github.com/mralexgray/ADLivelyTableView.git', + license: { + key: 'other', + url: null, + name: 'Other', + node_id: 'MDc6TGljZW5zZTA=', + spdx_id: 'NOASSERTION', + }, + node_id: 'MDEwOlJlcG9zaXRvcnkxMjc1MjMyOQ==', + private: false, + ssh_url: 'git@github.com:mralexgray/ADLivelyTableView.git', + svn_url: 'https://github.com/mralexgray/ADLivelyTableView', + archived: false, + disabled: false, + has_wiki: true, + homepage: 'http://applidium.com/en/news/lively_uitableview/', + html_url: 'https://github.com/mralexgray/ADLivelyTableView', + keys_url: + 'https://api.github.com/repos/mralexgray/ADLivelyTableView/keys{/key_id}', + language: 'Objective-C', + tags_url: + 'https://api.github.com/repos/mralexgray/ADLivelyTableView/tags', + watchers: 0, + blobs_url: + 'https://api.github.com/repos/mralexgray/ADLivelyTableView/git/blobs{/sha}', + clone_url: 'https://github.com/mralexgray/ADLivelyTableView.git', + forks_url: + 'https://api.github.com/repos/mralexgray/ADLivelyTableView/forks', + full_name: 'mralexgray/ADLivelyTableView', + has_pages: false, + hooks_url: + 'https://api.github.com/repos/mralexgray/ADLivelyTableView/hooks', + pulls_url: + 'https://api.github.com/repos/mralexgray/ADLivelyTableView/pulls{/number}', + pushed_at: '2012-05-10T10:40:15Z', + teams_url: + 'https://api.github.com/repos/mralexgray/ADLivelyTableView/teams', + trees_url: + 'https://api.github.com/repos/mralexgray/ADLivelyTableView/git/trees{/sha}', + created_at: '2013-09-11T09:18:01Z', + events_url: + 'https://api.github.com/repos/mralexgray/ADLivelyTableView/events', + has_issues: false, + issues_url: + 'https://api.github.com/repos/mralexgray/ADLivelyTableView/issues{/number}', + labels_url: + 'https://api.github.com/repos/mralexgray/ADLivelyTableView/labels{/name}', + merges_url: + 'https://api.github.com/repos/mralexgray/ADLivelyTableView/merges', + mirror_url: null, + updated_at: '2013-09-11T09:18:03Z', + visibility: 'public', + archive_url: + 'https://api.github.com/repos/mralexgray/ADLivelyTableView/{archive_format}{/ref}', + commits_url: + 'https://api.github.com/repos/mralexgray/ADLivelyTableView/commits{/sha}', + compare_url: + 'https://api.github.com/repos/mralexgray/ADLivelyTableView/compare/{base}...{head}', + description: 'Lively UITableView', + forks_count: 0, + is_template: false, + open_issues: 0, + branches_url: + 'https://api.github.com/repos/mralexgray/ADLivelyTableView/branches{/branch}', + comments_url: + 'https://api.github.com/repos/mralexgray/ADLivelyTableView/comments{/number}', + contents_url: + 'https://api.github.com/repos/mralexgray/ADLivelyTableView/contents/{+path}', + git_refs_url: + 'https://api.github.com/repos/mralexgray/ADLivelyTableView/git/refs{/sha}', + git_tags_url: + 'https://api.github.com/repos/mralexgray/ADLivelyTableView/git/tags{/sha}', + has_projects: true, + releases_url: + 'https://api.github.com/repos/mralexgray/ADLivelyTableView/releases{/id}', + statuses_url: + 'https://api.github.com/repos/mralexgray/ADLivelyTableView/statuses/{sha}', + allow_forking: true, + assignees_url: + 'https://api.github.com/repos/mralexgray/ADLivelyTableView/assignees{/user}', + downloads_url: + 'https://api.github.com/repos/mralexgray/ADLivelyTableView/downloads', + has_downloads: true, + languages_url: + 'https://api.github.com/repos/mralexgray/ADLivelyTableView/languages', + default_branch: 'master', + milestones_url: + 'https://api.github.com/repos/mralexgray/ADLivelyTableView/milestones{/number}', + stargazers_url: + 'https://api.github.com/repos/mralexgray/ADLivelyTableView/stargazers', + watchers_count: 0, + deployments_url: + 'https://api.github.com/repos/mralexgray/ADLivelyTableView/deployments', + git_commits_url: + 'https://api.github.com/repos/mralexgray/ADLivelyTableView/git/commits{/sha}', + subscribers_url: + 'https://api.github.com/repos/mralexgray/ADLivelyTableView/subscribers', + contributors_url: + 'https://api.github.com/repos/mralexgray/ADLivelyTableView/contributors', + issue_events_url: + 'https://api.github.com/repos/mralexgray/ADLivelyTableView/issues/events{/number}', + stargazers_count: 0, + subscription_url: + 'https://api.github.com/repos/mralexgray/ADLivelyTableView/subscription', + collaborators_url: + 'https://api.github.com/repos/mralexgray/ADLivelyTableView/collaborators{/collaborator}', + issue_comment_url: + 'https://api.github.com/repos/mralexgray/ADLivelyTableView/issues/comments{/number}', + notifications_url: + 'https://api.github.com/repos/mralexgray/ADLivelyTableView/notifications{?since,all,participating}', + open_issues_count: 0, + web_commit_signoff_required: false, + }, + { + id: 5697379, + url: 'https://api.github.com/repos/mralexgray/AFIncrementalStore', + fork: true, + name: 'AFIncrementalStore', + size: 139, + forks: 0, + owner: { + id: 262517, + url: 'https://api.github.com/users/mralexgray', + type: 'User', + login: 'mralexgray', + node_id: 'MDQ6VXNlcjI2MjUxNw==', + html_url: 'https://github.com/mralexgray', + gists_url: 'https://api.github.com/users/mralexgray/gists{/gist_id}', + repos_url: 'https://api.github.com/users/mralexgray/repos', + avatar_url: 'https://avatars.githubusercontent.com/u/262517?v=4', + events_url: + 'https://api.github.com/users/mralexgray/events{/privacy}', + site_admin: false, + gravatar_id: '', + starred_url: + 'https://api.github.com/users/mralexgray/starred{/owner}{/repo}', + followers_url: 'https://api.github.com/users/mralexgray/followers', + following_url: + 'https://api.github.com/users/mralexgray/following{/other_user}', + organizations_url: 'https://api.github.com/users/mralexgray/orgs', + subscriptions_url: + 'https://api.github.com/users/mralexgray/subscriptions', + received_events_url: + 'https://api.github.com/users/mralexgray/received_events', + }, + topics: [], + git_url: 'git://github.com/mralexgray/AFIncrementalStore.git', + license: { + key: 'mit', + url: 'https://api.github.com/licenses/mit', + name: 'MIT License', + node_id: 'MDc6TGljZW5zZTEz', + spdx_id: 'MIT', + }, + node_id: 'MDEwOlJlcG9zaXRvcnk1Njk3Mzc5', + private: false, + ssh_url: 'git@github.com:mralexgray/AFIncrementalStore.git', + svn_url: 'https://github.com/mralexgray/AFIncrementalStore', + archived: false, + disabled: false, + has_wiki: true, + homepage: null, + html_url: 'https://github.com/mralexgray/AFIncrementalStore', + keys_url: + 'https://api.github.com/repos/mralexgray/AFIncrementalStore/keys{/key_id}', + language: 'Objective-C', + tags_url: + 'https://api.github.com/repos/mralexgray/AFIncrementalStore/tags', + watchers: 0, + blobs_url: + 'https://api.github.com/repos/mralexgray/AFIncrementalStore/git/blobs{/sha}', + clone_url: 'https://github.com/mralexgray/AFIncrementalStore.git', + forks_url: + 'https://api.github.com/repos/mralexgray/AFIncrementalStore/forks', + full_name: 'mralexgray/AFIncrementalStore', + has_pages: false, + hooks_url: + 'https://api.github.com/repos/mralexgray/AFIncrementalStore/hooks', + pulls_url: + 'https://api.github.com/repos/mralexgray/AFIncrementalStore/pulls{/number}', + pushed_at: '2012-09-01T22:46:25Z', + teams_url: + 'https://api.github.com/repos/mralexgray/AFIncrementalStore/teams', + trees_url: + 'https://api.github.com/repos/mralexgray/AFIncrementalStore/git/trees{/sha}', + created_at: '2012-09-06T04:20:33Z', + events_url: + 'https://api.github.com/repos/mralexgray/AFIncrementalStore/events', + has_issues: false, + issues_url: + 'https://api.github.com/repos/mralexgray/AFIncrementalStore/issues{/number}', + labels_url: + 'https://api.github.com/repos/mralexgray/AFIncrementalStore/labels{/name}', + merges_url: + 'https://api.github.com/repos/mralexgray/AFIncrementalStore/merges', + mirror_url: null, + updated_at: '2013-01-12T03:15:29Z', + visibility: 'public', + archive_url: + 'https://api.github.com/repos/mralexgray/AFIncrementalStore/{archive_format}{/ref}', + commits_url: + 'https://api.github.com/repos/mralexgray/AFIncrementalStore/commits{/sha}', + compare_url: + 'https://api.github.com/repos/mralexgray/AFIncrementalStore/compare/{base}...{head}', + description: 'Core Data Persistence with AFNetworking, Done Right', + forks_count: 0, + is_template: false, + open_issues: 0, + branches_url: + 'https://api.github.com/repos/mralexgray/AFIncrementalStore/branches{/branch}', + comments_url: + 'https://api.github.com/repos/mralexgray/AFIncrementalStore/comments{/number}', + contents_url: + 'https://api.github.com/repos/mralexgray/AFIncrementalStore/contents/{+path}', + git_refs_url: + 'https://api.github.com/repos/mralexgray/AFIncrementalStore/git/refs{/sha}', + git_tags_url: + 'https://api.github.com/repos/mralexgray/AFIncrementalStore/git/tags{/sha}', + has_projects: true, + releases_url: + 'https://api.github.com/repos/mralexgray/AFIncrementalStore/releases{/id}', + statuses_url: + 'https://api.github.com/repos/mralexgray/AFIncrementalStore/statuses/{sha}', + allow_forking: true, + assignees_url: + 'https://api.github.com/repos/mralexgray/AFIncrementalStore/assignees{/user}', + downloads_url: + 'https://api.github.com/repos/mralexgray/AFIncrementalStore/downloads', + has_downloads: true, + languages_url: + 'https://api.github.com/repos/mralexgray/AFIncrementalStore/languages', + default_branch: 'master', + milestones_url: + 'https://api.github.com/repos/mralexgray/AFIncrementalStore/milestones{/number}', + stargazers_url: + 'https://api.github.com/repos/mralexgray/AFIncrementalStore/stargazers', + watchers_count: 0, + deployments_url: + 'https://api.github.com/repos/mralexgray/AFIncrementalStore/deployments', + git_commits_url: + 'https://api.github.com/repos/mralexgray/AFIncrementalStore/git/commits{/sha}', + subscribers_url: + 'https://api.github.com/repos/mralexgray/AFIncrementalStore/subscribers', + contributors_url: + 'https://api.github.com/repos/mralexgray/AFIncrementalStore/contributors', + issue_events_url: + 'https://api.github.com/repos/mralexgray/AFIncrementalStore/issues/events{/number}', + stargazers_count: 0, + subscription_url: + 'https://api.github.com/repos/mralexgray/AFIncrementalStore/subscription', + collaborators_url: + 'https://api.github.com/repos/mralexgray/AFIncrementalStore/collaborators{/collaborator}', + issue_comment_url: + 'https://api.github.com/repos/mralexgray/AFIncrementalStore/issues/comments{/number}', + notifications_url: + 'https://api.github.com/repos/mralexgray/AFIncrementalStore/notifications{?since,all,participating}', + open_issues_count: 0, + web_commit_signoff_required: false, + }, + { + id: 6969621, + url: 'https://api.github.com/repos/mralexgray/AFNetworking', + fork: true, + name: 'AFNetworking', + size: 4341, + forks: 0, + owner: { + id: 262517, + url: 'https://api.github.com/users/mralexgray', + type: 'User', + login: 'mralexgray', + node_id: 'MDQ6VXNlcjI2MjUxNw==', + html_url: 'https://github.com/mralexgray', + gists_url: 'https://api.github.com/users/mralexgray/gists{/gist_id}', + repos_url: 'https://api.github.com/users/mralexgray/repos', + avatar_url: 'https://avatars.githubusercontent.com/u/262517?v=4', + events_url: + 'https://api.github.com/users/mralexgray/events{/privacy}', + site_admin: false, + gravatar_id: '', + starred_url: + 'https://api.github.com/users/mralexgray/starred{/owner}{/repo}', + followers_url: 'https://api.github.com/users/mralexgray/followers', + following_url: + 'https://api.github.com/users/mralexgray/following{/other_user}', + organizations_url: 'https://api.github.com/users/mralexgray/orgs', + subscriptions_url: + 'https://api.github.com/users/mralexgray/subscriptions', + received_events_url: + 'https://api.github.com/users/mralexgray/received_events', + }, + topics: [], + git_url: 'git://github.com/mralexgray/AFNetworking.git', + license: { + key: 'mit', + url: 'https://api.github.com/licenses/mit', + name: 'MIT License', + node_id: 'MDc6TGljZW5zZTEz', + spdx_id: 'MIT', + }, + node_id: 'MDEwOlJlcG9zaXRvcnk2OTY5NjIx', + private: false, + ssh_url: 'git@github.com:mralexgray/AFNetworking.git', + svn_url: 'https://github.com/mralexgray/AFNetworking', + archived: false, + disabled: false, + has_wiki: true, + homepage: 'http://afnetworking.com', + html_url: 'https://github.com/mralexgray/AFNetworking', + keys_url: + 'https://api.github.com/repos/mralexgray/AFNetworking/keys{/key_id}', + language: 'Objective-C', + tags_url: 'https://api.github.com/repos/mralexgray/AFNetworking/tags', + watchers: 2, + blobs_url: + 'https://api.github.com/repos/mralexgray/AFNetworking/git/blobs{/sha}', + clone_url: 'https://github.com/mralexgray/AFNetworking.git', + forks_url: 'https://api.github.com/repos/mralexgray/AFNetworking/forks', + full_name: 'mralexgray/AFNetworking', + has_pages: false, + hooks_url: 'https://api.github.com/repos/mralexgray/AFNetworking/hooks', + pulls_url: + 'https://api.github.com/repos/mralexgray/AFNetworking/pulls{/number}', + pushed_at: '2014-01-24T07:14:32Z', + teams_url: 'https://api.github.com/repos/mralexgray/AFNetworking/teams', + trees_url: + 'https://api.github.com/repos/mralexgray/AFNetworking/git/trees{/sha}', + created_at: '2012-12-02T17:00:04Z', + events_url: + 'https://api.github.com/repos/mralexgray/AFNetworking/events', + has_issues: false, + issues_url: + 'https://api.github.com/repos/mralexgray/AFNetworking/issues{/number}', + labels_url: + 'https://api.github.com/repos/mralexgray/AFNetworking/labels{/name}', + merges_url: + 'https://api.github.com/repos/mralexgray/AFNetworking/merges', + mirror_url: null, + updated_at: '2014-01-24T07:14:33Z', + visibility: 'public', + archive_url: + 'https://api.github.com/repos/mralexgray/AFNetworking/{archive_format}{/ref}', + commits_url: + 'https://api.github.com/repos/mralexgray/AFNetworking/commits{/sha}', + compare_url: + 'https://api.github.com/repos/mralexgray/AFNetworking/compare/{base}...{head}', + description: 'A delightful iOS and OS X networking framework', + forks_count: 0, + is_template: false, + open_issues: 0, + branches_url: + 'https://api.github.com/repos/mralexgray/AFNetworking/branches{/branch}', + comments_url: + 'https://api.github.com/repos/mralexgray/AFNetworking/comments{/number}', + contents_url: + 'https://api.github.com/repos/mralexgray/AFNetworking/contents/{+path}', + git_refs_url: + 'https://api.github.com/repos/mralexgray/AFNetworking/git/refs{/sha}', + git_tags_url: + 'https://api.github.com/repos/mralexgray/AFNetworking/git/tags{/sha}', + has_projects: true, + releases_url: + 'https://api.github.com/repos/mralexgray/AFNetworking/releases{/id}', + statuses_url: + 'https://api.github.com/repos/mralexgray/AFNetworking/statuses/{sha}', + allow_forking: true, + assignees_url: + 'https://api.github.com/repos/mralexgray/AFNetworking/assignees{/user}', + downloads_url: + 'https://api.github.com/repos/mralexgray/AFNetworking/downloads', + has_downloads: true, + languages_url: + 'https://api.github.com/repos/mralexgray/AFNetworking/languages', + default_branch: 'master', + milestones_url: + 'https://api.github.com/repos/mralexgray/AFNetworking/milestones{/number}', + stargazers_url: + 'https://api.github.com/repos/mralexgray/AFNetworking/stargazers', + watchers_count: 2, + deployments_url: + 'https://api.github.com/repos/mralexgray/AFNetworking/deployments', + git_commits_url: + 'https://api.github.com/repos/mralexgray/AFNetworking/git/commits{/sha}', + subscribers_url: + 'https://api.github.com/repos/mralexgray/AFNetworking/subscribers', + contributors_url: + 'https://api.github.com/repos/mralexgray/AFNetworking/contributors', + issue_events_url: + 'https://api.github.com/repos/mralexgray/AFNetworking/issues/events{/number}', + stargazers_count: 2, + subscription_url: + 'https://api.github.com/repos/mralexgray/AFNetworking/subscription', + collaborators_url: + 'https://api.github.com/repos/mralexgray/AFNetworking/collaborators{/collaborator}', + issue_comment_url: + 'https://api.github.com/repos/mralexgray/AFNetworking/issues/comments{/number}', + notifications_url: + 'https://api.github.com/repos/mralexgray/AFNetworking/notifications{?since,all,participating}', + open_issues_count: 0, + web_commit_signoff_required: false, + }, + { + id: 9485541, + url: 'https://api.github.com/repos/mralexgray/AGNSSplitView', + fork: true, + name: 'AGNSSplitView', + size: 68, + forks: 0, + owner: { + id: 262517, + url: 'https://api.github.com/users/mralexgray', + type: 'User', + login: 'mralexgray', + node_id: 'MDQ6VXNlcjI2MjUxNw==', + html_url: 'https://github.com/mralexgray', + gists_url: 'https://api.github.com/users/mralexgray/gists{/gist_id}', + repos_url: 'https://api.github.com/users/mralexgray/repos', + avatar_url: 'https://avatars.githubusercontent.com/u/262517?v=4', + events_url: + 'https://api.github.com/users/mralexgray/events{/privacy}', + site_admin: false, + gravatar_id: '', + starred_url: + 'https://api.github.com/users/mralexgray/starred{/owner}{/repo}', + followers_url: 'https://api.github.com/users/mralexgray/followers', + following_url: + 'https://api.github.com/users/mralexgray/following{/other_user}', + organizations_url: 'https://api.github.com/users/mralexgray/orgs', + subscriptions_url: + 'https://api.github.com/users/mralexgray/subscriptions', + received_events_url: + 'https://api.github.com/users/mralexgray/received_events', + }, + topics: [], + git_url: 'git://github.com/mralexgray/AGNSSplitView.git', + license: null, + node_id: 'MDEwOlJlcG9zaXRvcnk5NDg1NTQx', + private: false, + ssh_url: 'git@github.com:mralexgray/AGNSSplitView.git', + svn_url: 'https://github.com/mralexgray/AGNSSplitView', + archived: false, + disabled: false, + has_wiki: true, + homepage: null, + html_url: 'https://github.com/mralexgray/AGNSSplitView', + keys_url: + 'https://api.github.com/repos/mralexgray/AGNSSplitView/keys{/key_id}', + language: 'Objective-C', + tags_url: 'https://api.github.com/repos/mralexgray/AGNSSplitView/tags', + watchers: 0, + blobs_url: + 'https://api.github.com/repos/mralexgray/AGNSSplitView/git/blobs{/sha}', + clone_url: 'https://github.com/mralexgray/AGNSSplitView.git', + forks_url: + 'https://api.github.com/repos/mralexgray/AGNSSplitView/forks', + full_name: 'mralexgray/AGNSSplitView', + has_pages: false, + hooks_url: + 'https://api.github.com/repos/mralexgray/AGNSSplitView/hooks', + pulls_url: + 'https://api.github.com/repos/mralexgray/AGNSSplitView/pulls{/number}', + pushed_at: '2013-02-26T00:32:32Z', + teams_url: + 'https://api.github.com/repos/mralexgray/AGNSSplitView/teams', + trees_url: + 'https://api.github.com/repos/mralexgray/AGNSSplitView/git/trees{/sha}', + created_at: '2013-04-17T00:10:13Z', + events_url: + 'https://api.github.com/repos/mralexgray/AGNSSplitView/events', + has_issues: false, + issues_url: + 'https://api.github.com/repos/mralexgray/AGNSSplitView/issues{/number}', + labels_url: + 'https://api.github.com/repos/mralexgray/AGNSSplitView/labels{/name}', + merges_url: + 'https://api.github.com/repos/mralexgray/AGNSSplitView/merges', + mirror_url: null, + updated_at: '2013-04-17T00:10:13Z', + visibility: 'public', + archive_url: + 'https://api.github.com/repos/mralexgray/AGNSSplitView/{archive_format}{/ref}', + commits_url: + 'https://api.github.com/repos/mralexgray/AGNSSplitView/commits{/sha}', + compare_url: + 'https://api.github.com/repos/mralexgray/AGNSSplitView/compare/{base}...{head}', + description: 'Simple NSSplitView additions.', + forks_count: 0, + is_template: false, + open_issues: 0, + branches_url: + 'https://api.github.com/repos/mralexgray/AGNSSplitView/branches{/branch}', + comments_url: + 'https://api.github.com/repos/mralexgray/AGNSSplitView/comments{/number}', + contents_url: + 'https://api.github.com/repos/mralexgray/AGNSSplitView/contents/{+path}', + git_refs_url: + 'https://api.github.com/repos/mralexgray/AGNSSplitView/git/refs{/sha}', + git_tags_url: + 'https://api.github.com/repos/mralexgray/AGNSSplitView/git/tags{/sha}', + has_projects: true, + releases_url: + 'https://api.github.com/repos/mralexgray/AGNSSplitView/releases{/id}', + statuses_url: + 'https://api.github.com/repos/mralexgray/AGNSSplitView/statuses/{sha}', + allow_forking: true, + assignees_url: + 'https://api.github.com/repos/mralexgray/AGNSSplitView/assignees{/user}', + downloads_url: + 'https://api.github.com/repos/mralexgray/AGNSSplitView/downloads', + has_downloads: true, + languages_url: + 'https://api.github.com/repos/mralexgray/AGNSSplitView/languages', + default_branch: 'master', + milestones_url: + 'https://api.github.com/repos/mralexgray/AGNSSplitView/milestones{/number}', + stargazers_url: + 'https://api.github.com/repos/mralexgray/AGNSSplitView/stargazers', + watchers_count: 0, + deployments_url: + 'https://api.github.com/repos/mralexgray/AGNSSplitView/deployments', + git_commits_url: + 'https://api.github.com/repos/mralexgray/AGNSSplitView/git/commits{/sha}', + subscribers_url: + 'https://api.github.com/repos/mralexgray/AGNSSplitView/subscribers', + contributors_url: + 'https://api.github.com/repos/mralexgray/AGNSSplitView/contributors', + issue_events_url: + 'https://api.github.com/repos/mralexgray/AGNSSplitView/issues/events{/number}', + stargazers_count: 0, + subscription_url: + 'https://api.github.com/repos/mralexgray/AGNSSplitView/subscription', + collaborators_url: + 'https://api.github.com/repos/mralexgray/AGNSSplitView/collaborators{/collaborator}', + issue_comment_url: + 'https://api.github.com/repos/mralexgray/AGNSSplitView/issues/comments{/number}', + notifications_url: + 'https://api.github.com/repos/mralexgray/AGNSSplitView/notifications{?since,all,participating}', + open_issues_count: 0, + web_commit_signoff_required: false, + }, + { + id: 12767784, + url: 'https://api.github.com/repos/mralexgray/AGScopeBar', + fork: true, + name: 'AGScopeBar', + size: 64, + forks: 0, + owner: { + id: 262517, + url: 'https://api.github.com/users/mralexgray', + type: 'User', + login: 'mralexgray', + node_id: 'MDQ6VXNlcjI2MjUxNw==', + html_url: 'https://github.com/mralexgray', + gists_url: 'https://api.github.com/users/mralexgray/gists{/gist_id}', + repos_url: 'https://api.github.com/users/mralexgray/repos', + avatar_url: 'https://avatars.githubusercontent.com/u/262517?v=4', + events_url: + 'https://api.github.com/users/mralexgray/events{/privacy}', + site_admin: false, + gravatar_id: '', + starred_url: + 'https://api.github.com/users/mralexgray/starred{/owner}{/repo}', + followers_url: 'https://api.github.com/users/mralexgray/followers', + following_url: + 'https://api.github.com/users/mralexgray/following{/other_user}', + organizations_url: 'https://api.github.com/users/mralexgray/orgs', + subscriptions_url: + 'https://api.github.com/users/mralexgray/subscriptions', + received_events_url: + 'https://api.github.com/users/mralexgray/received_events', + }, + topics: [], + git_url: 'git://github.com/mralexgray/AGScopeBar.git', + license: null, + node_id: 'MDEwOlJlcG9zaXRvcnkxMjc2Nzc4NA==', + private: false, + ssh_url: 'git@github.com:mralexgray/AGScopeBar.git', + svn_url: 'https://github.com/mralexgray/AGScopeBar', + archived: false, + disabled: false, + has_wiki: true, + homepage: null, + html_url: 'https://github.com/mralexgray/AGScopeBar', + keys_url: + 'https://api.github.com/repos/mralexgray/AGScopeBar/keys{/key_id}', + language: 'Objective-C', + tags_url: 'https://api.github.com/repos/mralexgray/AGScopeBar/tags', + watchers: 0, + blobs_url: + 'https://api.github.com/repos/mralexgray/AGScopeBar/git/blobs{/sha}', + clone_url: 'https://github.com/mralexgray/AGScopeBar.git', + forks_url: 'https://api.github.com/repos/mralexgray/AGScopeBar/forks', + full_name: 'mralexgray/AGScopeBar', + has_pages: false, + hooks_url: 'https://api.github.com/repos/mralexgray/AGScopeBar/hooks', + pulls_url: + 'https://api.github.com/repos/mralexgray/AGScopeBar/pulls{/number}', + pushed_at: '2013-05-07T03:35:29Z', + teams_url: 'https://api.github.com/repos/mralexgray/AGScopeBar/teams', + trees_url: + 'https://api.github.com/repos/mralexgray/AGScopeBar/git/trees{/sha}', + created_at: '2013-09-11T21:06:54Z', + events_url: 'https://api.github.com/repos/mralexgray/AGScopeBar/events', + has_issues: false, + issues_url: + 'https://api.github.com/repos/mralexgray/AGScopeBar/issues{/number}', + labels_url: + 'https://api.github.com/repos/mralexgray/AGScopeBar/labels{/name}', + merges_url: 'https://api.github.com/repos/mralexgray/AGScopeBar/merges', + mirror_url: null, + updated_at: '2013-09-11T21:06:54Z', + visibility: 'public', + archive_url: + 'https://api.github.com/repos/mralexgray/AGScopeBar/{archive_format}{/ref}', + commits_url: + 'https://api.github.com/repos/mralexgray/AGScopeBar/commits{/sha}', + compare_url: + 'https://api.github.com/repos/mralexgray/AGScopeBar/compare/{base}...{head}', + description: 'Custom scope bar implementation for Cocoa', + forks_count: 0, + is_template: false, + open_issues: 0, + branches_url: + 'https://api.github.com/repos/mralexgray/AGScopeBar/branches{/branch}', + comments_url: + 'https://api.github.com/repos/mralexgray/AGScopeBar/comments{/number}', + contents_url: + 'https://api.github.com/repos/mralexgray/AGScopeBar/contents/{+path}', + git_refs_url: + 'https://api.github.com/repos/mralexgray/AGScopeBar/git/refs{/sha}', + git_tags_url: + 'https://api.github.com/repos/mralexgray/AGScopeBar/git/tags{/sha}', + has_projects: true, + releases_url: + 'https://api.github.com/repos/mralexgray/AGScopeBar/releases{/id}', + statuses_url: + 'https://api.github.com/repos/mralexgray/AGScopeBar/statuses/{sha}', + allow_forking: true, + assignees_url: + 'https://api.github.com/repos/mralexgray/AGScopeBar/assignees{/user}', + downloads_url: + 'https://api.github.com/repos/mralexgray/AGScopeBar/downloads', + has_downloads: true, + languages_url: + 'https://api.github.com/repos/mralexgray/AGScopeBar/languages', + default_branch: 'master', + milestones_url: + 'https://api.github.com/repos/mralexgray/AGScopeBar/milestones{/number}', + stargazers_url: + 'https://api.github.com/repos/mralexgray/AGScopeBar/stargazers', + watchers_count: 0, + deployments_url: + 'https://api.github.com/repos/mralexgray/AGScopeBar/deployments', + git_commits_url: + 'https://api.github.com/repos/mralexgray/AGScopeBar/git/commits{/sha}', + subscribers_url: + 'https://api.github.com/repos/mralexgray/AGScopeBar/subscribers', + contributors_url: + 'https://api.github.com/repos/mralexgray/AGScopeBar/contributors', + issue_events_url: + 'https://api.github.com/repos/mralexgray/AGScopeBar/issues/events{/number}', + stargazers_count: 0, + subscription_url: + 'https://api.github.com/repos/mralexgray/AGScopeBar/subscription', + collaborators_url: + 'https://api.github.com/repos/mralexgray/AGScopeBar/collaborators{/collaborator}', + issue_comment_url: + 'https://api.github.com/repos/mralexgray/AGScopeBar/issues/comments{/number}', + notifications_url: + 'https://api.github.com/repos/mralexgray/AGScopeBar/notifications{?since,all,participating}', + open_issues_count: 0, + web_commit_signoff_required: false, + }, + { + id: 31829499, + url: 'https://api.github.com/repos/mralexgray/agvtool-xcode-plugin', + fork: true, + name: 'agvtool-xcode-plugin', + size: 102, + forks: 0, + owner: { + id: 262517, + url: 'https://api.github.com/users/mralexgray', + type: 'User', + login: 'mralexgray', + node_id: 'MDQ6VXNlcjI2MjUxNw==', + html_url: 'https://github.com/mralexgray', + gists_url: 'https://api.github.com/users/mralexgray/gists{/gist_id}', + repos_url: 'https://api.github.com/users/mralexgray/repos', + avatar_url: 'https://avatars.githubusercontent.com/u/262517?v=4', + events_url: + 'https://api.github.com/users/mralexgray/events{/privacy}', + site_admin: false, + gravatar_id: '', + starred_url: + 'https://api.github.com/users/mralexgray/starred{/owner}{/repo}', + followers_url: 'https://api.github.com/users/mralexgray/followers', + following_url: + 'https://api.github.com/users/mralexgray/following{/other_user}', + organizations_url: 'https://api.github.com/users/mralexgray/orgs', + subscriptions_url: + 'https://api.github.com/users/mralexgray/subscriptions', + received_events_url: + 'https://api.github.com/users/mralexgray/received_events', + }, + topics: [], + git_url: 'git://github.com/mralexgray/agvtool-xcode-plugin.git', + license: null, + node_id: 'MDEwOlJlcG9zaXRvcnkzMTgyOTQ5OQ==', + private: false, + ssh_url: 'git@github.com:mralexgray/agvtool-xcode-plugin.git', + svn_url: 'https://github.com/mralexgray/agvtool-xcode-plugin', + archived: false, + disabled: false, + has_wiki: true, + homepage: null, + html_url: 'https://github.com/mralexgray/agvtool-xcode-plugin', + keys_url: + 'https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/keys{/key_id}', + language: 'Objective-C', + tags_url: + 'https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/tags', + watchers: 0, + blobs_url: + 'https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/git/blobs{/sha}', + clone_url: 'https://github.com/mralexgray/agvtool-xcode-plugin.git', + forks_url: + 'https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/forks', + full_name: 'mralexgray/agvtool-xcode-plugin', + has_pages: false, + hooks_url: + 'https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/hooks', + pulls_url: + 'https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/pulls{/number}', + pushed_at: '2015-03-08T00:04:31Z', + teams_url: + 'https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/teams', + trees_url: + 'https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/git/trees{/sha}', + created_at: '2015-03-07T22:15:38Z', + events_url: + 'https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/events', + has_issues: false, + issues_url: + 'https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/issues{/number}', + labels_url: + 'https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/labels{/name}', + merges_url: + 'https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/merges', + mirror_url: null, + updated_at: '2015-03-07T22:15:41Z', + visibility: 'public', + archive_url: + 'https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/{archive_format}{/ref}', + commits_url: + 'https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/commits{/sha}', + compare_url: + 'https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/compare/{base}...{head}', + description: 'this is a plugin wrapper for agvtool for xcode.', + forks_count: 0, + is_template: false, + open_issues: 0, + branches_url: + 'https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/branches{/branch}', + comments_url: + 'https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/comments{/number}', + contents_url: + 'https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/contents/{+path}', + git_refs_url: + 'https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/git/refs{/sha}', + git_tags_url: + 'https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/git/tags{/sha}', + has_projects: true, + releases_url: + 'https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/releases{/id}', + statuses_url: + 'https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/statuses/{sha}', + allow_forking: true, + assignees_url: + 'https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/assignees{/user}', + downloads_url: + 'https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/downloads', + has_downloads: true, + languages_url: + 'https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/languages', + default_branch: 'master', + milestones_url: + 'https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/milestones{/number}', + stargazers_url: + 'https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/stargazers', + watchers_count: 0, + deployments_url: + 'https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/deployments', + git_commits_url: + 'https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/git/commits{/sha}', + subscribers_url: + 'https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/subscribers', + contributors_url: + 'https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/contributors', + issue_events_url: + 'https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/issues/events{/number}', + stargazers_count: 0, + subscription_url: + 'https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/subscription', + collaborators_url: + 'https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/collaborators{/collaborator}', + issue_comment_url: + 'https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/issues/comments{/number}', + notifications_url: + 'https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/notifications{?since,all,participating}', + open_issues_count: 0, + web_commit_signoff_required: false, + }, + { + id: 9227846, + url: 'https://api.github.com/repos/mralexgray/AHContentBrowser', + fork: true, + name: 'AHContentBrowser', + size: 223, + forks: 0, + owner: { + id: 262517, + url: 'https://api.github.com/users/mralexgray', + type: 'User', + login: 'mralexgray', + node_id: 'MDQ6VXNlcjI2MjUxNw==', + html_url: 'https://github.com/mralexgray', + gists_url: 'https://api.github.com/users/mralexgray/gists{/gist_id}', + repos_url: 'https://api.github.com/users/mralexgray/repos', + avatar_url: 'https://avatars.githubusercontent.com/u/262517?v=4', + events_url: + 'https://api.github.com/users/mralexgray/events{/privacy}', + site_admin: false, + gravatar_id: '', + starred_url: + 'https://api.github.com/users/mralexgray/starred{/owner}{/repo}', + followers_url: 'https://api.github.com/users/mralexgray/followers', + following_url: + 'https://api.github.com/users/mralexgray/following{/other_user}', + organizations_url: 'https://api.github.com/users/mralexgray/orgs', + subscriptions_url: + 'https://api.github.com/users/mralexgray/subscriptions', + received_events_url: + 'https://api.github.com/users/mralexgray/received_events', + }, + topics: [], + git_url: 'git://github.com/mralexgray/AHContentBrowser.git', + license: null, + node_id: 'MDEwOlJlcG9zaXRvcnk5MjI3ODQ2', + private: false, + ssh_url: 'git@github.com:mralexgray/AHContentBrowser.git', + svn_url: 'https://github.com/mralexgray/AHContentBrowser', + archived: false, + disabled: false, + has_wiki: true, + homepage: '', + html_url: 'https://github.com/mralexgray/AHContentBrowser', + keys_url: + 'https://api.github.com/repos/mralexgray/AHContentBrowser/keys{/key_id}', + language: 'Objective-C', + tags_url: + 'https://api.github.com/repos/mralexgray/AHContentBrowser/tags', + watchers: 0, + blobs_url: + 'https://api.github.com/repos/mralexgray/AHContentBrowser/git/blobs{/sha}', + clone_url: 'https://github.com/mralexgray/AHContentBrowser.git', + forks_url: + 'https://api.github.com/repos/mralexgray/AHContentBrowser/forks', + full_name: 'mralexgray/AHContentBrowser', + has_pages: false, + hooks_url: + 'https://api.github.com/repos/mralexgray/AHContentBrowser/hooks', + pulls_url: + 'https://api.github.com/repos/mralexgray/AHContentBrowser/pulls{/number}', + pushed_at: '2013-03-13T17:38:23Z', + teams_url: + 'https://api.github.com/repos/mralexgray/AHContentBrowser/teams', + trees_url: + 'https://api.github.com/repos/mralexgray/AHContentBrowser/git/trees{/sha}', + created_at: '2013-04-04T20:56:16Z', + events_url: + 'https://api.github.com/repos/mralexgray/AHContentBrowser/events', + has_issues: false, + issues_url: + 'https://api.github.com/repos/mralexgray/AHContentBrowser/issues{/number}', + labels_url: + 'https://api.github.com/repos/mralexgray/AHContentBrowser/labels{/name}', + merges_url: + 'https://api.github.com/repos/mralexgray/AHContentBrowser/merges', + mirror_url: null, + updated_at: '2015-10-22T05:00:24Z', + visibility: 'public', + archive_url: + 'https://api.github.com/repos/mralexgray/AHContentBrowser/{archive_format}{/ref}', + commits_url: + 'https://api.github.com/repos/mralexgray/AHContentBrowser/commits{/sha}', + compare_url: + 'https://api.github.com/repos/mralexgray/AHContentBrowser/compare/{base}...{head}', + description: + 'A Mac only webview that loads a fast readable version of the website if available.', + forks_count: 0, + is_template: false, + open_issues: 0, + branches_url: + 'https://api.github.com/repos/mralexgray/AHContentBrowser/branches{/branch}', + comments_url: + 'https://api.github.com/repos/mralexgray/AHContentBrowser/comments{/number}', + contents_url: + 'https://api.github.com/repos/mralexgray/AHContentBrowser/contents/{+path}', + git_refs_url: + 'https://api.github.com/repos/mralexgray/AHContentBrowser/git/refs{/sha}', + git_tags_url: + 'https://api.github.com/repos/mralexgray/AHContentBrowser/git/tags{/sha}', + has_projects: true, + releases_url: + 'https://api.github.com/repos/mralexgray/AHContentBrowser/releases{/id}', + statuses_url: + 'https://api.github.com/repos/mralexgray/AHContentBrowser/statuses/{sha}', + allow_forking: true, + assignees_url: + 'https://api.github.com/repos/mralexgray/AHContentBrowser/assignees{/user}', + downloads_url: + 'https://api.github.com/repos/mralexgray/AHContentBrowser/downloads', + has_downloads: true, + languages_url: + 'https://api.github.com/repos/mralexgray/AHContentBrowser/languages', + default_branch: 'master', + milestones_url: + 'https://api.github.com/repos/mralexgray/AHContentBrowser/milestones{/number}', + stargazers_url: + 'https://api.github.com/repos/mralexgray/AHContentBrowser/stargazers', + watchers_count: 0, + deployments_url: + 'https://api.github.com/repos/mralexgray/AHContentBrowser/deployments', + git_commits_url: + 'https://api.github.com/repos/mralexgray/AHContentBrowser/git/commits{/sha}', + subscribers_url: + 'https://api.github.com/repos/mralexgray/AHContentBrowser/subscribers', + contributors_url: + 'https://api.github.com/repos/mralexgray/AHContentBrowser/contributors', + issue_events_url: + 'https://api.github.com/repos/mralexgray/AHContentBrowser/issues/events{/number}', + stargazers_count: 0, + subscription_url: + 'https://api.github.com/repos/mralexgray/AHContentBrowser/subscription', + collaborators_url: + 'https://api.github.com/repos/mralexgray/AHContentBrowser/collaborators{/collaborator}', + issue_comment_url: + 'https://api.github.com/repos/mralexgray/AHContentBrowser/issues/comments{/number}', + notifications_url: + 'https://api.github.com/repos/mralexgray/AHContentBrowser/notifications{?since,all,participating}', + open_issues_count: 0, + web_commit_signoff_required: false, + }, + { + id: 37430328, + url: 'https://api.github.com/repos/mralexgray/AHLaunchCtl', + fork: true, + name: 'AHLaunchCtl', + size: 592, + forks: 0, + owner: { + id: 262517, + url: 'https://api.github.com/users/mralexgray', + type: 'User', + login: 'mralexgray', + node_id: 'MDQ6VXNlcjI2MjUxNw==', + html_url: 'https://github.com/mralexgray', + gists_url: 'https://api.github.com/users/mralexgray/gists{/gist_id}', + repos_url: 'https://api.github.com/users/mralexgray/repos', + avatar_url: 'https://avatars.githubusercontent.com/u/262517?v=4', + events_url: + 'https://api.github.com/users/mralexgray/events{/privacy}', + site_admin: false, + gravatar_id: '', + starred_url: + 'https://api.github.com/users/mralexgray/starred{/owner}{/repo}', + followers_url: 'https://api.github.com/users/mralexgray/followers', + following_url: + 'https://api.github.com/users/mralexgray/following{/other_user}', + organizations_url: 'https://api.github.com/users/mralexgray/orgs', + subscriptions_url: + 'https://api.github.com/users/mralexgray/subscriptions', + received_events_url: + 'https://api.github.com/users/mralexgray/received_events', + }, + topics: [], + git_url: 'git://github.com/mralexgray/AHLaunchCtl.git', + license: { + key: 'mit', + url: 'https://api.github.com/licenses/mit', + name: 'MIT License', + node_id: 'MDc6TGljZW5zZTEz', + spdx_id: 'MIT', + }, + node_id: 'MDEwOlJlcG9zaXRvcnkzNzQzMDMyOA==', + private: false, + ssh_url: 'git@github.com:mralexgray/AHLaunchCtl.git', + svn_url: 'https://github.com/mralexgray/AHLaunchCtl', + archived: false, + disabled: false, + has_wiki: true, + homepage: '', + html_url: 'https://github.com/mralexgray/AHLaunchCtl', + keys_url: + 'https://api.github.com/repos/mralexgray/AHLaunchCtl/keys{/key_id}', + language: 'Objective-C', + tags_url: 'https://api.github.com/repos/mralexgray/AHLaunchCtl/tags', + watchers: 0, + blobs_url: + 'https://api.github.com/repos/mralexgray/AHLaunchCtl/git/blobs{/sha}', + clone_url: 'https://github.com/mralexgray/AHLaunchCtl.git', + forks_url: 'https://api.github.com/repos/mralexgray/AHLaunchCtl/forks', + full_name: 'mralexgray/AHLaunchCtl', + has_pages: false, + hooks_url: 'https://api.github.com/repos/mralexgray/AHLaunchCtl/hooks', + pulls_url: + 'https://api.github.com/repos/mralexgray/AHLaunchCtl/pulls{/number}', + pushed_at: '2015-05-26T18:50:48Z', + teams_url: 'https://api.github.com/repos/mralexgray/AHLaunchCtl/teams', + trees_url: + 'https://api.github.com/repos/mralexgray/AHLaunchCtl/git/trees{/sha}', + created_at: '2015-06-14T21:31:03Z', + events_url: + 'https://api.github.com/repos/mralexgray/AHLaunchCtl/events', + has_issues: false, + issues_url: + 'https://api.github.com/repos/mralexgray/AHLaunchCtl/issues{/number}', + labels_url: + 'https://api.github.com/repos/mralexgray/AHLaunchCtl/labels{/name}', + merges_url: + 'https://api.github.com/repos/mralexgray/AHLaunchCtl/merges', + mirror_url: null, + updated_at: '2015-06-14T21:31:04Z', + visibility: 'public', + archive_url: + 'https://api.github.com/repos/mralexgray/AHLaunchCtl/{archive_format}{/ref}', + commits_url: + 'https://api.github.com/repos/mralexgray/AHLaunchCtl/commits{/sha}', + compare_url: + 'https://api.github.com/repos/mralexgray/AHLaunchCtl/compare/{base}...{head}', + description: 'LaunchD Framework for Cocoa Apps', + forks_count: 0, + is_template: false, + open_issues: 0, + branches_url: + 'https://api.github.com/repos/mralexgray/AHLaunchCtl/branches{/branch}', + comments_url: + 'https://api.github.com/repos/mralexgray/AHLaunchCtl/comments{/number}', + contents_url: + 'https://api.github.com/repos/mralexgray/AHLaunchCtl/contents/{+path}', + git_refs_url: + 'https://api.github.com/repos/mralexgray/AHLaunchCtl/git/refs{/sha}', + git_tags_url: + 'https://api.github.com/repos/mralexgray/AHLaunchCtl/git/tags{/sha}', + has_projects: true, + releases_url: + 'https://api.github.com/repos/mralexgray/AHLaunchCtl/releases{/id}', + statuses_url: + 'https://api.github.com/repos/mralexgray/AHLaunchCtl/statuses/{sha}', + allow_forking: true, + assignees_url: + 'https://api.github.com/repos/mralexgray/AHLaunchCtl/assignees{/user}', + downloads_url: + 'https://api.github.com/repos/mralexgray/AHLaunchCtl/downloads', + has_downloads: true, + languages_url: + 'https://api.github.com/repos/mralexgray/AHLaunchCtl/languages', + default_branch: 'master', + milestones_url: + 'https://api.github.com/repos/mralexgray/AHLaunchCtl/milestones{/number}', + stargazers_url: + 'https://api.github.com/repos/mralexgray/AHLaunchCtl/stargazers', + watchers_count: 0, + deployments_url: + 'https://api.github.com/repos/mralexgray/AHLaunchCtl/deployments', + git_commits_url: + 'https://api.github.com/repos/mralexgray/AHLaunchCtl/git/commits{/sha}', + subscribers_url: + 'https://api.github.com/repos/mralexgray/AHLaunchCtl/subscribers', + contributors_url: + 'https://api.github.com/repos/mralexgray/AHLaunchCtl/contributors', + issue_events_url: + 'https://api.github.com/repos/mralexgray/AHLaunchCtl/issues/events{/number}', + stargazers_count: 0, + subscription_url: + 'https://api.github.com/repos/mralexgray/AHLaunchCtl/subscription', + collaborators_url: + 'https://api.github.com/repos/mralexgray/AHLaunchCtl/collaborators{/collaborator}', + issue_comment_url: + 'https://api.github.com/repos/mralexgray/AHLaunchCtl/issues/comments{/number}', + notifications_url: + 'https://api.github.com/repos/mralexgray/AHLaunchCtl/notifications{?since,all,participating}', + open_issues_count: 0, + web_commit_signoff_required: false, + }, + { + id: 9167473, + url: 'https://api.github.com/repos/mralexgray/AHLayout', + fork: true, + name: 'AHLayout', + size: 359, + forks: 0, + owner: { + id: 262517, + url: 'https://api.github.com/users/mralexgray', + type: 'User', + login: 'mralexgray', + node_id: 'MDQ6VXNlcjI2MjUxNw==', + html_url: 'https://github.com/mralexgray', + gists_url: 'https://api.github.com/users/mralexgray/gists{/gist_id}', + repos_url: 'https://api.github.com/users/mralexgray/repos', + avatar_url: 'https://avatars.githubusercontent.com/u/262517?v=4', + events_url: + 'https://api.github.com/users/mralexgray/events{/privacy}', + site_admin: false, + gravatar_id: '', + starred_url: + 'https://api.github.com/users/mralexgray/starred{/owner}{/repo}', + followers_url: 'https://api.github.com/users/mralexgray/followers', + following_url: + 'https://api.github.com/users/mralexgray/following{/other_user}', + organizations_url: 'https://api.github.com/users/mralexgray/orgs', + subscriptions_url: + 'https://api.github.com/users/mralexgray/subscriptions', + received_events_url: + 'https://api.github.com/users/mralexgray/received_events', + }, + topics: [], + git_url: 'git://github.com/mralexgray/AHLayout.git', + license: null, + node_id: 'MDEwOlJlcG9zaXRvcnk5MTY3NDcz', + private: false, + ssh_url: 'git@github.com:mralexgray/AHLayout.git', + svn_url: 'https://github.com/mralexgray/AHLayout', + archived: false, + disabled: false, + has_wiki: true, + homepage: null, + html_url: 'https://github.com/mralexgray/AHLayout', + keys_url: + 'https://api.github.com/repos/mralexgray/AHLayout/keys{/key_id}', + language: 'Objective-C', + tags_url: 'https://api.github.com/repos/mralexgray/AHLayout/tags', + watchers: 0, + blobs_url: + 'https://api.github.com/repos/mralexgray/AHLayout/git/blobs{/sha}', + clone_url: 'https://github.com/mralexgray/AHLayout.git', + forks_url: 'https://api.github.com/repos/mralexgray/AHLayout/forks', + full_name: 'mralexgray/AHLayout', + has_pages: false, + hooks_url: 'https://api.github.com/repos/mralexgray/AHLayout/hooks', + pulls_url: + 'https://api.github.com/repos/mralexgray/AHLayout/pulls{/number}', + pushed_at: '2013-07-08T02:31:14Z', + teams_url: 'https://api.github.com/repos/mralexgray/AHLayout/teams', + trees_url: + 'https://api.github.com/repos/mralexgray/AHLayout/git/trees{/sha}', + created_at: '2013-04-02T10:10:30Z', + events_url: 'https://api.github.com/repos/mralexgray/AHLayout/events', + has_issues: false, + issues_url: + 'https://api.github.com/repos/mralexgray/AHLayout/issues{/number}', + labels_url: + 'https://api.github.com/repos/mralexgray/AHLayout/labels{/name}', + merges_url: 'https://api.github.com/repos/mralexgray/AHLayout/merges', + mirror_url: null, + updated_at: '2013-07-08T02:31:17Z', + visibility: 'public', + archive_url: + 'https://api.github.com/repos/mralexgray/AHLayout/{archive_format}{/ref}', + commits_url: + 'https://api.github.com/repos/mralexgray/AHLayout/commits{/sha}', + compare_url: + 'https://api.github.com/repos/mralexgray/AHLayout/compare/{base}...{head}', + description: 'AHLayout', + forks_count: 0, + is_template: false, + open_issues: 0, + branches_url: + 'https://api.github.com/repos/mralexgray/AHLayout/branches{/branch}', + comments_url: + 'https://api.github.com/repos/mralexgray/AHLayout/comments{/number}', + contents_url: + 'https://api.github.com/repos/mralexgray/AHLayout/contents/{+path}', + git_refs_url: + 'https://api.github.com/repos/mralexgray/AHLayout/git/refs{/sha}', + git_tags_url: + 'https://api.github.com/repos/mralexgray/AHLayout/git/tags{/sha}', + has_projects: true, + releases_url: + 'https://api.github.com/repos/mralexgray/AHLayout/releases{/id}', + statuses_url: + 'https://api.github.com/repos/mralexgray/AHLayout/statuses/{sha}', + allow_forking: true, + assignees_url: + 'https://api.github.com/repos/mralexgray/AHLayout/assignees{/user}', + downloads_url: + 'https://api.github.com/repos/mralexgray/AHLayout/downloads', + has_downloads: true, + languages_url: + 'https://api.github.com/repos/mralexgray/AHLayout/languages', + default_branch: 'master', + milestones_url: + 'https://api.github.com/repos/mralexgray/AHLayout/milestones{/number}', + stargazers_url: + 'https://api.github.com/repos/mralexgray/AHLayout/stargazers', + watchers_count: 0, + deployments_url: + 'https://api.github.com/repos/mralexgray/AHLayout/deployments', + git_commits_url: + 'https://api.github.com/repos/mralexgray/AHLayout/git/commits{/sha}', + subscribers_url: + 'https://api.github.com/repos/mralexgray/AHLayout/subscribers', + contributors_url: + 'https://api.github.com/repos/mralexgray/AHLayout/contributors', + issue_events_url: + 'https://api.github.com/repos/mralexgray/AHLayout/issues/events{/number}', + stargazers_count: 0, + subscription_url: + 'https://api.github.com/repos/mralexgray/AHLayout/subscription', + collaborators_url: + 'https://api.github.com/repos/mralexgray/AHLayout/collaborators{/collaborator}', + issue_comment_url: + 'https://api.github.com/repos/mralexgray/AHLayout/issues/comments{/number}', + notifications_url: + 'https://api.github.com/repos/mralexgray/AHLayout/notifications{?since,all,participating}', + open_issues_count: 0, + web_commit_signoff_required: false, + }, + { + id: 18450201, + url: 'https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework', + fork: true, + name: 'Airmail-Plug-In-Framework', + size: 888, + forks: 0, + owner: { + id: 262517, + url: 'https://api.github.com/users/mralexgray', + type: 'User', + login: 'mralexgray', + node_id: 'MDQ6VXNlcjI2MjUxNw==', + html_url: 'https://github.com/mralexgray', + gists_url: 'https://api.github.com/users/mralexgray/gists{/gist_id}', + repos_url: 'https://api.github.com/users/mralexgray/repos', + avatar_url: 'https://avatars.githubusercontent.com/u/262517?v=4', + events_url: + 'https://api.github.com/users/mralexgray/events{/privacy}', + site_admin: false, + gravatar_id: '', + starred_url: + 'https://api.github.com/users/mralexgray/starred{/owner}{/repo}', + followers_url: 'https://api.github.com/users/mralexgray/followers', + following_url: + 'https://api.github.com/users/mralexgray/following{/other_user}', + organizations_url: 'https://api.github.com/users/mralexgray/orgs', + subscriptions_url: + 'https://api.github.com/users/mralexgray/subscriptions', + received_events_url: + 'https://api.github.com/users/mralexgray/received_events', + }, + topics: [], + git_url: 'git://github.com/mralexgray/Airmail-Plug-In-Framework.git', + license: { + key: 'gpl-2.0', + url: 'https://api.github.com/licenses/gpl-2.0', + name: 'GNU General Public License v2.0', + node_id: 'MDc6TGljZW5zZTg=', + spdx_id: 'GPL-2.0', + }, + node_id: 'MDEwOlJlcG9zaXRvcnkxODQ1MDIwMQ==', + private: false, + ssh_url: 'git@github.com:mralexgray/Airmail-Plug-In-Framework.git', + svn_url: 'https://github.com/mralexgray/Airmail-Plug-In-Framework', + archived: false, + disabled: false, + has_wiki: true, + homepage: null, + html_url: 'https://github.com/mralexgray/Airmail-Plug-In-Framework', + keys_url: + 'https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/keys{/key_id}', + language: null, + tags_url: + 'https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/tags', + watchers: 0, + blobs_url: + 'https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/git/blobs{/sha}', + clone_url: + 'https://github.com/mralexgray/Airmail-Plug-In-Framework.git', + forks_url: + 'https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/forks', + full_name: 'mralexgray/Airmail-Plug-In-Framework', + has_pages: false, + hooks_url: + 'https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/hooks', + pulls_url: + 'https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/pulls{/number}', + pushed_at: '2014-03-27T15:42:19Z', + teams_url: + 'https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/teams', + trees_url: + 'https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/git/trees{/sha}', + created_at: '2014-04-04T19:33:54Z', + events_url: + 'https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/events', + has_issues: false, + issues_url: + 'https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/issues{/number}', + labels_url: + 'https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/labels{/name}', + merges_url: + 'https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/merges', + mirror_url: null, + updated_at: '2014-11-23T19:31:04Z', + visibility: 'public', + archive_url: + 'https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/{archive_format}{/ref}', + commits_url: + 'https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/commits{/sha}', + compare_url: + 'https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/compare/{base}...{head}', + description: null, + forks_count: 0, + is_template: false, + open_issues: 0, + branches_url: + 'https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/branches{/branch}', + comments_url: + 'https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/comments{/number}', + contents_url: + 'https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/contents/{+path}', + git_refs_url: + 'https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/git/refs{/sha}', + git_tags_url: + 'https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/git/tags{/sha}', + has_projects: true, + releases_url: + 'https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/releases{/id}', + statuses_url: + 'https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/statuses/{sha}', + allow_forking: true, + assignees_url: + 'https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/assignees{/user}', + downloads_url: + 'https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/downloads', + has_downloads: true, + languages_url: + 'https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/languages', + default_branch: 'master', + milestones_url: + 'https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/milestones{/number}', + stargazers_url: + 'https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/stargazers', + watchers_count: 0, + deployments_url: + 'https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/deployments', + git_commits_url: + 'https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/git/commits{/sha}', + subscribers_url: + 'https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/subscribers', + contributors_url: + 'https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/contributors', + issue_events_url: + 'https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/issues/events{/number}', + stargazers_count: 0, + subscription_url: + 'https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/subscription', + collaborators_url: + 'https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/collaborators{/collaborator}', + issue_comment_url: + 'https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/issues/comments{/number}', + notifications_url: + 'https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/notifications{?since,all,participating}', + open_issues_count: 0, + web_commit_signoff_required: false, + }, + { + id: 5203219, + url: 'https://api.github.com/repos/mralexgray/AJS-iTunes-API', + fork: true, + name: 'AJS-iTunes-API', + size: 103, + forks: 0, + owner: { + id: 262517, + url: 'https://api.github.com/users/mralexgray', + type: 'User', + login: 'mralexgray', + node_id: 'MDQ6VXNlcjI2MjUxNw==', + html_url: 'https://github.com/mralexgray', + gists_url: 'https://api.github.com/users/mralexgray/gists{/gist_id}', + repos_url: 'https://api.github.com/users/mralexgray/repos', + avatar_url: 'https://avatars.githubusercontent.com/u/262517?v=4', + events_url: + 'https://api.github.com/users/mralexgray/events{/privacy}', + site_admin: false, + gravatar_id: '', + starred_url: + 'https://api.github.com/users/mralexgray/starred{/owner}{/repo}', + followers_url: 'https://api.github.com/users/mralexgray/followers', + following_url: + 'https://api.github.com/users/mralexgray/following{/other_user}', + organizations_url: 'https://api.github.com/users/mralexgray/orgs', + subscriptions_url: + 'https://api.github.com/users/mralexgray/subscriptions', + received_events_url: + 'https://api.github.com/users/mralexgray/received_events', + }, + topics: [], + git_url: 'git://github.com/mralexgray/AJS-iTunes-API.git', + license: null, + node_id: 'MDEwOlJlcG9zaXRvcnk1MjAzMjE5', + private: false, + ssh_url: 'git@github.com:mralexgray/AJS-iTunes-API.git', + svn_url: 'https://github.com/mralexgray/AJS-iTunes-API', + archived: false, + disabled: false, + has_wiki: true, + homepage: '', + html_url: 'https://github.com/mralexgray/AJS-iTunes-API', + keys_url: + 'https://api.github.com/repos/mralexgray/AJS-iTunes-API/keys{/key_id}', + language: 'Objective-C', + tags_url: 'https://api.github.com/repos/mralexgray/AJS-iTunes-API/tags', + watchers: 2, + blobs_url: + 'https://api.github.com/repos/mralexgray/AJS-iTunes-API/git/blobs{/sha}', + clone_url: 'https://github.com/mralexgray/AJS-iTunes-API.git', + forks_url: + 'https://api.github.com/repos/mralexgray/AJS-iTunes-API/forks', + full_name: 'mralexgray/AJS-iTunes-API', + has_pages: false, + hooks_url: + 'https://api.github.com/repos/mralexgray/AJS-iTunes-API/hooks', + pulls_url: + 'https://api.github.com/repos/mralexgray/AJS-iTunes-API/pulls{/number}', + pushed_at: '2011-10-30T22:26:48Z', + teams_url: + 'https://api.github.com/repos/mralexgray/AJS-iTunes-API/teams', + trees_url: + 'https://api.github.com/repos/mralexgray/AJS-iTunes-API/git/trees{/sha}', + created_at: '2012-07-27T10:20:58Z', + events_url: + 'https://api.github.com/repos/mralexgray/AJS-iTunes-API/events', + has_issues: false, + issues_url: + 'https://api.github.com/repos/mralexgray/AJS-iTunes-API/issues{/number}', + labels_url: + 'https://api.github.com/repos/mralexgray/AJS-iTunes-API/labels{/name}', + merges_url: + 'https://api.github.com/repos/mralexgray/AJS-iTunes-API/merges', + mirror_url: null, + updated_at: '2013-01-11T11:00:05Z', + visibility: 'public', + archive_url: + 'https://api.github.com/repos/mralexgray/AJS-iTunes-API/{archive_format}{/ref}', + commits_url: + 'https://api.github.com/repos/mralexgray/AJS-iTunes-API/commits{/sha}', + compare_url: + 'https://api.github.com/repos/mralexgray/AJS-iTunes-API/compare/{base}...{head}', + description: + 'Cocoa wrapper for the iTunes search API - for iOS and Mac OSX projects', + forks_count: 0, + is_template: false, + open_issues: 0, + branches_url: + 'https://api.github.com/repos/mralexgray/AJS-iTunes-API/branches{/branch}', + comments_url: + 'https://api.github.com/repos/mralexgray/AJS-iTunes-API/comments{/number}', + contents_url: + 'https://api.github.com/repos/mralexgray/AJS-iTunes-API/contents/{+path}', + git_refs_url: + 'https://api.github.com/repos/mralexgray/AJS-iTunes-API/git/refs{/sha}', + git_tags_url: + 'https://api.github.com/repos/mralexgray/AJS-iTunes-API/git/tags{/sha}', + has_projects: true, + releases_url: + 'https://api.github.com/repos/mralexgray/AJS-iTunes-API/releases{/id}', + statuses_url: + 'https://api.github.com/repos/mralexgray/AJS-iTunes-API/statuses/{sha}', + allow_forking: true, + assignees_url: + 'https://api.github.com/repos/mralexgray/AJS-iTunes-API/assignees{/user}', + downloads_url: + 'https://api.github.com/repos/mralexgray/AJS-iTunes-API/downloads', + has_downloads: true, + languages_url: + 'https://api.github.com/repos/mralexgray/AJS-iTunes-API/languages', + default_branch: 'master', + milestones_url: + 'https://api.github.com/repos/mralexgray/AJS-iTunes-API/milestones{/number}', + stargazers_url: + 'https://api.github.com/repos/mralexgray/AJS-iTunes-API/stargazers', + watchers_count: 2, + deployments_url: + 'https://api.github.com/repos/mralexgray/AJS-iTunes-API/deployments', + git_commits_url: + 'https://api.github.com/repos/mralexgray/AJS-iTunes-API/git/commits{/sha}', + subscribers_url: + 'https://api.github.com/repos/mralexgray/AJS-iTunes-API/subscribers', + contributors_url: + 'https://api.github.com/repos/mralexgray/AJS-iTunes-API/contributors', + issue_events_url: + 'https://api.github.com/repos/mralexgray/AJS-iTunes-API/issues/events{/number}', + stargazers_count: 2, + subscription_url: + 'https://api.github.com/repos/mralexgray/AJS-iTunes-API/subscription', + collaborators_url: + 'https://api.github.com/repos/mralexgray/AJS-iTunes-API/collaborators{/collaborator}', + issue_comment_url: + 'https://api.github.com/repos/mralexgray/AJS-iTunes-API/issues/comments{/number}', + notifications_url: + 'https://api.github.com/repos/mralexgray/AJS-iTunes-API/notifications{?since,all,participating}', + open_issues_count: 0, + web_commit_signoff_required: false, + }, + { + id: 10093801, + url: 'https://api.github.com/repos/mralexgray/Alcatraz', + fork: true, + name: 'Alcatraz', + size: 3668, + forks: 0, + owner: { + id: 262517, + url: 'https://api.github.com/users/mralexgray', + type: 'User', + login: 'mralexgray', + node_id: 'MDQ6VXNlcjI2MjUxNw==', + html_url: 'https://github.com/mralexgray', + gists_url: 'https://api.github.com/users/mralexgray/gists{/gist_id}', + repos_url: 'https://api.github.com/users/mralexgray/repos', + avatar_url: 'https://avatars.githubusercontent.com/u/262517?v=4', + events_url: + 'https://api.github.com/users/mralexgray/events{/privacy}', + site_admin: false, + gravatar_id: '', + starred_url: + 'https://api.github.com/users/mralexgray/starred{/owner}{/repo}', + followers_url: 'https://api.github.com/users/mralexgray/followers', + following_url: + 'https://api.github.com/users/mralexgray/following{/other_user}', + organizations_url: 'https://api.github.com/users/mralexgray/orgs', + subscriptions_url: + 'https://api.github.com/users/mralexgray/subscriptions', + received_events_url: + 'https://api.github.com/users/mralexgray/received_events', + }, + topics: [], + git_url: 'git://github.com/mralexgray/Alcatraz.git', + license: { + key: 'mit', + url: 'https://api.github.com/licenses/mit', + name: 'MIT License', + node_id: 'MDc6TGljZW5zZTEz', + spdx_id: 'MIT', + }, + node_id: 'MDEwOlJlcG9zaXRvcnkxMDA5MzgwMQ==', + private: false, + ssh_url: 'git@github.com:mralexgray/Alcatraz.git', + svn_url: 'https://github.com/mralexgray/Alcatraz', + archived: false, + disabled: false, + has_wiki: false, + homepage: 'mneorr.github.com/Alcatraz', + html_url: 'https://github.com/mralexgray/Alcatraz', + keys_url: + 'https://api.github.com/repos/mralexgray/Alcatraz/keys{/key_id}', + language: 'Objective-C', + tags_url: 'https://api.github.com/repos/mralexgray/Alcatraz/tags', + watchers: 0, + blobs_url: + 'https://api.github.com/repos/mralexgray/Alcatraz/git/blobs{/sha}', + clone_url: 'https://github.com/mralexgray/Alcatraz.git', + forks_url: 'https://api.github.com/repos/mralexgray/Alcatraz/forks', + full_name: 'mralexgray/Alcatraz', + has_pages: false, + hooks_url: 'https://api.github.com/repos/mralexgray/Alcatraz/hooks', + pulls_url: + 'https://api.github.com/repos/mralexgray/Alcatraz/pulls{/number}', + pushed_at: '2014-03-19T12:50:37Z', + teams_url: 'https://api.github.com/repos/mralexgray/Alcatraz/teams', + trees_url: + 'https://api.github.com/repos/mralexgray/Alcatraz/git/trees{/sha}', + created_at: '2013-05-16T04:41:13Z', + events_url: 'https://api.github.com/repos/mralexgray/Alcatraz/events', + has_issues: false, + issues_url: + 'https://api.github.com/repos/mralexgray/Alcatraz/issues{/number}', + labels_url: + 'https://api.github.com/repos/mralexgray/Alcatraz/labels{/name}', + merges_url: 'https://api.github.com/repos/mralexgray/Alcatraz/merges', + mirror_url: null, + updated_at: '2014-03-19T20:38:35Z', + visibility: 'public', + archive_url: + 'https://api.github.com/repos/mralexgray/Alcatraz/{archive_format}{/ref}', + commits_url: + 'https://api.github.com/repos/mralexgray/Alcatraz/commits{/sha}', + compare_url: + 'https://api.github.com/repos/mralexgray/Alcatraz/compare/{base}...{head}', + description: 'The most awesome (and only) Xcode package manager!', + forks_count: 0, + is_template: false, + open_issues: 0, + branches_url: + 'https://api.github.com/repos/mralexgray/Alcatraz/branches{/branch}', + comments_url: + 'https://api.github.com/repos/mralexgray/Alcatraz/comments{/number}', + contents_url: + 'https://api.github.com/repos/mralexgray/Alcatraz/contents/{+path}', + git_refs_url: + 'https://api.github.com/repos/mralexgray/Alcatraz/git/refs{/sha}', + git_tags_url: + 'https://api.github.com/repos/mralexgray/Alcatraz/git/tags{/sha}', + has_projects: true, + releases_url: + 'https://api.github.com/repos/mralexgray/Alcatraz/releases{/id}', + statuses_url: + 'https://api.github.com/repos/mralexgray/Alcatraz/statuses/{sha}', + allow_forking: true, + assignees_url: + 'https://api.github.com/repos/mralexgray/Alcatraz/assignees{/user}', + downloads_url: + 'https://api.github.com/repos/mralexgray/Alcatraz/downloads', + has_downloads: true, + languages_url: + 'https://api.github.com/repos/mralexgray/Alcatraz/languages', + default_branch: 'master', + milestones_url: + 'https://api.github.com/repos/mralexgray/Alcatraz/milestones{/number}', + stargazers_url: + 'https://api.github.com/repos/mralexgray/Alcatraz/stargazers', + watchers_count: 0, + deployments_url: + 'https://api.github.com/repos/mralexgray/Alcatraz/deployments', + git_commits_url: + 'https://api.github.com/repos/mralexgray/Alcatraz/git/commits{/sha}', + subscribers_url: + 'https://api.github.com/repos/mralexgray/Alcatraz/subscribers', + contributors_url: + 'https://api.github.com/repos/mralexgray/Alcatraz/contributors', + issue_events_url: + 'https://api.github.com/repos/mralexgray/Alcatraz/issues/events{/number}', + stargazers_count: 0, + subscription_url: + 'https://api.github.com/repos/mralexgray/Alcatraz/subscription', + collaborators_url: + 'https://api.github.com/repos/mralexgray/Alcatraz/collaborators{/collaborator}', + issue_comment_url: + 'https://api.github.com/repos/mralexgray/Alcatraz/issues/comments{/number}', + notifications_url: + 'https://api.github.com/repos/mralexgray/Alcatraz/notifications{?since,all,participating}', + open_issues_count: 0, + web_commit_signoff_required: false, + }, + { + id: 12916552, + url: 'https://api.github.com/repos/mralexgray/alcatraz-packages', + fork: true, + name: 'alcatraz-packages', + size: 826, + forks: 0, + owner: { + id: 262517, + url: 'https://api.github.com/users/mralexgray', + type: 'User', + login: 'mralexgray', + node_id: 'MDQ6VXNlcjI2MjUxNw==', + html_url: 'https://github.com/mralexgray', + gists_url: 'https://api.github.com/users/mralexgray/gists{/gist_id}', + repos_url: 'https://api.github.com/users/mralexgray/repos', + avatar_url: 'https://avatars.githubusercontent.com/u/262517?v=4', + events_url: + 'https://api.github.com/users/mralexgray/events{/privacy}', + site_admin: false, + gravatar_id: '', + starred_url: + 'https://api.github.com/users/mralexgray/starred{/owner}{/repo}', + followers_url: 'https://api.github.com/users/mralexgray/followers', + following_url: + 'https://api.github.com/users/mralexgray/following{/other_user}', + organizations_url: 'https://api.github.com/users/mralexgray/orgs', + subscriptions_url: + 'https://api.github.com/users/mralexgray/subscriptions', + received_events_url: + 'https://api.github.com/users/mralexgray/received_events', + }, + topics: [], + git_url: 'git://github.com/mralexgray/alcatraz-packages.git', + license: null, + node_id: 'MDEwOlJlcG9zaXRvcnkxMjkxNjU1Mg==', + private: false, + ssh_url: 'git@github.com:mralexgray/alcatraz-packages.git', + svn_url: 'https://github.com/mralexgray/alcatraz-packages', + archived: false, + disabled: false, + has_wiki: true, + homepage: 'mneorr.github.com/Alcatraz', + html_url: 'https://github.com/mralexgray/alcatraz-packages', + keys_url: + 'https://api.github.com/repos/mralexgray/alcatraz-packages/keys{/key_id}', + language: 'Ruby', + tags_url: + 'https://api.github.com/repos/mralexgray/alcatraz-packages/tags', + watchers: 0, + blobs_url: + 'https://api.github.com/repos/mralexgray/alcatraz-packages/git/blobs{/sha}', + clone_url: 'https://github.com/mralexgray/alcatraz-packages.git', + forks_url: + 'https://api.github.com/repos/mralexgray/alcatraz-packages/forks', + full_name: 'mralexgray/alcatraz-packages', + has_pages: false, + hooks_url: + 'https://api.github.com/repos/mralexgray/alcatraz-packages/hooks', + pulls_url: + 'https://api.github.com/repos/mralexgray/alcatraz-packages/pulls{/number}', + pushed_at: '2015-12-14T16:21:31Z', + teams_url: + 'https://api.github.com/repos/mralexgray/alcatraz-packages/teams', + trees_url: + 'https://api.github.com/repos/mralexgray/alcatraz-packages/git/trees{/sha}', + created_at: '2013-09-18T07:15:24Z', + events_url: + 'https://api.github.com/repos/mralexgray/alcatraz-packages/events', + has_issues: false, + issues_url: + 'https://api.github.com/repos/mralexgray/alcatraz-packages/issues{/number}', + labels_url: + 'https://api.github.com/repos/mralexgray/alcatraz-packages/labels{/name}', + merges_url: + 'https://api.github.com/repos/mralexgray/alcatraz-packages/merges', + mirror_url: null, + updated_at: '2015-11-10T20:52:30Z', + visibility: 'public', + archive_url: + 'https://api.github.com/repos/mralexgray/alcatraz-packages/{archive_format}{/ref}', + commits_url: + 'https://api.github.com/repos/mralexgray/alcatraz-packages/commits{/sha}', + compare_url: + 'https://api.github.com/repos/mralexgray/alcatraz-packages/compare/{base}...{head}', + description: 'Package list repository for Alcatraz', + forks_count: 0, + is_template: false, + open_issues: 0, + branches_url: + 'https://api.github.com/repos/mralexgray/alcatraz-packages/branches{/branch}', + comments_url: + 'https://api.github.com/repos/mralexgray/alcatraz-packages/comments{/number}', + contents_url: + 'https://api.github.com/repos/mralexgray/alcatraz-packages/contents/{+path}', + git_refs_url: + 'https://api.github.com/repos/mralexgray/alcatraz-packages/git/refs{/sha}', + git_tags_url: + 'https://api.github.com/repos/mralexgray/alcatraz-packages/git/tags{/sha}', + has_projects: true, + releases_url: + 'https://api.github.com/repos/mralexgray/alcatraz-packages/releases{/id}', + statuses_url: + 'https://api.github.com/repos/mralexgray/alcatraz-packages/statuses/{sha}', + allow_forking: true, + assignees_url: + 'https://api.github.com/repos/mralexgray/alcatraz-packages/assignees{/user}', + downloads_url: + 'https://api.github.com/repos/mralexgray/alcatraz-packages/downloads', + has_downloads: true, + languages_url: + 'https://api.github.com/repos/mralexgray/alcatraz-packages/languages', + default_branch: 'master', + milestones_url: + 'https://api.github.com/repos/mralexgray/alcatraz-packages/milestones{/number}', + stargazers_url: + 'https://api.github.com/repos/mralexgray/alcatraz-packages/stargazers', + watchers_count: 0, + deployments_url: + 'https://api.github.com/repos/mralexgray/alcatraz-packages/deployments', + git_commits_url: + 'https://api.github.com/repos/mralexgray/alcatraz-packages/git/commits{/sha}', + subscribers_url: + 'https://api.github.com/repos/mralexgray/alcatraz-packages/subscribers', + contributors_url: + 'https://api.github.com/repos/mralexgray/alcatraz-packages/contributors', + issue_events_url: + 'https://api.github.com/repos/mralexgray/alcatraz-packages/issues/events{/number}', + stargazers_count: 0, + subscription_url: + 'https://api.github.com/repos/mralexgray/alcatraz-packages/subscription', + collaborators_url: + 'https://api.github.com/repos/mralexgray/alcatraz-packages/collaborators{/collaborator}', + issue_comment_url: + 'https://api.github.com/repos/mralexgray/alcatraz-packages/issues/comments{/number}', + notifications_url: + 'https://api.github.com/repos/mralexgray/alcatraz-packages/notifications{?since,all,participating}', + open_issues_count: 0, + web_commit_signoff_required: false, + }, + { + id: 44278362, + url: 'https://api.github.com/repos/mralexgray/alexicons', + fork: true, + name: 'alexicons', + size: 257, + forks: 0, + owner: { + id: 262517, + url: 'https://api.github.com/users/mralexgray', + type: 'User', + login: 'mralexgray', + node_id: 'MDQ6VXNlcjI2MjUxNw==', + html_url: 'https://github.com/mralexgray', + gists_url: 'https://api.github.com/users/mralexgray/gists{/gist_id}', + repos_url: 'https://api.github.com/users/mralexgray/repos', + avatar_url: 'https://avatars.githubusercontent.com/u/262517?v=4', + events_url: + 'https://api.github.com/users/mralexgray/events{/privacy}', + site_admin: false, + gravatar_id: '', + starred_url: + 'https://api.github.com/users/mralexgray/starred{/owner}{/repo}', + followers_url: 'https://api.github.com/users/mralexgray/followers', + following_url: + 'https://api.github.com/users/mralexgray/following{/other_user}', + organizations_url: 'https://api.github.com/users/mralexgray/orgs', + subscriptions_url: + 'https://api.github.com/users/mralexgray/subscriptions', + received_events_url: + 'https://api.github.com/users/mralexgray/received_events', + }, + topics: [], + git_url: 'git://github.com/mralexgray/alexicons.git', + license: null, + node_id: 'MDEwOlJlcG9zaXRvcnk0NDI3ODM2Mg==', + private: false, + ssh_url: 'git@github.com:mralexgray/alexicons.git', + svn_url: 'https://github.com/mralexgray/alexicons', + archived: false, + disabled: false, + has_wiki: false, + homepage: null, + html_url: 'https://github.com/mralexgray/alexicons', + keys_url: + 'https://api.github.com/repos/mralexgray/alexicons/keys{/key_id}', + language: 'CoffeeScript', + tags_url: 'https://api.github.com/repos/mralexgray/alexicons/tags', + watchers: 0, + blobs_url: + 'https://api.github.com/repos/mralexgray/alexicons/git/blobs{/sha}', + clone_url: 'https://github.com/mralexgray/alexicons.git', + forks_url: 'https://api.github.com/repos/mralexgray/alexicons/forks', + full_name: 'mralexgray/alexicons', + has_pages: false, + hooks_url: 'https://api.github.com/repos/mralexgray/alexicons/hooks', + pulls_url: + 'https://api.github.com/repos/mralexgray/alexicons/pulls{/number}', + pushed_at: '2015-10-16T03:57:51Z', + teams_url: 'https://api.github.com/repos/mralexgray/alexicons/teams', + trees_url: + 'https://api.github.com/repos/mralexgray/alexicons/git/trees{/sha}', + created_at: '2015-10-14T21:49:39Z', + events_url: 'https://api.github.com/repos/mralexgray/alexicons/events', + has_issues: false, + issues_url: + 'https://api.github.com/repos/mralexgray/alexicons/issues{/number}', + labels_url: + 'https://api.github.com/repos/mralexgray/alexicons/labels{/name}', + merges_url: 'https://api.github.com/repos/mralexgray/alexicons/merges', + mirror_url: null, + updated_at: '2015-10-15T06:20:08Z', + visibility: 'public', + archive_url: + 'https://api.github.com/repos/mralexgray/alexicons/{archive_format}{/ref}', + commits_url: + 'https://api.github.com/repos/mralexgray/alexicons/commits{/sha}', + compare_url: + 'https://api.github.com/repos/mralexgray/alexicons/compare/{base}...{head}', + description: 'Get popular cat names', + forks_count: 0, + is_template: false, + open_issues: 0, + branches_url: + 'https://api.github.com/repos/mralexgray/alexicons/branches{/branch}', + comments_url: + 'https://api.github.com/repos/mralexgray/alexicons/comments{/number}', + contents_url: + 'https://api.github.com/repos/mralexgray/alexicons/contents/{+path}', + git_refs_url: + 'https://api.github.com/repos/mralexgray/alexicons/git/refs{/sha}', + git_tags_url: + 'https://api.github.com/repos/mralexgray/alexicons/git/tags{/sha}', + has_projects: true, + releases_url: + 'https://api.github.com/repos/mralexgray/alexicons/releases{/id}', + statuses_url: + 'https://api.github.com/repos/mralexgray/alexicons/statuses/{sha}', + allow_forking: true, + assignees_url: + 'https://api.github.com/repos/mralexgray/alexicons/assignees{/user}', + downloads_url: + 'https://api.github.com/repos/mralexgray/alexicons/downloads', + has_downloads: true, + languages_url: + 'https://api.github.com/repos/mralexgray/alexicons/languages', + default_branch: 'master', + milestones_url: + 'https://api.github.com/repos/mralexgray/alexicons/milestones{/number}', + stargazers_url: + 'https://api.github.com/repos/mralexgray/alexicons/stargazers', + watchers_count: 0, + deployments_url: + 'https://api.github.com/repos/mralexgray/alexicons/deployments', + git_commits_url: + 'https://api.github.com/repos/mralexgray/alexicons/git/commits{/sha}', + subscribers_url: + 'https://api.github.com/repos/mralexgray/alexicons/subscribers', + contributors_url: + 'https://api.github.com/repos/mralexgray/alexicons/contributors', + issue_events_url: + 'https://api.github.com/repos/mralexgray/alexicons/issues/events{/number}', + stargazers_count: 0, + subscription_url: + 'https://api.github.com/repos/mralexgray/alexicons/subscription', + collaborators_url: + 'https://api.github.com/repos/mralexgray/alexicons/collaborators{/collaborator}', + issue_comment_url: + 'https://api.github.com/repos/mralexgray/alexicons/issues/comments{/number}', + notifications_url: + 'https://api.github.com/repos/mralexgray/alexicons/notifications{?since,all,participating}', + open_issues_count: 0, + web_commit_signoff_required: false, + }, + { + id: 10476467, + url: 'https://api.github.com/repos/mralexgray/Alfred-Google-Translate', + fork: true, + name: 'Alfred-Google-Translate', + size: 103, + forks: 0, + owner: { + id: 262517, + url: 'https://api.github.com/users/mralexgray', + type: 'User', + login: 'mralexgray', + node_id: 'MDQ6VXNlcjI2MjUxNw==', + html_url: 'https://github.com/mralexgray', + gists_url: 'https://api.github.com/users/mralexgray/gists{/gist_id}', + repos_url: 'https://api.github.com/users/mralexgray/repos', + avatar_url: 'https://avatars.githubusercontent.com/u/262517?v=4', + events_url: + 'https://api.github.com/users/mralexgray/events{/privacy}', + site_admin: false, + gravatar_id: '', + starred_url: + 'https://api.github.com/users/mralexgray/starred{/owner}{/repo}', + followers_url: 'https://api.github.com/users/mralexgray/followers', + following_url: + 'https://api.github.com/users/mralexgray/following{/other_user}', + organizations_url: 'https://api.github.com/users/mralexgray/orgs', + subscriptions_url: + 'https://api.github.com/users/mralexgray/subscriptions', + received_events_url: + 'https://api.github.com/users/mralexgray/received_events', + }, + topics: [], + git_url: 'git://github.com/mralexgray/Alfred-Google-Translate.git', + license: null, + node_id: 'MDEwOlJlcG9zaXRvcnkxMDQ3NjQ2Nw==', + private: false, + ssh_url: 'git@github.com:mralexgray/Alfred-Google-Translate.git', + svn_url: 'https://github.com/mralexgray/Alfred-Google-Translate', + archived: false, + disabled: false, + has_wiki: true, + homepage: null, + html_url: 'https://github.com/mralexgray/Alfred-Google-Translate', + keys_url: + 'https://api.github.com/repos/mralexgray/Alfred-Google-Translate/keys{/key_id}', + language: 'Shell', + tags_url: + 'https://api.github.com/repos/mralexgray/Alfred-Google-Translate/tags', + watchers: 0, + blobs_url: + 'https://api.github.com/repos/mralexgray/Alfred-Google-Translate/git/blobs{/sha}', + clone_url: 'https://github.com/mralexgray/Alfred-Google-Translate.git', + forks_url: + 'https://api.github.com/repos/mralexgray/Alfred-Google-Translate/forks', + full_name: 'mralexgray/Alfred-Google-Translate', + has_pages: false, + hooks_url: + 'https://api.github.com/repos/mralexgray/Alfred-Google-Translate/hooks', + pulls_url: + 'https://api.github.com/repos/mralexgray/Alfred-Google-Translate/pulls{/number}', + pushed_at: '2013-01-12T19:39:03Z', + teams_url: + 'https://api.github.com/repos/mralexgray/Alfred-Google-Translate/teams', + trees_url: + 'https://api.github.com/repos/mralexgray/Alfred-Google-Translate/git/trees{/sha}', + created_at: '2013-06-04T10:45:10Z', + events_url: + 'https://api.github.com/repos/mralexgray/Alfred-Google-Translate/events', + has_issues: false, + issues_url: + 'https://api.github.com/repos/mralexgray/Alfred-Google-Translate/issues{/number}', + labels_url: + 'https://api.github.com/repos/mralexgray/Alfred-Google-Translate/labels{/name}', + merges_url: + 'https://api.github.com/repos/mralexgray/Alfred-Google-Translate/merges', + mirror_url: null, + updated_at: '2013-06-04T10:45:10Z', + visibility: 'public', + archive_url: + 'https://api.github.com/repos/mralexgray/Alfred-Google-Translate/{archive_format}{/ref}', + commits_url: + 'https://api.github.com/repos/mralexgray/Alfred-Google-Translate/commits{/sha}', + compare_url: + 'https://api.github.com/repos/mralexgray/Alfred-Google-Translate/compare/{base}...{head}', + description: + 'Extension for Alfred that will do a Google translate for you', + forks_count: 0, + is_template: false, + open_issues: 0, + branches_url: + 'https://api.github.com/repos/mralexgray/Alfred-Google-Translate/branches{/branch}', + comments_url: + 'https://api.github.com/repos/mralexgray/Alfred-Google-Translate/comments{/number}', + contents_url: + 'https://api.github.com/repos/mralexgray/Alfred-Google-Translate/contents/{+path}', + git_refs_url: + 'https://api.github.com/repos/mralexgray/Alfred-Google-Translate/git/refs{/sha}', + git_tags_url: + 'https://api.github.com/repos/mralexgray/Alfred-Google-Translate/git/tags{/sha}', + has_projects: true, + releases_url: + 'https://api.github.com/repos/mralexgray/Alfred-Google-Translate/releases{/id}', + statuses_url: + 'https://api.github.com/repos/mralexgray/Alfred-Google-Translate/statuses/{sha}', + allow_forking: true, + assignees_url: + 'https://api.github.com/repos/mralexgray/Alfred-Google-Translate/assignees{/user}', + downloads_url: + 'https://api.github.com/repos/mralexgray/Alfred-Google-Translate/downloads', + has_downloads: true, + languages_url: + 'https://api.github.com/repos/mralexgray/Alfred-Google-Translate/languages', + default_branch: 'master', + milestones_url: + 'https://api.github.com/repos/mralexgray/Alfred-Google-Translate/milestones{/number}', + stargazers_url: + 'https://api.github.com/repos/mralexgray/Alfred-Google-Translate/stargazers', + watchers_count: 0, + deployments_url: + 'https://api.github.com/repos/mralexgray/Alfred-Google-Translate/deployments', + git_commits_url: + 'https://api.github.com/repos/mralexgray/Alfred-Google-Translate/git/commits{/sha}', + subscribers_url: + 'https://api.github.com/repos/mralexgray/Alfred-Google-Translate/subscribers', + contributors_url: + 'https://api.github.com/repos/mralexgray/Alfred-Google-Translate/contributors', + issue_events_url: + 'https://api.github.com/repos/mralexgray/Alfred-Google-Translate/issues/events{/number}', + stargazers_count: 0, + subscription_url: + 'https://api.github.com/repos/mralexgray/Alfred-Google-Translate/subscription', + collaborators_url: + 'https://api.github.com/repos/mralexgray/Alfred-Google-Translate/collaborators{/collaborator}', + issue_comment_url: + 'https://api.github.com/repos/mralexgray/Alfred-Google-Translate/issues/comments{/number}', + notifications_url: + 'https://api.github.com/repos/mralexgray/Alfred-Google-Translate/notifications{?since,all,participating}', + open_issues_count: 0, + web_commit_signoff_required: false, + }, + { + id: 5524019, + url: 'https://api.github.com/repos/mralexgray/Amber', + fork: false, + name: 'Amber', + size: 48, + forks: 0, + owner: { + id: 262517, + url: 'https://api.github.com/users/mralexgray', + type: 'User', + login: 'mralexgray', + node_id: 'MDQ6VXNlcjI2MjUxNw==', + html_url: 'https://github.com/mralexgray', + gists_url: 'https://api.github.com/users/mralexgray/gists{/gist_id}', + repos_url: 'https://api.github.com/users/mralexgray/repos', + avatar_url: 'https://avatars.githubusercontent.com/u/262517?v=4', + events_url: + 'https://api.github.com/users/mralexgray/events{/privacy}', + site_admin: false, + gravatar_id: '', + starred_url: + 'https://api.github.com/users/mralexgray/starred{/owner}{/repo}', + followers_url: 'https://api.github.com/users/mralexgray/followers', + following_url: + 'https://api.github.com/users/mralexgray/following{/other_user}', + organizations_url: 'https://api.github.com/users/mralexgray/orgs', + subscriptions_url: + 'https://api.github.com/users/mralexgray/subscriptions', + received_events_url: + 'https://api.github.com/users/mralexgray/received_events', + }, + topics: [], + git_url: 'git://github.com/mralexgray/Amber.git', + license: null, + node_id: 'MDEwOlJlcG9zaXRvcnk1NTI0MDE5', + private: false, + ssh_url: 'git@github.com:mralexgray/Amber.git', + svn_url: 'https://github.com/mralexgray/Amber', + archived: false, + disabled: false, + has_wiki: true, + homepage: null, + html_url: 'https://github.com/mralexgray/Amber', + keys_url: 'https://api.github.com/repos/mralexgray/Amber/keys{/key_id}', + language: null, + tags_url: 'https://api.github.com/repos/mralexgray/Amber/tags', + watchers: 0, + blobs_url: + 'https://api.github.com/repos/mralexgray/Amber/git/blobs{/sha}', + clone_url: 'https://github.com/mralexgray/Amber.git', + forks_url: 'https://api.github.com/repos/mralexgray/Amber/forks', + full_name: 'mralexgray/Amber', + has_pages: false, + hooks_url: 'https://api.github.com/repos/mralexgray/Amber/hooks', + pulls_url: + 'https://api.github.com/repos/mralexgray/Amber/pulls{/number}', + pushed_at: '2012-08-23T10:38:25Z', + teams_url: 'https://api.github.com/repos/mralexgray/Amber/teams', + trees_url: + 'https://api.github.com/repos/mralexgray/Amber/git/trees{/sha}', + created_at: '2012-08-23T10:38:24Z', + events_url: 'https://api.github.com/repos/mralexgray/Amber/events', + has_issues: true, + issues_url: + 'https://api.github.com/repos/mralexgray/Amber/issues{/number}', + labels_url: + 'https://api.github.com/repos/mralexgray/Amber/labels{/name}', + merges_url: 'https://api.github.com/repos/mralexgray/Amber/merges', + mirror_url: null, + updated_at: '2013-01-11T22:25:35Z', + visibility: 'public', + archive_url: + 'https://api.github.com/repos/mralexgray/Amber/{archive_format}{/ref}', + commits_url: + 'https://api.github.com/repos/mralexgray/Amber/commits{/sha}', + compare_url: + 'https://api.github.com/repos/mralexgray/Amber/compare/{base}...{head}', + description: 'Fork of the difficult-to-deal-with Amber.framework', + forks_count: 0, + is_template: false, + open_issues: 0, + branches_url: + 'https://api.github.com/repos/mralexgray/Amber/branches{/branch}', + comments_url: + 'https://api.github.com/repos/mralexgray/Amber/comments{/number}', + contents_url: + 'https://api.github.com/repos/mralexgray/Amber/contents/{+path}', + git_refs_url: + 'https://api.github.com/repos/mralexgray/Amber/git/refs{/sha}', + git_tags_url: + 'https://api.github.com/repos/mralexgray/Amber/git/tags{/sha}', + has_projects: true, + releases_url: + 'https://api.github.com/repos/mralexgray/Amber/releases{/id}', + statuses_url: + 'https://api.github.com/repos/mralexgray/Amber/statuses/{sha}', + allow_forking: true, + assignees_url: + 'https://api.github.com/repos/mralexgray/Amber/assignees{/user}', + downloads_url: + 'https://api.github.com/repos/mralexgray/Amber/downloads', + has_downloads: true, + languages_url: + 'https://api.github.com/repos/mralexgray/Amber/languages', + default_branch: 'master', + milestones_url: + 'https://api.github.com/repos/mralexgray/Amber/milestones{/number}', + stargazers_url: + 'https://api.github.com/repos/mralexgray/Amber/stargazers', + watchers_count: 0, + deployments_url: + 'https://api.github.com/repos/mralexgray/Amber/deployments', + git_commits_url: + 'https://api.github.com/repos/mralexgray/Amber/git/commits{/sha}', + subscribers_url: + 'https://api.github.com/repos/mralexgray/Amber/subscribers', + contributors_url: + 'https://api.github.com/repos/mralexgray/Amber/contributors', + issue_events_url: + 'https://api.github.com/repos/mralexgray/Amber/issues/events{/number}', + stargazers_count: 0, + subscription_url: + 'https://api.github.com/repos/mralexgray/Amber/subscription', + collaborators_url: + 'https://api.github.com/repos/mralexgray/Amber/collaborators{/collaborator}', + issue_comment_url: + 'https://api.github.com/repos/mralexgray/Amber/issues/comments{/number}', + notifications_url: + 'https://api.github.com/repos/mralexgray/Amber/notifications{?since,all,participating}', + open_issues_count: 0, + web_commit_signoff_required: false, + }, + { + id: 10809060, + url: 'https://api.github.com/repos/mralexgray/Amethyst', + fork: true, + name: 'Amethyst', + size: 12623, + forks: 0, + owner: { + id: 262517, + url: 'https://api.github.com/users/mralexgray', + type: 'User', + login: 'mralexgray', + node_id: 'MDQ6VXNlcjI2MjUxNw==', + html_url: 'https://github.com/mralexgray', + gists_url: 'https://api.github.com/users/mralexgray/gists{/gist_id}', + repos_url: 'https://api.github.com/users/mralexgray/repos', + avatar_url: 'https://avatars.githubusercontent.com/u/262517?v=4', + events_url: + 'https://api.github.com/users/mralexgray/events{/privacy}', + site_admin: false, + gravatar_id: '', + starred_url: + 'https://api.github.com/users/mralexgray/starred{/owner}{/repo}', + followers_url: 'https://api.github.com/users/mralexgray/followers', + following_url: + 'https://api.github.com/users/mralexgray/following{/other_user}', + organizations_url: 'https://api.github.com/users/mralexgray/orgs', + subscriptions_url: + 'https://api.github.com/users/mralexgray/subscriptions', + received_events_url: + 'https://api.github.com/users/mralexgray/received_events', + }, + topics: [], + git_url: 'git://github.com/mralexgray/Amethyst.git', + license: { + key: 'mit', + url: 'https://api.github.com/licenses/mit', + name: 'MIT License', + node_id: 'MDc6TGljZW5zZTEz', + spdx_id: 'MIT', + }, + node_id: 'MDEwOlJlcG9zaXRvcnkxMDgwOTA2MA==', + private: false, + ssh_url: 'git@github.com:mralexgray/Amethyst.git', + svn_url: 'https://github.com/mralexgray/Amethyst', + archived: false, + disabled: false, + has_wiki: true, + homepage: 'http://ianyh.github.io/Amethyst/', + html_url: 'https://github.com/mralexgray/Amethyst', + keys_url: + 'https://api.github.com/repos/mralexgray/Amethyst/keys{/key_id}', + language: 'Objective-C', + tags_url: 'https://api.github.com/repos/mralexgray/Amethyst/tags', + watchers: 0, + blobs_url: + 'https://api.github.com/repos/mralexgray/Amethyst/git/blobs{/sha}', + clone_url: 'https://github.com/mralexgray/Amethyst.git', + forks_url: 'https://api.github.com/repos/mralexgray/Amethyst/forks', + full_name: 'mralexgray/Amethyst', + has_pages: false, + hooks_url: 'https://api.github.com/repos/mralexgray/Amethyst/hooks', + pulls_url: + 'https://api.github.com/repos/mralexgray/Amethyst/pulls{/number}', + pushed_at: '2013-06-18T02:54:11Z', + teams_url: 'https://api.github.com/repos/mralexgray/Amethyst/teams', + trees_url: + 'https://api.github.com/repos/mralexgray/Amethyst/git/trees{/sha}', + created_at: '2013-06-20T00:34:22Z', + events_url: 'https://api.github.com/repos/mralexgray/Amethyst/events', + has_issues: false, + issues_url: + 'https://api.github.com/repos/mralexgray/Amethyst/issues{/number}', + labels_url: + 'https://api.github.com/repos/mralexgray/Amethyst/labels{/name}', + merges_url: 'https://api.github.com/repos/mralexgray/Amethyst/merges', + mirror_url: null, + updated_at: '2013-06-20T00:34:22Z', + visibility: 'public', + archive_url: + 'https://api.github.com/repos/mralexgray/Amethyst/{archive_format}{/ref}', + commits_url: + 'https://api.github.com/repos/mralexgray/Amethyst/commits{/sha}', + compare_url: + 'https://api.github.com/repos/mralexgray/Amethyst/compare/{base}...{head}', + description: 'Tiling window manager for OS X.', + forks_count: 0, + is_template: false, + open_issues: 0, + branches_url: + 'https://api.github.com/repos/mralexgray/Amethyst/branches{/branch}', + comments_url: + 'https://api.github.com/repos/mralexgray/Amethyst/comments{/number}', + contents_url: + 'https://api.github.com/repos/mralexgray/Amethyst/contents/{+path}', + git_refs_url: + 'https://api.github.com/repos/mralexgray/Amethyst/git/refs{/sha}', + git_tags_url: + 'https://api.github.com/repos/mralexgray/Amethyst/git/tags{/sha}', + has_projects: true, + releases_url: + 'https://api.github.com/repos/mralexgray/Amethyst/releases{/id}', + statuses_url: + 'https://api.github.com/repos/mralexgray/Amethyst/statuses/{sha}', + allow_forking: true, + assignees_url: + 'https://api.github.com/repos/mralexgray/Amethyst/assignees{/user}', + downloads_url: + 'https://api.github.com/repos/mralexgray/Amethyst/downloads', + has_downloads: true, + languages_url: + 'https://api.github.com/repos/mralexgray/Amethyst/languages', + default_branch: 'master', + milestones_url: + 'https://api.github.com/repos/mralexgray/Amethyst/milestones{/number}', + stargazers_url: + 'https://api.github.com/repos/mralexgray/Amethyst/stargazers', + watchers_count: 0, + deployments_url: + 'https://api.github.com/repos/mralexgray/Amethyst/deployments', + git_commits_url: + 'https://api.github.com/repos/mralexgray/Amethyst/git/commits{/sha}', + subscribers_url: + 'https://api.github.com/repos/mralexgray/Amethyst/subscribers', + contributors_url: + 'https://api.github.com/repos/mralexgray/Amethyst/contributors', + issue_events_url: + 'https://api.github.com/repos/mralexgray/Amethyst/issues/events{/number}', + stargazers_count: 0, + subscription_url: + 'https://api.github.com/repos/mralexgray/Amethyst/subscription', + collaborators_url: + 'https://api.github.com/repos/mralexgray/Amethyst/collaborators{/collaborator}', + issue_comment_url: + 'https://api.github.com/repos/mralexgray/Amethyst/issues/comments{/number}', + notifications_url: + 'https://api.github.com/repos/mralexgray/Amethyst/notifications{?since,all,participating}', + open_issues_count: 0, + web_commit_signoff_required: false, + }, + { + id: 3684286, + url: 'https://api.github.com/repos/mralexgray/Animated-Paths', + fork: true, + name: 'Animated-Paths', + size: 411, + forks: 0, + owner: { + id: 262517, + url: 'https://api.github.com/users/mralexgray', + type: 'User', + login: 'mralexgray', + node_id: 'MDQ6VXNlcjI2MjUxNw==', + html_url: 'https://github.com/mralexgray', + gists_url: 'https://api.github.com/users/mralexgray/gists{/gist_id}', + repos_url: 'https://api.github.com/users/mralexgray/repos', + avatar_url: 'https://avatars.githubusercontent.com/u/262517?v=4', + events_url: + 'https://api.github.com/users/mralexgray/events{/privacy}', + site_admin: false, + gravatar_id: '', + starred_url: + 'https://api.github.com/users/mralexgray/starred{/owner}{/repo}', + followers_url: 'https://api.github.com/users/mralexgray/followers', + following_url: + 'https://api.github.com/users/mralexgray/following{/other_user}', + organizations_url: 'https://api.github.com/users/mralexgray/orgs', + subscriptions_url: + 'https://api.github.com/users/mralexgray/subscriptions', + received_events_url: + 'https://api.github.com/users/mralexgray/received_events', + }, + topics: [], + git_url: 'git://github.com/mralexgray/Animated-Paths.git', + license: { + key: 'other', + url: null, + name: 'Other', + node_id: 'MDc6TGljZW5zZTA=', + spdx_id: 'NOASSERTION', + }, + node_id: 'MDEwOlJlcG9zaXRvcnkzNjg0Mjg2', + private: false, + ssh_url: 'git@github.com:mralexgray/Animated-Paths.git', + svn_url: 'https://github.com/mralexgray/Animated-Paths', + archived: false, + disabled: false, + has_wiki: true, + homepage: + 'http://oleb.net/blog/2010/12/animating-drawing-of-cgpath-with-cashapelayer/', + html_url: 'https://github.com/mralexgray/Animated-Paths', + keys_url: + 'https://api.github.com/repos/mralexgray/Animated-Paths/keys{/key_id}', + language: 'Objective-C', + tags_url: 'https://api.github.com/repos/mralexgray/Animated-Paths/tags', + watchers: 2, + blobs_url: + 'https://api.github.com/repos/mralexgray/Animated-Paths/git/blobs{/sha}', + clone_url: 'https://github.com/mralexgray/Animated-Paths.git', + forks_url: + 'https://api.github.com/repos/mralexgray/Animated-Paths/forks', + full_name: 'mralexgray/Animated-Paths', + has_pages: false, + hooks_url: + 'https://api.github.com/repos/mralexgray/Animated-Paths/hooks', + pulls_url: + 'https://api.github.com/repos/mralexgray/Animated-Paths/pulls{/number}', + pushed_at: '2010-12-30T20:56:51Z', + teams_url: + 'https://api.github.com/repos/mralexgray/Animated-Paths/teams', + trees_url: + 'https://api.github.com/repos/mralexgray/Animated-Paths/git/trees{/sha}', + created_at: '2012-03-11T02:56:38Z', + events_url: + 'https://api.github.com/repos/mralexgray/Animated-Paths/events', + has_issues: false, + issues_url: + 'https://api.github.com/repos/mralexgray/Animated-Paths/issues{/number}', + labels_url: + 'https://api.github.com/repos/mralexgray/Animated-Paths/labels{/name}', + merges_url: + 'https://api.github.com/repos/mralexgray/Animated-Paths/merges', + mirror_url: null, + updated_at: '2013-01-08T04:12:21Z', + visibility: 'public', + archive_url: + 'https://api.github.com/repos/mralexgray/Animated-Paths/{archive_format}{/ref}', + commits_url: + 'https://api.github.com/repos/mralexgray/Animated-Paths/commits{/sha}', + compare_url: + 'https://api.github.com/repos/mralexgray/Animated-Paths/compare/{base}...{head}', + description: + 'Demo project: Animating the drawing of a CGPath with CAShapeLayer.strokeEnd', + forks_count: 0, + is_template: false, + open_issues: 0, + branches_url: + 'https://api.github.com/repos/mralexgray/Animated-Paths/branches{/branch}', + comments_url: + 'https://api.github.com/repos/mralexgray/Animated-Paths/comments{/number}', + contents_url: + 'https://api.github.com/repos/mralexgray/Animated-Paths/contents/{+path}', + git_refs_url: + 'https://api.github.com/repos/mralexgray/Animated-Paths/git/refs{/sha}', + git_tags_url: + 'https://api.github.com/repos/mralexgray/Animated-Paths/git/tags{/sha}', + has_projects: true, + releases_url: + 'https://api.github.com/repos/mralexgray/Animated-Paths/releases{/id}', + statuses_url: + 'https://api.github.com/repos/mralexgray/Animated-Paths/statuses/{sha}', + allow_forking: true, + assignees_url: + 'https://api.github.com/repos/mralexgray/Animated-Paths/assignees{/user}', + downloads_url: + 'https://api.github.com/repos/mralexgray/Animated-Paths/downloads', + has_downloads: true, + languages_url: + 'https://api.github.com/repos/mralexgray/Animated-Paths/languages', + default_branch: 'master', + milestones_url: + 'https://api.github.com/repos/mralexgray/Animated-Paths/milestones{/number}', + stargazers_url: + 'https://api.github.com/repos/mralexgray/Animated-Paths/stargazers', + watchers_count: 2, + deployments_url: + 'https://api.github.com/repos/mralexgray/Animated-Paths/deployments', + git_commits_url: + 'https://api.github.com/repos/mralexgray/Animated-Paths/git/commits{/sha}', + subscribers_url: + 'https://api.github.com/repos/mralexgray/Animated-Paths/subscribers', + contributors_url: + 'https://api.github.com/repos/mralexgray/Animated-Paths/contributors', + issue_events_url: + 'https://api.github.com/repos/mralexgray/Animated-Paths/issues/events{/number}', + stargazers_count: 2, + subscription_url: + 'https://api.github.com/repos/mralexgray/Animated-Paths/subscription', + collaborators_url: + 'https://api.github.com/repos/mralexgray/Animated-Paths/collaborators{/collaborator}', + issue_comment_url: + 'https://api.github.com/repos/mralexgray/Animated-Paths/issues/comments{/number}', + notifications_url: + 'https://api.github.com/repos/mralexgray/Animated-Paths/notifications{?since,all,participating}', + open_issues_count: 0, + web_commit_signoff_required: false, + }, + { + id: 16662874, + url: 'https://api.github.com/repos/mralexgray/AnsiLove.framework', + fork: true, + name: 'AnsiLove.framework', + size: 3780, + forks: 0, + owner: { + id: 262517, + url: 'https://api.github.com/users/mralexgray', + type: 'User', + login: 'mralexgray', + node_id: 'MDQ6VXNlcjI2MjUxNw==', + html_url: 'https://github.com/mralexgray', + gists_url: 'https://api.github.com/users/mralexgray/gists{/gist_id}', + repos_url: 'https://api.github.com/users/mralexgray/repos', + avatar_url: 'https://avatars.githubusercontent.com/u/262517?v=4', + events_url: + 'https://api.github.com/users/mralexgray/events{/privacy}', + site_admin: false, + gravatar_id: '', + starred_url: + 'https://api.github.com/users/mralexgray/starred{/owner}{/repo}', + followers_url: 'https://api.github.com/users/mralexgray/followers', + following_url: + 'https://api.github.com/users/mralexgray/following{/other_user}', + organizations_url: 'https://api.github.com/users/mralexgray/orgs', + subscriptions_url: + 'https://api.github.com/users/mralexgray/subscriptions', + received_events_url: + 'https://api.github.com/users/mralexgray/received_events', + }, + topics: [], + git_url: 'git://github.com/mralexgray/AnsiLove.framework.git', + license: { + key: 'other', + url: null, + name: 'Other', + node_id: 'MDc6TGljZW5zZTA=', + spdx_id: 'NOASSERTION', + }, + node_id: 'MDEwOlJlcG9zaXRvcnkxNjY2Mjg3NA==', + private: false, + ssh_url: 'git@github.com:mralexgray/AnsiLove.framework.git', + svn_url: 'https://github.com/mralexgray/AnsiLove.framework', + archived: false, + disabled: false, + has_wiki: false, + homepage: 'http://byteproject.net', + html_url: 'https://github.com/mralexgray/AnsiLove.framework', + keys_url: + 'https://api.github.com/repos/mralexgray/AnsiLove.framework/keys{/key_id}', + language: 'M', + tags_url: + 'https://api.github.com/repos/mralexgray/AnsiLove.framework/tags', + watchers: 0, + blobs_url: + 'https://api.github.com/repos/mralexgray/AnsiLove.framework/git/blobs{/sha}', + clone_url: 'https://github.com/mralexgray/AnsiLove.framework.git', + forks_url: + 'https://api.github.com/repos/mralexgray/AnsiLove.framework/forks', + full_name: 'mralexgray/AnsiLove.framework', + has_pages: false, + hooks_url: + 'https://api.github.com/repos/mralexgray/AnsiLove.framework/hooks', + pulls_url: + 'https://api.github.com/repos/mralexgray/AnsiLove.framework/pulls{/number}', + pushed_at: '2013-10-04T14:08:38Z', + teams_url: + 'https://api.github.com/repos/mralexgray/AnsiLove.framework/teams', + trees_url: + 'https://api.github.com/repos/mralexgray/AnsiLove.framework/git/trees{/sha}', + created_at: '2014-02-09T08:30:27Z', + events_url: + 'https://api.github.com/repos/mralexgray/AnsiLove.framework/events', + has_issues: false, + issues_url: + 'https://api.github.com/repos/mralexgray/AnsiLove.framework/issues{/number}', + labels_url: + 'https://api.github.com/repos/mralexgray/AnsiLove.framework/labels{/name}', + merges_url: + 'https://api.github.com/repos/mralexgray/AnsiLove.framework/merges', + mirror_url: null, + updated_at: '2015-01-13T20:41:46Z', + visibility: 'public', + archive_url: + 'https://api.github.com/repos/mralexgray/AnsiLove.framework/{archive_format}{/ref}', + commits_url: + 'https://api.github.com/repos/mralexgray/AnsiLove.framework/commits{/sha}', + compare_url: + 'https://api.github.com/repos/mralexgray/AnsiLove.framework/compare/{base}...{head}', + description: 'Cocoa Framework for rendering ANSi / ASCII art', + forks_count: 0, + is_template: false, + open_issues: 0, + branches_url: + 'https://api.github.com/repos/mralexgray/AnsiLove.framework/branches{/branch}', + comments_url: + 'https://api.github.com/repos/mralexgray/AnsiLove.framework/comments{/number}', + contents_url: + 'https://api.github.com/repos/mralexgray/AnsiLove.framework/contents/{+path}', + git_refs_url: + 'https://api.github.com/repos/mralexgray/AnsiLove.framework/git/refs{/sha}', + git_tags_url: + 'https://api.github.com/repos/mralexgray/AnsiLove.framework/git/tags{/sha}', + has_projects: true, + releases_url: + 'https://api.github.com/repos/mralexgray/AnsiLove.framework/releases{/id}', + statuses_url: + 'https://api.github.com/repos/mralexgray/AnsiLove.framework/statuses/{sha}', + allow_forking: true, + assignees_url: + 'https://api.github.com/repos/mralexgray/AnsiLove.framework/assignees{/user}', + downloads_url: + 'https://api.github.com/repos/mralexgray/AnsiLove.framework/downloads', + has_downloads: true, + languages_url: + 'https://api.github.com/repos/mralexgray/AnsiLove.framework/languages', + default_branch: 'master', + milestones_url: + 'https://api.github.com/repos/mralexgray/AnsiLove.framework/milestones{/number}', + stargazers_url: + 'https://api.github.com/repos/mralexgray/AnsiLove.framework/stargazers', + watchers_count: 0, + deployments_url: + 'https://api.github.com/repos/mralexgray/AnsiLove.framework/deployments', + git_commits_url: + 'https://api.github.com/repos/mralexgray/AnsiLove.framework/git/commits{/sha}', + subscribers_url: + 'https://api.github.com/repos/mralexgray/AnsiLove.framework/subscribers', + contributors_url: + 'https://api.github.com/repos/mralexgray/AnsiLove.framework/contributors', + issue_events_url: + 'https://api.github.com/repos/mralexgray/AnsiLove.framework/issues/events{/number}', + stargazers_count: 0, + subscription_url: + 'https://api.github.com/repos/mralexgray/AnsiLove.framework/subscription', + collaborators_url: + 'https://api.github.com/repos/mralexgray/AnsiLove.framework/collaborators{/collaborator}', + issue_comment_url: + 'https://api.github.com/repos/mralexgray/AnsiLove.framework/issues/comments{/number}', + notifications_url: + 'https://api.github.com/repos/mralexgray/AnsiLove.framework/notifications{?since,all,participating}', + open_issues_count: 0, + web_commit_signoff_required: false, + }, + { + id: 5189563, + url: 'https://api.github.com/repos/mralexgray/ANTrackBar', + fork: true, + name: 'ANTrackBar', + size: 94, + forks: 0, + owner: { + id: 262517, + url: 'https://api.github.com/users/mralexgray', + type: 'User', + login: 'mralexgray', + node_id: 'MDQ6VXNlcjI2MjUxNw==', + html_url: 'https://github.com/mralexgray', + gists_url: 'https://api.github.com/users/mralexgray/gists{/gist_id}', + repos_url: 'https://api.github.com/users/mralexgray/repos', + avatar_url: 'https://avatars.githubusercontent.com/u/262517?v=4', + events_url: + 'https://api.github.com/users/mralexgray/events{/privacy}', + site_admin: false, + gravatar_id: '', + starred_url: + 'https://api.github.com/users/mralexgray/starred{/owner}{/repo}', + followers_url: 'https://api.github.com/users/mralexgray/followers', + following_url: + 'https://api.github.com/users/mralexgray/following{/other_user}', + organizations_url: 'https://api.github.com/users/mralexgray/orgs', + subscriptions_url: + 'https://api.github.com/users/mralexgray/subscriptions', + received_events_url: + 'https://api.github.com/users/mralexgray/received_events', + }, + topics: [], + git_url: 'git://github.com/mralexgray/ANTrackBar.git', + license: null, + node_id: 'MDEwOlJlcG9zaXRvcnk1MTg5NTYz', + private: false, + ssh_url: 'git@github.com:mralexgray/ANTrackBar.git', + svn_url: 'https://github.com/mralexgray/ANTrackBar', + archived: false, + disabled: false, + has_wiki: true, + homepage: '', + html_url: 'https://github.com/mralexgray/ANTrackBar', + keys_url: + 'https://api.github.com/repos/mralexgray/ANTrackBar/keys{/key_id}', + language: 'Objective-C', + tags_url: 'https://api.github.com/repos/mralexgray/ANTrackBar/tags', + watchers: 2, + blobs_url: + 'https://api.github.com/repos/mralexgray/ANTrackBar/git/blobs{/sha}', + clone_url: 'https://github.com/mralexgray/ANTrackBar.git', + forks_url: 'https://api.github.com/repos/mralexgray/ANTrackBar/forks', + full_name: 'mralexgray/ANTrackBar', + has_pages: false, + hooks_url: 'https://api.github.com/repos/mralexgray/ANTrackBar/hooks', + pulls_url: + 'https://api.github.com/repos/mralexgray/ANTrackBar/pulls{/number}', + pushed_at: '2012-03-09T01:40:02Z', + teams_url: 'https://api.github.com/repos/mralexgray/ANTrackBar/teams', + trees_url: + 'https://api.github.com/repos/mralexgray/ANTrackBar/git/trees{/sha}', + created_at: '2012-07-26T08:17:22Z', + events_url: 'https://api.github.com/repos/mralexgray/ANTrackBar/events', + has_issues: false, + issues_url: + 'https://api.github.com/repos/mralexgray/ANTrackBar/issues{/number}', + labels_url: + 'https://api.github.com/repos/mralexgray/ANTrackBar/labels{/name}', + merges_url: 'https://api.github.com/repos/mralexgray/ANTrackBar/merges', + mirror_url: null, + updated_at: '2013-01-11T10:29:56Z', + visibility: 'public', + archive_url: + 'https://api.github.com/repos/mralexgray/ANTrackBar/{archive_format}{/ref}', + commits_url: + 'https://api.github.com/repos/mralexgray/ANTrackBar/commits{/sha}', + compare_url: + 'https://api.github.com/repos/mralexgray/ANTrackBar/compare/{base}...{head}', + description: 'An easy-to-use Cocoa seek bar with a pleasing appearance', + forks_count: 0, + is_template: false, + open_issues: 0, + branches_url: + 'https://api.github.com/repos/mralexgray/ANTrackBar/branches{/branch}', + comments_url: + 'https://api.github.com/repos/mralexgray/ANTrackBar/comments{/number}', + contents_url: + 'https://api.github.com/repos/mralexgray/ANTrackBar/contents/{+path}', + git_refs_url: + 'https://api.github.com/repos/mralexgray/ANTrackBar/git/refs{/sha}', + git_tags_url: + 'https://api.github.com/repos/mralexgray/ANTrackBar/git/tags{/sha}', + has_projects: true, + releases_url: + 'https://api.github.com/repos/mralexgray/ANTrackBar/releases{/id}', + statuses_url: + 'https://api.github.com/repos/mralexgray/ANTrackBar/statuses/{sha}', + allow_forking: true, + assignees_url: + 'https://api.github.com/repos/mralexgray/ANTrackBar/assignees{/user}', + downloads_url: + 'https://api.github.com/repos/mralexgray/ANTrackBar/downloads', + has_downloads: true, + languages_url: + 'https://api.github.com/repos/mralexgray/ANTrackBar/languages', + default_branch: 'master', + milestones_url: + 'https://api.github.com/repos/mralexgray/ANTrackBar/milestones{/number}', + stargazers_url: + 'https://api.github.com/repos/mralexgray/ANTrackBar/stargazers', + watchers_count: 2, + deployments_url: + 'https://api.github.com/repos/mralexgray/ANTrackBar/deployments', + git_commits_url: + 'https://api.github.com/repos/mralexgray/ANTrackBar/git/commits{/sha}', + subscribers_url: + 'https://api.github.com/repos/mralexgray/ANTrackBar/subscribers', + contributors_url: + 'https://api.github.com/repos/mralexgray/ANTrackBar/contributors', + issue_events_url: + 'https://api.github.com/repos/mralexgray/ANTrackBar/issues/events{/number}', + stargazers_count: 2, + subscription_url: + 'https://api.github.com/repos/mralexgray/ANTrackBar/subscription', + collaborators_url: + 'https://api.github.com/repos/mralexgray/ANTrackBar/collaborators{/collaborator}', + issue_comment_url: + 'https://api.github.com/repos/mralexgray/ANTrackBar/issues/comments{/number}', + notifications_url: + 'https://api.github.com/repos/mralexgray/ANTrackBar/notifications{?since,all,participating}', + open_issues_count: 0, + web_commit_signoff_required: false, + }, + { + id: 16240152, + url: 'https://api.github.com/repos/mralexgray/AOP-in-Objective-C', + fork: true, + name: 'AOP-in-Objective-C', + size: 340, + forks: 1, + owner: { + id: 262517, + url: 'https://api.github.com/users/mralexgray', + type: 'User', + login: 'mralexgray', + node_id: 'MDQ6VXNlcjI2MjUxNw==', + html_url: 'https://github.com/mralexgray', + gists_url: 'https://api.github.com/users/mralexgray/gists{/gist_id}', + repos_url: 'https://api.github.com/users/mralexgray/repos', + avatar_url: 'https://avatars.githubusercontent.com/u/262517?v=4', + events_url: + 'https://api.github.com/users/mralexgray/events{/privacy}', + site_admin: false, + gravatar_id: '', + starred_url: + 'https://api.github.com/users/mralexgray/starred{/owner}{/repo}', + followers_url: 'https://api.github.com/users/mralexgray/followers', + following_url: + 'https://api.github.com/users/mralexgray/following{/other_user}', + organizations_url: 'https://api.github.com/users/mralexgray/orgs', + subscriptions_url: + 'https://api.github.com/users/mralexgray/subscriptions', + received_events_url: + 'https://api.github.com/users/mralexgray/received_events', + }, + topics: [], + git_url: 'git://github.com/mralexgray/AOP-in-Objective-C.git', + license: null, + node_id: 'MDEwOlJlcG9zaXRvcnkxNjI0MDE1Mg==', + private: false, + ssh_url: 'git@github.com:mralexgray/AOP-in-Objective-C.git', + svn_url: 'https://github.com/mralexgray/AOP-in-Objective-C', + archived: false, + disabled: false, + has_wiki: true, + homepage: 'http://innoli.hu/en/opensource/', + html_url: 'https://github.com/mralexgray/AOP-in-Objective-C', + keys_url: + 'https://api.github.com/repos/mralexgray/AOP-in-Objective-C/keys{/key_id}', + language: 'Objective-C', + tags_url: + 'https://api.github.com/repos/mralexgray/AOP-in-Objective-C/tags', + watchers: 0, + blobs_url: + 'https://api.github.com/repos/mralexgray/AOP-in-Objective-C/git/blobs{/sha}', + clone_url: 'https://github.com/mralexgray/AOP-in-Objective-C.git', + forks_url: + 'https://api.github.com/repos/mralexgray/AOP-in-Objective-C/forks', + full_name: 'mralexgray/AOP-in-Objective-C', + has_pages: false, + hooks_url: + 'https://api.github.com/repos/mralexgray/AOP-in-Objective-C/hooks', + pulls_url: + 'https://api.github.com/repos/mralexgray/AOP-in-Objective-C/pulls{/number}', + pushed_at: '2014-02-12T16:23:20Z', + teams_url: + 'https://api.github.com/repos/mralexgray/AOP-in-Objective-C/teams', + trees_url: + 'https://api.github.com/repos/mralexgray/AOP-in-Objective-C/git/trees{/sha}', + created_at: '2014-01-25T21:18:04Z', + events_url: + 'https://api.github.com/repos/mralexgray/AOP-in-Objective-C/events', + has_issues: false, + issues_url: + 'https://api.github.com/repos/mralexgray/AOP-in-Objective-C/issues{/number}', + labels_url: + 'https://api.github.com/repos/mralexgray/AOP-in-Objective-C/labels{/name}', + merges_url: + 'https://api.github.com/repos/mralexgray/AOP-in-Objective-C/merges', + mirror_url: null, + updated_at: '2014-06-19T19:38:12Z', + visibility: 'public', + archive_url: + 'https://api.github.com/repos/mralexgray/AOP-in-Objective-C/{archive_format}{/ref}', + commits_url: + 'https://api.github.com/repos/mralexgray/AOP-in-Objective-C/commits{/sha}', + compare_url: + 'https://api.github.com/repos/mralexgray/AOP-in-Objective-C/compare/{base}...{head}', + description: + 'An NSProxy based library for easily enabling AOP like functionality in Objective-C.', + forks_count: 1, + is_template: false, + open_issues: 0, + branches_url: + 'https://api.github.com/repos/mralexgray/AOP-in-Objective-C/branches{/branch}', + comments_url: + 'https://api.github.com/repos/mralexgray/AOP-in-Objective-C/comments{/number}', + contents_url: + 'https://api.github.com/repos/mralexgray/AOP-in-Objective-C/contents/{+path}', + git_refs_url: + 'https://api.github.com/repos/mralexgray/AOP-in-Objective-C/git/refs{/sha}', + git_tags_url: + 'https://api.github.com/repos/mralexgray/AOP-in-Objective-C/git/tags{/sha}', + has_projects: true, + releases_url: + 'https://api.github.com/repos/mralexgray/AOP-in-Objective-C/releases{/id}', + statuses_url: + 'https://api.github.com/repos/mralexgray/AOP-in-Objective-C/statuses/{sha}', + allow_forking: true, + assignees_url: + 'https://api.github.com/repos/mralexgray/AOP-in-Objective-C/assignees{/user}', + downloads_url: + 'https://api.github.com/repos/mralexgray/AOP-in-Objective-C/downloads', + has_downloads: true, + languages_url: + 'https://api.github.com/repos/mralexgray/AOP-in-Objective-C/languages', + default_branch: 'travis-coveralls', + milestones_url: + 'https://api.github.com/repos/mralexgray/AOP-in-Objective-C/milestones{/number}', + stargazers_url: + 'https://api.github.com/repos/mralexgray/AOP-in-Objective-C/stargazers', + watchers_count: 0, + deployments_url: + 'https://api.github.com/repos/mralexgray/AOP-in-Objective-C/deployments', + git_commits_url: + 'https://api.github.com/repos/mralexgray/AOP-in-Objective-C/git/commits{/sha}', + subscribers_url: + 'https://api.github.com/repos/mralexgray/AOP-in-Objective-C/subscribers', + contributors_url: + 'https://api.github.com/repos/mralexgray/AOP-in-Objective-C/contributors', + issue_events_url: + 'https://api.github.com/repos/mralexgray/AOP-in-Objective-C/issues/events{/number}', + stargazers_count: 0, + subscription_url: + 'https://api.github.com/repos/mralexgray/AOP-in-Objective-C/subscription', + collaborators_url: + 'https://api.github.com/repos/mralexgray/AOP-in-Objective-C/collaborators{/collaborator}', + issue_comment_url: + 'https://api.github.com/repos/mralexgray/AOP-in-Objective-C/issues/comments{/number}', + notifications_url: + 'https://api.github.com/repos/mralexgray/AOP-in-Objective-C/notifications{?since,all,participating}', + open_issues_count: 0, + web_commit_signoff_required: false, + }, + { + id: 13141936, + url: 'https://api.github.com/repos/mralexgray/Apaxy', + fork: true, + name: 'Apaxy', + size: 113, + forks: 0, + owner: { + id: 262517, + url: 'https://api.github.com/users/mralexgray', + type: 'User', + login: 'mralexgray', + node_id: 'MDQ6VXNlcjI2MjUxNw==', + html_url: 'https://github.com/mralexgray', + gists_url: 'https://api.github.com/users/mralexgray/gists{/gist_id}', + repos_url: 'https://api.github.com/users/mralexgray/repos', + avatar_url: 'https://avatars.githubusercontent.com/u/262517?v=4', + events_url: + 'https://api.github.com/users/mralexgray/events{/privacy}', + site_admin: false, + gravatar_id: '', + starred_url: + 'https://api.github.com/users/mralexgray/starred{/owner}{/repo}', + followers_url: 'https://api.github.com/users/mralexgray/followers', + following_url: + 'https://api.github.com/users/mralexgray/following{/other_user}', + organizations_url: 'https://api.github.com/users/mralexgray/orgs', + subscriptions_url: + 'https://api.github.com/users/mralexgray/subscriptions', + received_events_url: + 'https://api.github.com/users/mralexgray/received_events', + }, + topics: [], + git_url: 'git://github.com/mralexgray/Apaxy.git', + license: { + key: 'unlicense', + url: 'https://api.github.com/licenses/unlicense', + name: 'The Unlicense', + node_id: 'MDc6TGljZW5zZTE1', + spdx_id: 'Unlicense', + }, + node_id: 'MDEwOlJlcG9zaXRvcnkxMzE0MTkzNg==', + private: false, + ssh_url: 'git@github.com:mralexgray/Apaxy.git', + svn_url: 'https://github.com/mralexgray/Apaxy', + archived: false, + disabled: false, + has_wiki: true, + homepage: null, + html_url: 'https://github.com/mralexgray/Apaxy', + keys_url: 'https://api.github.com/repos/mralexgray/Apaxy/keys{/key_id}', + language: 'CSS', + tags_url: 'https://api.github.com/repos/mralexgray/Apaxy/tags', + watchers: 0, + blobs_url: + 'https://api.github.com/repos/mralexgray/Apaxy/git/blobs{/sha}', + clone_url: 'https://github.com/mralexgray/Apaxy.git', + forks_url: 'https://api.github.com/repos/mralexgray/Apaxy/forks', + full_name: 'mralexgray/Apaxy', + has_pages: false, + hooks_url: 'https://api.github.com/repos/mralexgray/Apaxy/hooks', + pulls_url: + 'https://api.github.com/repos/mralexgray/Apaxy/pulls{/number}', + pushed_at: '2013-08-02T16:01:32Z', + teams_url: 'https://api.github.com/repos/mralexgray/Apaxy/teams', + trees_url: + 'https://api.github.com/repos/mralexgray/Apaxy/git/trees{/sha}', + created_at: '2013-09-27T05:05:35Z', + events_url: 'https://api.github.com/repos/mralexgray/Apaxy/events', + has_issues: false, + issues_url: + 'https://api.github.com/repos/mralexgray/Apaxy/issues{/number}', + labels_url: + 'https://api.github.com/repos/mralexgray/Apaxy/labels{/name}', + merges_url: 'https://api.github.com/repos/mralexgray/Apaxy/merges', + mirror_url: null, + updated_at: '2018-02-16T21:40:24Z', + visibility: 'public', + archive_url: + 'https://api.github.com/repos/mralexgray/Apaxy/{archive_format}{/ref}', + commits_url: + 'https://api.github.com/repos/mralexgray/Apaxy/commits{/sha}', + compare_url: + 'https://api.github.com/repos/mralexgray/Apaxy/compare/{base}...{head}', + description: + 'A simple, customisable theme for your Apache directory listing.', + forks_count: 0, + is_template: false, + open_issues: 0, + branches_url: + 'https://api.github.com/repos/mralexgray/Apaxy/branches{/branch}', + comments_url: + 'https://api.github.com/repos/mralexgray/Apaxy/comments{/number}', + contents_url: + 'https://api.github.com/repos/mralexgray/Apaxy/contents/{+path}', + git_refs_url: + 'https://api.github.com/repos/mralexgray/Apaxy/git/refs{/sha}', + git_tags_url: + 'https://api.github.com/repos/mralexgray/Apaxy/git/tags{/sha}', + has_projects: true, + releases_url: + 'https://api.github.com/repos/mralexgray/Apaxy/releases{/id}', + statuses_url: + 'https://api.github.com/repos/mralexgray/Apaxy/statuses/{sha}', + allow_forking: true, + assignees_url: + 'https://api.github.com/repos/mralexgray/Apaxy/assignees{/user}', + downloads_url: + 'https://api.github.com/repos/mralexgray/Apaxy/downloads', + has_downloads: true, + languages_url: + 'https://api.github.com/repos/mralexgray/Apaxy/languages', + default_branch: 'master', + milestones_url: + 'https://api.github.com/repos/mralexgray/Apaxy/milestones{/number}', + stargazers_url: + 'https://api.github.com/repos/mralexgray/Apaxy/stargazers', + watchers_count: 0, + deployments_url: + 'https://api.github.com/repos/mralexgray/Apaxy/deployments', + git_commits_url: + 'https://api.github.com/repos/mralexgray/Apaxy/git/commits{/sha}', + subscribers_url: + 'https://api.github.com/repos/mralexgray/Apaxy/subscribers', + contributors_url: + 'https://api.github.com/repos/mralexgray/Apaxy/contributors', + issue_events_url: + 'https://api.github.com/repos/mralexgray/Apaxy/issues/events{/number}', + stargazers_count: 0, + subscription_url: + 'https://api.github.com/repos/mralexgray/Apaxy/subscription', + collaborators_url: + 'https://api.github.com/repos/mralexgray/Apaxy/collaborators{/collaborator}', + issue_comment_url: + 'https://api.github.com/repos/mralexgray/Apaxy/issues/comments{/number}', + notifications_url: + 'https://api.github.com/repos/mralexgray/Apaxy/notifications{?since,all,participating}', + open_issues_count: 0, + web_commit_signoff_required: false, + }, + { + id: 20027360, + url: 'https://api.github.com/repos/mralexgray/app', + fork: true, + name: 'app', + size: 1890, + forks: 0, + owner: { + id: 262517, + url: 'https://api.github.com/users/mralexgray', + type: 'User', + login: 'mralexgray', + node_id: 'MDQ6VXNlcjI2MjUxNw==', + html_url: 'https://github.com/mralexgray', + gists_url: 'https://api.github.com/users/mralexgray/gists{/gist_id}', + repos_url: 'https://api.github.com/users/mralexgray/repos', + avatar_url: 'https://avatars.githubusercontent.com/u/262517?v=4', + events_url: + 'https://api.github.com/users/mralexgray/events{/privacy}', + site_admin: false, + gravatar_id: '', + starred_url: + 'https://api.github.com/users/mralexgray/starred{/owner}{/repo}', + followers_url: 'https://api.github.com/users/mralexgray/followers', + following_url: + 'https://api.github.com/users/mralexgray/following{/other_user}', + organizations_url: 'https://api.github.com/users/mralexgray/orgs', + subscriptions_url: + 'https://api.github.com/users/mralexgray/subscriptions', + received_events_url: + 'https://api.github.com/users/mralexgray/received_events', + }, + topics: [], + git_url: 'git://github.com/mralexgray/app.git', + license: { + key: 'other', + url: null, + name: 'Other', + node_id: 'MDc6TGljZW5zZTA=', + spdx_id: 'NOASSERTION', + }, + node_id: 'MDEwOlJlcG9zaXRvcnkyMDAyNzM2MA==', + private: false, + ssh_url: 'git@github.com:mralexgray/app.git', + svn_url: 'https://github.com/mralexgray/app', + archived: false, + disabled: false, + has_wiki: true, + homepage: null, + html_url: 'https://github.com/mralexgray/app', + keys_url: 'https://api.github.com/repos/mralexgray/app/keys{/key_id}', + language: 'JavaScript', + tags_url: 'https://api.github.com/repos/mralexgray/app/tags', + watchers: 0, + blobs_url: + 'https://api.github.com/repos/mralexgray/app/git/blobs{/sha}', + clone_url: 'https://github.com/mralexgray/app.git', + forks_url: 'https://api.github.com/repos/mralexgray/app/forks', + full_name: 'mralexgray/app', + has_pages: false, + hooks_url: 'https://api.github.com/repos/mralexgray/app/hooks', + pulls_url: 'https://api.github.com/repos/mralexgray/app/pulls{/number}', + pushed_at: '2014-05-20T19:51:38Z', + teams_url: 'https://api.github.com/repos/mralexgray/app/teams', + trees_url: + 'https://api.github.com/repos/mralexgray/app/git/trees{/sha}', + created_at: '2014-05-21T15:54:20Z', + events_url: 'https://api.github.com/repos/mralexgray/app/events', + has_issues: false, + issues_url: + 'https://api.github.com/repos/mralexgray/app/issues{/number}', + labels_url: 'https://api.github.com/repos/mralexgray/app/labels{/name}', + merges_url: 'https://api.github.com/repos/mralexgray/app/merges', + mirror_url: null, + updated_at: '2014-05-21T15:54:22Z', + visibility: 'public', + archive_url: + 'https://api.github.com/repos/mralexgray/app/{archive_format}{/ref}', + commits_url: + 'https://api.github.com/repos/mralexgray/app/commits{/sha}', + compare_url: + 'https://api.github.com/repos/mralexgray/app/compare/{base}...{head}', + description: 'Instant mobile web app creation', + forks_count: 0, + is_template: false, + open_issues: 0, + branches_url: + 'https://api.github.com/repos/mralexgray/app/branches{/branch}', + comments_url: + 'https://api.github.com/repos/mralexgray/app/comments{/number}', + contents_url: + 'https://api.github.com/repos/mralexgray/app/contents/{+path}', + git_refs_url: + 'https://api.github.com/repos/mralexgray/app/git/refs{/sha}', + git_tags_url: + 'https://api.github.com/repos/mralexgray/app/git/tags{/sha}', + has_projects: true, + releases_url: + 'https://api.github.com/repos/mralexgray/app/releases{/id}', + statuses_url: + 'https://api.github.com/repos/mralexgray/app/statuses/{sha}', + allow_forking: true, + assignees_url: + 'https://api.github.com/repos/mralexgray/app/assignees{/user}', + downloads_url: 'https://api.github.com/repos/mralexgray/app/downloads', + has_downloads: true, + languages_url: 'https://api.github.com/repos/mralexgray/app/languages', + default_branch: 'master', + milestones_url: + 'https://api.github.com/repos/mralexgray/app/milestones{/number}', + stargazers_url: + 'https://api.github.com/repos/mralexgray/app/stargazers', + watchers_count: 0, + deployments_url: + 'https://api.github.com/repos/mralexgray/app/deployments', + git_commits_url: + 'https://api.github.com/repos/mralexgray/app/git/commits{/sha}', + subscribers_url: + 'https://api.github.com/repos/mralexgray/app/subscribers', + contributors_url: + 'https://api.github.com/repos/mralexgray/app/contributors', + issue_events_url: + 'https://api.github.com/repos/mralexgray/app/issues/events{/number}', + stargazers_count: 0, + subscription_url: + 'https://api.github.com/repos/mralexgray/app/subscription', + collaborators_url: + 'https://api.github.com/repos/mralexgray/app/collaborators{/collaborator}', + issue_comment_url: + 'https://api.github.com/repos/mralexgray/app/issues/comments{/number}', + notifications_url: + 'https://api.github.com/repos/mralexgray/app/notifications{?since,all,participating}', + open_issues_count: 0, + web_commit_signoff_required: false, + }, + ], + trait1: 'new-val', + }, + library: { + name: 'http', + }, + }, + rudderId: 'daf823fb-e8d3-413a-8313-d34cd756f968', + messageId: 'c864b4cd-8f07-4922-b3d0-82ef04c987d3', + timestamp: '2020-02-02T00:23:09.544Z', + receivedAt: '2022-08-18T08:43:13.521+05:30', + request_ip: '[::1]', + anonymousId: 'anon-id-new', + originalTimestamp: '2022-08-18T08:43:15.539+05:30', + }, + PayloadSize: 95943, + LastJobStatus: { + JobID: 0, + JobState: '', + AttemptNum: 0, + ExecTime: '0001-01-01T00:00:00Z', + RetryTime: '0001-01-01T00:00:00Z', + ErrorCode: '', + ErrorResponse: null, + Parameters: null, + WorkspaceId: '', + }, + Parameters: { + record_id: null, + source_id: '2DTlLPQxignYp4ag9sISgGN2uY7', + event_name: '', + event_type: 'identify', + message_id: 'c864b4cd-8f07-4922-b3d0-82ef04c987d3', + received_at: '2022-08-18T08:43:13.521+05:30', + workspaceId: '2DTlBMipxWfJZzZ1SsjELQWvkwd', + transform_at: 'router', + source_job_id: '', + destination_id: '2DTozIMGtBwTGNJtuvdPByFSL2Z', + gateway_job_id: 6, + source_task_id: '', + source_batch_id: '', + source_category: '', + source_job_run_id: '', + source_task_run_id: '', + source_definition_id: '2DTlJaW1jHhM8B27Et2CMTZoxZF', + destination_definition_id: '', + }, + WorkspaceId: '2DTlBMipxWfJZzZ1SsjELQWvkwd', + }, + workerAssignedTime: '2022-08-18T08:43:16.586825+05:30', + }, + destination: { + ID: '2DTozIMGtBwTGNJtuvdPByFSL2Z', + Name: 'Lambda test', + DestinationDefinition: { + ID: '2DTlHvPWOzBUksUQUvggRnalUkj', + Name: 'LAMBDA', + DisplayName: 'AWS Lambda', + Config: { + destConfig: { + defaultConfig: [ + 'region', + 'iamRoleARN', + 'externalID', + 'accessKeyId', + 'accessKey', + 'lambda', + 'enableBatchInput', + 'clientContext', + 'roleBasedAuth', + 'maxBatchSize', + ], + }, + excludeKeys: [], + includeKeys: [], + saveDestinationResponse: true, + secretKeys: ['accessKeyId', 'accessKey', 'iamRoleARN', 'externalID'], + supportedMessageTypes: [ + 'identify', + 'page', + 'screen', + 'track', + 'alias', + 'group', + ], + supportedSourceTypes: [ + 'amp', + 'android', + 'cordova', + 'cloud', + 'flutter', + 'ios', + 'reactnative', + 'unity', + 'warehouse', + 'web', + ], + transformAt: 'router', + transformAtV1: 'router', + }, + ResponseRules: {}, + }, + Config: { + accessKey: '', + accessKeyId: '', + clientContext: '', + enableBatchInput: true, + externalID: '', + iamRoleARN: '', + lambda: 'testFunction', + maxBatchSize: '2', + region: 'us-west-2', + roleBasedAuth: false, + }, + Enabled: true, + Transformations: [], + IsProcessorEnabled: true, + RevisionID: '2DVji2YjKiWRL0Qdx73xg9r8ReQ', + }, + }, + { + message: { + type: 'track', + event: 'Product Purchased new', + sentAt: '2022-08-18T08:43:15.539+05:30', + userId: 'identified user id', + context: { + ip: '14.5.67.21', + library: { + name: 'http', + }, + }, + rudderId: 'daf823fb-e8d3-413a-8313-d34cd756f968', + messageId: '9f8fb785-c720-4381-a009-bf22a13f4ced', + timestamp: '2020-02-02T00:23:09.544Z', + properties: { + data: [ + { + id: 6104546, + url: 'https://api.github.com/repos/mralexgray/-REPONAME', + fork: false, + name: '-REPONAME', + size: 48, + forks: 0, + owner: { + id: 262517, + url: 'https://api.github.com/users/mralexgray', + type: 'User', + login: 'mralexgray', + node_id: 'MDQ6VXNlcjI2MjUxNw==', + html_url: 'https://github.com/mralexgray', + gists_url: 'https://api.github.com/users/mralexgray/gists{/gist_id}', + repos_url: 'https://api.github.com/users/mralexgray/repos', + avatar_url: 'https://avatars.githubusercontent.com/u/262517?v=4', + events_url: 'https://api.github.com/users/mralexgray/events{/privacy}', + site_admin: false, + gravatar_id: '', + starred_url: + 'https://api.github.com/users/mralexgray/starred{/owner}{/repo}', + followers_url: 'https://api.github.com/users/mralexgray/followers', + following_url: + 'https://api.github.com/users/mralexgray/following{/other_user}', + organizations_url: 'https://api.github.com/users/mralexgray/orgs', + subscriptions_url: 'https://api.github.com/users/mralexgray/subscriptions', + received_events_url: + 'https://api.github.com/users/mralexgray/received_events', + }, + topics: [], + git_url: 'git://github.com/mralexgray/-REPONAME.git', + license: null, + node_id: 'MDEwOlJlcG9zaXRvcnk2MTA0NTQ2', + private: false, + ssh_url: 'git@github.com:mralexgray/-REPONAME.git', + svn_url: 'https://github.com/mralexgray/-REPONAME', + archived: false, + disabled: false, + has_wiki: true, + homepage: null, + html_url: 'https://github.com/mralexgray/-REPONAME', + keys_url: 'https://api.github.com/repos/mralexgray/-REPONAME/keys{/key_id}', + language: null, + tags_url: 'https://api.github.com/repos/mralexgray/-REPONAME/tags', + watchers: 0, + blobs_url: + 'https://api.github.com/repos/mralexgray/-REPONAME/git/blobs{/sha}', + clone_url: 'https://github.com/mralexgray/-REPONAME.git', + forks_url: 'https://api.github.com/repos/mralexgray/-REPONAME/forks', + full_name: 'mralexgray/-REPONAME', + has_pages: false, + hooks_url: 'https://api.github.com/repos/mralexgray/-REPONAME/hooks', + pulls_url: 'https://api.github.com/repos/mralexgray/-REPONAME/pulls{/number}', + pushed_at: '2012-10-06T16:37:39Z', + teams_url: 'https://api.github.com/repos/mralexgray/-REPONAME/teams', + trees_url: + 'https://api.github.com/repos/mralexgray/-REPONAME/git/trees{/sha}', + created_at: '2012-10-06T16:37:39Z', + events_url: 'https://api.github.com/repos/mralexgray/-REPONAME/events', + has_issues: true, + issues_url: + 'https://api.github.com/repos/mralexgray/-REPONAME/issues{/number}', + labels_url: 'https://api.github.com/repos/mralexgray/-REPONAME/labels{/name}', + merges_url: 'https://api.github.com/repos/mralexgray/-REPONAME/merges', + mirror_url: null, + updated_at: '2013-01-12T13:39:30Z', + visibility: 'public', + archive_url: + 'https://api.github.com/repos/mralexgray/-REPONAME/{archive_format}{/ref}', + commits_url: + 'https://api.github.com/repos/mralexgray/-REPONAME/commits{/sha}', + compare_url: + 'https://api.github.com/repos/mralexgray/-REPONAME/compare/{base}...{head}', + description: null, + forks_count: 0, + is_template: false, + open_issues: 0, + branches_url: + 'https://api.github.com/repos/mralexgray/-REPONAME/branches{/branch}', + comments_url: + 'https://api.github.com/repos/mralexgray/-REPONAME/comments{/number}', + contents_url: + 'https://api.github.com/repos/mralexgray/-REPONAME/contents/{+path}', + git_refs_url: + 'https://api.github.com/repos/mralexgray/-REPONAME/git/refs{/sha}', + git_tags_url: + 'https://api.github.com/repos/mralexgray/-REPONAME/git/tags{/sha}', + has_projects: true, + releases_url: + 'https://api.github.com/repos/mralexgray/-REPONAME/releases{/id}', + statuses_url: + 'https://api.github.com/repos/mralexgray/-REPONAME/statuses/{sha}', + allow_forking: true, + assignees_url: + 'https://api.github.com/repos/mralexgray/-REPONAME/assignees{/user}', + downloads_url: 'https://api.github.com/repos/mralexgray/-REPONAME/downloads', + has_downloads: true, + languages_url: 'https://api.github.com/repos/mralexgray/-REPONAME/languages', + default_branch: 'master', + milestones_url: + 'https://api.github.com/repos/mralexgray/-REPONAME/milestones{/number}', + stargazers_url: + 'https://api.github.com/repos/mralexgray/-REPONAME/stargazers', + watchers_count: 0, + deployments_url: + 'https://api.github.com/repos/mralexgray/-REPONAME/deployments', + git_commits_url: + 'https://api.github.com/repos/mralexgray/-REPONAME/git/commits{/sha}', + subscribers_url: + 'https://api.github.com/repos/mralexgray/-REPONAME/subscribers', + contributors_url: + 'https://api.github.com/repos/mralexgray/-REPONAME/contributors', + issue_events_url: + 'https://api.github.com/repos/mralexgray/-REPONAME/issues/events{/number}', + stargazers_count: 0, + subscription_url: + 'https://api.github.com/repos/mralexgray/-REPONAME/subscription', + collaborators_url: + 'https://api.github.com/repos/mralexgray/-REPONAME/collaborators{/collaborator}', + issue_comment_url: + 'https://api.github.com/repos/mralexgray/-REPONAME/issues/comments{/number}', + notifications_url: + 'https://api.github.com/repos/mralexgray/-REPONAME/notifications{?since,all,participating}', + open_issues_count: 0, + web_commit_signoff_required: false, + }, + { + id: 104510411, + url: 'https://api.github.com/repos/mralexgray/...', + fork: true, + name: '...', + size: 113, + forks: 0, + owner: { + id: 262517, + url: 'https://api.github.com/users/mralexgray', + type: 'User', + login: 'mralexgray', + node_id: 'MDQ6VXNlcjI2MjUxNw==', + html_url: 'https://github.com/mralexgray', + gists_url: 'https://api.github.com/users/mralexgray/gists{/gist_id}', + repos_url: 'https://api.github.com/users/mralexgray/repos', + avatar_url: 'https://avatars.githubusercontent.com/u/262517?v=4', + events_url: 'https://api.github.com/users/mralexgray/events{/privacy}', + site_admin: false, + gravatar_id: '', + starred_url: + 'https://api.github.com/users/mralexgray/starred{/owner}{/repo}', + followers_url: 'https://api.github.com/users/mralexgray/followers', + following_url: + 'https://api.github.com/users/mralexgray/following{/other_user}', + organizations_url: 'https://api.github.com/users/mralexgray/orgs', + subscriptions_url: 'https://api.github.com/users/mralexgray/subscriptions', + received_events_url: + 'https://api.github.com/users/mralexgray/received_events', + }, + topics: [], + git_url: 'git://github.com/mralexgray/....git', + license: { + key: 'mit', + url: 'https://api.github.com/licenses/mit', + name: 'MIT License', + node_id: 'MDc6TGljZW5zZTEz', + spdx_id: 'MIT', + }, + node_id: 'MDEwOlJlcG9zaXRvcnkxMDQ1MTA0MTE=', + private: false, + ssh_url: 'git@github.com:mralexgray/....git', + svn_url: 'https://github.com/mralexgray/...', + archived: false, + disabled: false, + has_wiki: false, + homepage: 'https://driesvints.com/blog/getting-started-with-dotfiles', + html_url: 'https://github.com/mralexgray/...', + keys_url: 'https://api.github.com/repos/mralexgray/.../keys{/key_id}', + language: 'Shell', + tags_url: 'https://api.github.com/repos/mralexgray/.../tags', + watchers: 0, + blobs_url: 'https://api.github.com/repos/mralexgray/.../git/blobs{/sha}', + clone_url: 'https://github.com/mralexgray/....git', + forks_url: 'https://api.github.com/repos/mralexgray/.../forks', + full_name: 'mralexgray/...', + has_pages: false, + hooks_url: 'https://api.github.com/repos/mralexgray/.../hooks', + pulls_url: 'https://api.github.com/repos/mralexgray/.../pulls{/number}', + pushed_at: '2017-09-15T08:27:32Z', + teams_url: 'https://api.github.com/repos/mralexgray/.../teams', + trees_url: 'https://api.github.com/repos/mralexgray/.../git/trees{/sha}', + created_at: '2017-09-22T19:19:42Z', + events_url: 'https://api.github.com/repos/mralexgray/.../events', + has_issues: false, + issues_url: 'https://api.github.com/repos/mralexgray/.../issues{/number}', + labels_url: 'https://api.github.com/repos/mralexgray/.../labels{/name}', + merges_url: 'https://api.github.com/repos/mralexgray/.../merges', + mirror_url: null, + updated_at: '2017-09-22T19:20:22Z', + visibility: 'public', + archive_url: + 'https://api.github.com/repos/mralexgray/.../{archive_format}{/ref}', + commits_url: 'https://api.github.com/repos/mralexgray/.../commits{/sha}', + compare_url: + 'https://api.github.com/repos/mralexgray/.../compare/{base}...{head}', + description: ':computer: Public repo for my personal dotfiles.', + forks_count: 0, + is_template: false, + open_issues: 0, + branches_url: 'https://api.github.com/repos/mralexgray/.../branches{/branch}', + comments_url: 'https://api.github.com/repos/mralexgray/.../comments{/number}', + contents_url: 'https://api.github.com/repos/mralexgray/.../contents/{+path}', + git_refs_url: 'https://api.github.com/repos/mralexgray/.../git/refs{/sha}', + git_tags_url: 'https://api.github.com/repos/mralexgray/.../git/tags{/sha}', + has_projects: true, + releases_url: 'https://api.github.com/repos/mralexgray/.../releases{/id}', + statuses_url: 'https://api.github.com/repos/mralexgray/.../statuses/{sha}', + allow_forking: true, + assignees_url: 'https://api.github.com/repos/mralexgray/.../assignees{/user}', + downloads_url: 'https://api.github.com/repos/mralexgray/.../downloads', + has_downloads: true, + languages_url: 'https://api.github.com/repos/mralexgray/.../languages', + default_branch: 'master', + milestones_url: + 'https://api.github.com/repos/mralexgray/.../milestones{/number}', + stargazers_url: 'https://api.github.com/repos/mralexgray/.../stargazers', + watchers_count: 0, + deployments_url: 'https://api.github.com/repos/mralexgray/.../deployments', + git_commits_url: + 'https://api.github.com/repos/mralexgray/.../git/commits{/sha}', + subscribers_url: 'https://api.github.com/repos/mralexgray/.../subscribers', + contributors_url: 'https://api.github.com/repos/mralexgray/.../contributors', + issue_events_url: + 'https://api.github.com/repos/mralexgray/.../issues/events{/number}', + stargazers_count: 0, + subscription_url: 'https://api.github.com/repos/mralexgray/.../subscription', + collaborators_url: + 'https://api.github.com/repos/mralexgray/.../collaborators{/collaborator}', + issue_comment_url: + 'https://api.github.com/repos/mralexgray/.../issues/comments{/number}', + notifications_url: + 'https://api.github.com/repos/mralexgray/.../notifications{?since,all,participating}', + open_issues_count: 0, + web_commit_signoff_required: false, + }, + { + id: 58656723, + url: 'https://api.github.com/repos/mralexgray/2200087-Serial-Protocol', + fork: true, + name: '2200087-Serial-Protocol', + size: 41, + forks: 1, + owner: { + id: 262517, + url: 'https://api.github.com/users/mralexgray', + type: 'User', + login: 'mralexgray', + node_id: 'MDQ6VXNlcjI2MjUxNw==', + html_url: 'https://github.com/mralexgray', + gists_url: 'https://api.github.com/users/mralexgray/gists{/gist_id}', + repos_url: 'https://api.github.com/users/mralexgray/repos', + avatar_url: 'https://avatars.githubusercontent.com/u/262517?v=4', + events_url: 'https://api.github.com/users/mralexgray/events{/privacy}', + site_admin: false, + gravatar_id: '', + starred_url: + 'https://api.github.com/users/mralexgray/starred{/owner}{/repo}', + followers_url: 'https://api.github.com/users/mralexgray/followers', + following_url: + 'https://api.github.com/users/mralexgray/following{/other_user}', + organizations_url: 'https://api.github.com/users/mralexgray/orgs', + subscriptions_url: 'https://api.github.com/users/mralexgray/subscriptions', + received_events_url: + 'https://api.github.com/users/mralexgray/received_events', + }, + topics: [], + git_url: 'git://github.com/mralexgray/2200087-Serial-Protocol.git', + license: { + key: 'gpl-2.0', + url: 'https://api.github.com/licenses/gpl-2.0', + name: 'GNU General Public License v2.0', + node_id: 'MDc6TGljZW5zZTg=', + spdx_id: 'GPL-2.0', + }, + node_id: 'MDEwOlJlcG9zaXRvcnk1ODY1NjcyMw==', + private: false, + ssh_url: 'git@github.com:mralexgray/2200087-Serial-Protocol.git', + svn_url: 'https://github.com/mralexgray/2200087-Serial-Protocol', + archived: false, + disabled: false, + has_wiki: true, + homepage: 'http://daviddworken.com', + html_url: 'https://github.com/mralexgray/2200087-Serial-Protocol', + keys_url: + 'https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/keys{/key_id}', + language: 'Python', + tags_url: + 'https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/tags', + watchers: 0, + blobs_url: + 'https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/git/blobs{/sha}', + clone_url: 'https://github.com/mralexgray/2200087-Serial-Protocol.git', + forks_url: + 'https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/forks', + full_name: 'mralexgray/2200087-Serial-Protocol', + has_pages: false, + hooks_url: + 'https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/hooks', + pulls_url: + 'https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/pulls{/number}', + pushed_at: '2016-05-12T16:07:24Z', + teams_url: + 'https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/teams', + trees_url: + 'https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/git/trees{/sha}', + created_at: '2016-05-12T16:05:28Z', + events_url: + 'https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/events', + has_issues: false, + issues_url: + 'https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/issues{/number}', + labels_url: + 'https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/labels{/name}', + merges_url: + 'https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/merges', + mirror_url: null, + updated_at: '2016-05-12T16:05:30Z', + visibility: 'public', + archive_url: + 'https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/{archive_format}{/ref}', + commits_url: + 'https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/commits{/sha}', + compare_url: + 'https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/compare/{base}...{head}', + description: + "A reverse engineered protocol description and accompanying code for Radioshack's 2200087 multimeter", + forks_count: 1, + is_template: false, + open_issues: 0, + branches_url: + 'https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/branches{/branch}', + comments_url: + 'https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/comments{/number}', + contents_url: + 'https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/contents/{+path}', + git_refs_url: + 'https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/git/refs{/sha}', + git_tags_url: + 'https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/git/tags{/sha}', + has_projects: true, + releases_url: + 'https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/releases{/id}', + statuses_url: + 'https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/statuses/{sha}', + allow_forking: true, + assignees_url: + 'https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/assignees{/user}', + downloads_url: + 'https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/downloads', + has_downloads: true, + languages_url: + 'https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/languages', + default_branch: 'master', + milestones_url: + 'https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/milestones{/number}', + stargazers_url: + 'https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/stargazers', + watchers_count: 0, + deployments_url: + 'https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/deployments', + git_commits_url: + 'https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/git/commits{/sha}', + subscribers_url: + 'https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/subscribers', + contributors_url: + 'https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/contributors', + issue_events_url: + 'https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/issues/events{/number}', + stargazers_count: 0, + subscription_url: + 'https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/subscription', + collaborators_url: + 'https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/collaborators{/collaborator}', + issue_comment_url: + 'https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/issues/comments{/number}', + notifications_url: + 'https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/notifications{?since,all,participating}', + open_issues_count: 0, + web_commit_signoff_required: false, + }, + { + id: 13121042, + url: 'https://api.github.com/repos/mralexgray/ace', + fork: true, + name: 'ace', + size: 21080, + forks: 1, + owner: { + id: 262517, + url: 'https://api.github.com/users/mralexgray', + type: 'User', + login: 'mralexgray', + node_id: 'MDQ6VXNlcjI2MjUxNw==', + html_url: 'https://github.com/mralexgray', + gists_url: 'https://api.github.com/users/mralexgray/gists{/gist_id}', + repos_url: 'https://api.github.com/users/mralexgray/repos', + avatar_url: 'https://avatars.githubusercontent.com/u/262517?v=4', + events_url: 'https://api.github.com/users/mralexgray/events{/privacy}', + site_admin: false, + gravatar_id: '', + starred_url: + 'https://api.github.com/users/mralexgray/starred{/owner}{/repo}', + followers_url: 'https://api.github.com/users/mralexgray/followers', + following_url: + 'https://api.github.com/users/mralexgray/following{/other_user}', + organizations_url: 'https://api.github.com/users/mralexgray/orgs', + subscriptions_url: 'https://api.github.com/users/mralexgray/subscriptions', + received_events_url: + 'https://api.github.com/users/mralexgray/received_events', + }, + topics: [], + git_url: 'git://github.com/mralexgray/ace.git', + license: { + key: 'other', + url: null, + name: 'Other', + node_id: 'MDc6TGljZW5zZTA=', + spdx_id: 'NOASSERTION', + }, + node_id: 'MDEwOlJlcG9zaXRvcnkxMzEyMTA0Mg==', + private: false, + ssh_url: 'git@github.com:mralexgray/ace.git', + svn_url: 'https://github.com/mralexgray/ace', + archived: false, + disabled: false, + has_wiki: true, + homepage: 'http://ace.c9.io', + html_url: 'https://github.com/mralexgray/ace', + keys_url: 'https://api.github.com/repos/mralexgray/ace/keys{/key_id}', + language: 'JavaScript', + tags_url: 'https://api.github.com/repos/mralexgray/ace/tags', + watchers: 0, + blobs_url: 'https://api.github.com/repos/mralexgray/ace/git/blobs{/sha}', + clone_url: 'https://github.com/mralexgray/ace.git', + forks_url: 'https://api.github.com/repos/mralexgray/ace/forks', + full_name: 'mralexgray/ace', + has_pages: false, + hooks_url: 'https://api.github.com/repos/mralexgray/ace/hooks', + pulls_url: 'https://api.github.com/repos/mralexgray/ace/pulls{/number}', + pushed_at: '2013-10-26T12:34:48Z', + teams_url: 'https://api.github.com/repos/mralexgray/ace/teams', + trees_url: 'https://api.github.com/repos/mralexgray/ace/git/trees{/sha}', + created_at: '2013-09-26T11:58:10Z', + events_url: 'https://api.github.com/repos/mralexgray/ace/events', + has_issues: false, + issues_url: 'https://api.github.com/repos/mralexgray/ace/issues{/number}', + labels_url: 'https://api.github.com/repos/mralexgray/ace/labels{/name}', + merges_url: 'https://api.github.com/repos/mralexgray/ace/merges', + mirror_url: null, + updated_at: '2013-10-26T12:34:49Z', + visibility: 'public', + archive_url: + 'https://api.github.com/repos/mralexgray/ace/{archive_format}{/ref}', + commits_url: 'https://api.github.com/repos/mralexgray/ace/commits{/sha}', + compare_url: + 'https://api.github.com/repos/mralexgray/ace/compare/{base}...{head}', + description: 'Ace (Ajax.org Cloud9 Editor)', + forks_count: 1, + is_template: false, + open_issues: 0, + branches_url: 'https://api.github.com/repos/mralexgray/ace/branches{/branch}', + comments_url: 'https://api.github.com/repos/mralexgray/ace/comments{/number}', + contents_url: 'https://api.github.com/repos/mralexgray/ace/contents/{+path}', + git_refs_url: 'https://api.github.com/repos/mralexgray/ace/git/refs{/sha}', + git_tags_url: 'https://api.github.com/repos/mralexgray/ace/git/tags{/sha}', + has_projects: true, + releases_url: 'https://api.github.com/repos/mralexgray/ace/releases{/id}', + statuses_url: 'https://api.github.com/repos/mralexgray/ace/statuses/{sha}', + allow_forking: true, + assignees_url: 'https://api.github.com/repos/mralexgray/ace/assignees{/user}', + downloads_url: 'https://api.github.com/repos/mralexgray/ace/downloads', + has_downloads: true, + languages_url: 'https://api.github.com/repos/mralexgray/ace/languages', + default_branch: 'master', + milestones_url: + 'https://api.github.com/repos/mralexgray/ace/milestones{/number}', + stargazers_url: 'https://api.github.com/repos/mralexgray/ace/stargazers', + watchers_count: 0, + deployments_url: 'https://api.github.com/repos/mralexgray/ace/deployments', + git_commits_url: + 'https://api.github.com/repos/mralexgray/ace/git/commits{/sha}', + subscribers_url: 'https://api.github.com/repos/mralexgray/ace/subscribers', + contributors_url: 'https://api.github.com/repos/mralexgray/ace/contributors', + issue_events_url: + 'https://api.github.com/repos/mralexgray/ace/issues/events{/number}', + stargazers_count: 0, + subscription_url: 'https://api.github.com/repos/mralexgray/ace/subscription', + collaborators_url: + 'https://api.github.com/repos/mralexgray/ace/collaborators{/collaborator}', + issue_comment_url: + 'https://api.github.com/repos/mralexgray/ace/issues/comments{/number}', + notifications_url: + 'https://api.github.com/repos/mralexgray/ace/notifications{?since,all,participating}', + open_issues_count: 0, + web_commit_signoff_required: false, + }, + { + id: 10791045, + url: 'https://api.github.com/repos/mralexgray/ACEView', + fork: true, + name: 'ACEView', + size: 1733, + forks: 1, + owner: { + id: 262517, + url: 'https://api.github.com/users/mralexgray', + type: 'User', + login: 'mralexgray', + node_id: 'MDQ6VXNlcjI2MjUxNw==', + html_url: 'https://github.com/mralexgray', + gists_url: 'https://api.github.com/users/mralexgray/gists{/gist_id}', + repos_url: 'https://api.github.com/users/mralexgray/repos', + avatar_url: 'https://avatars.githubusercontent.com/u/262517?v=4', + events_url: 'https://api.github.com/users/mralexgray/events{/privacy}', + site_admin: false, + gravatar_id: '', + starred_url: + 'https://api.github.com/users/mralexgray/starred{/owner}{/repo}', + followers_url: 'https://api.github.com/users/mralexgray/followers', + following_url: + 'https://api.github.com/users/mralexgray/following{/other_user}', + organizations_url: 'https://api.github.com/users/mralexgray/orgs', + subscriptions_url: 'https://api.github.com/users/mralexgray/subscriptions', + received_events_url: + 'https://api.github.com/users/mralexgray/received_events', + }, + topics: [], + git_url: 'git://github.com/mralexgray/ACEView.git', + license: { + key: 'other', + url: null, + name: 'Other', + node_id: 'MDc6TGljZW5zZTA=', + spdx_id: 'NOASSERTION', + }, + node_id: 'MDEwOlJlcG9zaXRvcnkxMDc5MTA0NQ==', + private: false, + ssh_url: 'git@github.com:mralexgray/ACEView.git', + svn_url: 'https://github.com/mralexgray/ACEView', + archived: false, + disabled: false, + has_wiki: true, + homepage: null, + html_url: 'https://github.com/mralexgray/ACEView', + keys_url: 'https://api.github.com/repos/mralexgray/ACEView/keys{/key_id}', + language: 'Objective-C', + tags_url: 'https://api.github.com/repos/mralexgray/ACEView/tags', + watchers: 0, + blobs_url: 'https://api.github.com/repos/mralexgray/ACEView/git/blobs{/sha}', + clone_url: 'https://github.com/mralexgray/ACEView.git', + forks_url: 'https://api.github.com/repos/mralexgray/ACEView/forks', + full_name: 'mralexgray/ACEView', + has_pages: false, + hooks_url: 'https://api.github.com/repos/mralexgray/ACEView/hooks', + pulls_url: 'https://api.github.com/repos/mralexgray/ACEView/pulls{/number}', + pushed_at: '2014-05-09T01:36:23Z', + teams_url: 'https://api.github.com/repos/mralexgray/ACEView/teams', + trees_url: 'https://api.github.com/repos/mralexgray/ACEView/git/trees{/sha}', + created_at: '2013-06-19T12:15:04Z', + events_url: 'https://api.github.com/repos/mralexgray/ACEView/events', + has_issues: false, + issues_url: 'https://api.github.com/repos/mralexgray/ACEView/issues{/number}', + labels_url: 'https://api.github.com/repos/mralexgray/ACEView/labels{/name}', + merges_url: 'https://api.github.com/repos/mralexgray/ACEView/merges', + mirror_url: null, + updated_at: '2015-11-24T01:14:10Z', + visibility: 'public', + archive_url: + 'https://api.github.com/repos/mralexgray/ACEView/{archive_format}{/ref}', + commits_url: 'https://api.github.com/repos/mralexgray/ACEView/commits{/sha}', + compare_url: + 'https://api.github.com/repos/mralexgray/ACEView/compare/{base}...{head}', + description: 'Use the wonderful ACE editor in your Cocoa applications', + forks_count: 1, + is_template: false, + open_issues: 0, + branches_url: + 'https://api.github.com/repos/mralexgray/ACEView/branches{/branch}', + comments_url: + 'https://api.github.com/repos/mralexgray/ACEView/comments{/number}', + contents_url: + 'https://api.github.com/repos/mralexgray/ACEView/contents/{+path}', + git_refs_url: + 'https://api.github.com/repos/mralexgray/ACEView/git/refs{/sha}', + git_tags_url: + 'https://api.github.com/repos/mralexgray/ACEView/git/tags{/sha}', + has_projects: true, + releases_url: 'https://api.github.com/repos/mralexgray/ACEView/releases{/id}', + statuses_url: + 'https://api.github.com/repos/mralexgray/ACEView/statuses/{sha}', + allow_forking: true, + assignees_url: + 'https://api.github.com/repos/mralexgray/ACEView/assignees{/user}', + downloads_url: 'https://api.github.com/repos/mralexgray/ACEView/downloads', + has_downloads: true, + languages_url: 'https://api.github.com/repos/mralexgray/ACEView/languages', + default_branch: 'master', + milestones_url: + 'https://api.github.com/repos/mralexgray/ACEView/milestones{/number}', + stargazers_url: 'https://api.github.com/repos/mralexgray/ACEView/stargazers', + watchers_count: 0, + deployments_url: + 'https://api.github.com/repos/mralexgray/ACEView/deployments', + git_commits_url: + 'https://api.github.com/repos/mralexgray/ACEView/git/commits{/sha}', + subscribers_url: + 'https://api.github.com/repos/mralexgray/ACEView/subscribers', + contributors_url: + 'https://api.github.com/repos/mralexgray/ACEView/contributors', + issue_events_url: + 'https://api.github.com/repos/mralexgray/ACEView/issues/events{/number}', + stargazers_count: 0, + subscription_url: + 'https://api.github.com/repos/mralexgray/ACEView/subscription', + collaborators_url: + 'https://api.github.com/repos/mralexgray/ACEView/collaborators{/collaborator}', + issue_comment_url: + 'https://api.github.com/repos/mralexgray/ACEView/issues/comments{/number}', + notifications_url: + 'https://api.github.com/repos/mralexgray/ACEView/notifications{?since,all,participating}', + open_issues_count: 0, + web_commit_signoff_required: false, + }, + { + id: 13623648, + url: 'https://api.github.com/repos/mralexgray/ActiveLog', + fork: true, + name: 'ActiveLog', + size: 60, + forks: 0, + owner: { + id: 262517, + url: 'https://api.github.com/users/mralexgray', + type: 'User', + login: 'mralexgray', + node_id: 'MDQ6VXNlcjI2MjUxNw==', + html_url: 'https://github.com/mralexgray', + gists_url: 'https://api.github.com/users/mralexgray/gists{/gist_id}', + repos_url: 'https://api.github.com/users/mralexgray/repos', + avatar_url: 'https://avatars.githubusercontent.com/u/262517?v=4', + events_url: 'https://api.github.com/users/mralexgray/events{/privacy}', + site_admin: false, + gravatar_id: '', + starred_url: + 'https://api.github.com/users/mralexgray/starred{/owner}{/repo}', + followers_url: 'https://api.github.com/users/mralexgray/followers', + following_url: + 'https://api.github.com/users/mralexgray/following{/other_user}', + organizations_url: 'https://api.github.com/users/mralexgray/orgs', + subscriptions_url: 'https://api.github.com/users/mralexgray/subscriptions', + received_events_url: + 'https://api.github.com/users/mralexgray/received_events', + }, + topics: [], + git_url: 'git://github.com/mralexgray/ActiveLog.git', + license: null, + node_id: 'MDEwOlJlcG9zaXRvcnkxMzYyMzY0OA==', + private: false, + ssh_url: 'git@github.com:mralexgray/ActiveLog.git', + svn_url: 'https://github.com/mralexgray/ActiveLog', + archived: false, + disabled: false, + has_wiki: true, + homepage: 'http://deepitpro.com/en/articles/ActiveLog/info/', + html_url: 'https://github.com/mralexgray/ActiveLog', + keys_url: 'https://api.github.com/repos/mralexgray/ActiveLog/keys{/key_id}', + language: 'Objective-C', + tags_url: 'https://api.github.com/repos/mralexgray/ActiveLog/tags', + watchers: 0, + blobs_url: + 'https://api.github.com/repos/mralexgray/ActiveLog/git/blobs{/sha}', + clone_url: 'https://github.com/mralexgray/ActiveLog.git', + forks_url: 'https://api.github.com/repos/mralexgray/ActiveLog/forks', + full_name: 'mralexgray/ActiveLog', + has_pages: false, + hooks_url: 'https://api.github.com/repos/mralexgray/ActiveLog/hooks', + pulls_url: 'https://api.github.com/repos/mralexgray/ActiveLog/pulls{/number}', + pushed_at: '2011-07-03T06:28:59Z', + teams_url: 'https://api.github.com/repos/mralexgray/ActiveLog/teams', + trees_url: + 'https://api.github.com/repos/mralexgray/ActiveLog/git/trees{/sha}', + created_at: '2013-10-16T15:52:37Z', + events_url: 'https://api.github.com/repos/mralexgray/ActiveLog/events', + has_issues: false, + issues_url: + 'https://api.github.com/repos/mralexgray/ActiveLog/issues{/number}', + labels_url: 'https://api.github.com/repos/mralexgray/ActiveLog/labels{/name}', + merges_url: 'https://api.github.com/repos/mralexgray/ActiveLog/merges', + mirror_url: null, + updated_at: '2013-10-16T15:52:37Z', + visibility: 'public', + archive_url: + 'https://api.github.com/repos/mralexgray/ActiveLog/{archive_format}{/ref}', + commits_url: + 'https://api.github.com/repos/mralexgray/ActiveLog/commits{/sha}', + compare_url: + 'https://api.github.com/repos/mralexgray/ActiveLog/compare/{base}...{head}', + description: 'Shut up all logs with active filter.', + forks_count: 0, + is_template: false, + open_issues: 0, + branches_url: + 'https://api.github.com/repos/mralexgray/ActiveLog/branches{/branch}', + comments_url: + 'https://api.github.com/repos/mralexgray/ActiveLog/comments{/number}', + contents_url: + 'https://api.github.com/repos/mralexgray/ActiveLog/contents/{+path}', + git_refs_url: + 'https://api.github.com/repos/mralexgray/ActiveLog/git/refs{/sha}', + git_tags_url: + 'https://api.github.com/repos/mralexgray/ActiveLog/git/tags{/sha}', + has_projects: true, + releases_url: + 'https://api.github.com/repos/mralexgray/ActiveLog/releases{/id}', + statuses_url: + 'https://api.github.com/repos/mralexgray/ActiveLog/statuses/{sha}', + allow_forking: true, + assignees_url: + 'https://api.github.com/repos/mralexgray/ActiveLog/assignees{/user}', + downloads_url: 'https://api.github.com/repos/mralexgray/ActiveLog/downloads', + has_downloads: true, + languages_url: 'https://api.github.com/repos/mralexgray/ActiveLog/languages', + default_branch: 'master', + milestones_url: + 'https://api.github.com/repos/mralexgray/ActiveLog/milestones{/number}', + stargazers_url: + 'https://api.github.com/repos/mralexgray/ActiveLog/stargazers', + watchers_count: 0, + deployments_url: + 'https://api.github.com/repos/mralexgray/ActiveLog/deployments', + git_commits_url: + 'https://api.github.com/repos/mralexgray/ActiveLog/git/commits{/sha}', + subscribers_url: + 'https://api.github.com/repos/mralexgray/ActiveLog/subscribers', + contributors_url: + 'https://api.github.com/repos/mralexgray/ActiveLog/contributors', + issue_events_url: + 'https://api.github.com/repos/mralexgray/ActiveLog/issues/events{/number}', + stargazers_count: 0, + subscription_url: + 'https://api.github.com/repos/mralexgray/ActiveLog/subscription', + collaborators_url: + 'https://api.github.com/repos/mralexgray/ActiveLog/collaborators{/collaborator}', + issue_comment_url: + 'https://api.github.com/repos/mralexgray/ActiveLog/issues/comments{/number}', + notifications_url: + 'https://api.github.com/repos/mralexgray/ActiveLog/notifications{?since,all,participating}', + open_issues_count: 0, + web_commit_signoff_required: false, + }, + { + id: 9716210, + url: 'https://api.github.com/repos/mralexgray/adium', + fork: false, + name: 'adium', + size: 277719, + forks: 37, + owner: { + id: 262517, + url: 'https://api.github.com/users/mralexgray', + type: 'User', + login: 'mralexgray', + node_id: 'MDQ6VXNlcjI2MjUxNw==', + html_url: 'https://github.com/mralexgray', + gists_url: 'https://api.github.com/users/mralexgray/gists{/gist_id}', + repos_url: 'https://api.github.com/users/mralexgray/repos', + avatar_url: 'https://avatars.githubusercontent.com/u/262517?v=4', + events_url: 'https://api.github.com/users/mralexgray/events{/privacy}', + site_admin: false, + gravatar_id: '', + starred_url: + 'https://api.github.com/users/mralexgray/starred{/owner}{/repo}', + followers_url: 'https://api.github.com/users/mralexgray/followers', + following_url: + 'https://api.github.com/users/mralexgray/following{/other_user}', + organizations_url: 'https://api.github.com/users/mralexgray/orgs', + subscriptions_url: 'https://api.github.com/users/mralexgray/subscriptions', + received_events_url: + 'https://api.github.com/users/mralexgray/received_events', + }, + topics: [], + git_url: 'git://github.com/mralexgray/adium.git', + license: { + key: 'other', + url: null, + name: 'Other', + node_id: 'MDc6TGljZW5zZTA=', + spdx_id: 'NOASSERTION', + }, + node_id: 'MDEwOlJlcG9zaXRvcnk5NzE2MjEw', + private: false, + ssh_url: 'git@github.com:mralexgray/adium.git', + svn_url: 'https://github.com/mralexgray/adium', + archived: false, + disabled: false, + has_wiki: false, + homepage: null, + html_url: 'https://github.com/mralexgray/adium', + keys_url: 'https://api.github.com/repos/mralexgray/adium/keys{/key_id}', + language: 'Objective-C', + tags_url: 'https://api.github.com/repos/mralexgray/adium/tags', + watchers: 0, + blobs_url: 'https://api.github.com/repos/mralexgray/adium/git/blobs{/sha}', + clone_url: 'https://github.com/mralexgray/adium.git', + forks_url: 'https://api.github.com/repos/mralexgray/adium/forks', + full_name: 'mralexgray/adium', + has_pages: false, + hooks_url: 'https://api.github.com/repos/mralexgray/adium/hooks', + pulls_url: 'https://api.github.com/repos/mralexgray/adium/pulls{/number}', + pushed_at: '2013-04-26T16:43:53Z', + teams_url: 'https://api.github.com/repos/mralexgray/adium/teams', + trees_url: 'https://api.github.com/repos/mralexgray/adium/git/trees{/sha}', + created_at: '2013-04-27T14:59:33Z', + events_url: 'https://api.github.com/repos/mralexgray/adium/events', + has_issues: false, + issues_url: 'https://api.github.com/repos/mralexgray/adium/issues{/number}', + labels_url: 'https://api.github.com/repos/mralexgray/adium/labels{/name}', + merges_url: 'https://api.github.com/repos/mralexgray/adium/merges', + mirror_url: null, + updated_at: '2019-12-11T06:51:45Z', + visibility: 'public', + archive_url: + 'https://api.github.com/repos/mralexgray/adium/{archive_format}{/ref}', + commits_url: 'https://api.github.com/repos/mralexgray/adium/commits{/sha}', + compare_url: + 'https://api.github.com/repos/mralexgray/adium/compare/{base}...{head}', + description: 'Official mirror of hg.adium.im', + forks_count: 37, + is_template: false, + open_issues: 0, + branches_url: + 'https://api.github.com/repos/mralexgray/adium/branches{/branch}', + comments_url: + 'https://api.github.com/repos/mralexgray/adium/comments{/number}', + contents_url: + 'https://api.github.com/repos/mralexgray/adium/contents/{+path}', + git_refs_url: 'https://api.github.com/repos/mralexgray/adium/git/refs{/sha}', + git_tags_url: 'https://api.github.com/repos/mralexgray/adium/git/tags{/sha}', + has_projects: true, + releases_url: 'https://api.github.com/repos/mralexgray/adium/releases{/id}', + statuses_url: 'https://api.github.com/repos/mralexgray/adium/statuses/{sha}', + allow_forking: true, + assignees_url: + 'https://api.github.com/repos/mralexgray/adium/assignees{/user}', + downloads_url: 'https://api.github.com/repos/mralexgray/adium/downloads', + has_downloads: true, + languages_url: 'https://api.github.com/repos/mralexgray/adium/languages', + default_branch: 'master', + milestones_url: + 'https://api.github.com/repos/mralexgray/adium/milestones{/number}', + stargazers_url: 'https://api.github.com/repos/mralexgray/adium/stargazers', + watchers_count: 0, + deployments_url: 'https://api.github.com/repos/mralexgray/adium/deployments', + git_commits_url: + 'https://api.github.com/repos/mralexgray/adium/git/commits{/sha}', + subscribers_url: 'https://api.github.com/repos/mralexgray/adium/subscribers', + contributors_url: + 'https://api.github.com/repos/mralexgray/adium/contributors', + issue_events_url: + 'https://api.github.com/repos/mralexgray/adium/issues/events{/number}', + stargazers_count: 0, + subscription_url: + 'https://api.github.com/repos/mralexgray/adium/subscription', + collaborators_url: + 'https://api.github.com/repos/mralexgray/adium/collaborators{/collaborator}', + issue_comment_url: + 'https://api.github.com/repos/mralexgray/adium/issues/comments{/number}', + notifications_url: + 'https://api.github.com/repos/mralexgray/adium/notifications{?since,all,participating}', + open_issues_count: 0, + web_commit_signoff_required: false, + }, + { + id: 12752329, + url: 'https://api.github.com/repos/mralexgray/ADLivelyTableView', + fork: true, + name: 'ADLivelyTableView', + size: 73, + forks: 0, + owner: { + id: 262517, + url: 'https://api.github.com/users/mralexgray', + type: 'User', + login: 'mralexgray', + node_id: 'MDQ6VXNlcjI2MjUxNw==', + html_url: 'https://github.com/mralexgray', + gists_url: 'https://api.github.com/users/mralexgray/gists{/gist_id}', + repos_url: 'https://api.github.com/users/mralexgray/repos', + avatar_url: 'https://avatars.githubusercontent.com/u/262517?v=4', + events_url: 'https://api.github.com/users/mralexgray/events{/privacy}', + site_admin: false, + gravatar_id: '', + starred_url: + 'https://api.github.com/users/mralexgray/starred{/owner}{/repo}', + followers_url: 'https://api.github.com/users/mralexgray/followers', + following_url: + 'https://api.github.com/users/mralexgray/following{/other_user}', + organizations_url: 'https://api.github.com/users/mralexgray/orgs', + subscriptions_url: 'https://api.github.com/users/mralexgray/subscriptions', + received_events_url: + 'https://api.github.com/users/mralexgray/received_events', + }, + topics: [], + git_url: 'git://github.com/mralexgray/ADLivelyTableView.git', + license: { + key: 'other', + url: null, + name: 'Other', + node_id: 'MDc6TGljZW5zZTA=', + spdx_id: 'NOASSERTION', + }, + node_id: 'MDEwOlJlcG9zaXRvcnkxMjc1MjMyOQ==', + private: false, + ssh_url: 'git@github.com:mralexgray/ADLivelyTableView.git', + svn_url: 'https://github.com/mralexgray/ADLivelyTableView', + archived: false, + disabled: false, + has_wiki: true, + homepage: 'http://applidium.com/en/news/lively_uitableview/', + html_url: 'https://github.com/mralexgray/ADLivelyTableView', + keys_url: + 'https://api.github.com/repos/mralexgray/ADLivelyTableView/keys{/key_id}', + language: 'Objective-C', + tags_url: 'https://api.github.com/repos/mralexgray/ADLivelyTableView/tags', + watchers: 0, + blobs_url: + 'https://api.github.com/repos/mralexgray/ADLivelyTableView/git/blobs{/sha}', + clone_url: 'https://github.com/mralexgray/ADLivelyTableView.git', + forks_url: 'https://api.github.com/repos/mralexgray/ADLivelyTableView/forks', + full_name: 'mralexgray/ADLivelyTableView', + has_pages: false, + hooks_url: 'https://api.github.com/repos/mralexgray/ADLivelyTableView/hooks', + pulls_url: + 'https://api.github.com/repos/mralexgray/ADLivelyTableView/pulls{/number}', + pushed_at: '2012-05-10T10:40:15Z', + teams_url: 'https://api.github.com/repos/mralexgray/ADLivelyTableView/teams', + trees_url: + 'https://api.github.com/repos/mralexgray/ADLivelyTableView/git/trees{/sha}', + created_at: '2013-09-11T09:18:01Z', + events_url: + 'https://api.github.com/repos/mralexgray/ADLivelyTableView/events', + has_issues: false, + issues_url: + 'https://api.github.com/repos/mralexgray/ADLivelyTableView/issues{/number}', + labels_url: + 'https://api.github.com/repos/mralexgray/ADLivelyTableView/labels{/name}', + merges_url: + 'https://api.github.com/repos/mralexgray/ADLivelyTableView/merges', + mirror_url: null, + updated_at: '2013-09-11T09:18:03Z', + visibility: 'public', + archive_url: + 'https://api.github.com/repos/mralexgray/ADLivelyTableView/{archive_format}{/ref}', + commits_url: + 'https://api.github.com/repos/mralexgray/ADLivelyTableView/commits{/sha}', + compare_url: + 'https://api.github.com/repos/mralexgray/ADLivelyTableView/compare/{base}...{head}', + description: 'Lively UITableView', + forks_count: 0, + is_template: false, + open_issues: 0, + branches_url: + 'https://api.github.com/repos/mralexgray/ADLivelyTableView/branches{/branch}', + comments_url: + 'https://api.github.com/repos/mralexgray/ADLivelyTableView/comments{/number}', + contents_url: + 'https://api.github.com/repos/mralexgray/ADLivelyTableView/contents/{+path}', + git_refs_url: + 'https://api.github.com/repos/mralexgray/ADLivelyTableView/git/refs{/sha}', + git_tags_url: + 'https://api.github.com/repos/mralexgray/ADLivelyTableView/git/tags{/sha}', + has_projects: true, + releases_url: + 'https://api.github.com/repos/mralexgray/ADLivelyTableView/releases{/id}', + statuses_url: + 'https://api.github.com/repos/mralexgray/ADLivelyTableView/statuses/{sha}', + allow_forking: true, + assignees_url: + 'https://api.github.com/repos/mralexgray/ADLivelyTableView/assignees{/user}', + downloads_url: + 'https://api.github.com/repos/mralexgray/ADLivelyTableView/downloads', + has_downloads: true, + languages_url: + 'https://api.github.com/repos/mralexgray/ADLivelyTableView/languages', + default_branch: 'master', + milestones_url: + 'https://api.github.com/repos/mralexgray/ADLivelyTableView/milestones{/number}', + stargazers_url: + 'https://api.github.com/repos/mralexgray/ADLivelyTableView/stargazers', + watchers_count: 0, + deployments_url: + 'https://api.github.com/repos/mralexgray/ADLivelyTableView/deployments', + git_commits_url: + 'https://api.github.com/repos/mralexgray/ADLivelyTableView/git/commits{/sha}', + subscribers_url: + 'https://api.github.com/repos/mralexgray/ADLivelyTableView/subscribers', + contributors_url: + 'https://api.github.com/repos/mralexgray/ADLivelyTableView/contributors', + issue_events_url: + 'https://api.github.com/repos/mralexgray/ADLivelyTableView/issues/events{/number}', + stargazers_count: 0, + subscription_url: + 'https://api.github.com/repos/mralexgray/ADLivelyTableView/subscription', + collaborators_url: + 'https://api.github.com/repos/mralexgray/ADLivelyTableView/collaborators{/collaborator}', + issue_comment_url: + 'https://api.github.com/repos/mralexgray/ADLivelyTableView/issues/comments{/number}', + notifications_url: + 'https://api.github.com/repos/mralexgray/ADLivelyTableView/notifications{?since,all,participating}', + open_issues_count: 0, + web_commit_signoff_required: false, + }, + { + id: 5697379, + url: 'https://api.github.com/repos/mralexgray/AFIncrementalStore', + fork: true, + name: 'AFIncrementalStore', + size: 139, + forks: 0, + owner: { + id: 262517, + url: 'https://api.github.com/users/mralexgray', + type: 'User', + login: 'mralexgray', + node_id: 'MDQ6VXNlcjI2MjUxNw==', + html_url: 'https://github.com/mralexgray', + gists_url: 'https://api.github.com/users/mralexgray/gists{/gist_id}', + repos_url: 'https://api.github.com/users/mralexgray/repos', + avatar_url: 'https://avatars.githubusercontent.com/u/262517?v=4', + events_url: 'https://api.github.com/users/mralexgray/events{/privacy}', + site_admin: false, + gravatar_id: '', + starred_url: + 'https://api.github.com/users/mralexgray/starred{/owner}{/repo}', + followers_url: 'https://api.github.com/users/mralexgray/followers', + following_url: + 'https://api.github.com/users/mralexgray/following{/other_user}', + organizations_url: 'https://api.github.com/users/mralexgray/orgs', + subscriptions_url: 'https://api.github.com/users/mralexgray/subscriptions', + received_events_url: + 'https://api.github.com/users/mralexgray/received_events', + }, + topics: [], + git_url: 'git://github.com/mralexgray/AFIncrementalStore.git', + license: { + key: 'mit', + url: 'https://api.github.com/licenses/mit', + name: 'MIT License', + node_id: 'MDc6TGljZW5zZTEz', + spdx_id: 'MIT', + }, + node_id: 'MDEwOlJlcG9zaXRvcnk1Njk3Mzc5', + private: false, + ssh_url: 'git@github.com:mralexgray/AFIncrementalStore.git', + svn_url: 'https://github.com/mralexgray/AFIncrementalStore', + archived: false, + disabled: false, + has_wiki: true, + homepage: null, + html_url: 'https://github.com/mralexgray/AFIncrementalStore', + keys_url: + 'https://api.github.com/repos/mralexgray/AFIncrementalStore/keys{/key_id}', + language: 'Objective-C', + tags_url: 'https://api.github.com/repos/mralexgray/AFIncrementalStore/tags', + watchers: 0, + blobs_url: + 'https://api.github.com/repos/mralexgray/AFIncrementalStore/git/blobs{/sha}', + clone_url: 'https://github.com/mralexgray/AFIncrementalStore.git', + forks_url: 'https://api.github.com/repos/mralexgray/AFIncrementalStore/forks', + full_name: 'mralexgray/AFIncrementalStore', + has_pages: false, + hooks_url: 'https://api.github.com/repos/mralexgray/AFIncrementalStore/hooks', + pulls_url: + 'https://api.github.com/repos/mralexgray/AFIncrementalStore/pulls{/number}', + pushed_at: '2012-09-01T22:46:25Z', + teams_url: 'https://api.github.com/repos/mralexgray/AFIncrementalStore/teams', + trees_url: + 'https://api.github.com/repos/mralexgray/AFIncrementalStore/git/trees{/sha}', + created_at: '2012-09-06T04:20:33Z', + events_url: + 'https://api.github.com/repos/mralexgray/AFIncrementalStore/events', + has_issues: false, + issues_url: + 'https://api.github.com/repos/mralexgray/AFIncrementalStore/issues{/number}', + labels_url: + 'https://api.github.com/repos/mralexgray/AFIncrementalStore/labels{/name}', + merges_url: + 'https://api.github.com/repos/mralexgray/AFIncrementalStore/merges', + mirror_url: null, + updated_at: '2013-01-12T03:15:29Z', + visibility: 'public', + archive_url: + 'https://api.github.com/repos/mralexgray/AFIncrementalStore/{archive_format}{/ref}', + commits_url: + 'https://api.github.com/repos/mralexgray/AFIncrementalStore/commits{/sha}', + compare_url: + 'https://api.github.com/repos/mralexgray/AFIncrementalStore/compare/{base}...{head}', + description: 'Core Data Persistence with AFNetworking, Done Right', + forks_count: 0, + is_template: false, + open_issues: 0, + branches_url: + 'https://api.github.com/repos/mralexgray/AFIncrementalStore/branches{/branch}', + comments_url: + 'https://api.github.com/repos/mralexgray/AFIncrementalStore/comments{/number}', + contents_url: + 'https://api.github.com/repos/mralexgray/AFIncrementalStore/contents/{+path}', + git_refs_url: + 'https://api.github.com/repos/mralexgray/AFIncrementalStore/git/refs{/sha}', + git_tags_url: + 'https://api.github.com/repos/mralexgray/AFIncrementalStore/git/tags{/sha}', + has_projects: true, + releases_url: + 'https://api.github.com/repos/mralexgray/AFIncrementalStore/releases{/id}', + statuses_url: + 'https://api.github.com/repos/mralexgray/AFIncrementalStore/statuses/{sha}', + allow_forking: true, + assignees_url: + 'https://api.github.com/repos/mralexgray/AFIncrementalStore/assignees{/user}', + downloads_url: + 'https://api.github.com/repos/mralexgray/AFIncrementalStore/downloads', + has_downloads: true, + languages_url: + 'https://api.github.com/repos/mralexgray/AFIncrementalStore/languages', + default_branch: 'master', + milestones_url: + 'https://api.github.com/repos/mralexgray/AFIncrementalStore/milestones{/number}', + stargazers_url: + 'https://api.github.com/repos/mralexgray/AFIncrementalStore/stargazers', + watchers_count: 0, + deployments_url: + 'https://api.github.com/repos/mralexgray/AFIncrementalStore/deployments', + git_commits_url: + 'https://api.github.com/repos/mralexgray/AFIncrementalStore/git/commits{/sha}', + subscribers_url: + 'https://api.github.com/repos/mralexgray/AFIncrementalStore/subscribers', + contributors_url: + 'https://api.github.com/repos/mralexgray/AFIncrementalStore/contributors', + issue_events_url: + 'https://api.github.com/repos/mralexgray/AFIncrementalStore/issues/events{/number}', + stargazers_count: 0, + subscription_url: + 'https://api.github.com/repos/mralexgray/AFIncrementalStore/subscription', + collaborators_url: + 'https://api.github.com/repos/mralexgray/AFIncrementalStore/collaborators{/collaborator}', + issue_comment_url: + 'https://api.github.com/repos/mralexgray/AFIncrementalStore/issues/comments{/number}', + notifications_url: + 'https://api.github.com/repos/mralexgray/AFIncrementalStore/notifications{?since,all,participating}', + open_issues_count: 0, + web_commit_signoff_required: false, + }, + { + id: 6969621, + url: 'https://api.github.com/repos/mralexgray/AFNetworking', + fork: true, + name: 'AFNetworking', + size: 4341, + forks: 0, + owner: { + id: 262517, + url: 'https://api.github.com/users/mralexgray', + type: 'User', + login: 'mralexgray', + node_id: 'MDQ6VXNlcjI2MjUxNw==', + html_url: 'https://github.com/mralexgray', + gists_url: 'https://api.github.com/users/mralexgray/gists{/gist_id}', + repos_url: 'https://api.github.com/users/mralexgray/repos', + avatar_url: 'https://avatars.githubusercontent.com/u/262517?v=4', + events_url: 'https://api.github.com/users/mralexgray/events{/privacy}', + site_admin: false, + gravatar_id: '', + starred_url: + 'https://api.github.com/users/mralexgray/starred{/owner}{/repo}', + followers_url: 'https://api.github.com/users/mralexgray/followers', + following_url: + 'https://api.github.com/users/mralexgray/following{/other_user}', + organizations_url: 'https://api.github.com/users/mralexgray/orgs', + subscriptions_url: 'https://api.github.com/users/mralexgray/subscriptions', + received_events_url: + 'https://api.github.com/users/mralexgray/received_events', + }, + topics: [], + git_url: 'git://github.com/mralexgray/AFNetworking.git', + license: { + key: 'mit', + url: 'https://api.github.com/licenses/mit', + name: 'MIT License', + node_id: 'MDc6TGljZW5zZTEz', + spdx_id: 'MIT', + }, + node_id: 'MDEwOlJlcG9zaXRvcnk2OTY5NjIx', + private: false, + ssh_url: 'git@github.com:mralexgray/AFNetworking.git', + svn_url: 'https://github.com/mralexgray/AFNetworking', + archived: false, + disabled: false, + has_wiki: true, + homepage: 'http://afnetworking.com', + html_url: 'https://github.com/mralexgray/AFNetworking', + keys_url: + 'https://api.github.com/repos/mralexgray/AFNetworking/keys{/key_id}', + language: 'Objective-C', + tags_url: 'https://api.github.com/repos/mralexgray/AFNetworking/tags', + watchers: 2, + blobs_url: + 'https://api.github.com/repos/mralexgray/AFNetworking/git/blobs{/sha}', + clone_url: 'https://github.com/mralexgray/AFNetworking.git', + forks_url: 'https://api.github.com/repos/mralexgray/AFNetworking/forks', + full_name: 'mralexgray/AFNetworking', + has_pages: false, + hooks_url: 'https://api.github.com/repos/mralexgray/AFNetworking/hooks', + pulls_url: + 'https://api.github.com/repos/mralexgray/AFNetworking/pulls{/number}', + pushed_at: '2014-01-24T07:14:32Z', + teams_url: 'https://api.github.com/repos/mralexgray/AFNetworking/teams', + trees_url: + 'https://api.github.com/repos/mralexgray/AFNetworking/git/trees{/sha}', + created_at: '2012-12-02T17:00:04Z', + events_url: 'https://api.github.com/repos/mralexgray/AFNetworking/events', + has_issues: false, + issues_url: + 'https://api.github.com/repos/mralexgray/AFNetworking/issues{/number}', + labels_url: + 'https://api.github.com/repos/mralexgray/AFNetworking/labels{/name}', + merges_url: 'https://api.github.com/repos/mralexgray/AFNetworking/merges', + mirror_url: null, + updated_at: '2014-01-24T07:14:33Z', + visibility: 'public', + archive_url: + 'https://api.github.com/repos/mralexgray/AFNetworking/{archive_format}{/ref}', + commits_url: + 'https://api.github.com/repos/mralexgray/AFNetworking/commits{/sha}', + compare_url: + 'https://api.github.com/repos/mralexgray/AFNetworking/compare/{base}...{head}', + description: 'A delightful iOS and OS X networking framework', + forks_count: 0, + is_template: false, + open_issues: 0, + branches_url: + 'https://api.github.com/repos/mralexgray/AFNetworking/branches{/branch}', + comments_url: + 'https://api.github.com/repos/mralexgray/AFNetworking/comments{/number}', + contents_url: + 'https://api.github.com/repos/mralexgray/AFNetworking/contents/{+path}', + git_refs_url: + 'https://api.github.com/repos/mralexgray/AFNetworking/git/refs{/sha}', + git_tags_url: + 'https://api.github.com/repos/mralexgray/AFNetworking/git/tags{/sha}', + has_projects: true, + releases_url: + 'https://api.github.com/repos/mralexgray/AFNetworking/releases{/id}', + statuses_url: + 'https://api.github.com/repos/mralexgray/AFNetworking/statuses/{sha}', + allow_forking: true, + assignees_url: + 'https://api.github.com/repos/mralexgray/AFNetworking/assignees{/user}', + downloads_url: + 'https://api.github.com/repos/mralexgray/AFNetworking/downloads', + has_downloads: true, + languages_url: + 'https://api.github.com/repos/mralexgray/AFNetworking/languages', + default_branch: 'master', + milestones_url: + 'https://api.github.com/repos/mralexgray/AFNetworking/milestones{/number}', + stargazers_url: + 'https://api.github.com/repos/mralexgray/AFNetworking/stargazers', + watchers_count: 2, + deployments_url: + 'https://api.github.com/repos/mralexgray/AFNetworking/deployments', + git_commits_url: + 'https://api.github.com/repos/mralexgray/AFNetworking/git/commits{/sha}', + subscribers_url: + 'https://api.github.com/repos/mralexgray/AFNetworking/subscribers', + contributors_url: + 'https://api.github.com/repos/mralexgray/AFNetworking/contributors', + issue_events_url: + 'https://api.github.com/repos/mralexgray/AFNetworking/issues/events{/number}', + stargazers_count: 2, + subscription_url: + 'https://api.github.com/repos/mralexgray/AFNetworking/subscription', + collaborators_url: + 'https://api.github.com/repos/mralexgray/AFNetworking/collaborators{/collaborator}', + issue_comment_url: + 'https://api.github.com/repos/mralexgray/AFNetworking/issues/comments{/number}', + notifications_url: + 'https://api.github.com/repos/mralexgray/AFNetworking/notifications{?since,all,participating}', + open_issues_count: 0, + web_commit_signoff_required: false, + }, + { + id: 9485541, + url: 'https://api.github.com/repos/mralexgray/AGNSSplitView', + fork: true, + name: 'AGNSSplitView', + size: 68, + forks: 0, + owner: { + id: 262517, + url: 'https://api.github.com/users/mralexgray', + type: 'User', + login: 'mralexgray', + node_id: 'MDQ6VXNlcjI2MjUxNw==', + html_url: 'https://github.com/mralexgray', + gists_url: 'https://api.github.com/users/mralexgray/gists{/gist_id}', + repos_url: 'https://api.github.com/users/mralexgray/repos', + avatar_url: 'https://avatars.githubusercontent.com/u/262517?v=4', + events_url: 'https://api.github.com/users/mralexgray/events{/privacy}', + site_admin: false, + gravatar_id: '', + starred_url: + 'https://api.github.com/users/mralexgray/starred{/owner}{/repo}', + followers_url: 'https://api.github.com/users/mralexgray/followers', + following_url: + 'https://api.github.com/users/mralexgray/following{/other_user}', + organizations_url: 'https://api.github.com/users/mralexgray/orgs', + subscriptions_url: 'https://api.github.com/users/mralexgray/subscriptions', + received_events_url: + 'https://api.github.com/users/mralexgray/received_events', + }, + topics: [], + git_url: 'git://github.com/mralexgray/AGNSSplitView.git', + license: null, + node_id: 'MDEwOlJlcG9zaXRvcnk5NDg1NTQx', + private: false, + ssh_url: 'git@github.com:mralexgray/AGNSSplitView.git', + svn_url: 'https://github.com/mralexgray/AGNSSplitView', + archived: false, + disabled: false, + has_wiki: true, + homepage: null, + html_url: 'https://github.com/mralexgray/AGNSSplitView', + keys_url: + 'https://api.github.com/repos/mralexgray/AGNSSplitView/keys{/key_id}', + language: 'Objective-C', + tags_url: 'https://api.github.com/repos/mralexgray/AGNSSplitView/tags', + watchers: 0, + blobs_url: + 'https://api.github.com/repos/mralexgray/AGNSSplitView/git/blobs{/sha}', + clone_url: 'https://github.com/mralexgray/AGNSSplitView.git', + forks_url: 'https://api.github.com/repos/mralexgray/AGNSSplitView/forks', + full_name: 'mralexgray/AGNSSplitView', + has_pages: false, + hooks_url: 'https://api.github.com/repos/mralexgray/AGNSSplitView/hooks', + pulls_url: + 'https://api.github.com/repos/mralexgray/AGNSSplitView/pulls{/number}', + pushed_at: '2013-02-26T00:32:32Z', + teams_url: 'https://api.github.com/repos/mralexgray/AGNSSplitView/teams', + trees_url: + 'https://api.github.com/repos/mralexgray/AGNSSplitView/git/trees{/sha}', + created_at: '2013-04-17T00:10:13Z', + events_url: 'https://api.github.com/repos/mralexgray/AGNSSplitView/events', + has_issues: false, + issues_url: + 'https://api.github.com/repos/mralexgray/AGNSSplitView/issues{/number}', + labels_url: + 'https://api.github.com/repos/mralexgray/AGNSSplitView/labels{/name}', + merges_url: 'https://api.github.com/repos/mralexgray/AGNSSplitView/merges', + mirror_url: null, + updated_at: '2013-04-17T00:10:13Z', + visibility: 'public', + archive_url: + 'https://api.github.com/repos/mralexgray/AGNSSplitView/{archive_format}{/ref}', + commits_url: + 'https://api.github.com/repos/mralexgray/AGNSSplitView/commits{/sha}', + compare_url: + 'https://api.github.com/repos/mralexgray/AGNSSplitView/compare/{base}...{head}', + description: 'Simple NSSplitView additions.', + forks_count: 0, + is_template: false, + open_issues: 0, + branches_url: + 'https://api.github.com/repos/mralexgray/AGNSSplitView/branches{/branch}', + comments_url: + 'https://api.github.com/repos/mralexgray/AGNSSplitView/comments{/number}', + contents_url: + 'https://api.github.com/repos/mralexgray/AGNSSplitView/contents/{+path}', + git_refs_url: + 'https://api.github.com/repos/mralexgray/AGNSSplitView/git/refs{/sha}', + git_tags_url: + 'https://api.github.com/repos/mralexgray/AGNSSplitView/git/tags{/sha}', + has_projects: true, + releases_url: + 'https://api.github.com/repos/mralexgray/AGNSSplitView/releases{/id}', + statuses_url: + 'https://api.github.com/repos/mralexgray/AGNSSplitView/statuses/{sha}', + allow_forking: true, + assignees_url: + 'https://api.github.com/repos/mralexgray/AGNSSplitView/assignees{/user}', + downloads_url: + 'https://api.github.com/repos/mralexgray/AGNSSplitView/downloads', + has_downloads: true, + languages_url: + 'https://api.github.com/repos/mralexgray/AGNSSplitView/languages', + default_branch: 'master', + milestones_url: + 'https://api.github.com/repos/mralexgray/AGNSSplitView/milestones{/number}', + stargazers_url: + 'https://api.github.com/repos/mralexgray/AGNSSplitView/stargazers', + watchers_count: 0, + deployments_url: + 'https://api.github.com/repos/mralexgray/AGNSSplitView/deployments', + git_commits_url: + 'https://api.github.com/repos/mralexgray/AGNSSplitView/git/commits{/sha}', + subscribers_url: + 'https://api.github.com/repos/mralexgray/AGNSSplitView/subscribers', + contributors_url: + 'https://api.github.com/repos/mralexgray/AGNSSplitView/contributors', + issue_events_url: + 'https://api.github.com/repos/mralexgray/AGNSSplitView/issues/events{/number}', + stargazers_count: 0, + subscription_url: + 'https://api.github.com/repos/mralexgray/AGNSSplitView/subscription', + collaborators_url: + 'https://api.github.com/repos/mralexgray/AGNSSplitView/collaborators{/collaborator}', + issue_comment_url: + 'https://api.github.com/repos/mralexgray/AGNSSplitView/issues/comments{/number}', + notifications_url: + 'https://api.github.com/repos/mralexgray/AGNSSplitView/notifications{?since,all,participating}', + open_issues_count: 0, + web_commit_signoff_required: false, + }, + { + id: 12767784, + url: 'https://api.github.com/repos/mralexgray/AGScopeBar', + fork: true, + name: 'AGScopeBar', + size: 64, + forks: 0, + owner: { + id: 262517, + url: 'https://api.github.com/users/mralexgray', + type: 'User', + login: 'mralexgray', + node_id: 'MDQ6VXNlcjI2MjUxNw==', + html_url: 'https://github.com/mralexgray', + gists_url: 'https://api.github.com/users/mralexgray/gists{/gist_id}', + repos_url: 'https://api.github.com/users/mralexgray/repos', + avatar_url: 'https://avatars.githubusercontent.com/u/262517?v=4', + events_url: 'https://api.github.com/users/mralexgray/events{/privacy}', + site_admin: false, + gravatar_id: '', + starred_url: + 'https://api.github.com/users/mralexgray/starred{/owner}{/repo}', + followers_url: 'https://api.github.com/users/mralexgray/followers', + following_url: + 'https://api.github.com/users/mralexgray/following{/other_user}', + organizations_url: 'https://api.github.com/users/mralexgray/orgs', + subscriptions_url: 'https://api.github.com/users/mralexgray/subscriptions', + received_events_url: + 'https://api.github.com/users/mralexgray/received_events', + }, + topics: [], + git_url: 'git://github.com/mralexgray/AGScopeBar.git', + license: null, + node_id: 'MDEwOlJlcG9zaXRvcnkxMjc2Nzc4NA==', + private: false, + ssh_url: 'git@github.com:mralexgray/AGScopeBar.git', + svn_url: 'https://github.com/mralexgray/AGScopeBar', + archived: false, + disabled: false, + has_wiki: true, + homepage: null, + html_url: 'https://github.com/mralexgray/AGScopeBar', + keys_url: 'https://api.github.com/repos/mralexgray/AGScopeBar/keys{/key_id}', + language: 'Objective-C', + tags_url: 'https://api.github.com/repos/mralexgray/AGScopeBar/tags', + watchers: 0, + blobs_url: + 'https://api.github.com/repos/mralexgray/AGScopeBar/git/blobs{/sha}', + clone_url: 'https://github.com/mralexgray/AGScopeBar.git', + forks_url: 'https://api.github.com/repos/mralexgray/AGScopeBar/forks', + full_name: 'mralexgray/AGScopeBar', + has_pages: false, + hooks_url: 'https://api.github.com/repos/mralexgray/AGScopeBar/hooks', + pulls_url: + 'https://api.github.com/repos/mralexgray/AGScopeBar/pulls{/number}', + pushed_at: '2013-05-07T03:35:29Z', + teams_url: 'https://api.github.com/repos/mralexgray/AGScopeBar/teams', + trees_url: + 'https://api.github.com/repos/mralexgray/AGScopeBar/git/trees{/sha}', + created_at: '2013-09-11T21:06:54Z', + events_url: 'https://api.github.com/repos/mralexgray/AGScopeBar/events', + has_issues: false, + issues_url: + 'https://api.github.com/repos/mralexgray/AGScopeBar/issues{/number}', + labels_url: + 'https://api.github.com/repos/mralexgray/AGScopeBar/labels{/name}', + merges_url: 'https://api.github.com/repos/mralexgray/AGScopeBar/merges', + mirror_url: null, + updated_at: '2013-09-11T21:06:54Z', + visibility: 'public', + archive_url: + 'https://api.github.com/repos/mralexgray/AGScopeBar/{archive_format}{/ref}', + commits_url: + 'https://api.github.com/repos/mralexgray/AGScopeBar/commits{/sha}', + compare_url: + 'https://api.github.com/repos/mralexgray/AGScopeBar/compare/{base}...{head}', + description: 'Custom scope bar implementation for Cocoa', + forks_count: 0, + is_template: false, + open_issues: 0, + branches_url: + 'https://api.github.com/repos/mralexgray/AGScopeBar/branches{/branch}', + comments_url: + 'https://api.github.com/repos/mralexgray/AGScopeBar/comments{/number}', + contents_url: + 'https://api.github.com/repos/mralexgray/AGScopeBar/contents/{+path}', + git_refs_url: + 'https://api.github.com/repos/mralexgray/AGScopeBar/git/refs{/sha}', + git_tags_url: + 'https://api.github.com/repos/mralexgray/AGScopeBar/git/tags{/sha}', + has_projects: true, + releases_url: + 'https://api.github.com/repos/mralexgray/AGScopeBar/releases{/id}', + statuses_url: + 'https://api.github.com/repos/mralexgray/AGScopeBar/statuses/{sha}', + allow_forking: true, + assignees_url: + 'https://api.github.com/repos/mralexgray/AGScopeBar/assignees{/user}', + downloads_url: 'https://api.github.com/repos/mralexgray/AGScopeBar/downloads', + has_downloads: true, + languages_url: 'https://api.github.com/repos/mralexgray/AGScopeBar/languages', + default_branch: 'master', + milestones_url: + 'https://api.github.com/repos/mralexgray/AGScopeBar/milestones{/number}', + stargazers_url: + 'https://api.github.com/repos/mralexgray/AGScopeBar/stargazers', + watchers_count: 0, + deployments_url: + 'https://api.github.com/repos/mralexgray/AGScopeBar/deployments', + git_commits_url: + 'https://api.github.com/repos/mralexgray/AGScopeBar/git/commits{/sha}', + subscribers_url: + 'https://api.github.com/repos/mralexgray/AGScopeBar/subscribers', + contributors_url: + 'https://api.github.com/repos/mralexgray/AGScopeBar/contributors', + issue_events_url: + 'https://api.github.com/repos/mralexgray/AGScopeBar/issues/events{/number}', + stargazers_count: 0, + subscription_url: + 'https://api.github.com/repos/mralexgray/AGScopeBar/subscription', + collaborators_url: + 'https://api.github.com/repos/mralexgray/AGScopeBar/collaborators{/collaborator}', + issue_comment_url: + 'https://api.github.com/repos/mralexgray/AGScopeBar/issues/comments{/number}', + notifications_url: + 'https://api.github.com/repos/mralexgray/AGScopeBar/notifications{?since,all,participating}', + open_issues_count: 0, + web_commit_signoff_required: false, + }, + { + id: 31829499, + url: 'https://api.github.com/repos/mralexgray/agvtool-xcode-plugin', + fork: true, + name: 'agvtool-xcode-plugin', + size: 102, + forks: 0, + owner: { + id: 262517, + url: 'https://api.github.com/users/mralexgray', + type: 'User', + login: 'mralexgray', + node_id: 'MDQ6VXNlcjI2MjUxNw==', + html_url: 'https://github.com/mralexgray', + gists_url: 'https://api.github.com/users/mralexgray/gists{/gist_id}', + repos_url: 'https://api.github.com/users/mralexgray/repos', + avatar_url: 'https://avatars.githubusercontent.com/u/262517?v=4', + events_url: 'https://api.github.com/users/mralexgray/events{/privacy}', + site_admin: false, + gravatar_id: '', + starred_url: + 'https://api.github.com/users/mralexgray/starred{/owner}{/repo}', + followers_url: 'https://api.github.com/users/mralexgray/followers', + following_url: + 'https://api.github.com/users/mralexgray/following{/other_user}', + organizations_url: 'https://api.github.com/users/mralexgray/orgs', + subscriptions_url: 'https://api.github.com/users/mralexgray/subscriptions', + received_events_url: + 'https://api.github.com/users/mralexgray/received_events', + }, + topics: [], + git_url: 'git://github.com/mralexgray/agvtool-xcode-plugin.git', + license: null, + node_id: 'MDEwOlJlcG9zaXRvcnkzMTgyOTQ5OQ==', + private: false, + ssh_url: 'git@github.com:mralexgray/agvtool-xcode-plugin.git', + svn_url: 'https://github.com/mralexgray/agvtool-xcode-plugin', + archived: false, + disabled: false, + has_wiki: true, + homepage: null, + html_url: 'https://github.com/mralexgray/agvtool-xcode-plugin', + keys_url: + 'https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/keys{/key_id}', + language: 'Objective-C', + tags_url: 'https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/tags', + watchers: 0, + blobs_url: + 'https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/git/blobs{/sha}', + clone_url: 'https://github.com/mralexgray/agvtool-xcode-plugin.git', + forks_url: + 'https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/forks', + full_name: 'mralexgray/agvtool-xcode-plugin', + has_pages: false, + hooks_url: + 'https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/hooks', + pulls_url: + 'https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/pulls{/number}', + pushed_at: '2015-03-08T00:04:31Z', + teams_url: + 'https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/teams', + trees_url: + 'https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/git/trees{/sha}', + created_at: '2015-03-07T22:15:38Z', + events_url: + 'https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/events', + has_issues: false, + issues_url: + 'https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/issues{/number}', + labels_url: + 'https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/labels{/name}', + merges_url: + 'https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/merges', + mirror_url: null, + updated_at: '2015-03-07T22:15:41Z', + visibility: 'public', + archive_url: + 'https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/{archive_format}{/ref}', + commits_url: + 'https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/commits{/sha}', + compare_url: + 'https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/compare/{base}...{head}', + description: 'this is a plugin wrapper for agvtool for xcode.', + forks_count: 0, + is_template: false, + open_issues: 0, + branches_url: + 'https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/branches{/branch}', + comments_url: + 'https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/comments{/number}', + contents_url: + 'https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/contents/{+path}', + git_refs_url: + 'https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/git/refs{/sha}', + git_tags_url: + 'https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/git/tags{/sha}', + has_projects: true, + releases_url: + 'https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/releases{/id}', + statuses_url: + 'https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/statuses/{sha}', + allow_forking: true, + assignees_url: + 'https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/assignees{/user}', + downloads_url: + 'https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/downloads', + has_downloads: true, + languages_url: + 'https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/languages', + default_branch: 'master', + milestones_url: + 'https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/milestones{/number}', + stargazers_url: + 'https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/stargazers', + watchers_count: 0, + deployments_url: + 'https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/deployments', + git_commits_url: + 'https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/git/commits{/sha}', + subscribers_url: + 'https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/subscribers', + contributors_url: + 'https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/contributors', + issue_events_url: + 'https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/issues/events{/number}', + stargazers_count: 0, + subscription_url: + 'https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/subscription', + collaborators_url: + 'https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/collaborators{/collaborator}', + issue_comment_url: + 'https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/issues/comments{/number}', + notifications_url: + 'https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/notifications{?since,all,participating}', + open_issues_count: 0, + web_commit_signoff_required: false, + }, + { + id: 9227846, + url: 'https://api.github.com/repos/mralexgray/AHContentBrowser', + fork: true, + name: 'AHContentBrowser', + size: 223, + forks: 0, + owner: { + id: 262517, + url: 'https://api.github.com/users/mralexgray', + type: 'User', + login: 'mralexgray', + node_id: 'MDQ6VXNlcjI2MjUxNw==', + html_url: 'https://github.com/mralexgray', + gists_url: 'https://api.github.com/users/mralexgray/gists{/gist_id}', + repos_url: 'https://api.github.com/users/mralexgray/repos', + avatar_url: 'https://avatars.githubusercontent.com/u/262517?v=4', + events_url: 'https://api.github.com/users/mralexgray/events{/privacy}', + site_admin: false, + gravatar_id: '', + starred_url: + 'https://api.github.com/users/mralexgray/starred{/owner}{/repo}', + followers_url: 'https://api.github.com/users/mralexgray/followers', + following_url: + 'https://api.github.com/users/mralexgray/following{/other_user}', + organizations_url: 'https://api.github.com/users/mralexgray/orgs', + subscriptions_url: 'https://api.github.com/users/mralexgray/subscriptions', + received_events_url: + 'https://api.github.com/users/mralexgray/received_events', + }, + topics: [], + git_url: 'git://github.com/mralexgray/AHContentBrowser.git', + license: null, + node_id: 'MDEwOlJlcG9zaXRvcnk5MjI3ODQ2', + private: false, + ssh_url: 'git@github.com:mralexgray/AHContentBrowser.git', + svn_url: 'https://github.com/mralexgray/AHContentBrowser', + archived: false, + disabled: false, + has_wiki: true, + homepage: '', + html_url: 'https://github.com/mralexgray/AHContentBrowser', + keys_url: + 'https://api.github.com/repos/mralexgray/AHContentBrowser/keys{/key_id}', + language: 'Objective-C', + tags_url: 'https://api.github.com/repos/mralexgray/AHContentBrowser/tags', + watchers: 0, + blobs_url: + 'https://api.github.com/repos/mralexgray/AHContentBrowser/git/blobs{/sha}', + clone_url: 'https://github.com/mralexgray/AHContentBrowser.git', + forks_url: 'https://api.github.com/repos/mralexgray/AHContentBrowser/forks', + full_name: 'mralexgray/AHContentBrowser', + has_pages: false, + hooks_url: 'https://api.github.com/repos/mralexgray/AHContentBrowser/hooks', + pulls_url: + 'https://api.github.com/repos/mralexgray/AHContentBrowser/pulls{/number}', + pushed_at: '2013-03-13T17:38:23Z', + teams_url: 'https://api.github.com/repos/mralexgray/AHContentBrowser/teams', + trees_url: + 'https://api.github.com/repos/mralexgray/AHContentBrowser/git/trees{/sha}', + created_at: '2013-04-04T20:56:16Z', + events_url: 'https://api.github.com/repos/mralexgray/AHContentBrowser/events', + has_issues: false, + issues_url: + 'https://api.github.com/repos/mralexgray/AHContentBrowser/issues{/number}', + labels_url: + 'https://api.github.com/repos/mralexgray/AHContentBrowser/labels{/name}', + merges_url: 'https://api.github.com/repos/mralexgray/AHContentBrowser/merges', + mirror_url: null, + updated_at: '2015-10-22T05:00:24Z', + visibility: 'public', + archive_url: + 'https://api.github.com/repos/mralexgray/AHContentBrowser/{archive_format}{/ref}', + commits_url: + 'https://api.github.com/repos/mralexgray/AHContentBrowser/commits{/sha}', + compare_url: + 'https://api.github.com/repos/mralexgray/AHContentBrowser/compare/{base}...{head}', + description: + 'A Mac only webview that loads a fast readable version of the website if available.', + forks_count: 0, + is_template: false, + open_issues: 0, + branches_url: + 'https://api.github.com/repos/mralexgray/AHContentBrowser/branches{/branch}', + comments_url: + 'https://api.github.com/repos/mralexgray/AHContentBrowser/comments{/number}', + contents_url: + 'https://api.github.com/repos/mralexgray/AHContentBrowser/contents/{+path}', + git_refs_url: + 'https://api.github.com/repos/mralexgray/AHContentBrowser/git/refs{/sha}', + git_tags_url: + 'https://api.github.com/repos/mralexgray/AHContentBrowser/git/tags{/sha}', + has_projects: true, + releases_url: + 'https://api.github.com/repos/mralexgray/AHContentBrowser/releases{/id}', + statuses_url: + 'https://api.github.com/repos/mralexgray/AHContentBrowser/statuses/{sha}', + allow_forking: true, + assignees_url: + 'https://api.github.com/repos/mralexgray/AHContentBrowser/assignees{/user}', + downloads_url: + 'https://api.github.com/repos/mralexgray/AHContentBrowser/downloads', + has_downloads: true, + languages_url: + 'https://api.github.com/repos/mralexgray/AHContentBrowser/languages', + default_branch: 'master', + milestones_url: + 'https://api.github.com/repos/mralexgray/AHContentBrowser/milestones{/number}', + stargazers_url: + 'https://api.github.com/repos/mralexgray/AHContentBrowser/stargazers', + watchers_count: 0, + deployments_url: + 'https://api.github.com/repos/mralexgray/AHContentBrowser/deployments', + git_commits_url: + 'https://api.github.com/repos/mralexgray/AHContentBrowser/git/commits{/sha}', + subscribers_url: + 'https://api.github.com/repos/mralexgray/AHContentBrowser/subscribers', + contributors_url: + 'https://api.github.com/repos/mralexgray/AHContentBrowser/contributors', + issue_events_url: + 'https://api.github.com/repos/mralexgray/AHContentBrowser/issues/events{/number}', + stargazers_count: 0, + subscription_url: + 'https://api.github.com/repos/mralexgray/AHContentBrowser/subscription', + collaborators_url: + 'https://api.github.com/repos/mralexgray/AHContentBrowser/collaborators{/collaborator}', + issue_comment_url: + 'https://api.github.com/repos/mralexgray/AHContentBrowser/issues/comments{/number}', + notifications_url: + 'https://api.github.com/repos/mralexgray/AHContentBrowser/notifications{?since,all,participating}', + open_issues_count: 0, + web_commit_signoff_required: false, + }, + { + id: 37430328, + url: 'https://api.github.com/repos/mralexgray/AHLaunchCtl', + fork: true, + name: 'AHLaunchCtl', + size: 592, + forks: 0, + owner: { + id: 262517, + url: 'https://api.github.com/users/mralexgray', + type: 'User', + login: 'mralexgray', + node_id: 'MDQ6VXNlcjI2MjUxNw==', + html_url: 'https://github.com/mralexgray', + gists_url: 'https://api.github.com/users/mralexgray/gists{/gist_id}', + repos_url: 'https://api.github.com/users/mralexgray/repos', + avatar_url: 'https://avatars.githubusercontent.com/u/262517?v=4', + events_url: 'https://api.github.com/users/mralexgray/events{/privacy}', + site_admin: false, + gravatar_id: '', + starred_url: + 'https://api.github.com/users/mralexgray/starred{/owner}{/repo}', + followers_url: 'https://api.github.com/users/mralexgray/followers', + following_url: + 'https://api.github.com/users/mralexgray/following{/other_user}', + organizations_url: 'https://api.github.com/users/mralexgray/orgs', + subscriptions_url: 'https://api.github.com/users/mralexgray/subscriptions', + received_events_url: + 'https://api.github.com/users/mralexgray/received_events', + }, + topics: [], + git_url: 'git://github.com/mralexgray/AHLaunchCtl.git', + license: { + key: 'mit', + url: 'https://api.github.com/licenses/mit', + name: 'MIT License', + node_id: 'MDc6TGljZW5zZTEz', + spdx_id: 'MIT', + }, + node_id: 'MDEwOlJlcG9zaXRvcnkzNzQzMDMyOA==', + private: false, + ssh_url: 'git@github.com:mralexgray/AHLaunchCtl.git', + svn_url: 'https://github.com/mralexgray/AHLaunchCtl', + archived: false, + disabled: false, + has_wiki: true, + homepage: '', + html_url: 'https://github.com/mralexgray/AHLaunchCtl', + keys_url: 'https://api.github.com/repos/mralexgray/AHLaunchCtl/keys{/key_id}', + language: 'Objective-C', + tags_url: 'https://api.github.com/repos/mralexgray/AHLaunchCtl/tags', + watchers: 0, + blobs_url: + 'https://api.github.com/repos/mralexgray/AHLaunchCtl/git/blobs{/sha}', + clone_url: 'https://github.com/mralexgray/AHLaunchCtl.git', + forks_url: 'https://api.github.com/repos/mralexgray/AHLaunchCtl/forks', + full_name: 'mralexgray/AHLaunchCtl', + has_pages: false, + hooks_url: 'https://api.github.com/repos/mralexgray/AHLaunchCtl/hooks', + pulls_url: + 'https://api.github.com/repos/mralexgray/AHLaunchCtl/pulls{/number}', + pushed_at: '2015-05-26T18:50:48Z', + teams_url: 'https://api.github.com/repos/mralexgray/AHLaunchCtl/teams', + trees_url: + 'https://api.github.com/repos/mralexgray/AHLaunchCtl/git/trees{/sha}', + created_at: '2015-06-14T21:31:03Z', + events_url: 'https://api.github.com/repos/mralexgray/AHLaunchCtl/events', + has_issues: false, + issues_url: + 'https://api.github.com/repos/mralexgray/AHLaunchCtl/issues{/number}', + labels_url: + 'https://api.github.com/repos/mralexgray/AHLaunchCtl/labels{/name}', + merges_url: 'https://api.github.com/repos/mralexgray/AHLaunchCtl/merges', + mirror_url: null, + updated_at: '2015-06-14T21:31:04Z', + visibility: 'public', + archive_url: + 'https://api.github.com/repos/mralexgray/AHLaunchCtl/{archive_format}{/ref}', + commits_url: + 'https://api.github.com/repos/mralexgray/AHLaunchCtl/commits{/sha}', + compare_url: + 'https://api.github.com/repos/mralexgray/AHLaunchCtl/compare/{base}...{head}', + description: 'LaunchD Framework for Cocoa Apps', + forks_count: 0, + is_template: false, + open_issues: 0, + branches_url: + 'https://api.github.com/repos/mralexgray/AHLaunchCtl/branches{/branch}', + comments_url: + 'https://api.github.com/repos/mralexgray/AHLaunchCtl/comments{/number}', + contents_url: + 'https://api.github.com/repos/mralexgray/AHLaunchCtl/contents/{+path}', + git_refs_url: + 'https://api.github.com/repos/mralexgray/AHLaunchCtl/git/refs{/sha}', + git_tags_url: + 'https://api.github.com/repos/mralexgray/AHLaunchCtl/git/tags{/sha}', + has_projects: true, + releases_url: + 'https://api.github.com/repos/mralexgray/AHLaunchCtl/releases{/id}', + statuses_url: + 'https://api.github.com/repos/mralexgray/AHLaunchCtl/statuses/{sha}', + allow_forking: true, + assignees_url: + 'https://api.github.com/repos/mralexgray/AHLaunchCtl/assignees{/user}', + downloads_url: + 'https://api.github.com/repos/mralexgray/AHLaunchCtl/downloads', + has_downloads: true, + languages_url: + 'https://api.github.com/repos/mralexgray/AHLaunchCtl/languages', + default_branch: 'master', + milestones_url: + 'https://api.github.com/repos/mralexgray/AHLaunchCtl/milestones{/number}', + stargazers_url: + 'https://api.github.com/repos/mralexgray/AHLaunchCtl/stargazers', + watchers_count: 0, + deployments_url: + 'https://api.github.com/repos/mralexgray/AHLaunchCtl/deployments', + git_commits_url: + 'https://api.github.com/repos/mralexgray/AHLaunchCtl/git/commits{/sha}', + subscribers_url: + 'https://api.github.com/repos/mralexgray/AHLaunchCtl/subscribers', + contributors_url: + 'https://api.github.com/repos/mralexgray/AHLaunchCtl/contributors', + issue_events_url: + 'https://api.github.com/repos/mralexgray/AHLaunchCtl/issues/events{/number}', + stargazers_count: 0, + subscription_url: + 'https://api.github.com/repos/mralexgray/AHLaunchCtl/subscription', + collaborators_url: + 'https://api.github.com/repos/mralexgray/AHLaunchCtl/collaborators{/collaborator}', + issue_comment_url: + 'https://api.github.com/repos/mralexgray/AHLaunchCtl/issues/comments{/number}', + notifications_url: + 'https://api.github.com/repos/mralexgray/AHLaunchCtl/notifications{?since,all,participating}', + open_issues_count: 0, + web_commit_signoff_required: false, + }, + { + id: 9167473, + url: 'https://api.github.com/repos/mralexgray/AHLayout', + fork: true, + name: 'AHLayout', + size: 359, + forks: 0, + owner: { + id: 262517, + url: 'https://api.github.com/users/mralexgray', + type: 'User', + login: 'mralexgray', + node_id: 'MDQ6VXNlcjI2MjUxNw==', + html_url: 'https://github.com/mralexgray', + gists_url: 'https://api.github.com/users/mralexgray/gists{/gist_id}', + repos_url: 'https://api.github.com/users/mralexgray/repos', + avatar_url: 'https://avatars.githubusercontent.com/u/262517?v=4', + events_url: 'https://api.github.com/users/mralexgray/events{/privacy}', + site_admin: false, + gravatar_id: '', + starred_url: + 'https://api.github.com/users/mralexgray/starred{/owner}{/repo}', + followers_url: 'https://api.github.com/users/mralexgray/followers', + following_url: + 'https://api.github.com/users/mralexgray/following{/other_user}', + organizations_url: 'https://api.github.com/users/mralexgray/orgs', + subscriptions_url: 'https://api.github.com/users/mralexgray/subscriptions', + received_events_url: + 'https://api.github.com/users/mralexgray/received_events', + }, + topics: [], + git_url: 'git://github.com/mralexgray/AHLayout.git', + license: null, + node_id: 'MDEwOlJlcG9zaXRvcnk5MTY3NDcz', + private: false, + ssh_url: 'git@github.com:mralexgray/AHLayout.git', + svn_url: 'https://github.com/mralexgray/AHLayout', + archived: false, + disabled: false, + has_wiki: true, + homepage: null, + html_url: 'https://github.com/mralexgray/AHLayout', + keys_url: 'https://api.github.com/repos/mralexgray/AHLayout/keys{/key_id}', + language: 'Objective-C', + tags_url: 'https://api.github.com/repos/mralexgray/AHLayout/tags', + watchers: 0, + blobs_url: 'https://api.github.com/repos/mralexgray/AHLayout/git/blobs{/sha}', + clone_url: 'https://github.com/mralexgray/AHLayout.git', + forks_url: 'https://api.github.com/repos/mralexgray/AHLayout/forks', + full_name: 'mralexgray/AHLayout', + has_pages: false, + hooks_url: 'https://api.github.com/repos/mralexgray/AHLayout/hooks', + pulls_url: 'https://api.github.com/repos/mralexgray/AHLayout/pulls{/number}', + pushed_at: '2013-07-08T02:31:14Z', + teams_url: 'https://api.github.com/repos/mralexgray/AHLayout/teams', + trees_url: 'https://api.github.com/repos/mralexgray/AHLayout/git/trees{/sha}', + created_at: '2013-04-02T10:10:30Z', + events_url: 'https://api.github.com/repos/mralexgray/AHLayout/events', + has_issues: false, + issues_url: + 'https://api.github.com/repos/mralexgray/AHLayout/issues{/number}', + labels_url: 'https://api.github.com/repos/mralexgray/AHLayout/labels{/name}', + merges_url: 'https://api.github.com/repos/mralexgray/AHLayout/merges', + mirror_url: null, + updated_at: '2013-07-08T02:31:17Z', + visibility: 'public', + archive_url: + 'https://api.github.com/repos/mralexgray/AHLayout/{archive_format}{/ref}', + commits_url: 'https://api.github.com/repos/mralexgray/AHLayout/commits{/sha}', + compare_url: + 'https://api.github.com/repos/mralexgray/AHLayout/compare/{base}...{head}', + description: 'AHLayout', + forks_count: 0, + is_template: false, + open_issues: 0, + branches_url: + 'https://api.github.com/repos/mralexgray/AHLayout/branches{/branch}', + comments_url: + 'https://api.github.com/repos/mralexgray/AHLayout/comments{/number}', + contents_url: + 'https://api.github.com/repos/mralexgray/AHLayout/contents/{+path}', + git_refs_url: + 'https://api.github.com/repos/mralexgray/AHLayout/git/refs{/sha}', + git_tags_url: + 'https://api.github.com/repos/mralexgray/AHLayout/git/tags{/sha}', + has_projects: true, + releases_url: + 'https://api.github.com/repos/mralexgray/AHLayout/releases{/id}', + statuses_url: + 'https://api.github.com/repos/mralexgray/AHLayout/statuses/{sha}', + allow_forking: true, + assignees_url: + 'https://api.github.com/repos/mralexgray/AHLayout/assignees{/user}', + downloads_url: 'https://api.github.com/repos/mralexgray/AHLayout/downloads', + has_downloads: true, + languages_url: 'https://api.github.com/repos/mralexgray/AHLayout/languages', + default_branch: 'master', + milestones_url: + 'https://api.github.com/repos/mralexgray/AHLayout/milestones{/number}', + stargazers_url: 'https://api.github.com/repos/mralexgray/AHLayout/stargazers', + watchers_count: 0, + deployments_url: + 'https://api.github.com/repos/mralexgray/AHLayout/deployments', + git_commits_url: + 'https://api.github.com/repos/mralexgray/AHLayout/git/commits{/sha}', + subscribers_url: + 'https://api.github.com/repos/mralexgray/AHLayout/subscribers', + contributors_url: + 'https://api.github.com/repos/mralexgray/AHLayout/contributors', + issue_events_url: + 'https://api.github.com/repos/mralexgray/AHLayout/issues/events{/number}', + stargazers_count: 0, + subscription_url: + 'https://api.github.com/repos/mralexgray/AHLayout/subscription', + collaborators_url: + 'https://api.github.com/repos/mralexgray/AHLayout/collaborators{/collaborator}', + issue_comment_url: + 'https://api.github.com/repos/mralexgray/AHLayout/issues/comments{/number}', + notifications_url: + 'https://api.github.com/repos/mralexgray/AHLayout/notifications{?since,all,participating}', + open_issues_count: 0, + web_commit_signoff_required: false, + }, + { + id: 18450201, + url: 'https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework', + fork: true, + name: 'Airmail-Plug-In-Framework', + size: 888, + forks: 0, + owner: { + id: 262517, + url: 'https://api.github.com/users/mralexgray', + type: 'User', + login: 'mralexgray', + node_id: 'MDQ6VXNlcjI2MjUxNw==', + html_url: 'https://github.com/mralexgray', + gists_url: 'https://api.github.com/users/mralexgray/gists{/gist_id}', + repos_url: 'https://api.github.com/users/mralexgray/repos', + avatar_url: 'https://avatars.githubusercontent.com/u/262517?v=4', + events_url: 'https://api.github.com/users/mralexgray/events{/privacy}', + site_admin: false, + gravatar_id: '', + starred_url: + 'https://api.github.com/users/mralexgray/starred{/owner}{/repo}', + followers_url: 'https://api.github.com/users/mralexgray/followers', + following_url: + 'https://api.github.com/users/mralexgray/following{/other_user}', + organizations_url: 'https://api.github.com/users/mralexgray/orgs', + subscriptions_url: 'https://api.github.com/users/mralexgray/subscriptions', + received_events_url: + 'https://api.github.com/users/mralexgray/received_events', + }, + topics: [], + git_url: 'git://github.com/mralexgray/Airmail-Plug-In-Framework.git', + license: { + key: 'gpl-2.0', + url: 'https://api.github.com/licenses/gpl-2.0', + name: 'GNU General Public License v2.0', + node_id: 'MDc6TGljZW5zZTg=', + spdx_id: 'GPL-2.0', + }, + node_id: 'MDEwOlJlcG9zaXRvcnkxODQ1MDIwMQ==', + private: false, + ssh_url: 'git@github.com:mralexgray/Airmail-Plug-In-Framework.git', + svn_url: 'https://github.com/mralexgray/Airmail-Plug-In-Framework', + archived: false, + disabled: false, + has_wiki: true, + homepage: null, + html_url: 'https://github.com/mralexgray/Airmail-Plug-In-Framework', + keys_url: + 'https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/keys{/key_id}', + language: null, + tags_url: + 'https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/tags', + watchers: 0, + blobs_url: + 'https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/git/blobs{/sha}', + clone_url: 'https://github.com/mralexgray/Airmail-Plug-In-Framework.git', + forks_url: + 'https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/forks', + full_name: 'mralexgray/Airmail-Plug-In-Framework', + has_pages: false, + hooks_url: + 'https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/hooks', + pulls_url: + 'https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/pulls{/number}', + pushed_at: '2014-03-27T15:42:19Z', + teams_url: + 'https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/teams', + trees_url: + 'https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/git/trees{/sha}', + created_at: '2014-04-04T19:33:54Z', + events_url: + 'https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/events', + has_issues: false, + issues_url: + 'https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/issues{/number}', + labels_url: + 'https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/labels{/name}', + merges_url: + 'https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/merges', + mirror_url: null, + updated_at: '2014-11-23T19:31:04Z', + visibility: 'public', + archive_url: + 'https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/{archive_format}{/ref}', + commits_url: + 'https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/commits{/sha}', + compare_url: + 'https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/compare/{base}...{head}', + description: null, + forks_count: 0, + is_template: false, + open_issues: 0, + branches_url: + 'https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/branches{/branch}', + comments_url: + 'https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/comments{/number}', + contents_url: + 'https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/contents/{+path}', + git_refs_url: + 'https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/git/refs{/sha}', + git_tags_url: + 'https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/git/tags{/sha}', + has_projects: true, + releases_url: + 'https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/releases{/id}', + statuses_url: + 'https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/statuses/{sha}', + allow_forking: true, + assignees_url: + 'https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/assignees{/user}', + downloads_url: + 'https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/downloads', + has_downloads: true, + languages_url: + 'https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/languages', + default_branch: 'master', + milestones_url: + 'https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/milestones{/number}', + stargazers_url: + 'https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/stargazers', + watchers_count: 0, + deployments_url: + 'https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/deployments', + git_commits_url: + 'https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/git/commits{/sha}', + subscribers_url: + 'https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/subscribers', + contributors_url: + 'https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/contributors', + issue_events_url: + 'https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/issues/events{/number}', + stargazers_count: 0, + subscription_url: + 'https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/subscription', + collaborators_url: + 'https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/collaborators{/collaborator}', + issue_comment_url: + 'https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/issues/comments{/number}', + notifications_url: + 'https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/notifications{?since,all,participating}', + open_issues_count: 0, + web_commit_signoff_required: false, + }, + { + id: 5203219, + url: 'https://api.github.com/repos/mralexgray/AJS-iTunes-API', + fork: true, + name: 'AJS-iTunes-API', + size: 103, + forks: 0, + owner: { + id: 262517, + url: 'https://api.github.com/users/mralexgray', + type: 'User', + login: 'mralexgray', + node_id: 'MDQ6VXNlcjI2MjUxNw==', + html_url: 'https://github.com/mralexgray', + gists_url: 'https://api.github.com/users/mralexgray/gists{/gist_id}', + repos_url: 'https://api.github.com/users/mralexgray/repos', + avatar_url: 'https://avatars.githubusercontent.com/u/262517?v=4', + events_url: 'https://api.github.com/users/mralexgray/events{/privacy}', + site_admin: false, + gravatar_id: '', + starred_url: + 'https://api.github.com/users/mralexgray/starred{/owner}{/repo}', + followers_url: 'https://api.github.com/users/mralexgray/followers', + following_url: + 'https://api.github.com/users/mralexgray/following{/other_user}', + organizations_url: 'https://api.github.com/users/mralexgray/orgs', + subscriptions_url: 'https://api.github.com/users/mralexgray/subscriptions', + received_events_url: + 'https://api.github.com/users/mralexgray/received_events', + }, + topics: [], + git_url: 'git://github.com/mralexgray/AJS-iTunes-API.git', + license: null, + node_id: 'MDEwOlJlcG9zaXRvcnk1MjAzMjE5', + private: false, + ssh_url: 'git@github.com:mralexgray/AJS-iTunes-API.git', + svn_url: 'https://github.com/mralexgray/AJS-iTunes-API', + archived: false, + disabled: false, + has_wiki: true, + homepage: '', + html_url: 'https://github.com/mralexgray/AJS-iTunes-API', + keys_url: + 'https://api.github.com/repos/mralexgray/AJS-iTunes-API/keys{/key_id}', + language: 'Objective-C', + tags_url: 'https://api.github.com/repos/mralexgray/AJS-iTunes-API/tags', + watchers: 2, + blobs_url: + 'https://api.github.com/repos/mralexgray/AJS-iTunes-API/git/blobs{/sha}', + clone_url: 'https://github.com/mralexgray/AJS-iTunes-API.git', + forks_url: 'https://api.github.com/repos/mralexgray/AJS-iTunes-API/forks', + full_name: 'mralexgray/AJS-iTunes-API', + has_pages: false, + hooks_url: 'https://api.github.com/repos/mralexgray/AJS-iTunes-API/hooks', + pulls_url: + 'https://api.github.com/repos/mralexgray/AJS-iTunes-API/pulls{/number}', + pushed_at: '2011-10-30T22:26:48Z', + teams_url: 'https://api.github.com/repos/mralexgray/AJS-iTunes-API/teams', + trees_url: + 'https://api.github.com/repos/mralexgray/AJS-iTunes-API/git/trees{/sha}', + created_at: '2012-07-27T10:20:58Z', + events_url: 'https://api.github.com/repos/mralexgray/AJS-iTunes-API/events', + has_issues: false, + issues_url: + 'https://api.github.com/repos/mralexgray/AJS-iTunes-API/issues{/number}', + labels_url: + 'https://api.github.com/repos/mralexgray/AJS-iTunes-API/labels{/name}', + merges_url: 'https://api.github.com/repos/mralexgray/AJS-iTunes-API/merges', + mirror_url: null, + updated_at: '2013-01-11T11:00:05Z', + visibility: 'public', + archive_url: + 'https://api.github.com/repos/mralexgray/AJS-iTunes-API/{archive_format}{/ref}', + commits_url: + 'https://api.github.com/repos/mralexgray/AJS-iTunes-API/commits{/sha}', + compare_url: + 'https://api.github.com/repos/mralexgray/AJS-iTunes-API/compare/{base}...{head}', + description: + 'Cocoa wrapper for the iTunes search API - for iOS and Mac OSX projects', + forks_count: 0, + is_template: false, + open_issues: 0, + branches_url: + 'https://api.github.com/repos/mralexgray/AJS-iTunes-API/branches{/branch}', + comments_url: + 'https://api.github.com/repos/mralexgray/AJS-iTunes-API/comments{/number}', + contents_url: + 'https://api.github.com/repos/mralexgray/AJS-iTunes-API/contents/{+path}', + git_refs_url: + 'https://api.github.com/repos/mralexgray/AJS-iTunes-API/git/refs{/sha}', + git_tags_url: + 'https://api.github.com/repos/mralexgray/AJS-iTunes-API/git/tags{/sha}', + has_projects: true, + releases_url: + 'https://api.github.com/repos/mralexgray/AJS-iTunes-API/releases{/id}', + statuses_url: + 'https://api.github.com/repos/mralexgray/AJS-iTunes-API/statuses/{sha}', + allow_forking: true, + assignees_url: + 'https://api.github.com/repos/mralexgray/AJS-iTunes-API/assignees{/user}', + downloads_url: + 'https://api.github.com/repos/mralexgray/AJS-iTunes-API/downloads', + has_downloads: true, + languages_url: + 'https://api.github.com/repos/mralexgray/AJS-iTunes-API/languages', + default_branch: 'master', + milestones_url: + 'https://api.github.com/repos/mralexgray/AJS-iTunes-API/milestones{/number}', + stargazers_url: + 'https://api.github.com/repos/mralexgray/AJS-iTunes-API/stargazers', + watchers_count: 2, + deployments_url: + 'https://api.github.com/repos/mralexgray/AJS-iTunes-API/deployments', + git_commits_url: + 'https://api.github.com/repos/mralexgray/AJS-iTunes-API/git/commits{/sha}', + subscribers_url: + 'https://api.github.com/repos/mralexgray/AJS-iTunes-API/subscribers', + contributors_url: + 'https://api.github.com/repos/mralexgray/AJS-iTunes-API/contributors', + issue_events_url: + 'https://api.github.com/repos/mralexgray/AJS-iTunes-API/issues/events{/number}', + stargazers_count: 2, + subscription_url: + 'https://api.github.com/repos/mralexgray/AJS-iTunes-API/subscription', + collaborators_url: + 'https://api.github.com/repos/mralexgray/AJS-iTunes-API/collaborators{/collaborator}', + issue_comment_url: + 'https://api.github.com/repos/mralexgray/AJS-iTunes-API/issues/comments{/number}', + notifications_url: + 'https://api.github.com/repos/mralexgray/AJS-iTunes-API/notifications{?since,all,participating}', + open_issues_count: 0, + web_commit_signoff_required: false, + }, + { + id: 10093801, + url: 'https://api.github.com/repos/mralexgray/Alcatraz', + fork: true, + name: 'Alcatraz', + size: 3668, + forks: 0, + owner: { + id: 262517, + url: 'https://api.github.com/users/mralexgray', + type: 'User', + login: 'mralexgray', + node_id: 'MDQ6VXNlcjI2MjUxNw==', + html_url: 'https://github.com/mralexgray', + gists_url: 'https://api.github.com/users/mralexgray/gists{/gist_id}', + repos_url: 'https://api.github.com/users/mralexgray/repos', + avatar_url: 'https://avatars.githubusercontent.com/u/262517?v=4', + events_url: 'https://api.github.com/users/mralexgray/events{/privacy}', + site_admin: false, + gravatar_id: '', + starred_url: + 'https://api.github.com/users/mralexgray/starred{/owner}{/repo}', + followers_url: 'https://api.github.com/users/mralexgray/followers', + following_url: + 'https://api.github.com/users/mralexgray/following{/other_user}', + organizations_url: 'https://api.github.com/users/mralexgray/orgs', + subscriptions_url: 'https://api.github.com/users/mralexgray/subscriptions', + received_events_url: + 'https://api.github.com/users/mralexgray/received_events', + }, + topics: [], + git_url: 'git://github.com/mralexgray/Alcatraz.git', + license: { + key: 'mit', + url: 'https://api.github.com/licenses/mit', + name: 'MIT License', + node_id: 'MDc6TGljZW5zZTEz', + spdx_id: 'MIT', + }, + node_id: 'MDEwOlJlcG9zaXRvcnkxMDA5MzgwMQ==', + private: false, + ssh_url: 'git@github.com:mralexgray/Alcatraz.git', + svn_url: 'https://github.com/mralexgray/Alcatraz', + archived: false, + disabled: false, + has_wiki: false, + homepage: 'mneorr.github.com/Alcatraz', + html_url: 'https://github.com/mralexgray/Alcatraz', + keys_url: 'https://api.github.com/repos/mralexgray/Alcatraz/keys{/key_id}', + language: 'Objective-C', + tags_url: 'https://api.github.com/repos/mralexgray/Alcatraz/tags', + watchers: 0, + blobs_url: 'https://api.github.com/repos/mralexgray/Alcatraz/git/blobs{/sha}', + clone_url: 'https://github.com/mralexgray/Alcatraz.git', + forks_url: 'https://api.github.com/repos/mralexgray/Alcatraz/forks', + full_name: 'mralexgray/Alcatraz', + has_pages: false, + hooks_url: 'https://api.github.com/repos/mralexgray/Alcatraz/hooks', + pulls_url: 'https://api.github.com/repos/mralexgray/Alcatraz/pulls{/number}', + pushed_at: '2014-03-19T12:50:37Z', + teams_url: 'https://api.github.com/repos/mralexgray/Alcatraz/teams', + trees_url: 'https://api.github.com/repos/mralexgray/Alcatraz/git/trees{/sha}', + created_at: '2013-05-16T04:41:13Z', + events_url: 'https://api.github.com/repos/mralexgray/Alcatraz/events', + has_issues: false, + issues_url: + 'https://api.github.com/repos/mralexgray/Alcatraz/issues{/number}', + labels_url: 'https://api.github.com/repos/mralexgray/Alcatraz/labels{/name}', + merges_url: 'https://api.github.com/repos/mralexgray/Alcatraz/merges', + mirror_url: null, + updated_at: '2014-03-19T20:38:35Z', + visibility: 'public', + archive_url: + 'https://api.github.com/repos/mralexgray/Alcatraz/{archive_format}{/ref}', + commits_url: 'https://api.github.com/repos/mralexgray/Alcatraz/commits{/sha}', + compare_url: + 'https://api.github.com/repos/mralexgray/Alcatraz/compare/{base}...{head}', + description: 'The most awesome (and only) Xcode package manager!', + forks_count: 0, + is_template: false, + open_issues: 0, + branches_url: + 'https://api.github.com/repos/mralexgray/Alcatraz/branches{/branch}', + comments_url: + 'https://api.github.com/repos/mralexgray/Alcatraz/comments{/number}', + contents_url: + 'https://api.github.com/repos/mralexgray/Alcatraz/contents/{+path}', + git_refs_url: + 'https://api.github.com/repos/mralexgray/Alcatraz/git/refs{/sha}', + git_tags_url: + 'https://api.github.com/repos/mralexgray/Alcatraz/git/tags{/sha}', + has_projects: true, + releases_url: + 'https://api.github.com/repos/mralexgray/Alcatraz/releases{/id}', + statuses_url: + 'https://api.github.com/repos/mralexgray/Alcatraz/statuses/{sha}', + allow_forking: true, + assignees_url: + 'https://api.github.com/repos/mralexgray/Alcatraz/assignees{/user}', + downloads_url: 'https://api.github.com/repos/mralexgray/Alcatraz/downloads', + has_downloads: true, + languages_url: 'https://api.github.com/repos/mralexgray/Alcatraz/languages', + default_branch: 'master', + milestones_url: + 'https://api.github.com/repos/mralexgray/Alcatraz/milestones{/number}', + stargazers_url: 'https://api.github.com/repos/mralexgray/Alcatraz/stargazers', + watchers_count: 0, + deployments_url: + 'https://api.github.com/repos/mralexgray/Alcatraz/deployments', + git_commits_url: + 'https://api.github.com/repos/mralexgray/Alcatraz/git/commits{/sha}', + subscribers_url: + 'https://api.github.com/repos/mralexgray/Alcatraz/subscribers', + contributors_url: + 'https://api.github.com/repos/mralexgray/Alcatraz/contributors', + issue_events_url: + 'https://api.github.com/repos/mralexgray/Alcatraz/issues/events{/number}', + stargazers_count: 0, + subscription_url: + 'https://api.github.com/repos/mralexgray/Alcatraz/subscription', + collaborators_url: + 'https://api.github.com/repos/mralexgray/Alcatraz/collaborators{/collaborator}', + issue_comment_url: + 'https://api.github.com/repos/mralexgray/Alcatraz/issues/comments{/number}', + notifications_url: + 'https://api.github.com/repos/mralexgray/Alcatraz/notifications{?since,all,participating}', + open_issues_count: 0, + web_commit_signoff_required: false, + }, + { + id: 12916552, + url: 'https://api.github.com/repos/mralexgray/alcatraz-packages', + fork: true, + name: 'alcatraz-packages', + size: 826, + forks: 0, + owner: { + id: 262517, + url: 'https://api.github.com/users/mralexgray', + type: 'User', + login: 'mralexgray', + node_id: 'MDQ6VXNlcjI2MjUxNw==', + html_url: 'https://github.com/mralexgray', + gists_url: 'https://api.github.com/users/mralexgray/gists{/gist_id}', + repos_url: 'https://api.github.com/users/mralexgray/repos', + avatar_url: 'https://avatars.githubusercontent.com/u/262517?v=4', + events_url: 'https://api.github.com/users/mralexgray/events{/privacy}', + site_admin: false, + gravatar_id: '', + starred_url: + 'https://api.github.com/users/mralexgray/starred{/owner}{/repo}', + followers_url: 'https://api.github.com/users/mralexgray/followers', + following_url: + 'https://api.github.com/users/mralexgray/following{/other_user}', + organizations_url: 'https://api.github.com/users/mralexgray/orgs', + subscriptions_url: 'https://api.github.com/users/mralexgray/subscriptions', + received_events_url: + 'https://api.github.com/users/mralexgray/received_events', + }, + topics: [], + git_url: 'git://github.com/mralexgray/alcatraz-packages.git', + license: null, + node_id: 'MDEwOlJlcG9zaXRvcnkxMjkxNjU1Mg==', + private: false, + ssh_url: 'git@github.com:mralexgray/alcatraz-packages.git', + svn_url: 'https://github.com/mralexgray/alcatraz-packages', + archived: false, + disabled: false, + has_wiki: true, + homepage: 'mneorr.github.com/Alcatraz', + html_url: 'https://github.com/mralexgray/alcatraz-packages', + keys_url: + 'https://api.github.com/repos/mralexgray/alcatraz-packages/keys{/key_id}', + language: 'Ruby', + tags_url: 'https://api.github.com/repos/mralexgray/alcatraz-packages/tags', + watchers: 0, + blobs_url: + 'https://api.github.com/repos/mralexgray/alcatraz-packages/git/blobs{/sha}', + clone_url: 'https://github.com/mralexgray/alcatraz-packages.git', + forks_url: 'https://api.github.com/repos/mralexgray/alcatraz-packages/forks', + full_name: 'mralexgray/alcatraz-packages', + has_pages: false, + hooks_url: 'https://api.github.com/repos/mralexgray/alcatraz-packages/hooks', + pulls_url: + 'https://api.github.com/repos/mralexgray/alcatraz-packages/pulls{/number}', + pushed_at: '2015-12-14T16:21:31Z', + teams_url: 'https://api.github.com/repos/mralexgray/alcatraz-packages/teams', + trees_url: + 'https://api.github.com/repos/mralexgray/alcatraz-packages/git/trees{/sha}', + created_at: '2013-09-18T07:15:24Z', + events_url: + 'https://api.github.com/repos/mralexgray/alcatraz-packages/events', + has_issues: false, + issues_url: + 'https://api.github.com/repos/mralexgray/alcatraz-packages/issues{/number}', + labels_url: + 'https://api.github.com/repos/mralexgray/alcatraz-packages/labels{/name}', + merges_url: + 'https://api.github.com/repos/mralexgray/alcatraz-packages/merges', + mirror_url: null, + updated_at: '2015-11-10T20:52:30Z', + visibility: 'public', + archive_url: + 'https://api.github.com/repos/mralexgray/alcatraz-packages/{archive_format}{/ref}', + commits_url: + 'https://api.github.com/repos/mralexgray/alcatraz-packages/commits{/sha}', + compare_url: + 'https://api.github.com/repos/mralexgray/alcatraz-packages/compare/{base}...{head}', + description: 'Package list repository for Alcatraz', + forks_count: 0, + is_template: false, + open_issues: 0, + branches_url: + 'https://api.github.com/repos/mralexgray/alcatraz-packages/branches{/branch}', + comments_url: + 'https://api.github.com/repos/mralexgray/alcatraz-packages/comments{/number}', + contents_url: + 'https://api.github.com/repos/mralexgray/alcatraz-packages/contents/{+path}', + git_refs_url: + 'https://api.github.com/repos/mralexgray/alcatraz-packages/git/refs{/sha}', + git_tags_url: + 'https://api.github.com/repos/mralexgray/alcatraz-packages/git/tags{/sha}', + has_projects: true, + releases_url: + 'https://api.github.com/repos/mralexgray/alcatraz-packages/releases{/id}', + statuses_url: + 'https://api.github.com/repos/mralexgray/alcatraz-packages/statuses/{sha}', + allow_forking: true, + assignees_url: + 'https://api.github.com/repos/mralexgray/alcatraz-packages/assignees{/user}', + downloads_url: + 'https://api.github.com/repos/mralexgray/alcatraz-packages/downloads', + has_downloads: true, + languages_url: + 'https://api.github.com/repos/mralexgray/alcatraz-packages/languages', + default_branch: 'master', + milestones_url: + 'https://api.github.com/repos/mralexgray/alcatraz-packages/milestones{/number}', + stargazers_url: + 'https://api.github.com/repos/mralexgray/alcatraz-packages/stargazers', + watchers_count: 0, + deployments_url: + 'https://api.github.com/repos/mralexgray/alcatraz-packages/deployments', + git_commits_url: + 'https://api.github.com/repos/mralexgray/alcatraz-packages/git/commits{/sha}', + subscribers_url: + 'https://api.github.com/repos/mralexgray/alcatraz-packages/subscribers', + contributors_url: + 'https://api.github.com/repos/mralexgray/alcatraz-packages/contributors', + issue_events_url: + 'https://api.github.com/repos/mralexgray/alcatraz-packages/issues/events{/number}', + stargazers_count: 0, + subscription_url: + 'https://api.github.com/repos/mralexgray/alcatraz-packages/subscription', + collaborators_url: + 'https://api.github.com/repos/mralexgray/alcatraz-packages/collaborators{/collaborator}', + issue_comment_url: + 'https://api.github.com/repos/mralexgray/alcatraz-packages/issues/comments{/number}', + notifications_url: + 'https://api.github.com/repos/mralexgray/alcatraz-packages/notifications{?since,all,participating}', + open_issues_count: 0, + web_commit_signoff_required: false, + }, + { + id: 44278362, + url: 'https://api.github.com/repos/mralexgray/alexicons', + fork: true, + name: 'alexicons', + size: 257, + forks: 0, + owner: { + id: 262517, + url: 'https://api.github.com/users/mralexgray', + type: 'User', + login: 'mralexgray', + node_id: 'MDQ6VXNlcjI2MjUxNw==', + html_url: 'https://github.com/mralexgray', + gists_url: 'https://api.github.com/users/mralexgray/gists{/gist_id}', + repos_url: 'https://api.github.com/users/mralexgray/repos', + avatar_url: 'https://avatars.githubusercontent.com/u/262517?v=4', + events_url: 'https://api.github.com/users/mralexgray/events{/privacy}', + site_admin: false, + gravatar_id: '', + starred_url: + 'https://api.github.com/users/mralexgray/starred{/owner}{/repo}', + followers_url: 'https://api.github.com/users/mralexgray/followers', + following_url: + 'https://api.github.com/users/mralexgray/following{/other_user}', + organizations_url: 'https://api.github.com/users/mralexgray/orgs', + subscriptions_url: 'https://api.github.com/users/mralexgray/subscriptions', + received_events_url: + 'https://api.github.com/users/mralexgray/received_events', + }, + topics: [], + git_url: 'git://github.com/mralexgray/alexicons.git', + license: null, + node_id: 'MDEwOlJlcG9zaXRvcnk0NDI3ODM2Mg==', + private: false, + ssh_url: 'git@github.com:mralexgray/alexicons.git', + svn_url: 'https://github.com/mralexgray/alexicons', + archived: false, + disabled: false, + has_wiki: false, + homepage: null, + html_url: 'https://github.com/mralexgray/alexicons', + keys_url: 'https://api.github.com/repos/mralexgray/alexicons/keys{/key_id}', + language: 'CoffeeScript', + tags_url: 'https://api.github.com/repos/mralexgray/alexicons/tags', + watchers: 0, + blobs_url: + 'https://api.github.com/repos/mralexgray/alexicons/git/blobs{/sha}', + clone_url: 'https://github.com/mralexgray/alexicons.git', + forks_url: 'https://api.github.com/repos/mralexgray/alexicons/forks', + full_name: 'mralexgray/alexicons', + has_pages: false, + hooks_url: 'https://api.github.com/repos/mralexgray/alexicons/hooks', + pulls_url: 'https://api.github.com/repos/mralexgray/alexicons/pulls{/number}', + pushed_at: '2015-10-16T03:57:51Z', + teams_url: 'https://api.github.com/repos/mralexgray/alexicons/teams', + trees_url: + 'https://api.github.com/repos/mralexgray/alexicons/git/trees{/sha}', + created_at: '2015-10-14T21:49:39Z', + events_url: 'https://api.github.com/repos/mralexgray/alexicons/events', + has_issues: false, + issues_url: + 'https://api.github.com/repos/mralexgray/alexicons/issues{/number}', + labels_url: 'https://api.github.com/repos/mralexgray/alexicons/labels{/name}', + merges_url: 'https://api.github.com/repos/mralexgray/alexicons/merges', + mirror_url: null, + updated_at: '2015-10-15T06:20:08Z', + visibility: 'public', + archive_url: + 'https://api.github.com/repos/mralexgray/alexicons/{archive_format}{/ref}', + commits_url: + 'https://api.github.com/repos/mralexgray/alexicons/commits{/sha}', + compare_url: + 'https://api.github.com/repos/mralexgray/alexicons/compare/{base}...{head}', + description: 'Get popular cat names', + forks_count: 0, + is_template: false, + open_issues: 0, + branches_url: + 'https://api.github.com/repos/mralexgray/alexicons/branches{/branch}', + comments_url: + 'https://api.github.com/repos/mralexgray/alexicons/comments{/number}', + contents_url: + 'https://api.github.com/repos/mralexgray/alexicons/contents/{+path}', + git_refs_url: + 'https://api.github.com/repos/mralexgray/alexicons/git/refs{/sha}', + git_tags_url: + 'https://api.github.com/repos/mralexgray/alexicons/git/tags{/sha}', + has_projects: true, + releases_url: + 'https://api.github.com/repos/mralexgray/alexicons/releases{/id}', + statuses_url: + 'https://api.github.com/repos/mralexgray/alexicons/statuses/{sha}', + allow_forking: true, + assignees_url: + 'https://api.github.com/repos/mralexgray/alexicons/assignees{/user}', + downloads_url: 'https://api.github.com/repos/mralexgray/alexicons/downloads', + has_downloads: true, + languages_url: 'https://api.github.com/repos/mralexgray/alexicons/languages', + default_branch: 'master', + milestones_url: + 'https://api.github.com/repos/mralexgray/alexicons/milestones{/number}', + stargazers_url: + 'https://api.github.com/repos/mralexgray/alexicons/stargazers', + watchers_count: 0, + deployments_url: + 'https://api.github.com/repos/mralexgray/alexicons/deployments', + git_commits_url: + 'https://api.github.com/repos/mralexgray/alexicons/git/commits{/sha}', + subscribers_url: + 'https://api.github.com/repos/mralexgray/alexicons/subscribers', + contributors_url: + 'https://api.github.com/repos/mralexgray/alexicons/contributors', + issue_events_url: + 'https://api.github.com/repos/mralexgray/alexicons/issues/events{/number}', + stargazers_count: 0, + subscription_url: + 'https://api.github.com/repos/mralexgray/alexicons/subscription', + collaborators_url: + 'https://api.github.com/repos/mralexgray/alexicons/collaborators{/collaborator}', + issue_comment_url: + 'https://api.github.com/repos/mralexgray/alexicons/issues/comments{/number}', + notifications_url: + 'https://api.github.com/repos/mralexgray/alexicons/notifications{?since,all,participating}', + open_issues_count: 0, + web_commit_signoff_required: false, + }, + { + id: 10476467, + url: 'https://api.github.com/repos/mralexgray/Alfred-Google-Translate', + fork: true, + name: 'Alfred-Google-Translate', + size: 103, + forks: 0, + owner: { + id: 262517, + url: 'https://api.github.com/users/mralexgray', + type: 'User', + login: 'mralexgray', + node_id: 'MDQ6VXNlcjI2MjUxNw==', + html_url: 'https://github.com/mralexgray', + gists_url: 'https://api.github.com/users/mralexgray/gists{/gist_id}', + repos_url: 'https://api.github.com/users/mralexgray/repos', + avatar_url: 'https://avatars.githubusercontent.com/u/262517?v=4', + events_url: 'https://api.github.com/users/mralexgray/events{/privacy}', + site_admin: false, + gravatar_id: '', + starred_url: + 'https://api.github.com/users/mralexgray/starred{/owner}{/repo}', + followers_url: 'https://api.github.com/users/mralexgray/followers', + following_url: + 'https://api.github.com/users/mralexgray/following{/other_user}', + organizations_url: 'https://api.github.com/users/mralexgray/orgs', + subscriptions_url: 'https://api.github.com/users/mralexgray/subscriptions', + received_events_url: + 'https://api.github.com/users/mralexgray/received_events', + }, + topics: [], + git_url: 'git://github.com/mralexgray/Alfred-Google-Translate.git', + license: null, + node_id: 'MDEwOlJlcG9zaXRvcnkxMDQ3NjQ2Nw==', + private: false, + ssh_url: 'git@github.com:mralexgray/Alfred-Google-Translate.git', + svn_url: 'https://github.com/mralexgray/Alfred-Google-Translate', + archived: false, + disabled: false, + has_wiki: true, + homepage: null, + html_url: 'https://github.com/mralexgray/Alfred-Google-Translate', + keys_url: + 'https://api.github.com/repos/mralexgray/Alfred-Google-Translate/keys{/key_id}', + language: 'Shell', + tags_url: + 'https://api.github.com/repos/mralexgray/Alfred-Google-Translate/tags', + watchers: 0, + blobs_url: + 'https://api.github.com/repos/mralexgray/Alfred-Google-Translate/git/blobs{/sha}', + clone_url: 'https://github.com/mralexgray/Alfred-Google-Translate.git', + forks_url: + 'https://api.github.com/repos/mralexgray/Alfred-Google-Translate/forks', + full_name: 'mralexgray/Alfred-Google-Translate', + has_pages: false, + hooks_url: + 'https://api.github.com/repos/mralexgray/Alfred-Google-Translate/hooks', + pulls_url: + 'https://api.github.com/repos/mralexgray/Alfred-Google-Translate/pulls{/number}', + pushed_at: '2013-01-12T19:39:03Z', + teams_url: + 'https://api.github.com/repos/mralexgray/Alfred-Google-Translate/teams', + trees_url: + 'https://api.github.com/repos/mralexgray/Alfred-Google-Translate/git/trees{/sha}', + created_at: '2013-06-04T10:45:10Z', + events_url: + 'https://api.github.com/repos/mralexgray/Alfred-Google-Translate/events', + has_issues: false, + issues_url: + 'https://api.github.com/repos/mralexgray/Alfred-Google-Translate/issues{/number}', + labels_url: + 'https://api.github.com/repos/mralexgray/Alfred-Google-Translate/labels{/name}', + merges_url: + 'https://api.github.com/repos/mralexgray/Alfred-Google-Translate/merges', + mirror_url: null, + updated_at: '2013-06-04T10:45:10Z', + visibility: 'public', + archive_url: + 'https://api.github.com/repos/mralexgray/Alfred-Google-Translate/{archive_format}{/ref}', + commits_url: + 'https://api.github.com/repos/mralexgray/Alfred-Google-Translate/commits{/sha}', + compare_url: + 'https://api.github.com/repos/mralexgray/Alfred-Google-Translate/compare/{base}...{head}', + description: 'Extension for Alfred that will do a Google translate for you', + forks_count: 0, + is_template: false, + open_issues: 0, + branches_url: + 'https://api.github.com/repos/mralexgray/Alfred-Google-Translate/branches{/branch}', + comments_url: + 'https://api.github.com/repos/mralexgray/Alfred-Google-Translate/comments{/number}', + contents_url: + 'https://api.github.com/repos/mralexgray/Alfred-Google-Translate/contents/{+path}', + git_refs_url: + 'https://api.github.com/repos/mralexgray/Alfred-Google-Translate/git/refs{/sha}', + git_tags_url: + 'https://api.github.com/repos/mralexgray/Alfred-Google-Translate/git/tags{/sha}', + has_projects: true, + releases_url: + 'https://api.github.com/repos/mralexgray/Alfred-Google-Translate/releases{/id}', + statuses_url: + 'https://api.github.com/repos/mralexgray/Alfred-Google-Translate/statuses/{sha}', + allow_forking: true, + assignees_url: + 'https://api.github.com/repos/mralexgray/Alfred-Google-Translate/assignees{/user}', + downloads_url: + 'https://api.github.com/repos/mralexgray/Alfred-Google-Translate/downloads', + has_downloads: true, + languages_url: + 'https://api.github.com/repos/mralexgray/Alfred-Google-Translate/languages', + default_branch: 'master', + milestones_url: + 'https://api.github.com/repos/mralexgray/Alfred-Google-Translate/milestones{/number}', + stargazers_url: + 'https://api.github.com/repos/mralexgray/Alfred-Google-Translate/stargazers', + watchers_count: 0, + deployments_url: + 'https://api.github.com/repos/mralexgray/Alfred-Google-Translate/deployments', + git_commits_url: + 'https://api.github.com/repos/mralexgray/Alfred-Google-Translate/git/commits{/sha}', + subscribers_url: + 'https://api.github.com/repos/mralexgray/Alfred-Google-Translate/subscribers', + contributors_url: + 'https://api.github.com/repos/mralexgray/Alfred-Google-Translate/contributors', + issue_events_url: + 'https://api.github.com/repos/mralexgray/Alfred-Google-Translate/issues/events{/number}', + stargazers_count: 0, + subscription_url: + 'https://api.github.com/repos/mralexgray/Alfred-Google-Translate/subscription', + collaborators_url: + 'https://api.github.com/repos/mralexgray/Alfred-Google-Translate/collaborators{/collaborator}', + issue_comment_url: + 'https://api.github.com/repos/mralexgray/Alfred-Google-Translate/issues/comments{/number}', + notifications_url: + 'https://api.github.com/repos/mralexgray/Alfred-Google-Translate/notifications{?since,all,participating}', + open_issues_count: 0, + web_commit_signoff_required: false, + }, + { + id: 5524019, + url: 'https://api.github.com/repos/mralexgray/Amber', + fork: false, + name: 'Amber', + size: 48, + forks: 0, + owner: { + id: 262517, + url: 'https://api.github.com/users/mralexgray', + type: 'User', + login: 'mralexgray', + node_id: 'MDQ6VXNlcjI2MjUxNw==', + html_url: 'https://github.com/mralexgray', + gists_url: 'https://api.github.com/users/mralexgray/gists{/gist_id}', + repos_url: 'https://api.github.com/users/mralexgray/repos', + avatar_url: 'https://avatars.githubusercontent.com/u/262517?v=4', + events_url: 'https://api.github.com/users/mralexgray/events{/privacy}', + site_admin: false, + gravatar_id: '', + starred_url: + 'https://api.github.com/users/mralexgray/starred{/owner}{/repo}', + followers_url: 'https://api.github.com/users/mralexgray/followers', + following_url: + 'https://api.github.com/users/mralexgray/following{/other_user}', + organizations_url: 'https://api.github.com/users/mralexgray/orgs', + subscriptions_url: 'https://api.github.com/users/mralexgray/subscriptions', + received_events_url: + 'https://api.github.com/users/mralexgray/received_events', + }, + topics: [], + git_url: 'git://github.com/mralexgray/Amber.git', + license: null, + node_id: 'MDEwOlJlcG9zaXRvcnk1NTI0MDE5', + private: false, + ssh_url: 'git@github.com:mralexgray/Amber.git', + svn_url: 'https://github.com/mralexgray/Amber', + archived: false, + disabled: false, + has_wiki: true, + homepage: null, + html_url: 'https://github.com/mralexgray/Amber', + keys_url: 'https://api.github.com/repos/mralexgray/Amber/keys{/key_id}', + language: null, + tags_url: 'https://api.github.com/repos/mralexgray/Amber/tags', + watchers: 0, + blobs_url: 'https://api.github.com/repos/mralexgray/Amber/git/blobs{/sha}', + clone_url: 'https://github.com/mralexgray/Amber.git', + forks_url: 'https://api.github.com/repos/mralexgray/Amber/forks', + full_name: 'mralexgray/Amber', + has_pages: false, + hooks_url: 'https://api.github.com/repos/mralexgray/Amber/hooks', + pulls_url: 'https://api.github.com/repos/mralexgray/Amber/pulls{/number}', + pushed_at: '2012-08-23T10:38:25Z', + teams_url: 'https://api.github.com/repos/mralexgray/Amber/teams', + trees_url: 'https://api.github.com/repos/mralexgray/Amber/git/trees{/sha}', + created_at: '2012-08-23T10:38:24Z', + events_url: 'https://api.github.com/repos/mralexgray/Amber/events', + has_issues: true, + issues_url: 'https://api.github.com/repos/mralexgray/Amber/issues{/number}', + labels_url: 'https://api.github.com/repos/mralexgray/Amber/labels{/name}', + merges_url: 'https://api.github.com/repos/mralexgray/Amber/merges', + mirror_url: null, + updated_at: '2013-01-11T22:25:35Z', + visibility: 'public', + archive_url: + 'https://api.github.com/repos/mralexgray/Amber/{archive_format}{/ref}', + commits_url: 'https://api.github.com/repos/mralexgray/Amber/commits{/sha}', + compare_url: + 'https://api.github.com/repos/mralexgray/Amber/compare/{base}...{head}', + description: 'Fork of the difficult-to-deal-with Amber.framework', + forks_count: 0, + is_template: false, + open_issues: 0, + branches_url: + 'https://api.github.com/repos/mralexgray/Amber/branches{/branch}', + comments_url: + 'https://api.github.com/repos/mralexgray/Amber/comments{/number}', + contents_url: + 'https://api.github.com/repos/mralexgray/Amber/contents/{+path}', + git_refs_url: 'https://api.github.com/repos/mralexgray/Amber/git/refs{/sha}', + git_tags_url: 'https://api.github.com/repos/mralexgray/Amber/git/tags{/sha}', + has_projects: true, + releases_url: 'https://api.github.com/repos/mralexgray/Amber/releases{/id}', + statuses_url: 'https://api.github.com/repos/mralexgray/Amber/statuses/{sha}', + allow_forking: true, + assignees_url: + 'https://api.github.com/repos/mralexgray/Amber/assignees{/user}', + downloads_url: 'https://api.github.com/repos/mralexgray/Amber/downloads', + has_downloads: true, + languages_url: 'https://api.github.com/repos/mralexgray/Amber/languages', + default_branch: 'master', + milestones_url: + 'https://api.github.com/repos/mralexgray/Amber/milestones{/number}', + stargazers_url: 'https://api.github.com/repos/mralexgray/Amber/stargazers', + watchers_count: 0, + deployments_url: 'https://api.github.com/repos/mralexgray/Amber/deployments', + git_commits_url: + 'https://api.github.com/repos/mralexgray/Amber/git/commits{/sha}', + subscribers_url: 'https://api.github.com/repos/mralexgray/Amber/subscribers', + contributors_url: + 'https://api.github.com/repos/mralexgray/Amber/contributors', + issue_events_url: + 'https://api.github.com/repos/mralexgray/Amber/issues/events{/number}', + stargazers_count: 0, + subscription_url: + 'https://api.github.com/repos/mralexgray/Amber/subscription', + collaborators_url: + 'https://api.github.com/repos/mralexgray/Amber/collaborators{/collaborator}', + issue_comment_url: + 'https://api.github.com/repos/mralexgray/Amber/issues/comments{/number}', + notifications_url: + 'https://api.github.com/repos/mralexgray/Amber/notifications{?since,all,participating}', + open_issues_count: 0, + web_commit_signoff_required: false, + }, + { + id: 10809060, + url: 'https://api.github.com/repos/mralexgray/Amethyst', + fork: true, + name: 'Amethyst', + size: 12623, + forks: 0, + owner: { + id: 262517, + url: 'https://api.github.com/users/mralexgray', + type: 'User', + login: 'mralexgray', + node_id: 'MDQ6VXNlcjI2MjUxNw==', + html_url: 'https://github.com/mralexgray', + gists_url: 'https://api.github.com/users/mralexgray/gists{/gist_id}', + repos_url: 'https://api.github.com/users/mralexgray/repos', + avatar_url: 'https://avatars.githubusercontent.com/u/262517?v=4', + events_url: 'https://api.github.com/users/mralexgray/events{/privacy}', + site_admin: false, + gravatar_id: '', + starred_url: + 'https://api.github.com/users/mralexgray/starred{/owner}{/repo}', + followers_url: 'https://api.github.com/users/mralexgray/followers', + following_url: + 'https://api.github.com/users/mralexgray/following{/other_user}', + organizations_url: 'https://api.github.com/users/mralexgray/orgs', + subscriptions_url: 'https://api.github.com/users/mralexgray/subscriptions', + received_events_url: + 'https://api.github.com/users/mralexgray/received_events', + }, + topics: [], + git_url: 'git://github.com/mralexgray/Amethyst.git', + license: { + key: 'mit', + url: 'https://api.github.com/licenses/mit', + name: 'MIT License', + node_id: 'MDc6TGljZW5zZTEz', + spdx_id: 'MIT', + }, + node_id: 'MDEwOlJlcG9zaXRvcnkxMDgwOTA2MA==', + private: false, + ssh_url: 'git@github.com:mralexgray/Amethyst.git', + svn_url: 'https://github.com/mralexgray/Amethyst', + archived: false, + disabled: false, + has_wiki: true, + homepage: 'http://ianyh.github.io/Amethyst/', + html_url: 'https://github.com/mralexgray/Amethyst', + keys_url: 'https://api.github.com/repos/mralexgray/Amethyst/keys{/key_id}', + language: 'Objective-C', + tags_url: 'https://api.github.com/repos/mralexgray/Amethyst/tags', + watchers: 0, + blobs_url: 'https://api.github.com/repos/mralexgray/Amethyst/git/blobs{/sha}', + clone_url: 'https://github.com/mralexgray/Amethyst.git', + forks_url: 'https://api.github.com/repos/mralexgray/Amethyst/forks', + full_name: 'mralexgray/Amethyst', + has_pages: false, + hooks_url: 'https://api.github.com/repos/mralexgray/Amethyst/hooks', + pulls_url: 'https://api.github.com/repos/mralexgray/Amethyst/pulls{/number}', + pushed_at: '2013-06-18T02:54:11Z', + teams_url: 'https://api.github.com/repos/mralexgray/Amethyst/teams', + trees_url: 'https://api.github.com/repos/mralexgray/Amethyst/git/trees{/sha}', + created_at: '2013-06-20T00:34:22Z', + events_url: 'https://api.github.com/repos/mralexgray/Amethyst/events', + has_issues: false, + issues_url: + 'https://api.github.com/repos/mralexgray/Amethyst/issues{/number}', + labels_url: 'https://api.github.com/repos/mralexgray/Amethyst/labels{/name}', + merges_url: 'https://api.github.com/repos/mralexgray/Amethyst/merges', + mirror_url: null, + updated_at: '2013-06-20T00:34:22Z', + visibility: 'public', + archive_url: + 'https://api.github.com/repos/mralexgray/Amethyst/{archive_format}{/ref}', + commits_url: 'https://api.github.com/repos/mralexgray/Amethyst/commits{/sha}', + compare_url: + 'https://api.github.com/repos/mralexgray/Amethyst/compare/{base}...{head}', + description: 'Tiling window manager for OS X.', + forks_count: 0, + is_template: false, + open_issues: 0, + branches_url: + 'https://api.github.com/repos/mralexgray/Amethyst/branches{/branch}', + comments_url: + 'https://api.github.com/repos/mralexgray/Amethyst/comments{/number}', + contents_url: + 'https://api.github.com/repos/mralexgray/Amethyst/contents/{+path}', + git_refs_url: + 'https://api.github.com/repos/mralexgray/Amethyst/git/refs{/sha}', + git_tags_url: + 'https://api.github.com/repos/mralexgray/Amethyst/git/tags{/sha}', + has_projects: true, + releases_url: + 'https://api.github.com/repos/mralexgray/Amethyst/releases{/id}', + statuses_url: + 'https://api.github.com/repos/mralexgray/Amethyst/statuses/{sha}', + allow_forking: true, + assignees_url: + 'https://api.github.com/repos/mralexgray/Amethyst/assignees{/user}', + downloads_url: 'https://api.github.com/repos/mralexgray/Amethyst/downloads', + has_downloads: true, + languages_url: 'https://api.github.com/repos/mralexgray/Amethyst/languages', + default_branch: 'master', + milestones_url: + 'https://api.github.com/repos/mralexgray/Amethyst/milestones{/number}', + stargazers_url: 'https://api.github.com/repos/mralexgray/Amethyst/stargazers', + watchers_count: 0, + deployments_url: + 'https://api.github.com/repos/mralexgray/Amethyst/deployments', + git_commits_url: + 'https://api.github.com/repos/mralexgray/Amethyst/git/commits{/sha}', + subscribers_url: + 'https://api.github.com/repos/mralexgray/Amethyst/subscribers', + contributors_url: + 'https://api.github.com/repos/mralexgray/Amethyst/contributors', + issue_events_url: + 'https://api.github.com/repos/mralexgray/Amethyst/issues/events{/number}', + stargazers_count: 0, + subscription_url: + 'https://api.github.com/repos/mralexgray/Amethyst/subscription', + collaborators_url: + 'https://api.github.com/repos/mralexgray/Amethyst/collaborators{/collaborator}', + issue_comment_url: + 'https://api.github.com/repos/mralexgray/Amethyst/issues/comments{/number}', + notifications_url: + 'https://api.github.com/repos/mralexgray/Amethyst/notifications{?since,all,participating}', + open_issues_count: 0, + web_commit_signoff_required: false, + }, + { + id: 3684286, + url: 'https://api.github.com/repos/mralexgray/Animated-Paths', + fork: true, + name: 'Animated-Paths', + size: 411, + forks: 0, + owner: { + id: 262517, + url: 'https://api.github.com/users/mralexgray', + type: 'User', + login: 'mralexgray', + node_id: 'MDQ6VXNlcjI2MjUxNw==', + html_url: 'https://github.com/mralexgray', + gists_url: 'https://api.github.com/users/mralexgray/gists{/gist_id}', + repos_url: 'https://api.github.com/users/mralexgray/repos', + avatar_url: 'https://avatars.githubusercontent.com/u/262517?v=4', + events_url: 'https://api.github.com/users/mralexgray/events{/privacy}', + site_admin: false, + gravatar_id: '', + starred_url: + 'https://api.github.com/users/mralexgray/starred{/owner}{/repo}', + followers_url: 'https://api.github.com/users/mralexgray/followers', + following_url: + 'https://api.github.com/users/mralexgray/following{/other_user}', + organizations_url: 'https://api.github.com/users/mralexgray/orgs', + subscriptions_url: 'https://api.github.com/users/mralexgray/subscriptions', + received_events_url: + 'https://api.github.com/users/mralexgray/received_events', + }, + topics: [], + git_url: 'git://github.com/mralexgray/Animated-Paths.git', + license: { + key: 'other', + url: null, + name: 'Other', + node_id: 'MDc6TGljZW5zZTA=', + spdx_id: 'NOASSERTION', + }, + node_id: 'MDEwOlJlcG9zaXRvcnkzNjg0Mjg2', + private: false, + ssh_url: 'git@github.com:mralexgray/Animated-Paths.git', + svn_url: 'https://github.com/mralexgray/Animated-Paths', + archived: false, + disabled: false, + has_wiki: true, + homepage: + 'http://oleb.net/blog/2010/12/animating-drawing-of-cgpath-with-cashapelayer/', + html_url: 'https://github.com/mralexgray/Animated-Paths', + keys_url: + 'https://api.github.com/repos/mralexgray/Animated-Paths/keys{/key_id}', + language: 'Objective-C', + tags_url: 'https://api.github.com/repos/mralexgray/Animated-Paths/tags', + watchers: 2, + blobs_url: + 'https://api.github.com/repos/mralexgray/Animated-Paths/git/blobs{/sha}', + clone_url: 'https://github.com/mralexgray/Animated-Paths.git', + forks_url: 'https://api.github.com/repos/mralexgray/Animated-Paths/forks', + full_name: 'mralexgray/Animated-Paths', + has_pages: false, + hooks_url: 'https://api.github.com/repos/mralexgray/Animated-Paths/hooks', + pulls_url: + 'https://api.github.com/repos/mralexgray/Animated-Paths/pulls{/number}', + pushed_at: '2010-12-30T20:56:51Z', + teams_url: 'https://api.github.com/repos/mralexgray/Animated-Paths/teams', + trees_url: + 'https://api.github.com/repos/mralexgray/Animated-Paths/git/trees{/sha}', + created_at: '2012-03-11T02:56:38Z', + events_url: 'https://api.github.com/repos/mralexgray/Animated-Paths/events', + has_issues: false, + issues_url: + 'https://api.github.com/repos/mralexgray/Animated-Paths/issues{/number}', + labels_url: + 'https://api.github.com/repos/mralexgray/Animated-Paths/labels{/name}', + merges_url: 'https://api.github.com/repos/mralexgray/Animated-Paths/merges', + mirror_url: null, + updated_at: '2013-01-08T04:12:21Z', + visibility: 'public', + archive_url: + 'https://api.github.com/repos/mralexgray/Animated-Paths/{archive_format}{/ref}', + commits_url: + 'https://api.github.com/repos/mralexgray/Animated-Paths/commits{/sha}', + compare_url: + 'https://api.github.com/repos/mralexgray/Animated-Paths/compare/{base}...{head}', + description: + 'Demo project: Animating the drawing of a CGPath with CAShapeLayer.strokeEnd', + forks_count: 0, + is_template: false, + open_issues: 0, + branches_url: + 'https://api.github.com/repos/mralexgray/Animated-Paths/branches{/branch}', + comments_url: + 'https://api.github.com/repos/mralexgray/Animated-Paths/comments{/number}', + contents_url: + 'https://api.github.com/repos/mralexgray/Animated-Paths/contents/{+path}', + git_refs_url: + 'https://api.github.com/repos/mralexgray/Animated-Paths/git/refs{/sha}', + git_tags_url: + 'https://api.github.com/repos/mralexgray/Animated-Paths/git/tags{/sha}', + has_projects: true, + releases_url: + 'https://api.github.com/repos/mralexgray/Animated-Paths/releases{/id}', + statuses_url: + 'https://api.github.com/repos/mralexgray/Animated-Paths/statuses/{sha}', + allow_forking: true, + assignees_url: + 'https://api.github.com/repos/mralexgray/Animated-Paths/assignees{/user}', + downloads_url: + 'https://api.github.com/repos/mralexgray/Animated-Paths/downloads', + has_downloads: true, + languages_url: + 'https://api.github.com/repos/mralexgray/Animated-Paths/languages', + default_branch: 'master', + milestones_url: + 'https://api.github.com/repos/mralexgray/Animated-Paths/milestones{/number}', + stargazers_url: + 'https://api.github.com/repos/mralexgray/Animated-Paths/stargazers', + watchers_count: 2, + deployments_url: + 'https://api.github.com/repos/mralexgray/Animated-Paths/deployments', + git_commits_url: + 'https://api.github.com/repos/mralexgray/Animated-Paths/git/commits{/sha}', + subscribers_url: + 'https://api.github.com/repos/mralexgray/Animated-Paths/subscribers', + contributors_url: + 'https://api.github.com/repos/mralexgray/Animated-Paths/contributors', + issue_events_url: + 'https://api.github.com/repos/mralexgray/Animated-Paths/issues/events{/number}', + stargazers_count: 2, + subscription_url: + 'https://api.github.com/repos/mralexgray/Animated-Paths/subscription', + collaborators_url: + 'https://api.github.com/repos/mralexgray/Animated-Paths/collaborators{/collaborator}', + issue_comment_url: + 'https://api.github.com/repos/mralexgray/Animated-Paths/issues/comments{/number}', + notifications_url: + 'https://api.github.com/repos/mralexgray/Animated-Paths/notifications{?since,all,participating}', + open_issues_count: 0, + web_commit_signoff_required: false, + }, + { + id: 16662874, + url: 'https://api.github.com/repos/mralexgray/AnsiLove.framework', + fork: true, + name: 'AnsiLove.framework', + size: 3780, + forks: 0, + owner: { + id: 262517, + url: 'https://api.github.com/users/mralexgray', + type: 'User', + login: 'mralexgray', + node_id: 'MDQ6VXNlcjI2MjUxNw==', + html_url: 'https://github.com/mralexgray', + gists_url: 'https://api.github.com/users/mralexgray/gists{/gist_id}', + repos_url: 'https://api.github.com/users/mralexgray/repos', + avatar_url: 'https://avatars.githubusercontent.com/u/262517?v=4', + events_url: 'https://api.github.com/users/mralexgray/events{/privacy}', + site_admin: false, + gravatar_id: '', + starred_url: + 'https://api.github.com/users/mralexgray/starred{/owner}{/repo}', + followers_url: 'https://api.github.com/users/mralexgray/followers', + following_url: + 'https://api.github.com/users/mralexgray/following{/other_user}', + organizations_url: 'https://api.github.com/users/mralexgray/orgs', + subscriptions_url: 'https://api.github.com/users/mralexgray/subscriptions', + received_events_url: + 'https://api.github.com/users/mralexgray/received_events', + }, + topics: [], + git_url: 'git://github.com/mralexgray/AnsiLove.framework.git', + license: { + key: 'other', + url: null, + name: 'Other', + node_id: 'MDc6TGljZW5zZTA=', + spdx_id: 'NOASSERTION', + }, + node_id: 'MDEwOlJlcG9zaXRvcnkxNjY2Mjg3NA==', + private: false, + ssh_url: 'git@github.com:mralexgray/AnsiLove.framework.git', + svn_url: 'https://github.com/mralexgray/AnsiLove.framework', + archived: false, + disabled: false, + has_wiki: false, + homepage: 'http://byteproject.net', + html_url: 'https://github.com/mralexgray/AnsiLove.framework', + keys_url: + 'https://api.github.com/repos/mralexgray/AnsiLove.framework/keys{/key_id}', + language: 'M', + tags_url: 'https://api.github.com/repos/mralexgray/AnsiLove.framework/tags', + watchers: 0, + blobs_url: + 'https://api.github.com/repos/mralexgray/AnsiLove.framework/git/blobs{/sha}', + clone_url: 'https://github.com/mralexgray/AnsiLove.framework.git', + forks_url: 'https://api.github.com/repos/mralexgray/AnsiLove.framework/forks', + full_name: 'mralexgray/AnsiLove.framework', + has_pages: false, + hooks_url: 'https://api.github.com/repos/mralexgray/AnsiLove.framework/hooks', + pulls_url: + 'https://api.github.com/repos/mralexgray/AnsiLove.framework/pulls{/number}', + pushed_at: '2013-10-04T14:08:38Z', + teams_url: 'https://api.github.com/repos/mralexgray/AnsiLove.framework/teams', + trees_url: + 'https://api.github.com/repos/mralexgray/AnsiLove.framework/git/trees{/sha}', + created_at: '2014-02-09T08:30:27Z', + events_url: + 'https://api.github.com/repos/mralexgray/AnsiLove.framework/events', + has_issues: false, + issues_url: + 'https://api.github.com/repos/mralexgray/AnsiLove.framework/issues{/number}', + labels_url: + 'https://api.github.com/repos/mralexgray/AnsiLove.framework/labels{/name}', + merges_url: + 'https://api.github.com/repos/mralexgray/AnsiLove.framework/merges', + mirror_url: null, + updated_at: '2015-01-13T20:41:46Z', + visibility: 'public', + archive_url: + 'https://api.github.com/repos/mralexgray/AnsiLove.framework/{archive_format}{/ref}', + commits_url: + 'https://api.github.com/repos/mralexgray/AnsiLove.framework/commits{/sha}', + compare_url: + 'https://api.github.com/repos/mralexgray/AnsiLove.framework/compare/{base}...{head}', + description: 'Cocoa Framework for rendering ANSi / ASCII art', + forks_count: 0, + is_template: false, + open_issues: 0, + branches_url: + 'https://api.github.com/repos/mralexgray/AnsiLove.framework/branches{/branch}', + comments_url: + 'https://api.github.com/repos/mralexgray/AnsiLove.framework/comments{/number}', + contents_url: + 'https://api.github.com/repos/mralexgray/AnsiLove.framework/contents/{+path}', + git_refs_url: + 'https://api.github.com/repos/mralexgray/AnsiLove.framework/git/refs{/sha}', + git_tags_url: + 'https://api.github.com/repos/mralexgray/AnsiLove.framework/git/tags{/sha}', + has_projects: true, + releases_url: + 'https://api.github.com/repos/mralexgray/AnsiLove.framework/releases{/id}', + statuses_url: + 'https://api.github.com/repos/mralexgray/AnsiLove.framework/statuses/{sha}', + allow_forking: true, + assignees_url: + 'https://api.github.com/repos/mralexgray/AnsiLove.framework/assignees{/user}', + downloads_url: + 'https://api.github.com/repos/mralexgray/AnsiLove.framework/downloads', + has_downloads: true, + languages_url: + 'https://api.github.com/repos/mralexgray/AnsiLove.framework/languages', + default_branch: 'master', + milestones_url: + 'https://api.github.com/repos/mralexgray/AnsiLove.framework/milestones{/number}', + stargazers_url: + 'https://api.github.com/repos/mralexgray/AnsiLove.framework/stargazers', + watchers_count: 0, + deployments_url: + 'https://api.github.com/repos/mralexgray/AnsiLove.framework/deployments', + git_commits_url: + 'https://api.github.com/repos/mralexgray/AnsiLove.framework/git/commits{/sha}', + subscribers_url: + 'https://api.github.com/repos/mralexgray/AnsiLove.framework/subscribers', + contributors_url: + 'https://api.github.com/repos/mralexgray/AnsiLove.framework/contributors', + issue_events_url: + 'https://api.github.com/repos/mralexgray/AnsiLove.framework/issues/events{/number}', + stargazers_count: 0, + subscription_url: + 'https://api.github.com/repos/mralexgray/AnsiLove.framework/subscription', + collaborators_url: + 'https://api.github.com/repos/mralexgray/AnsiLove.framework/collaborators{/collaborator}', + issue_comment_url: + 'https://api.github.com/repos/mralexgray/AnsiLove.framework/issues/comments{/number}', + notifications_url: + 'https://api.github.com/repos/mralexgray/AnsiLove.framework/notifications{?since,all,participating}', + open_issues_count: 0, + web_commit_signoff_required: false, + }, + { + id: 5189563, + url: 'https://api.github.com/repos/mralexgray/ANTrackBar', + fork: true, + name: 'ANTrackBar', + size: 94, + forks: 0, + owner: { + id: 262517, + url: 'https://api.github.com/users/mralexgray', + type: 'User', + login: 'mralexgray', + node_id: 'MDQ6VXNlcjI2MjUxNw==', + html_url: 'https://github.com/mralexgray', + gists_url: 'https://api.github.com/users/mralexgray/gists{/gist_id}', + repos_url: 'https://api.github.com/users/mralexgray/repos', + avatar_url: 'https://avatars.githubusercontent.com/u/262517?v=4', + events_url: 'https://api.github.com/users/mralexgray/events{/privacy}', + site_admin: false, + gravatar_id: '', + starred_url: + 'https://api.github.com/users/mralexgray/starred{/owner}{/repo}', + followers_url: 'https://api.github.com/users/mralexgray/followers', + following_url: + 'https://api.github.com/users/mralexgray/following{/other_user}', + organizations_url: 'https://api.github.com/users/mralexgray/orgs', + subscriptions_url: 'https://api.github.com/users/mralexgray/subscriptions', + received_events_url: + 'https://api.github.com/users/mralexgray/received_events', + }, + topics: [], + git_url: 'git://github.com/mralexgray/ANTrackBar.git', + license: null, + node_id: 'MDEwOlJlcG9zaXRvcnk1MTg5NTYz', + private: false, + ssh_url: 'git@github.com:mralexgray/ANTrackBar.git', + svn_url: 'https://github.com/mralexgray/ANTrackBar', + archived: false, + disabled: false, + has_wiki: true, + homepage: '', + html_url: 'https://github.com/mralexgray/ANTrackBar', + keys_url: 'https://api.github.com/repos/mralexgray/ANTrackBar/keys{/key_id}', + language: 'Objective-C', + tags_url: 'https://api.github.com/repos/mralexgray/ANTrackBar/tags', + watchers: 2, + blobs_url: + 'https://api.github.com/repos/mralexgray/ANTrackBar/git/blobs{/sha}', + clone_url: 'https://github.com/mralexgray/ANTrackBar.git', + forks_url: 'https://api.github.com/repos/mralexgray/ANTrackBar/forks', + full_name: 'mralexgray/ANTrackBar', + has_pages: false, + hooks_url: 'https://api.github.com/repos/mralexgray/ANTrackBar/hooks', + pulls_url: + 'https://api.github.com/repos/mralexgray/ANTrackBar/pulls{/number}', + pushed_at: '2012-03-09T01:40:02Z', + teams_url: 'https://api.github.com/repos/mralexgray/ANTrackBar/teams', + trees_url: + 'https://api.github.com/repos/mralexgray/ANTrackBar/git/trees{/sha}', + created_at: '2012-07-26T08:17:22Z', + events_url: 'https://api.github.com/repos/mralexgray/ANTrackBar/events', + has_issues: false, + issues_url: + 'https://api.github.com/repos/mralexgray/ANTrackBar/issues{/number}', + labels_url: + 'https://api.github.com/repos/mralexgray/ANTrackBar/labels{/name}', + merges_url: 'https://api.github.com/repos/mralexgray/ANTrackBar/merges', + mirror_url: null, + updated_at: '2013-01-11T10:29:56Z', + visibility: 'public', + archive_url: + 'https://api.github.com/repos/mralexgray/ANTrackBar/{archive_format}{/ref}', + commits_url: + 'https://api.github.com/repos/mralexgray/ANTrackBar/commits{/sha}', + compare_url: + 'https://api.github.com/repos/mralexgray/ANTrackBar/compare/{base}...{head}', + description: 'An easy-to-use Cocoa seek bar with a pleasing appearance', + forks_count: 0, + is_template: false, + open_issues: 0, + branches_url: + 'https://api.github.com/repos/mralexgray/ANTrackBar/branches{/branch}', + comments_url: + 'https://api.github.com/repos/mralexgray/ANTrackBar/comments{/number}', + contents_url: + 'https://api.github.com/repos/mralexgray/ANTrackBar/contents/{+path}', + git_refs_url: + 'https://api.github.com/repos/mralexgray/ANTrackBar/git/refs{/sha}', + git_tags_url: + 'https://api.github.com/repos/mralexgray/ANTrackBar/git/tags{/sha}', + has_projects: true, + releases_url: + 'https://api.github.com/repos/mralexgray/ANTrackBar/releases{/id}', + statuses_url: + 'https://api.github.com/repos/mralexgray/ANTrackBar/statuses/{sha}', + allow_forking: true, + assignees_url: + 'https://api.github.com/repos/mralexgray/ANTrackBar/assignees{/user}', + downloads_url: 'https://api.github.com/repos/mralexgray/ANTrackBar/downloads', + has_downloads: true, + languages_url: 'https://api.github.com/repos/mralexgray/ANTrackBar/languages', + default_branch: 'master', + milestones_url: + 'https://api.github.com/repos/mralexgray/ANTrackBar/milestones{/number}', + stargazers_url: + 'https://api.github.com/repos/mralexgray/ANTrackBar/stargazers', + watchers_count: 2, + deployments_url: + 'https://api.github.com/repos/mralexgray/ANTrackBar/deployments', + git_commits_url: + 'https://api.github.com/repos/mralexgray/ANTrackBar/git/commits{/sha}', + subscribers_url: + 'https://api.github.com/repos/mralexgray/ANTrackBar/subscribers', + contributors_url: + 'https://api.github.com/repos/mralexgray/ANTrackBar/contributors', + issue_events_url: + 'https://api.github.com/repos/mralexgray/ANTrackBar/issues/events{/number}', + stargazers_count: 2, + subscription_url: + 'https://api.github.com/repos/mralexgray/ANTrackBar/subscription', + collaborators_url: + 'https://api.github.com/repos/mralexgray/ANTrackBar/collaborators{/collaborator}', + issue_comment_url: + 'https://api.github.com/repos/mralexgray/ANTrackBar/issues/comments{/number}', + notifications_url: + 'https://api.github.com/repos/mralexgray/ANTrackBar/notifications{?since,all,participating}', + open_issues_count: 0, + web_commit_signoff_required: false, + }, + { + id: 16240152, + url: 'https://api.github.com/repos/mralexgray/AOP-in-Objective-C', + fork: true, + name: 'AOP-in-Objective-C', + size: 340, + forks: 1, + owner: { + id: 262517, + url: 'https://api.github.com/users/mralexgray', + type: 'User', + login: 'mralexgray', + node_id: 'MDQ6VXNlcjI2MjUxNw==', + html_url: 'https://github.com/mralexgray', + gists_url: 'https://api.github.com/users/mralexgray/gists{/gist_id}', + repos_url: 'https://api.github.com/users/mralexgray/repos', + avatar_url: 'https://avatars.githubusercontent.com/u/262517?v=4', + events_url: 'https://api.github.com/users/mralexgray/events{/privacy}', + site_admin: false, + gravatar_id: '', + starred_url: + 'https://api.github.com/users/mralexgray/starred{/owner}{/repo}', + followers_url: 'https://api.github.com/users/mralexgray/followers', + following_url: + 'https://api.github.com/users/mralexgray/following{/other_user}', + organizations_url: 'https://api.github.com/users/mralexgray/orgs', + subscriptions_url: 'https://api.github.com/users/mralexgray/subscriptions', + received_events_url: + 'https://api.github.com/users/mralexgray/received_events', + }, + topics: [], + git_url: 'git://github.com/mralexgray/AOP-in-Objective-C.git', + license: null, + node_id: 'MDEwOlJlcG9zaXRvcnkxNjI0MDE1Mg==', + private: false, + ssh_url: 'git@github.com:mralexgray/AOP-in-Objective-C.git', + svn_url: 'https://github.com/mralexgray/AOP-in-Objective-C', + archived: false, + disabled: false, + has_wiki: true, + homepage: 'http://innoli.hu/en/opensource/', + html_url: 'https://github.com/mralexgray/AOP-in-Objective-C', + keys_url: + 'https://api.github.com/repos/mralexgray/AOP-in-Objective-C/keys{/key_id}', + language: 'Objective-C', + tags_url: 'https://api.github.com/repos/mralexgray/AOP-in-Objective-C/tags', + watchers: 0, + blobs_url: + 'https://api.github.com/repos/mralexgray/AOP-in-Objective-C/git/blobs{/sha}', + clone_url: 'https://github.com/mralexgray/AOP-in-Objective-C.git', + forks_url: 'https://api.github.com/repos/mralexgray/AOP-in-Objective-C/forks', + full_name: 'mralexgray/AOP-in-Objective-C', + has_pages: false, + hooks_url: 'https://api.github.com/repos/mralexgray/AOP-in-Objective-C/hooks', + pulls_url: + 'https://api.github.com/repos/mralexgray/AOP-in-Objective-C/pulls{/number}', + pushed_at: '2014-02-12T16:23:20Z', + teams_url: 'https://api.github.com/repos/mralexgray/AOP-in-Objective-C/teams', + trees_url: + 'https://api.github.com/repos/mralexgray/AOP-in-Objective-C/git/trees{/sha}', + created_at: '2014-01-25T21:18:04Z', + events_url: + 'https://api.github.com/repos/mralexgray/AOP-in-Objective-C/events', + has_issues: false, + issues_url: + 'https://api.github.com/repos/mralexgray/AOP-in-Objective-C/issues{/number}', + labels_url: + 'https://api.github.com/repos/mralexgray/AOP-in-Objective-C/labels{/name}', + merges_url: + 'https://api.github.com/repos/mralexgray/AOP-in-Objective-C/merges', + mirror_url: null, + updated_at: '2014-06-19T19:38:12Z', + visibility: 'public', + archive_url: + 'https://api.github.com/repos/mralexgray/AOP-in-Objective-C/{archive_format}{/ref}', + commits_url: + 'https://api.github.com/repos/mralexgray/AOP-in-Objective-C/commits{/sha}', + compare_url: + 'https://api.github.com/repos/mralexgray/AOP-in-Objective-C/compare/{base}...{head}', + description: + 'An NSProxy based library for easily enabling AOP like functionality in Objective-C.', + forks_count: 1, + is_template: false, + open_issues: 0, + branches_url: + 'https://api.github.com/repos/mralexgray/AOP-in-Objective-C/branches{/branch}', + comments_url: + 'https://api.github.com/repos/mralexgray/AOP-in-Objective-C/comments{/number}', + contents_url: + 'https://api.github.com/repos/mralexgray/AOP-in-Objective-C/contents/{+path}', + git_refs_url: + 'https://api.github.com/repos/mralexgray/AOP-in-Objective-C/git/refs{/sha}', + git_tags_url: + 'https://api.github.com/repos/mralexgray/AOP-in-Objective-C/git/tags{/sha}', + has_projects: true, + releases_url: + 'https://api.github.com/repos/mralexgray/AOP-in-Objective-C/releases{/id}', + statuses_url: + 'https://api.github.com/repos/mralexgray/AOP-in-Objective-C/statuses/{sha}', + allow_forking: true, + assignees_url: + 'https://api.github.com/repos/mralexgray/AOP-in-Objective-C/assignees{/user}', + downloads_url: + 'https://api.github.com/repos/mralexgray/AOP-in-Objective-C/downloads', + has_downloads: true, + languages_url: + 'https://api.github.com/repos/mralexgray/AOP-in-Objective-C/languages', + default_branch: 'travis-coveralls', + milestones_url: + 'https://api.github.com/repos/mralexgray/AOP-in-Objective-C/milestones{/number}', + stargazers_url: + 'https://api.github.com/repos/mralexgray/AOP-in-Objective-C/stargazers', + watchers_count: 0, + deployments_url: + 'https://api.github.com/repos/mralexgray/AOP-in-Objective-C/deployments', + git_commits_url: + 'https://api.github.com/repos/mralexgray/AOP-in-Objective-C/git/commits{/sha}', + subscribers_url: + 'https://api.github.com/repos/mralexgray/AOP-in-Objective-C/subscribers', + contributors_url: + 'https://api.github.com/repos/mralexgray/AOP-in-Objective-C/contributors', + issue_events_url: + 'https://api.github.com/repos/mralexgray/AOP-in-Objective-C/issues/events{/number}', + stargazers_count: 0, + subscription_url: + 'https://api.github.com/repos/mralexgray/AOP-in-Objective-C/subscription', + collaborators_url: + 'https://api.github.com/repos/mralexgray/AOP-in-Objective-C/collaborators{/collaborator}', + issue_comment_url: + 'https://api.github.com/repos/mralexgray/AOP-in-Objective-C/issues/comments{/number}', + notifications_url: + 'https://api.github.com/repos/mralexgray/AOP-in-Objective-C/notifications{?since,all,participating}', + open_issues_count: 0, + web_commit_signoff_required: false, + }, + { + id: 13141936, + url: 'https://api.github.com/repos/mralexgray/Apaxy', + fork: true, + name: 'Apaxy', + size: 113, + forks: 0, + owner: { + id: 262517, + url: 'https://api.github.com/users/mralexgray', + type: 'User', + login: 'mralexgray', + node_id: 'MDQ6VXNlcjI2MjUxNw==', + html_url: 'https://github.com/mralexgray', + gists_url: 'https://api.github.com/users/mralexgray/gists{/gist_id}', + repos_url: 'https://api.github.com/users/mralexgray/repos', + avatar_url: 'https://avatars.githubusercontent.com/u/262517?v=4', + events_url: 'https://api.github.com/users/mralexgray/events{/privacy}', + site_admin: false, + gravatar_id: '', + starred_url: + 'https://api.github.com/users/mralexgray/starred{/owner}{/repo}', + followers_url: 'https://api.github.com/users/mralexgray/followers', + following_url: + 'https://api.github.com/users/mralexgray/following{/other_user}', + organizations_url: 'https://api.github.com/users/mralexgray/orgs', + subscriptions_url: 'https://api.github.com/users/mralexgray/subscriptions', + received_events_url: + 'https://api.github.com/users/mralexgray/received_events', + }, + topics: [], + git_url: 'git://github.com/mralexgray/Apaxy.git', + license: { + key: 'unlicense', + url: 'https://api.github.com/licenses/unlicense', + name: 'The Unlicense', + node_id: 'MDc6TGljZW5zZTE1', + spdx_id: 'Unlicense', + }, + node_id: 'MDEwOlJlcG9zaXRvcnkxMzE0MTkzNg==', + private: false, + ssh_url: 'git@github.com:mralexgray/Apaxy.git', + svn_url: 'https://github.com/mralexgray/Apaxy', + archived: false, + disabled: false, + has_wiki: true, + homepage: null, + html_url: 'https://github.com/mralexgray/Apaxy', + keys_url: 'https://api.github.com/repos/mralexgray/Apaxy/keys{/key_id}', + language: 'CSS', + tags_url: 'https://api.github.com/repos/mralexgray/Apaxy/tags', + watchers: 0, + blobs_url: 'https://api.github.com/repos/mralexgray/Apaxy/git/blobs{/sha}', + clone_url: 'https://github.com/mralexgray/Apaxy.git', + forks_url: 'https://api.github.com/repos/mralexgray/Apaxy/forks', + full_name: 'mralexgray/Apaxy', + has_pages: false, + hooks_url: 'https://api.github.com/repos/mralexgray/Apaxy/hooks', + pulls_url: 'https://api.github.com/repos/mralexgray/Apaxy/pulls{/number}', + pushed_at: '2013-08-02T16:01:32Z', + teams_url: 'https://api.github.com/repos/mralexgray/Apaxy/teams', + trees_url: 'https://api.github.com/repos/mralexgray/Apaxy/git/trees{/sha}', + created_at: '2013-09-27T05:05:35Z', + events_url: 'https://api.github.com/repos/mralexgray/Apaxy/events', + has_issues: false, + issues_url: 'https://api.github.com/repos/mralexgray/Apaxy/issues{/number}', + labels_url: 'https://api.github.com/repos/mralexgray/Apaxy/labels{/name}', + merges_url: 'https://api.github.com/repos/mralexgray/Apaxy/merges', + mirror_url: null, + updated_at: '2018-02-16T21:40:24Z', + visibility: 'public', + archive_url: + 'https://api.github.com/repos/mralexgray/Apaxy/{archive_format}{/ref}', + commits_url: 'https://api.github.com/repos/mralexgray/Apaxy/commits{/sha}', + compare_url: + 'https://api.github.com/repos/mralexgray/Apaxy/compare/{base}...{head}', + description: + 'A simple, customisable theme for your Apache directory listing.', + forks_count: 0, + is_template: false, + open_issues: 0, + branches_url: + 'https://api.github.com/repos/mralexgray/Apaxy/branches{/branch}', + comments_url: + 'https://api.github.com/repos/mralexgray/Apaxy/comments{/number}', + contents_url: + 'https://api.github.com/repos/mralexgray/Apaxy/contents/{+path}', + git_refs_url: 'https://api.github.com/repos/mralexgray/Apaxy/git/refs{/sha}', + git_tags_url: 'https://api.github.com/repos/mralexgray/Apaxy/git/tags{/sha}', + has_projects: true, + releases_url: 'https://api.github.com/repos/mralexgray/Apaxy/releases{/id}', + statuses_url: 'https://api.github.com/repos/mralexgray/Apaxy/statuses/{sha}', + allow_forking: true, + assignees_url: + 'https://api.github.com/repos/mralexgray/Apaxy/assignees{/user}', + downloads_url: 'https://api.github.com/repos/mralexgray/Apaxy/downloads', + has_downloads: true, + languages_url: 'https://api.github.com/repos/mralexgray/Apaxy/languages', + default_branch: 'master', + milestones_url: + 'https://api.github.com/repos/mralexgray/Apaxy/milestones{/number}', + stargazers_url: 'https://api.github.com/repos/mralexgray/Apaxy/stargazers', + watchers_count: 0, + deployments_url: 'https://api.github.com/repos/mralexgray/Apaxy/deployments', + git_commits_url: + 'https://api.github.com/repos/mralexgray/Apaxy/git/commits{/sha}', + subscribers_url: 'https://api.github.com/repos/mralexgray/Apaxy/subscribers', + contributors_url: + 'https://api.github.com/repos/mralexgray/Apaxy/contributors', + issue_events_url: + 'https://api.github.com/repos/mralexgray/Apaxy/issues/events{/number}', + stargazers_count: 0, + subscription_url: + 'https://api.github.com/repos/mralexgray/Apaxy/subscription', + collaborators_url: + 'https://api.github.com/repos/mralexgray/Apaxy/collaborators{/collaborator}', + issue_comment_url: + 'https://api.github.com/repos/mralexgray/Apaxy/issues/comments{/number}', + notifications_url: + 'https://api.github.com/repos/mralexgray/Apaxy/notifications{?since,all,participating}', + open_issues_count: 0, + web_commit_signoff_required: false, + }, + { + id: 20027360, + url: 'https://api.github.com/repos/mralexgray/app', + fork: true, + name: 'app', + size: 1890, + forks: 0, + owner: { + id: 262517, + url: 'https://api.github.com/users/mralexgray', + type: 'User', + login: 'mralexgray', + node_id: 'MDQ6VXNlcjI2MjUxNw==', + html_url: 'https://github.com/mralexgray', + gists_url: 'https://api.github.com/users/mralexgray/gists{/gist_id}', + repos_url: 'https://api.github.com/users/mralexgray/repos', + avatar_url: 'https://avatars.githubusercontent.com/u/262517?v=4', + events_url: 'https://api.github.com/users/mralexgray/events{/privacy}', + site_admin: false, + gravatar_id: '', + starred_url: + 'https://api.github.com/users/mralexgray/starred{/owner}{/repo}', + followers_url: 'https://api.github.com/users/mralexgray/followers', + following_url: + 'https://api.github.com/users/mralexgray/following{/other_user}', + organizations_url: 'https://api.github.com/users/mralexgray/orgs', + subscriptions_url: 'https://api.github.com/users/mralexgray/subscriptions', + received_events_url: + 'https://api.github.com/users/mralexgray/received_events', + }, + topics: [], + git_url: 'git://github.com/mralexgray/app.git', + license: { + key: 'other', + url: null, + name: 'Other', + node_id: 'MDc6TGljZW5zZTA=', + spdx_id: 'NOASSERTION', + }, + node_id: 'MDEwOlJlcG9zaXRvcnkyMDAyNzM2MA==', + private: false, + ssh_url: 'git@github.com:mralexgray/app.git', + svn_url: 'https://github.com/mralexgray/app', + archived: false, + disabled: false, + has_wiki: true, + homepage: null, + html_url: 'https://github.com/mralexgray/app', + keys_url: 'https://api.github.com/repos/mralexgray/app/keys{/key_id}', + language: 'JavaScript', + tags_url: 'https://api.github.com/repos/mralexgray/app/tags', + watchers: 0, + blobs_url: 'https://api.github.com/repos/mralexgray/app/git/blobs{/sha}', + clone_url: 'https://github.com/mralexgray/app.git', + forks_url: 'https://api.github.com/repos/mralexgray/app/forks', + full_name: 'mralexgray/app', + has_pages: false, + hooks_url: 'https://api.github.com/repos/mralexgray/app/hooks', + pulls_url: 'https://api.github.com/repos/mralexgray/app/pulls{/number}', + pushed_at: '2014-05-20T19:51:38Z', + teams_url: 'https://api.github.com/repos/mralexgray/app/teams', + trees_url: 'https://api.github.com/repos/mralexgray/app/git/trees{/sha}', + created_at: '2014-05-21T15:54:20Z', + events_url: 'https://api.github.com/repos/mralexgray/app/events', + has_issues: false, + issues_url: 'https://api.github.com/repos/mralexgray/app/issues{/number}', + labels_url: 'https://api.github.com/repos/mralexgray/app/labels{/name}', + merges_url: 'https://api.github.com/repos/mralexgray/app/merges', + mirror_url: null, + updated_at: '2014-05-21T15:54:22Z', + visibility: 'public', + archive_url: + 'https://api.github.com/repos/mralexgray/app/{archive_format}{/ref}', + commits_url: 'https://api.github.com/repos/mralexgray/app/commits{/sha}', + compare_url: + 'https://api.github.com/repos/mralexgray/app/compare/{base}...{head}', + description: 'Instant mobile web app creation', + forks_count: 0, + is_template: false, + open_issues: 0, + branches_url: 'https://api.github.com/repos/mralexgray/app/branches{/branch}', + comments_url: 'https://api.github.com/repos/mralexgray/app/comments{/number}', + contents_url: 'https://api.github.com/repos/mralexgray/app/contents/{+path}', + git_refs_url: 'https://api.github.com/repos/mralexgray/app/git/refs{/sha}', + git_tags_url: 'https://api.github.com/repos/mralexgray/app/git/tags{/sha}', + has_projects: true, + releases_url: 'https://api.github.com/repos/mralexgray/app/releases{/id}', + statuses_url: 'https://api.github.com/repos/mralexgray/app/statuses/{sha}', + allow_forking: true, + assignees_url: 'https://api.github.com/repos/mralexgray/app/assignees{/user}', + downloads_url: 'https://api.github.com/repos/mralexgray/app/downloads', + has_downloads: true, + languages_url: 'https://api.github.com/repos/mralexgray/app/languages', + default_branch: 'master', + milestones_url: + 'https://api.github.com/repos/mralexgray/app/milestones{/number}', + stargazers_url: 'https://api.github.com/repos/mralexgray/app/stargazers', + watchers_count: 0, + deployments_url: 'https://api.github.com/repos/mralexgray/app/deployments', + git_commits_url: + 'https://api.github.com/repos/mralexgray/app/git/commits{/sha}', + subscribers_url: 'https://api.github.com/repos/mralexgray/app/subscribers', + contributors_url: 'https://api.github.com/repos/mralexgray/app/contributors', + issue_events_url: + 'https://api.github.com/repos/mralexgray/app/issues/events{/number}', + stargazers_count: 0, + subscription_url: 'https://api.github.com/repos/mralexgray/app/subscription', + collaborators_url: + 'https://api.github.com/repos/mralexgray/app/collaborators{/collaborator}', + issue_comment_url: + 'https://api.github.com/repos/mralexgray/app/issues/comments{/number}', + notifications_url: + 'https://api.github.com/repos/mralexgray/app/notifications{?since,all,participating}', + open_issues_count: 0, + web_commit_signoff_required: false, + }, + ], + name: 'Shirt', + revenue: 4.99, + }, + receivedAt: '2022-08-18T08:43:13.521+05:30', + request_ip: '[::1]', + anonymousId: 'anon-id-new', + originalTimestamp: '2022-08-18T08:43:15.539+05:30', + }, + metadata: { + userId: 'anon-id-new<<>>identified user id', + jobId: 32, + sourceId: '2DTlLPQxignYp4ag9sISgGN2uY7', + destinationId: '2DTozIMGtBwTGNJtuvdPByFSL2Z', + attemptNum: 0, + receivedAt: '2022-08-18T08:43:13.521+05:30', + createdAt: '2022-08-18T03:13:15.549Z', + firstAttemptedAt: '', + transformAt: 'router', + workspaceId: '2DTlBMipxWfJZzZ1SsjELQWvkwd', + secret: null, + jobsT: { + UUID: 'dc239cd1-bef4-4999-88e1-7332c64bf78c', + JobID: 32, + UserID: 'anon-id-new<<>>identified user id', + CreatedAt: '2022-08-18T03:13:15.549078Z', + ExpireAt: '2022-08-18T03:13:15.549078Z', + CustomVal: 'LAMBDA', + EventCount: 1, + EventPayload: { + type: 'track', + event: 'Product Purchased new', + sentAt: '2022-08-18T08:43:15.539+05:30', + userId: 'identified user id', + context: { + ip: '14.5.67.21', + library: { + name: 'http', + }, + }, + rudderId: 'daf823fb-e8d3-413a-8313-d34cd756f968', + messageId: '9f8fb785-c720-4381-a009-bf22a13f4ced', + timestamp: '2020-02-02T00:23:09.544Z', + properties: { + data: [ + { + id: 6104546, + url: 'https://api.github.com/repos/mralexgray/-REPONAME', + fork: false, + name: '-REPONAME', + size: 48, + forks: 0, + owner: { + id: 262517, + url: 'https://api.github.com/users/mralexgray', + type: 'User', + login: 'mralexgray', + node_id: 'MDQ6VXNlcjI2MjUxNw==', + html_url: 'https://github.com/mralexgray', + gists_url: 'https://api.github.com/users/mralexgray/gists{/gist_id}', + repos_url: 'https://api.github.com/users/mralexgray/repos', + avatar_url: 'https://avatars.githubusercontent.com/u/262517?v=4', + events_url: 'https://api.github.com/users/mralexgray/events{/privacy}', + site_admin: false, + gravatar_id: '', + starred_url: + 'https://api.github.com/users/mralexgray/starred{/owner}{/repo}', + followers_url: 'https://api.github.com/users/mralexgray/followers', + following_url: + 'https://api.github.com/users/mralexgray/following{/other_user}', + organizations_url: 'https://api.github.com/users/mralexgray/orgs', + subscriptions_url: + 'https://api.github.com/users/mralexgray/subscriptions', + received_events_url: + 'https://api.github.com/users/mralexgray/received_events', + }, + topics: [], + git_url: 'git://github.com/mralexgray/-REPONAME.git', + license: null, + node_id: 'MDEwOlJlcG9zaXRvcnk2MTA0NTQ2', + private: false, + ssh_url: 'git@github.com:mralexgray/-REPONAME.git', + svn_url: 'https://github.com/mralexgray/-REPONAME', + archived: false, + disabled: false, + has_wiki: true, + homepage: null, + html_url: 'https://github.com/mralexgray/-REPONAME', + keys_url: + 'https://api.github.com/repos/mralexgray/-REPONAME/keys{/key_id}', + language: null, + tags_url: 'https://api.github.com/repos/mralexgray/-REPONAME/tags', + watchers: 0, + blobs_url: + 'https://api.github.com/repos/mralexgray/-REPONAME/git/blobs{/sha}', + clone_url: 'https://github.com/mralexgray/-REPONAME.git', + forks_url: 'https://api.github.com/repos/mralexgray/-REPONAME/forks', + full_name: 'mralexgray/-REPONAME', + has_pages: false, + hooks_url: 'https://api.github.com/repos/mralexgray/-REPONAME/hooks', + pulls_url: + 'https://api.github.com/repos/mralexgray/-REPONAME/pulls{/number}', + pushed_at: '2012-10-06T16:37:39Z', + teams_url: 'https://api.github.com/repos/mralexgray/-REPONAME/teams', + trees_url: + 'https://api.github.com/repos/mralexgray/-REPONAME/git/trees{/sha}', + created_at: '2012-10-06T16:37:39Z', + events_url: 'https://api.github.com/repos/mralexgray/-REPONAME/events', + has_issues: true, + issues_url: + 'https://api.github.com/repos/mralexgray/-REPONAME/issues{/number}', + labels_url: + 'https://api.github.com/repos/mralexgray/-REPONAME/labels{/name}', + merges_url: 'https://api.github.com/repos/mralexgray/-REPONAME/merges', + mirror_url: null, + updated_at: '2013-01-12T13:39:30Z', + visibility: 'public', + archive_url: + 'https://api.github.com/repos/mralexgray/-REPONAME/{archive_format}{/ref}', + commits_url: + 'https://api.github.com/repos/mralexgray/-REPONAME/commits{/sha}', + compare_url: + 'https://api.github.com/repos/mralexgray/-REPONAME/compare/{base}...{head}', + description: null, + forks_count: 0, + is_template: false, + open_issues: 0, + branches_url: + 'https://api.github.com/repos/mralexgray/-REPONAME/branches{/branch}', + comments_url: + 'https://api.github.com/repos/mralexgray/-REPONAME/comments{/number}', + contents_url: + 'https://api.github.com/repos/mralexgray/-REPONAME/contents/{+path}', + git_refs_url: + 'https://api.github.com/repos/mralexgray/-REPONAME/git/refs{/sha}', + git_tags_url: + 'https://api.github.com/repos/mralexgray/-REPONAME/git/tags{/sha}', + has_projects: true, + releases_url: + 'https://api.github.com/repos/mralexgray/-REPONAME/releases{/id}', + statuses_url: + 'https://api.github.com/repos/mralexgray/-REPONAME/statuses/{sha}', + allow_forking: true, + assignees_url: + 'https://api.github.com/repos/mralexgray/-REPONAME/assignees{/user}', + downloads_url: + 'https://api.github.com/repos/mralexgray/-REPONAME/downloads', + has_downloads: true, + languages_url: + 'https://api.github.com/repos/mralexgray/-REPONAME/languages', + default_branch: 'master', + milestones_url: + 'https://api.github.com/repos/mralexgray/-REPONAME/milestones{/number}', + stargazers_url: + 'https://api.github.com/repos/mralexgray/-REPONAME/stargazers', + watchers_count: 0, + deployments_url: + 'https://api.github.com/repos/mralexgray/-REPONAME/deployments', + git_commits_url: + 'https://api.github.com/repos/mralexgray/-REPONAME/git/commits{/sha}', + subscribers_url: + 'https://api.github.com/repos/mralexgray/-REPONAME/subscribers', + contributors_url: + 'https://api.github.com/repos/mralexgray/-REPONAME/contributors', + issue_events_url: + 'https://api.github.com/repos/mralexgray/-REPONAME/issues/events{/number}', + stargazers_count: 0, + subscription_url: + 'https://api.github.com/repos/mralexgray/-REPONAME/subscription', + collaborators_url: + 'https://api.github.com/repos/mralexgray/-REPONAME/collaborators{/collaborator}', + issue_comment_url: + 'https://api.github.com/repos/mralexgray/-REPONAME/issues/comments{/number}', + notifications_url: + 'https://api.github.com/repos/mralexgray/-REPONAME/notifications{?since,all,participating}', + open_issues_count: 0, + web_commit_signoff_required: false, + }, + { + id: 104510411, + url: 'https://api.github.com/repos/mralexgray/...', + fork: true, + name: '...', + size: 113, + forks: 0, + owner: { + id: 262517, + url: 'https://api.github.com/users/mralexgray', + type: 'User', + login: 'mralexgray', + node_id: 'MDQ6VXNlcjI2MjUxNw==', + html_url: 'https://github.com/mralexgray', + gists_url: 'https://api.github.com/users/mralexgray/gists{/gist_id}', + repos_url: 'https://api.github.com/users/mralexgray/repos', + avatar_url: 'https://avatars.githubusercontent.com/u/262517?v=4', + events_url: 'https://api.github.com/users/mralexgray/events{/privacy}', + site_admin: false, + gravatar_id: '', + starred_url: + 'https://api.github.com/users/mralexgray/starred{/owner}{/repo}', + followers_url: 'https://api.github.com/users/mralexgray/followers', + following_url: + 'https://api.github.com/users/mralexgray/following{/other_user}', + organizations_url: 'https://api.github.com/users/mralexgray/orgs', + subscriptions_url: + 'https://api.github.com/users/mralexgray/subscriptions', + received_events_url: + 'https://api.github.com/users/mralexgray/received_events', + }, + topics: [], + git_url: 'git://github.com/mralexgray/....git', + license: { + key: 'mit', + url: 'https://api.github.com/licenses/mit', + name: 'MIT License', + node_id: 'MDc6TGljZW5zZTEz', + spdx_id: 'MIT', + }, + node_id: 'MDEwOlJlcG9zaXRvcnkxMDQ1MTA0MTE=', + private: false, + ssh_url: 'git@github.com:mralexgray/....git', + svn_url: 'https://github.com/mralexgray/...', + archived: false, + disabled: false, + has_wiki: false, + homepage: 'https://driesvints.com/blog/getting-started-with-dotfiles', + html_url: 'https://github.com/mralexgray/...', + keys_url: 'https://api.github.com/repos/mralexgray/.../keys{/key_id}', + language: 'Shell', + tags_url: 'https://api.github.com/repos/mralexgray/.../tags', + watchers: 0, + blobs_url: 'https://api.github.com/repos/mralexgray/.../git/blobs{/sha}', + clone_url: 'https://github.com/mralexgray/....git', + forks_url: 'https://api.github.com/repos/mralexgray/.../forks', + full_name: 'mralexgray/...', + has_pages: false, + hooks_url: 'https://api.github.com/repos/mralexgray/.../hooks', + pulls_url: 'https://api.github.com/repos/mralexgray/.../pulls{/number}', + pushed_at: '2017-09-15T08:27:32Z', + teams_url: 'https://api.github.com/repos/mralexgray/.../teams', + trees_url: 'https://api.github.com/repos/mralexgray/.../git/trees{/sha}', + created_at: '2017-09-22T19:19:42Z', + events_url: 'https://api.github.com/repos/mralexgray/.../events', + has_issues: false, + issues_url: 'https://api.github.com/repos/mralexgray/.../issues{/number}', + labels_url: 'https://api.github.com/repos/mralexgray/.../labels{/name}', + merges_url: 'https://api.github.com/repos/mralexgray/.../merges', + mirror_url: null, + updated_at: '2017-09-22T19:20:22Z', + visibility: 'public', + archive_url: + 'https://api.github.com/repos/mralexgray/.../{archive_format}{/ref}', + commits_url: 'https://api.github.com/repos/mralexgray/.../commits{/sha}', + compare_url: + 'https://api.github.com/repos/mralexgray/.../compare/{base}...{head}', + description: ':computer: Public repo for my personal dotfiles.', + forks_count: 0, + is_template: false, + open_issues: 0, + branches_url: + 'https://api.github.com/repos/mralexgray/.../branches{/branch}', + comments_url: + 'https://api.github.com/repos/mralexgray/.../comments{/number}', + contents_url: + 'https://api.github.com/repos/mralexgray/.../contents/{+path}', + git_refs_url: + 'https://api.github.com/repos/mralexgray/.../git/refs{/sha}', + git_tags_url: + 'https://api.github.com/repos/mralexgray/.../git/tags{/sha}', + has_projects: true, + releases_url: 'https://api.github.com/repos/mralexgray/.../releases{/id}', + statuses_url: + 'https://api.github.com/repos/mralexgray/.../statuses/{sha}', + allow_forking: true, + assignees_url: + 'https://api.github.com/repos/mralexgray/.../assignees{/user}', + downloads_url: 'https://api.github.com/repos/mralexgray/.../downloads', + has_downloads: true, + languages_url: 'https://api.github.com/repos/mralexgray/.../languages', + default_branch: 'master', + milestones_url: + 'https://api.github.com/repos/mralexgray/.../milestones{/number}', + stargazers_url: 'https://api.github.com/repos/mralexgray/.../stargazers', + watchers_count: 0, + deployments_url: + 'https://api.github.com/repos/mralexgray/.../deployments', + git_commits_url: + 'https://api.github.com/repos/mralexgray/.../git/commits{/sha}', + subscribers_url: + 'https://api.github.com/repos/mralexgray/.../subscribers', + contributors_url: + 'https://api.github.com/repos/mralexgray/.../contributors', + issue_events_url: + 'https://api.github.com/repos/mralexgray/.../issues/events{/number}', + stargazers_count: 0, + subscription_url: + 'https://api.github.com/repos/mralexgray/.../subscription', + collaborators_url: + 'https://api.github.com/repos/mralexgray/.../collaborators{/collaborator}', + issue_comment_url: + 'https://api.github.com/repos/mralexgray/.../issues/comments{/number}', + notifications_url: + 'https://api.github.com/repos/mralexgray/.../notifications{?since,all,participating}', + open_issues_count: 0, + web_commit_signoff_required: false, + }, + { + id: 58656723, + url: 'https://api.github.com/repos/mralexgray/2200087-Serial-Protocol', + fork: true, + name: '2200087-Serial-Protocol', + size: 41, + forks: 1, + owner: { + id: 262517, + url: 'https://api.github.com/users/mralexgray', + type: 'User', + login: 'mralexgray', + node_id: 'MDQ6VXNlcjI2MjUxNw==', + html_url: 'https://github.com/mralexgray', + gists_url: 'https://api.github.com/users/mralexgray/gists{/gist_id}', + repos_url: 'https://api.github.com/users/mralexgray/repos', + avatar_url: 'https://avatars.githubusercontent.com/u/262517?v=4', + events_url: 'https://api.github.com/users/mralexgray/events{/privacy}', + site_admin: false, + gravatar_id: '', + starred_url: + 'https://api.github.com/users/mralexgray/starred{/owner}{/repo}', + followers_url: 'https://api.github.com/users/mralexgray/followers', + following_url: + 'https://api.github.com/users/mralexgray/following{/other_user}', + organizations_url: 'https://api.github.com/users/mralexgray/orgs', + subscriptions_url: + 'https://api.github.com/users/mralexgray/subscriptions', + received_events_url: + 'https://api.github.com/users/mralexgray/received_events', + }, + topics: [], + git_url: 'git://github.com/mralexgray/2200087-Serial-Protocol.git', + license: { + key: 'gpl-2.0', + url: 'https://api.github.com/licenses/gpl-2.0', + name: 'GNU General Public License v2.0', + node_id: 'MDc6TGljZW5zZTg=', + spdx_id: 'GPL-2.0', + }, + node_id: 'MDEwOlJlcG9zaXRvcnk1ODY1NjcyMw==', + private: false, + ssh_url: 'git@github.com:mralexgray/2200087-Serial-Protocol.git', + svn_url: 'https://github.com/mralexgray/2200087-Serial-Protocol', + archived: false, + disabled: false, + has_wiki: true, + homepage: 'http://daviddworken.com', + html_url: 'https://github.com/mralexgray/2200087-Serial-Protocol', + keys_url: + 'https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/keys{/key_id}', + language: 'Python', + tags_url: + 'https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/tags', + watchers: 0, + blobs_url: + 'https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/git/blobs{/sha}', + clone_url: 'https://github.com/mralexgray/2200087-Serial-Protocol.git', + forks_url: + 'https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/forks', + full_name: 'mralexgray/2200087-Serial-Protocol', + has_pages: false, + hooks_url: + 'https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/hooks', + pulls_url: + 'https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/pulls{/number}', + pushed_at: '2016-05-12T16:07:24Z', + teams_url: + 'https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/teams', + trees_url: + 'https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/git/trees{/sha}', + created_at: '2016-05-12T16:05:28Z', + events_url: + 'https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/events', + has_issues: false, + issues_url: + 'https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/issues{/number}', + labels_url: + 'https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/labels{/name}', + merges_url: + 'https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/merges', + mirror_url: null, + updated_at: '2016-05-12T16:05:30Z', + visibility: 'public', + archive_url: + 'https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/{archive_format}{/ref}', + commits_url: + 'https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/commits{/sha}', + compare_url: + 'https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/compare/{base}...{head}', + description: + "A reverse engineered protocol description and accompanying code for Radioshack's 2200087 multimeter", + forks_count: 1, + is_template: false, + open_issues: 0, + branches_url: + 'https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/branches{/branch}', + comments_url: + 'https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/comments{/number}', + contents_url: + 'https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/contents/{+path}', + git_refs_url: + 'https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/git/refs{/sha}', + git_tags_url: + 'https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/git/tags{/sha}', + has_projects: true, + releases_url: + 'https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/releases{/id}', + statuses_url: + 'https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/statuses/{sha}', + allow_forking: true, + assignees_url: + 'https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/assignees{/user}', + downloads_url: + 'https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/downloads', + has_downloads: true, + languages_url: + 'https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/languages', + default_branch: 'master', + milestones_url: + 'https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/milestones{/number}', + stargazers_url: + 'https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/stargazers', + watchers_count: 0, + deployments_url: + 'https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/deployments', + git_commits_url: + 'https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/git/commits{/sha}', + subscribers_url: + 'https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/subscribers', + contributors_url: + 'https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/contributors', + issue_events_url: + 'https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/issues/events{/number}', + stargazers_count: 0, + subscription_url: + 'https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/subscription', + collaborators_url: + 'https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/collaborators{/collaborator}', + issue_comment_url: + 'https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/issues/comments{/number}', + notifications_url: + 'https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/notifications{?since,all,participating}', + open_issues_count: 0, + web_commit_signoff_required: false, + }, + { + id: 13121042, + url: 'https://api.github.com/repos/mralexgray/ace', + fork: true, + name: 'ace', + size: 21080, + forks: 1, + owner: { + id: 262517, + url: 'https://api.github.com/users/mralexgray', + type: 'User', + login: 'mralexgray', + node_id: 'MDQ6VXNlcjI2MjUxNw==', + html_url: 'https://github.com/mralexgray', + gists_url: 'https://api.github.com/users/mralexgray/gists{/gist_id}', + repos_url: 'https://api.github.com/users/mralexgray/repos', + avatar_url: 'https://avatars.githubusercontent.com/u/262517?v=4', + events_url: 'https://api.github.com/users/mralexgray/events{/privacy}', + site_admin: false, + gravatar_id: '', + starred_url: + 'https://api.github.com/users/mralexgray/starred{/owner}{/repo}', + followers_url: 'https://api.github.com/users/mralexgray/followers', + following_url: + 'https://api.github.com/users/mralexgray/following{/other_user}', + organizations_url: 'https://api.github.com/users/mralexgray/orgs', + subscriptions_url: + 'https://api.github.com/users/mralexgray/subscriptions', + received_events_url: + 'https://api.github.com/users/mralexgray/received_events', + }, + topics: [], + git_url: 'git://github.com/mralexgray/ace.git', + license: { + key: 'other', + url: null, + name: 'Other', + node_id: 'MDc6TGljZW5zZTA=', + spdx_id: 'NOASSERTION', + }, + node_id: 'MDEwOlJlcG9zaXRvcnkxMzEyMTA0Mg==', + private: false, + ssh_url: 'git@github.com:mralexgray/ace.git', + svn_url: 'https://github.com/mralexgray/ace', + archived: false, + disabled: false, + has_wiki: true, + homepage: 'http://ace.c9.io', + html_url: 'https://github.com/mralexgray/ace', + keys_url: 'https://api.github.com/repos/mralexgray/ace/keys{/key_id}', + language: 'JavaScript', + tags_url: 'https://api.github.com/repos/mralexgray/ace/tags', + watchers: 0, + blobs_url: 'https://api.github.com/repos/mralexgray/ace/git/blobs{/sha}', + clone_url: 'https://github.com/mralexgray/ace.git', + forks_url: 'https://api.github.com/repos/mralexgray/ace/forks', + full_name: 'mralexgray/ace', + has_pages: false, + hooks_url: 'https://api.github.com/repos/mralexgray/ace/hooks', + pulls_url: 'https://api.github.com/repos/mralexgray/ace/pulls{/number}', + pushed_at: '2013-10-26T12:34:48Z', + teams_url: 'https://api.github.com/repos/mralexgray/ace/teams', + trees_url: 'https://api.github.com/repos/mralexgray/ace/git/trees{/sha}', + created_at: '2013-09-26T11:58:10Z', + events_url: 'https://api.github.com/repos/mralexgray/ace/events', + has_issues: false, + issues_url: 'https://api.github.com/repos/mralexgray/ace/issues{/number}', + labels_url: 'https://api.github.com/repos/mralexgray/ace/labels{/name}', + merges_url: 'https://api.github.com/repos/mralexgray/ace/merges', + mirror_url: null, + updated_at: '2013-10-26T12:34:49Z', + visibility: 'public', + archive_url: + 'https://api.github.com/repos/mralexgray/ace/{archive_format}{/ref}', + commits_url: 'https://api.github.com/repos/mralexgray/ace/commits{/sha}', + compare_url: + 'https://api.github.com/repos/mralexgray/ace/compare/{base}...{head}', + description: 'Ace (Ajax.org Cloud9 Editor)', + forks_count: 1, + is_template: false, + open_issues: 0, + branches_url: + 'https://api.github.com/repos/mralexgray/ace/branches{/branch}', + comments_url: + 'https://api.github.com/repos/mralexgray/ace/comments{/number}', + contents_url: + 'https://api.github.com/repos/mralexgray/ace/contents/{+path}', + git_refs_url: + 'https://api.github.com/repos/mralexgray/ace/git/refs{/sha}', + git_tags_url: + 'https://api.github.com/repos/mralexgray/ace/git/tags{/sha}', + has_projects: true, + releases_url: 'https://api.github.com/repos/mralexgray/ace/releases{/id}', + statuses_url: + 'https://api.github.com/repos/mralexgray/ace/statuses/{sha}', + allow_forking: true, + assignees_url: + 'https://api.github.com/repos/mralexgray/ace/assignees{/user}', + downloads_url: 'https://api.github.com/repos/mralexgray/ace/downloads', + has_downloads: true, + languages_url: 'https://api.github.com/repos/mralexgray/ace/languages', + default_branch: 'master', + milestones_url: + 'https://api.github.com/repos/mralexgray/ace/milestones{/number}', + stargazers_url: 'https://api.github.com/repos/mralexgray/ace/stargazers', + watchers_count: 0, + deployments_url: + 'https://api.github.com/repos/mralexgray/ace/deployments', + git_commits_url: + 'https://api.github.com/repos/mralexgray/ace/git/commits{/sha}', + subscribers_url: + 'https://api.github.com/repos/mralexgray/ace/subscribers', + contributors_url: + 'https://api.github.com/repos/mralexgray/ace/contributors', + issue_events_url: + 'https://api.github.com/repos/mralexgray/ace/issues/events{/number}', + stargazers_count: 0, + subscription_url: + 'https://api.github.com/repos/mralexgray/ace/subscription', + collaborators_url: + 'https://api.github.com/repos/mralexgray/ace/collaborators{/collaborator}', + issue_comment_url: + 'https://api.github.com/repos/mralexgray/ace/issues/comments{/number}', + notifications_url: + 'https://api.github.com/repos/mralexgray/ace/notifications{?since,all,participating}', + open_issues_count: 0, + web_commit_signoff_required: false, + }, + { + id: 10791045, + url: 'https://api.github.com/repos/mralexgray/ACEView', + fork: true, + name: 'ACEView', + size: 1733, + forks: 1, + owner: { + id: 262517, + url: 'https://api.github.com/users/mralexgray', + type: 'User', + login: 'mralexgray', + node_id: 'MDQ6VXNlcjI2MjUxNw==', + html_url: 'https://github.com/mralexgray', + gists_url: 'https://api.github.com/users/mralexgray/gists{/gist_id}', + repos_url: 'https://api.github.com/users/mralexgray/repos', + avatar_url: 'https://avatars.githubusercontent.com/u/262517?v=4', + events_url: 'https://api.github.com/users/mralexgray/events{/privacy}', + site_admin: false, + gravatar_id: '', + starred_url: + 'https://api.github.com/users/mralexgray/starred{/owner}{/repo}', + followers_url: 'https://api.github.com/users/mralexgray/followers', + following_url: + 'https://api.github.com/users/mralexgray/following{/other_user}', + organizations_url: 'https://api.github.com/users/mralexgray/orgs', + subscriptions_url: + 'https://api.github.com/users/mralexgray/subscriptions', + received_events_url: + 'https://api.github.com/users/mralexgray/received_events', + }, + topics: [], + git_url: 'git://github.com/mralexgray/ACEView.git', + license: { + key: 'other', + url: null, + name: 'Other', + node_id: 'MDc6TGljZW5zZTA=', + spdx_id: 'NOASSERTION', + }, + node_id: 'MDEwOlJlcG9zaXRvcnkxMDc5MTA0NQ==', + private: false, + ssh_url: 'git@github.com:mralexgray/ACEView.git', + svn_url: 'https://github.com/mralexgray/ACEView', + archived: false, + disabled: false, + has_wiki: true, + homepage: null, + html_url: 'https://github.com/mralexgray/ACEView', + keys_url: 'https://api.github.com/repos/mralexgray/ACEView/keys{/key_id}', + language: 'Objective-C', + tags_url: 'https://api.github.com/repos/mralexgray/ACEView/tags', + watchers: 0, + blobs_url: + 'https://api.github.com/repos/mralexgray/ACEView/git/blobs{/sha}', + clone_url: 'https://github.com/mralexgray/ACEView.git', + forks_url: 'https://api.github.com/repos/mralexgray/ACEView/forks', + full_name: 'mralexgray/ACEView', + has_pages: false, + hooks_url: 'https://api.github.com/repos/mralexgray/ACEView/hooks', + pulls_url: + 'https://api.github.com/repos/mralexgray/ACEView/pulls{/number}', + pushed_at: '2014-05-09T01:36:23Z', + teams_url: 'https://api.github.com/repos/mralexgray/ACEView/teams', + trees_url: + 'https://api.github.com/repos/mralexgray/ACEView/git/trees{/sha}', + created_at: '2013-06-19T12:15:04Z', + events_url: 'https://api.github.com/repos/mralexgray/ACEView/events', + has_issues: false, + issues_url: + 'https://api.github.com/repos/mralexgray/ACEView/issues{/number}', + labels_url: + 'https://api.github.com/repos/mralexgray/ACEView/labels{/name}', + merges_url: 'https://api.github.com/repos/mralexgray/ACEView/merges', + mirror_url: null, + updated_at: '2015-11-24T01:14:10Z', + visibility: 'public', + archive_url: + 'https://api.github.com/repos/mralexgray/ACEView/{archive_format}{/ref}', + commits_url: + 'https://api.github.com/repos/mralexgray/ACEView/commits{/sha}', + compare_url: + 'https://api.github.com/repos/mralexgray/ACEView/compare/{base}...{head}', + description: 'Use the wonderful ACE editor in your Cocoa applications', + forks_count: 1, + is_template: false, + open_issues: 0, + branches_url: + 'https://api.github.com/repos/mralexgray/ACEView/branches{/branch}', + comments_url: + 'https://api.github.com/repos/mralexgray/ACEView/comments{/number}', + contents_url: + 'https://api.github.com/repos/mralexgray/ACEView/contents/{+path}', + git_refs_url: + 'https://api.github.com/repos/mralexgray/ACEView/git/refs{/sha}', + git_tags_url: + 'https://api.github.com/repos/mralexgray/ACEView/git/tags{/sha}', + has_projects: true, + releases_url: + 'https://api.github.com/repos/mralexgray/ACEView/releases{/id}', + statuses_url: + 'https://api.github.com/repos/mralexgray/ACEView/statuses/{sha}', + allow_forking: true, + assignees_url: + 'https://api.github.com/repos/mralexgray/ACEView/assignees{/user}', + downloads_url: + 'https://api.github.com/repos/mralexgray/ACEView/downloads', + has_downloads: true, + languages_url: + 'https://api.github.com/repos/mralexgray/ACEView/languages', + default_branch: 'master', + milestones_url: + 'https://api.github.com/repos/mralexgray/ACEView/milestones{/number}', + stargazers_url: + 'https://api.github.com/repos/mralexgray/ACEView/stargazers', + watchers_count: 0, + deployments_url: + 'https://api.github.com/repos/mralexgray/ACEView/deployments', + git_commits_url: + 'https://api.github.com/repos/mralexgray/ACEView/git/commits{/sha}', + subscribers_url: + 'https://api.github.com/repos/mralexgray/ACEView/subscribers', + contributors_url: + 'https://api.github.com/repos/mralexgray/ACEView/contributors', + issue_events_url: + 'https://api.github.com/repos/mralexgray/ACEView/issues/events{/number}', + stargazers_count: 0, + subscription_url: + 'https://api.github.com/repos/mralexgray/ACEView/subscription', + collaborators_url: + 'https://api.github.com/repos/mralexgray/ACEView/collaborators{/collaborator}', + issue_comment_url: + 'https://api.github.com/repos/mralexgray/ACEView/issues/comments{/number}', + notifications_url: + 'https://api.github.com/repos/mralexgray/ACEView/notifications{?since,all,participating}', + open_issues_count: 0, + web_commit_signoff_required: false, + }, + { + id: 13623648, + url: 'https://api.github.com/repos/mralexgray/ActiveLog', + fork: true, + name: 'ActiveLog', + size: 60, + forks: 0, + owner: { + id: 262517, + url: 'https://api.github.com/users/mralexgray', + type: 'User', + login: 'mralexgray', + node_id: 'MDQ6VXNlcjI2MjUxNw==', + html_url: 'https://github.com/mralexgray', + gists_url: 'https://api.github.com/users/mralexgray/gists{/gist_id}', + repos_url: 'https://api.github.com/users/mralexgray/repos', + avatar_url: 'https://avatars.githubusercontent.com/u/262517?v=4', + events_url: 'https://api.github.com/users/mralexgray/events{/privacy}', + site_admin: false, + gravatar_id: '', + starred_url: + 'https://api.github.com/users/mralexgray/starred{/owner}{/repo}', + followers_url: 'https://api.github.com/users/mralexgray/followers', + following_url: + 'https://api.github.com/users/mralexgray/following{/other_user}', + organizations_url: 'https://api.github.com/users/mralexgray/orgs', + subscriptions_url: + 'https://api.github.com/users/mralexgray/subscriptions', + received_events_url: + 'https://api.github.com/users/mralexgray/received_events', + }, + topics: [], + git_url: 'git://github.com/mralexgray/ActiveLog.git', + license: null, + node_id: 'MDEwOlJlcG9zaXRvcnkxMzYyMzY0OA==', + private: false, + ssh_url: 'git@github.com:mralexgray/ActiveLog.git', + svn_url: 'https://github.com/mralexgray/ActiveLog', + archived: false, + disabled: false, + has_wiki: true, + homepage: 'http://deepitpro.com/en/articles/ActiveLog/info/', + html_url: 'https://github.com/mralexgray/ActiveLog', + keys_url: + 'https://api.github.com/repos/mralexgray/ActiveLog/keys{/key_id}', + language: 'Objective-C', + tags_url: 'https://api.github.com/repos/mralexgray/ActiveLog/tags', + watchers: 0, + blobs_url: + 'https://api.github.com/repos/mralexgray/ActiveLog/git/blobs{/sha}', + clone_url: 'https://github.com/mralexgray/ActiveLog.git', + forks_url: 'https://api.github.com/repos/mralexgray/ActiveLog/forks', + full_name: 'mralexgray/ActiveLog', + has_pages: false, + hooks_url: 'https://api.github.com/repos/mralexgray/ActiveLog/hooks', + pulls_url: + 'https://api.github.com/repos/mralexgray/ActiveLog/pulls{/number}', + pushed_at: '2011-07-03T06:28:59Z', + teams_url: 'https://api.github.com/repos/mralexgray/ActiveLog/teams', + trees_url: + 'https://api.github.com/repos/mralexgray/ActiveLog/git/trees{/sha}', + created_at: '2013-10-16T15:52:37Z', + events_url: 'https://api.github.com/repos/mralexgray/ActiveLog/events', + has_issues: false, + issues_url: + 'https://api.github.com/repos/mralexgray/ActiveLog/issues{/number}', + labels_url: + 'https://api.github.com/repos/mralexgray/ActiveLog/labels{/name}', + merges_url: 'https://api.github.com/repos/mralexgray/ActiveLog/merges', + mirror_url: null, + updated_at: '2013-10-16T15:52:37Z', + visibility: 'public', + archive_url: + 'https://api.github.com/repos/mralexgray/ActiveLog/{archive_format}{/ref}', + commits_url: + 'https://api.github.com/repos/mralexgray/ActiveLog/commits{/sha}', + compare_url: + 'https://api.github.com/repos/mralexgray/ActiveLog/compare/{base}...{head}', + description: 'Shut up all logs with active filter.', + forks_count: 0, + is_template: false, + open_issues: 0, + branches_url: + 'https://api.github.com/repos/mralexgray/ActiveLog/branches{/branch}', + comments_url: + 'https://api.github.com/repos/mralexgray/ActiveLog/comments{/number}', + contents_url: + 'https://api.github.com/repos/mralexgray/ActiveLog/contents/{+path}', + git_refs_url: + 'https://api.github.com/repos/mralexgray/ActiveLog/git/refs{/sha}', + git_tags_url: + 'https://api.github.com/repos/mralexgray/ActiveLog/git/tags{/sha}', + has_projects: true, + releases_url: + 'https://api.github.com/repos/mralexgray/ActiveLog/releases{/id}', + statuses_url: + 'https://api.github.com/repos/mralexgray/ActiveLog/statuses/{sha}', + allow_forking: true, + assignees_url: + 'https://api.github.com/repos/mralexgray/ActiveLog/assignees{/user}', + downloads_url: + 'https://api.github.com/repos/mralexgray/ActiveLog/downloads', + has_downloads: true, + languages_url: + 'https://api.github.com/repos/mralexgray/ActiveLog/languages', + default_branch: 'master', + milestones_url: + 'https://api.github.com/repos/mralexgray/ActiveLog/milestones{/number}', + stargazers_url: + 'https://api.github.com/repos/mralexgray/ActiveLog/stargazers', + watchers_count: 0, + deployments_url: + 'https://api.github.com/repos/mralexgray/ActiveLog/deployments', + git_commits_url: + 'https://api.github.com/repos/mralexgray/ActiveLog/git/commits{/sha}', + subscribers_url: + 'https://api.github.com/repos/mralexgray/ActiveLog/subscribers', + contributors_url: + 'https://api.github.com/repos/mralexgray/ActiveLog/contributors', + issue_events_url: + 'https://api.github.com/repos/mralexgray/ActiveLog/issues/events{/number}', + stargazers_count: 0, + subscription_url: + 'https://api.github.com/repos/mralexgray/ActiveLog/subscription', + collaborators_url: + 'https://api.github.com/repos/mralexgray/ActiveLog/collaborators{/collaborator}', + issue_comment_url: + 'https://api.github.com/repos/mralexgray/ActiveLog/issues/comments{/number}', + notifications_url: + 'https://api.github.com/repos/mralexgray/ActiveLog/notifications{?since,all,participating}', + open_issues_count: 0, + web_commit_signoff_required: false, + }, + { + id: 9716210, + url: 'https://api.github.com/repos/mralexgray/adium', + fork: false, + name: 'adium', + size: 277719, + forks: 37, + owner: { + id: 262517, + url: 'https://api.github.com/users/mralexgray', + type: 'User', + login: 'mralexgray', + node_id: 'MDQ6VXNlcjI2MjUxNw==', + html_url: 'https://github.com/mralexgray', + gists_url: 'https://api.github.com/users/mralexgray/gists{/gist_id}', + repos_url: 'https://api.github.com/users/mralexgray/repos', + avatar_url: 'https://avatars.githubusercontent.com/u/262517?v=4', + events_url: 'https://api.github.com/users/mralexgray/events{/privacy}', + site_admin: false, + gravatar_id: '', + starred_url: + 'https://api.github.com/users/mralexgray/starred{/owner}{/repo}', + followers_url: 'https://api.github.com/users/mralexgray/followers', + following_url: + 'https://api.github.com/users/mralexgray/following{/other_user}', + organizations_url: 'https://api.github.com/users/mralexgray/orgs', + subscriptions_url: + 'https://api.github.com/users/mralexgray/subscriptions', + received_events_url: + 'https://api.github.com/users/mralexgray/received_events', + }, + topics: [], + git_url: 'git://github.com/mralexgray/adium.git', + license: { + key: 'other', + url: null, + name: 'Other', + node_id: 'MDc6TGljZW5zZTA=', + spdx_id: 'NOASSERTION', + }, + node_id: 'MDEwOlJlcG9zaXRvcnk5NzE2MjEw', + private: false, + ssh_url: 'git@github.com:mralexgray/adium.git', + svn_url: 'https://github.com/mralexgray/adium', + archived: false, + disabled: false, + has_wiki: false, + homepage: null, + html_url: 'https://github.com/mralexgray/adium', + keys_url: 'https://api.github.com/repos/mralexgray/adium/keys{/key_id}', + language: 'Objective-C', + tags_url: 'https://api.github.com/repos/mralexgray/adium/tags', + watchers: 0, + blobs_url: + 'https://api.github.com/repos/mralexgray/adium/git/blobs{/sha}', + clone_url: 'https://github.com/mralexgray/adium.git', + forks_url: 'https://api.github.com/repos/mralexgray/adium/forks', + full_name: 'mralexgray/adium', + has_pages: false, + hooks_url: 'https://api.github.com/repos/mralexgray/adium/hooks', + pulls_url: 'https://api.github.com/repos/mralexgray/adium/pulls{/number}', + pushed_at: '2013-04-26T16:43:53Z', + teams_url: 'https://api.github.com/repos/mralexgray/adium/teams', + trees_url: + 'https://api.github.com/repos/mralexgray/adium/git/trees{/sha}', + created_at: '2013-04-27T14:59:33Z', + events_url: 'https://api.github.com/repos/mralexgray/adium/events', + has_issues: false, + issues_url: + 'https://api.github.com/repos/mralexgray/adium/issues{/number}', + labels_url: 'https://api.github.com/repos/mralexgray/adium/labels{/name}', + merges_url: 'https://api.github.com/repos/mralexgray/adium/merges', + mirror_url: null, + updated_at: '2019-12-11T06:51:45Z', + visibility: 'public', + archive_url: + 'https://api.github.com/repos/mralexgray/adium/{archive_format}{/ref}', + commits_url: + 'https://api.github.com/repos/mralexgray/adium/commits{/sha}', + compare_url: + 'https://api.github.com/repos/mralexgray/adium/compare/{base}...{head}', + description: 'Official mirror of hg.adium.im', + forks_count: 37, + is_template: false, + open_issues: 0, + branches_url: + 'https://api.github.com/repos/mralexgray/adium/branches{/branch}', + comments_url: + 'https://api.github.com/repos/mralexgray/adium/comments{/number}', + contents_url: + 'https://api.github.com/repos/mralexgray/adium/contents/{+path}', + git_refs_url: + 'https://api.github.com/repos/mralexgray/adium/git/refs{/sha}', + git_tags_url: + 'https://api.github.com/repos/mralexgray/adium/git/tags{/sha}', + has_projects: true, + releases_url: + 'https://api.github.com/repos/mralexgray/adium/releases{/id}', + statuses_url: + 'https://api.github.com/repos/mralexgray/adium/statuses/{sha}', + allow_forking: true, + assignees_url: + 'https://api.github.com/repos/mralexgray/adium/assignees{/user}', + downloads_url: 'https://api.github.com/repos/mralexgray/adium/downloads', + has_downloads: true, + languages_url: 'https://api.github.com/repos/mralexgray/adium/languages', + default_branch: 'master', + milestones_url: + 'https://api.github.com/repos/mralexgray/adium/milestones{/number}', + stargazers_url: + 'https://api.github.com/repos/mralexgray/adium/stargazers', + watchers_count: 0, + deployments_url: + 'https://api.github.com/repos/mralexgray/adium/deployments', + git_commits_url: + 'https://api.github.com/repos/mralexgray/adium/git/commits{/sha}', + subscribers_url: + 'https://api.github.com/repos/mralexgray/adium/subscribers', + contributors_url: + 'https://api.github.com/repos/mralexgray/adium/contributors', + issue_events_url: + 'https://api.github.com/repos/mralexgray/adium/issues/events{/number}', + stargazers_count: 0, + subscription_url: + 'https://api.github.com/repos/mralexgray/adium/subscription', + collaborators_url: + 'https://api.github.com/repos/mralexgray/adium/collaborators{/collaborator}', + issue_comment_url: + 'https://api.github.com/repos/mralexgray/adium/issues/comments{/number}', + notifications_url: + 'https://api.github.com/repos/mralexgray/adium/notifications{?since,all,participating}', + open_issues_count: 0, + web_commit_signoff_required: false, + }, + { + id: 12752329, + url: 'https://api.github.com/repos/mralexgray/ADLivelyTableView', + fork: true, + name: 'ADLivelyTableView', + size: 73, + forks: 0, + owner: { + id: 262517, + url: 'https://api.github.com/users/mralexgray', + type: 'User', + login: 'mralexgray', + node_id: 'MDQ6VXNlcjI2MjUxNw==', + html_url: 'https://github.com/mralexgray', + gists_url: 'https://api.github.com/users/mralexgray/gists{/gist_id}', + repos_url: 'https://api.github.com/users/mralexgray/repos', + avatar_url: 'https://avatars.githubusercontent.com/u/262517?v=4', + events_url: 'https://api.github.com/users/mralexgray/events{/privacy}', + site_admin: false, + gravatar_id: '', + starred_url: + 'https://api.github.com/users/mralexgray/starred{/owner}{/repo}', + followers_url: 'https://api.github.com/users/mralexgray/followers', + following_url: + 'https://api.github.com/users/mralexgray/following{/other_user}', + organizations_url: 'https://api.github.com/users/mralexgray/orgs', + subscriptions_url: + 'https://api.github.com/users/mralexgray/subscriptions', + received_events_url: + 'https://api.github.com/users/mralexgray/received_events', + }, + topics: [], + git_url: 'git://github.com/mralexgray/ADLivelyTableView.git', + license: { + key: 'other', + url: null, + name: 'Other', + node_id: 'MDc6TGljZW5zZTA=', + spdx_id: 'NOASSERTION', + }, + node_id: 'MDEwOlJlcG9zaXRvcnkxMjc1MjMyOQ==', + private: false, + ssh_url: 'git@github.com:mralexgray/ADLivelyTableView.git', + svn_url: 'https://github.com/mralexgray/ADLivelyTableView', + archived: false, + disabled: false, + has_wiki: true, + homepage: 'http://applidium.com/en/news/lively_uitableview/', + html_url: 'https://github.com/mralexgray/ADLivelyTableView', + keys_url: + 'https://api.github.com/repos/mralexgray/ADLivelyTableView/keys{/key_id}', + language: 'Objective-C', + tags_url: + 'https://api.github.com/repos/mralexgray/ADLivelyTableView/tags', + watchers: 0, + blobs_url: + 'https://api.github.com/repos/mralexgray/ADLivelyTableView/git/blobs{/sha}', + clone_url: 'https://github.com/mralexgray/ADLivelyTableView.git', + forks_url: + 'https://api.github.com/repos/mralexgray/ADLivelyTableView/forks', + full_name: 'mralexgray/ADLivelyTableView', + has_pages: false, + hooks_url: + 'https://api.github.com/repos/mralexgray/ADLivelyTableView/hooks', + pulls_url: + 'https://api.github.com/repos/mralexgray/ADLivelyTableView/pulls{/number}', + pushed_at: '2012-05-10T10:40:15Z', + teams_url: + 'https://api.github.com/repos/mralexgray/ADLivelyTableView/teams', + trees_url: + 'https://api.github.com/repos/mralexgray/ADLivelyTableView/git/trees{/sha}', + created_at: '2013-09-11T09:18:01Z', + events_url: + 'https://api.github.com/repos/mralexgray/ADLivelyTableView/events', + has_issues: false, + issues_url: + 'https://api.github.com/repos/mralexgray/ADLivelyTableView/issues{/number}', + labels_url: + 'https://api.github.com/repos/mralexgray/ADLivelyTableView/labels{/name}', + merges_url: + 'https://api.github.com/repos/mralexgray/ADLivelyTableView/merges', + mirror_url: null, + updated_at: '2013-09-11T09:18:03Z', + visibility: 'public', + archive_url: + 'https://api.github.com/repos/mralexgray/ADLivelyTableView/{archive_format}{/ref}', + commits_url: + 'https://api.github.com/repos/mralexgray/ADLivelyTableView/commits{/sha}', + compare_url: + 'https://api.github.com/repos/mralexgray/ADLivelyTableView/compare/{base}...{head}', + description: 'Lively UITableView', + forks_count: 0, + is_template: false, + open_issues: 0, + branches_url: + 'https://api.github.com/repos/mralexgray/ADLivelyTableView/branches{/branch}', + comments_url: + 'https://api.github.com/repos/mralexgray/ADLivelyTableView/comments{/number}', + contents_url: + 'https://api.github.com/repos/mralexgray/ADLivelyTableView/contents/{+path}', + git_refs_url: + 'https://api.github.com/repos/mralexgray/ADLivelyTableView/git/refs{/sha}', + git_tags_url: + 'https://api.github.com/repos/mralexgray/ADLivelyTableView/git/tags{/sha}', + has_projects: true, + releases_url: + 'https://api.github.com/repos/mralexgray/ADLivelyTableView/releases{/id}', + statuses_url: + 'https://api.github.com/repos/mralexgray/ADLivelyTableView/statuses/{sha}', + allow_forking: true, + assignees_url: + 'https://api.github.com/repos/mralexgray/ADLivelyTableView/assignees{/user}', + downloads_url: + 'https://api.github.com/repos/mralexgray/ADLivelyTableView/downloads', + has_downloads: true, + languages_url: + 'https://api.github.com/repos/mralexgray/ADLivelyTableView/languages', + default_branch: 'master', + milestones_url: + 'https://api.github.com/repos/mralexgray/ADLivelyTableView/milestones{/number}', + stargazers_url: + 'https://api.github.com/repos/mralexgray/ADLivelyTableView/stargazers', + watchers_count: 0, + deployments_url: + 'https://api.github.com/repos/mralexgray/ADLivelyTableView/deployments', + git_commits_url: + 'https://api.github.com/repos/mralexgray/ADLivelyTableView/git/commits{/sha}', + subscribers_url: + 'https://api.github.com/repos/mralexgray/ADLivelyTableView/subscribers', + contributors_url: + 'https://api.github.com/repos/mralexgray/ADLivelyTableView/contributors', + issue_events_url: + 'https://api.github.com/repos/mralexgray/ADLivelyTableView/issues/events{/number}', + stargazers_count: 0, + subscription_url: + 'https://api.github.com/repos/mralexgray/ADLivelyTableView/subscription', + collaborators_url: + 'https://api.github.com/repos/mralexgray/ADLivelyTableView/collaborators{/collaborator}', + issue_comment_url: + 'https://api.github.com/repos/mralexgray/ADLivelyTableView/issues/comments{/number}', + notifications_url: + 'https://api.github.com/repos/mralexgray/ADLivelyTableView/notifications{?since,all,participating}', + open_issues_count: 0, + web_commit_signoff_required: false, + }, + { + id: 5697379, + url: 'https://api.github.com/repos/mralexgray/AFIncrementalStore', + fork: true, + name: 'AFIncrementalStore', + size: 139, + forks: 0, + owner: { + id: 262517, + url: 'https://api.github.com/users/mralexgray', + type: 'User', + login: 'mralexgray', + node_id: 'MDQ6VXNlcjI2MjUxNw==', + html_url: 'https://github.com/mralexgray', + gists_url: 'https://api.github.com/users/mralexgray/gists{/gist_id}', + repos_url: 'https://api.github.com/users/mralexgray/repos', + avatar_url: 'https://avatars.githubusercontent.com/u/262517?v=4', + events_url: 'https://api.github.com/users/mralexgray/events{/privacy}', + site_admin: false, + gravatar_id: '', + starred_url: + 'https://api.github.com/users/mralexgray/starred{/owner}{/repo}', + followers_url: 'https://api.github.com/users/mralexgray/followers', + following_url: + 'https://api.github.com/users/mralexgray/following{/other_user}', + organizations_url: 'https://api.github.com/users/mralexgray/orgs', + subscriptions_url: + 'https://api.github.com/users/mralexgray/subscriptions', + received_events_url: + 'https://api.github.com/users/mralexgray/received_events', + }, + topics: [], + git_url: 'git://github.com/mralexgray/AFIncrementalStore.git', + license: { + key: 'mit', + url: 'https://api.github.com/licenses/mit', + name: 'MIT License', + node_id: 'MDc6TGljZW5zZTEz', + spdx_id: 'MIT', + }, + node_id: 'MDEwOlJlcG9zaXRvcnk1Njk3Mzc5', + private: false, + ssh_url: 'git@github.com:mralexgray/AFIncrementalStore.git', + svn_url: 'https://github.com/mralexgray/AFIncrementalStore', + archived: false, + disabled: false, + has_wiki: true, + homepage: null, + html_url: 'https://github.com/mralexgray/AFIncrementalStore', + keys_url: + 'https://api.github.com/repos/mralexgray/AFIncrementalStore/keys{/key_id}', + language: 'Objective-C', + tags_url: + 'https://api.github.com/repos/mralexgray/AFIncrementalStore/tags', + watchers: 0, + blobs_url: + 'https://api.github.com/repos/mralexgray/AFIncrementalStore/git/blobs{/sha}', + clone_url: 'https://github.com/mralexgray/AFIncrementalStore.git', + forks_url: + 'https://api.github.com/repos/mralexgray/AFIncrementalStore/forks', + full_name: 'mralexgray/AFIncrementalStore', + has_pages: false, + hooks_url: + 'https://api.github.com/repos/mralexgray/AFIncrementalStore/hooks', + pulls_url: + 'https://api.github.com/repos/mralexgray/AFIncrementalStore/pulls{/number}', + pushed_at: '2012-09-01T22:46:25Z', + teams_url: + 'https://api.github.com/repos/mralexgray/AFIncrementalStore/teams', + trees_url: + 'https://api.github.com/repos/mralexgray/AFIncrementalStore/git/trees{/sha}', + created_at: '2012-09-06T04:20:33Z', + events_url: + 'https://api.github.com/repos/mralexgray/AFIncrementalStore/events', + has_issues: false, + issues_url: + 'https://api.github.com/repos/mralexgray/AFIncrementalStore/issues{/number}', + labels_url: + 'https://api.github.com/repos/mralexgray/AFIncrementalStore/labels{/name}', + merges_url: + 'https://api.github.com/repos/mralexgray/AFIncrementalStore/merges', + mirror_url: null, + updated_at: '2013-01-12T03:15:29Z', + visibility: 'public', + archive_url: + 'https://api.github.com/repos/mralexgray/AFIncrementalStore/{archive_format}{/ref}', + commits_url: + 'https://api.github.com/repos/mralexgray/AFIncrementalStore/commits{/sha}', + compare_url: + 'https://api.github.com/repos/mralexgray/AFIncrementalStore/compare/{base}...{head}', + description: 'Core Data Persistence with AFNetworking, Done Right', + forks_count: 0, + is_template: false, + open_issues: 0, + branches_url: + 'https://api.github.com/repos/mralexgray/AFIncrementalStore/branches{/branch}', + comments_url: + 'https://api.github.com/repos/mralexgray/AFIncrementalStore/comments{/number}', + contents_url: + 'https://api.github.com/repos/mralexgray/AFIncrementalStore/contents/{+path}', + git_refs_url: + 'https://api.github.com/repos/mralexgray/AFIncrementalStore/git/refs{/sha}', + git_tags_url: + 'https://api.github.com/repos/mralexgray/AFIncrementalStore/git/tags{/sha}', + has_projects: true, + releases_url: + 'https://api.github.com/repos/mralexgray/AFIncrementalStore/releases{/id}', + statuses_url: + 'https://api.github.com/repos/mralexgray/AFIncrementalStore/statuses/{sha}', + allow_forking: true, + assignees_url: + 'https://api.github.com/repos/mralexgray/AFIncrementalStore/assignees{/user}', + downloads_url: + 'https://api.github.com/repos/mralexgray/AFIncrementalStore/downloads', + has_downloads: true, + languages_url: + 'https://api.github.com/repos/mralexgray/AFIncrementalStore/languages', + default_branch: 'master', + milestones_url: + 'https://api.github.com/repos/mralexgray/AFIncrementalStore/milestones{/number}', + stargazers_url: + 'https://api.github.com/repos/mralexgray/AFIncrementalStore/stargazers', + watchers_count: 0, + deployments_url: + 'https://api.github.com/repos/mralexgray/AFIncrementalStore/deployments', + git_commits_url: + 'https://api.github.com/repos/mralexgray/AFIncrementalStore/git/commits{/sha}', + subscribers_url: + 'https://api.github.com/repos/mralexgray/AFIncrementalStore/subscribers', + contributors_url: + 'https://api.github.com/repos/mralexgray/AFIncrementalStore/contributors', + issue_events_url: + 'https://api.github.com/repos/mralexgray/AFIncrementalStore/issues/events{/number}', + stargazers_count: 0, + subscription_url: + 'https://api.github.com/repos/mralexgray/AFIncrementalStore/subscription', + collaborators_url: + 'https://api.github.com/repos/mralexgray/AFIncrementalStore/collaborators{/collaborator}', + issue_comment_url: + 'https://api.github.com/repos/mralexgray/AFIncrementalStore/issues/comments{/number}', + notifications_url: + 'https://api.github.com/repos/mralexgray/AFIncrementalStore/notifications{?since,all,participating}', + open_issues_count: 0, + web_commit_signoff_required: false, + }, + { + id: 6969621, + url: 'https://api.github.com/repos/mralexgray/AFNetworking', + fork: true, + name: 'AFNetworking', + size: 4341, + forks: 0, + owner: { + id: 262517, + url: 'https://api.github.com/users/mralexgray', + type: 'User', + login: 'mralexgray', + node_id: 'MDQ6VXNlcjI2MjUxNw==', + html_url: 'https://github.com/mralexgray', + gists_url: 'https://api.github.com/users/mralexgray/gists{/gist_id}', + repos_url: 'https://api.github.com/users/mralexgray/repos', + avatar_url: 'https://avatars.githubusercontent.com/u/262517?v=4', + events_url: 'https://api.github.com/users/mralexgray/events{/privacy}', + site_admin: false, + gravatar_id: '', + starred_url: + 'https://api.github.com/users/mralexgray/starred{/owner}{/repo}', + followers_url: 'https://api.github.com/users/mralexgray/followers', + following_url: + 'https://api.github.com/users/mralexgray/following{/other_user}', + organizations_url: 'https://api.github.com/users/mralexgray/orgs', + subscriptions_url: + 'https://api.github.com/users/mralexgray/subscriptions', + received_events_url: + 'https://api.github.com/users/mralexgray/received_events', + }, + topics: [], + git_url: 'git://github.com/mralexgray/AFNetworking.git', + license: { + key: 'mit', + url: 'https://api.github.com/licenses/mit', + name: 'MIT License', + node_id: 'MDc6TGljZW5zZTEz', + spdx_id: 'MIT', + }, + node_id: 'MDEwOlJlcG9zaXRvcnk2OTY5NjIx', + private: false, + ssh_url: 'git@github.com:mralexgray/AFNetworking.git', + svn_url: 'https://github.com/mralexgray/AFNetworking', + archived: false, + disabled: false, + has_wiki: true, + homepage: 'http://afnetworking.com', + html_url: 'https://github.com/mralexgray/AFNetworking', + keys_url: + 'https://api.github.com/repos/mralexgray/AFNetworking/keys{/key_id}', + language: 'Objective-C', + tags_url: 'https://api.github.com/repos/mralexgray/AFNetworking/tags', + watchers: 2, + blobs_url: + 'https://api.github.com/repos/mralexgray/AFNetworking/git/blobs{/sha}', + clone_url: 'https://github.com/mralexgray/AFNetworking.git', + forks_url: 'https://api.github.com/repos/mralexgray/AFNetworking/forks', + full_name: 'mralexgray/AFNetworking', + has_pages: false, + hooks_url: 'https://api.github.com/repos/mralexgray/AFNetworking/hooks', + pulls_url: + 'https://api.github.com/repos/mralexgray/AFNetworking/pulls{/number}', + pushed_at: '2014-01-24T07:14:32Z', + teams_url: 'https://api.github.com/repos/mralexgray/AFNetworking/teams', + trees_url: + 'https://api.github.com/repos/mralexgray/AFNetworking/git/trees{/sha}', + created_at: '2012-12-02T17:00:04Z', + events_url: 'https://api.github.com/repos/mralexgray/AFNetworking/events', + has_issues: false, + issues_url: + 'https://api.github.com/repos/mralexgray/AFNetworking/issues{/number}', + labels_url: + 'https://api.github.com/repos/mralexgray/AFNetworking/labels{/name}', + merges_url: 'https://api.github.com/repos/mralexgray/AFNetworking/merges', + mirror_url: null, + updated_at: '2014-01-24T07:14:33Z', + visibility: 'public', + archive_url: + 'https://api.github.com/repos/mralexgray/AFNetworking/{archive_format}{/ref}', + commits_url: + 'https://api.github.com/repos/mralexgray/AFNetworking/commits{/sha}', + compare_url: + 'https://api.github.com/repos/mralexgray/AFNetworking/compare/{base}...{head}', + description: 'A delightful iOS and OS X networking framework', + forks_count: 0, + is_template: false, + open_issues: 0, + branches_url: + 'https://api.github.com/repos/mralexgray/AFNetworking/branches{/branch}', + comments_url: + 'https://api.github.com/repos/mralexgray/AFNetworking/comments{/number}', + contents_url: + 'https://api.github.com/repos/mralexgray/AFNetworking/contents/{+path}', + git_refs_url: + 'https://api.github.com/repos/mralexgray/AFNetworking/git/refs{/sha}', + git_tags_url: + 'https://api.github.com/repos/mralexgray/AFNetworking/git/tags{/sha}', + has_projects: true, + releases_url: + 'https://api.github.com/repos/mralexgray/AFNetworking/releases{/id}', + statuses_url: + 'https://api.github.com/repos/mralexgray/AFNetworking/statuses/{sha}', + allow_forking: true, + assignees_url: + 'https://api.github.com/repos/mralexgray/AFNetworking/assignees{/user}', + downloads_url: + 'https://api.github.com/repos/mralexgray/AFNetworking/downloads', + has_downloads: true, + languages_url: + 'https://api.github.com/repos/mralexgray/AFNetworking/languages', + default_branch: 'master', + milestones_url: + 'https://api.github.com/repos/mralexgray/AFNetworking/milestones{/number}', + stargazers_url: + 'https://api.github.com/repos/mralexgray/AFNetworking/stargazers', + watchers_count: 2, + deployments_url: + 'https://api.github.com/repos/mralexgray/AFNetworking/deployments', + git_commits_url: + 'https://api.github.com/repos/mralexgray/AFNetworking/git/commits{/sha}', + subscribers_url: + 'https://api.github.com/repos/mralexgray/AFNetworking/subscribers', + contributors_url: + 'https://api.github.com/repos/mralexgray/AFNetworking/contributors', + issue_events_url: + 'https://api.github.com/repos/mralexgray/AFNetworking/issues/events{/number}', + stargazers_count: 2, + subscription_url: + 'https://api.github.com/repos/mralexgray/AFNetworking/subscription', + collaborators_url: + 'https://api.github.com/repos/mralexgray/AFNetworking/collaborators{/collaborator}', + issue_comment_url: + 'https://api.github.com/repos/mralexgray/AFNetworking/issues/comments{/number}', + notifications_url: + 'https://api.github.com/repos/mralexgray/AFNetworking/notifications{?since,all,participating}', + open_issues_count: 0, + web_commit_signoff_required: false, + }, + { + id: 9485541, + url: 'https://api.github.com/repos/mralexgray/AGNSSplitView', + fork: true, + name: 'AGNSSplitView', + size: 68, + forks: 0, + owner: { + id: 262517, + url: 'https://api.github.com/users/mralexgray', + type: 'User', + login: 'mralexgray', + node_id: 'MDQ6VXNlcjI2MjUxNw==', + html_url: 'https://github.com/mralexgray', + gists_url: 'https://api.github.com/users/mralexgray/gists{/gist_id}', + repos_url: 'https://api.github.com/users/mralexgray/repos', + avatar_url: 'https://avatars.githubusercontent.com/u/262517?v=4', + events_url: 'https://api.github.com/users/mralexgray/events{/privacy}', + site_admin: false, + gravatar_id: '', + starred_url: + 'https://api.github.com/users/mralexgray/starred{/owner}{/repo}', + followers_url: 'https://api.github.com/users/mralexgray/followers', + following_url: + 'https://api.github.com/users/mralexgray/following{/other_user}', + organizations_url: 'https://api.github.com/users/mralexgray/orgs', + subscriptions_url: + 'https://api.github.com/users/mralexgray/subscriptions', + received_events_url: + 'https://api.github.com/users/mralexgray/received_events', + }, + topics: [], + git_url: 'git://github.com/mralexgray/AGNSSplitView.git', + license: null, + node_id: 'MDEwOlJlcG9zaXRvcnk5NDg1NTQx', + private: false, + ssh_url: 'git@github.com:mralexgray/AGNSSplitView.git', + svn_url: 'https://github.com/mralexgray/AGNSSplitView', + archived: false, + disabled: false, + has_wiki: true, + homepage: null, + html_url: 'https://github.com/mralexgray/AGNSSplitView', + keys_url: + 'https://api.github.com/repos/mralexgray/AGNSSplitView/keys{/key_id}', + language: 'Objective-C', + tags_url: 'https://api.github.com/repos/mralexgray/AGNSSplitView/tags', + watchers: 0, + blobs_url: + 'https://api.github.com/repos/mralexgray/AGNSSplitView/git/blobs{/sha}', + clone_url: 'https://github.com/mralexgray/AGNSSplitView.git', + forks_url: 'https://api.github.com/repos/mralexgray/AGNSSplitView/forks', + full_name: 'mralexgray/AGNSSplitView', + has_pages: false, + hooks_url: 'https://api.github.com/repos/mralexgray/AGNSSplitView/hooks', + pulls_url: + 'https://api.github.com/repos/mralexgray/AGNSSplitView/pulls{/number}', + pushed_at: '2013-02-26T00:32:32Z', + teams_url: 'https://api.github.com/repos/mralexgray/AGNSSplitView/teams', + trees_url: + 'https://api.github.com/repos/mralexgray/AGNSSplitView/git/trees{/sha}', + created_at: '2013-04-17T00:10:13Z', + events_url: + 'https://api.github.com/repos/mralexgray/AGNSSplitView/events', + has_issues: false, + issues_url: + 'https://api.github.com/repos/mralexgray/AGNSSplitView/issues{/number}', + labels_url: + 'https://api.github.com/repos/mralexgray/AGNSSplitView/labels{/name}', + merges_url: + 'https://api.github.com/repos/mralexgray/AGNSSplitView/merges', + mirror_url: null, + updated_at: '2013-04-17T00:10:13Z', + visibility: 'public', + archive_url: + 'https://api.github.com/repos/mralexgray/AGNSSplitView/{archive_format}{/ref}', + commits_url: + 'https://api.github.com/repos/mralexgray/AGNSSplitView/commits{/sha}', + compare_url: + 'https://api.github.com/repos/mralexgray/AGNSSplitView/compare/{base}...{head}', + description: 'Simple NSSplitView additions.', + forks_count: 0, + is_template: false, + open_issues: 0, + branches_url: + 'https://api.github.com/repos/mralexgray/AGNSSplitView/branches{/branch}', + comments_url: + 'https://api.github.com/repos/mralexgray/AGNSSplitView/comments{/number}', + contents_url: + 'https://api.github.com/repos/mralexgray/AGNSSplitView/contents/{+path}', + git_refs_url: + 'https://api.github.com/repos/mralexgray/AGNSSplitView/git/refs{/sha}', + git_tags_url: + 'https://api.github.com/repos/mralexgray/AGNSSplitView/git/tags{/sha}', + has_projects: true, + releases_url: + 'https://api.github.com/repos/mralexgray/AGNSSplitView/releases{/id}', + statuses_url: + 'https://api.github.com/repos/mralexgray/AGNSSplitView/statuses/{sha}', + allow_forking: true, + assignees_url: + 'https://api.github.com/repos/mralexgray/AGNSSplitView/assignees{/user}', + downloads_url: + 'https://api.github.com/repos/mralexgray/AGNSSplitView/downloads', + has_downloads: true, + languages_url: + 'https://api.github.com/repos/mralexgray/AGNSSplitView/languages', + default_branch: 'master', + milestones_url: + 'https://api.github.com/repos/mralexgray/AGNSSplitView/milestones{/number}', + stargazers_url: + 'https://api.github.com/repos/mralexgray/AGNSSplitView/stargazers', + watchers_count: 0, + deployments_url: + 'https://api.github.com/repos/mralexgray/AGNSSplitView/deployments', + git_commits_url: + 'https://api.github.com/repos/mralexgray/AGNSSplitView/git/commits{/sha}', + subscribers_url: + 'https://api.github.com/repos/mralexgray/AGNSSplitView/subscribers', + contributors_url: + 'https://api.github.com/repos/mralexgray/AGNSSplitView/contributors', + issue_events_url: + 'https://api.github.com/repos/mralexgray/AGNSSplitView/issues/events{/number}', + stargazers_count: 0, + subscription_url: + 'https://api.github.com/repos/mralexgray/AGNSSplitView/subscription', + collaborators_url: + 'https://api.github.com/repos/mralexgray/AGNSSplitView/collaborators{/collaborator}', + issue_comment_url: + 'https://api.github.com/repos/mralexgray/AGNSSplitView/issues/comments{/number}', + notifications_url: + 'https://api.github.com/repos/mralexgray/AGNSSplitView/notifications{?since,all,participating}', + open_issues_count: 0, + web_commit_signoff_required: false, + }, + { + id: 12767784, + url: 'https://api.github.com/repos/mralexgray/AGScopeBar', + fork: true, + name: 'AGScopeBar', + size: 64, + forks: 0, + owner: { + id: 262517, + url: 'https://api.github.com/users/mralexgray', + type: 'User', + login: 'mralexgray', + node_id: 'MDQ6VXNlcjI2MjUxNw==', + html_url: 'https://github.com/mralexgray', + gists_url: 'https://api.github.com/users/mralexgray/gists{/gist_id}', + repos_url: 'https://api.github.com/users/mralexgray/repos', + avatar_url: 'https://avatars.githubusercontent.com/u/262517?v=4', + events_url: 'https://api.github.com/users/mralexgray/events{/privacy}', + site_admin: false, + gravatar_id: '', + starred_url: + 'https://api.github.com/users/mralexgray/starred{/owner}{/repo}', + followers_url: 'https://api.github.com/users/mralexgray/followers', + following_url: + 'https://api.github.com/users/mralexgray/following{/other_user}', + organizations_url: 'https://api.github.com/users/mralexgray/orgs', + subscriptions_url: + 'https://api.github.com/users/mralexgray/subscriptions', + received_events_url: + 'https://api.github.com/users/mralexgray/received_events', + }, + topics: [], + git_url: 'git://github.com/mralexgray/AGScopeBar.git', + license: null, + node_id: 'MDEwOlJlcG9zaXRvcnkxMjc2Nzc4NA==', + private: false, + ssh_url: 'git@github.com:mralexgray/AGScopeBar.git', + svn_url: 'https://github.com/mralexgray/AGScopeBar', + archived: false, + disabled: false, + has_wiki: true, + homepage: null, + html_url: 'https://github.com/mralexgray/AGScopeBar', + keys_url: + 'https://api.github.com/repos/mralexgray/AGScopeBar/keys{/key_id}', + language: 'Objective-C', + tags_url: 'https://api.github.com/repos/mralexgray/AGScopeBar/tags', + watchers: 0, + blobs_url: + 'https://api.github.com/repos/mralexgray/AGScopeBar/git/blobs{/sha}', + clone_url: 'https://github.com/mralexgray/AGScopeBar.git', + forks_url: 'https://api.github.com/repos/mralexgray/AGScopeBar/forks', + full_name: 'mralexgray/AGScopeBar', + has_pages: false, + hooks_url: 'https://api.github.com/repos/mralexgray/AGScopeBar/hooks', + pulls_url: + 'https://api.github.com/repos/mralexgray/AGScopeBar/pulls{/number}', + pushed_at: '2013-05-07T03:35:29Z', + teams_url: 'https://api.github.com/repos/mralexgray/AGScopeBar/teams', + trees_url: + 'https://api.github.com/repos/mralexgray/AGScopeBar/git/trees{/sha}', + created_at: '2013-09-11T21:06:54Z', + events_url: 'https://api.github.com/repos/mralexgray/AGScopeBar/events', + has_issues: false, + issues_url: + 'https://api.github.com/repos/mralexgray/AGScopeBar/issues{/number}', + labels_url: + 'https://api.github.com/repos/mralexgray/AGScopeBar/labels{/name}', + merges_url: 'https://api.github.com/repos/mralexgray/AGScopeBar/merges', + mirror_url: null, + updated_at: '2013-09-11T21:06:54Z', + visibility: 'public', + archive_url: + 'https://api.github.com/repos/mralexgray/AGScopeBar/{archive_format}{/ref}', + commits_url: + 'https://api.github.com/repos/mralexgray/AGScopeBar/commits{/sha}', + compare_url: + 'https://api.github.com/repos/mralexgray/AGScopeBar/compare/{base}...{head}', + description: 'Custom scope bar implementation for Cocoa', + forks_count: 0, + is_template: false, + open_issues: 0, + branches_url: + 'https://api.github.com/repos/mralexgray/AGScopeBar/branches{/branch}', + comments_url: + 'https://api.github.com/repos/mralexgray/AGScopeBar/comments{/number}', + contents_url: + 'https://api.github.com/repos/mralexgray/AGScopeBar/contents/{+path}', + git_refs_url: + 'https://api.github.com/repos/mralexgray/AGScopeBar/git/refs{/sha}', + git_tags_url: + 'https://api.github.com/repos/mralexgray/AGScopeBar/git/tags{/sha}', + has_projects: true, + releases_url: + 'https://api.github.com/repos/mralexgray/AGScopeBar/releases{/id}', + statuses_url: + 'https://api.github.com/repos/mralexgray/AGScopeBar/statuses/{sha}', + allow_forking: true, + assignees_url: + 'https://api.github.com/repos/mralexgray/AGScopeBar/assignees{/user}', + downloads_url: + 'https://api.github.com/repos/mralexgray/AGScopeBar/downloads', + has_downloads: true, + languages_url: + 'https://api.github.com/repos/mralexgray/AGScopeBar/languages', + default_branch: 'master', + milestones_url: + 'https://api.github.com/repos/mralexgray/AGScopeBar/milestones{/number}', + stargazers_url: + 'https://api.github.com/repos/mralexgray/AGScopeBar/stargazers', + watchers_count: 0, + deployments_url: + 'https://api.github.com/repos/mralexgray/AGScopeBar/deployments', + git_commits_url: + 'https://api.github.com/repos/mralexgray/AGScopeBar/git/commits{/sha}', + subscribers_url: + 'https://api.github.com/repos/mralexgray/AGScopeBar/subscribers', + contributors_url: + 'https://api.github.com/repos/mralexgray/AGScopeBar/contributors', + issue_events_url: + 'https://api.github.com/repos/mralexgray/AGScopeBar/issues/events{/number}', + stargazers_count: 0, + subscription_url: + 'https://api.github.com/repos/mralexgray/AGScopeBar/subscription', + collaborators_url: + 'https://api.github.com/repos/mralexgray/AGScopeBar/collaborators{/collaborator}', + issue_comment_url: + 'https://api.github.com/repos/mralexgray/AGScopeBar/issues/comments{/number}', + notifications_url: + 'https://api.github.com/repos/mralexgray/AGScopeBar/notifications{?since,all,participating}', + open_issues_count: 0, + web_commit_signoff_required: false, + }, + { + id: 31829499, + url: 'https://api.github.com/repos/mralexgray/agvtool-xcode-plugin', + fork: true, + name: 'agvtool-xcode-plugin', + size: 102, + forks: 0, + owner: { + id: 262517, + url: 'https://api.github.com/users/mralexgray', + type: 'User', + login: 'mralexgray', + node_id: 'MDQ6VXNlcjI2MjUxNw==', + html_url: 'https://github.com/mralexgray', + gists_url: 'https://api.github.com/users/mralexgray/gists{/gist_id}', + repos_url: 'https://api.github.com/users/mralexgray/repos', + avatar_url: 'https://avatars.githubusercontent.com/u/262517?v=4', + events_url: 'https://api.github.com/users/mralexgray/events{/privacy}', + site_admin: false, + gravatar_id: '', + starred_url: + 'https://api.github.com/users/mralexgray/starred{/owner}{/repo}', + followers_url: 'https://api.github.com/users/mralexgray/followers', + following_url: + 'https://api.github.com/users/mralexgray/following{/other_user}', + organizations_url: 'https://api.github.com/users/mralexgray/orgs', + subscriptions_url: + 'https://api.github.com/users/mralexgray/subscriptions', + received_events_url: + 'https://api.github.com/users/mralexgray/received_events', + }, + topics: [], + git_url: 'git://github.com/mralexgray/agvtool-xcode-plugin.git', + license: null, + node_id: 'MDEwOlJlcG9zaXRvcnkzMTgyOTQ5OQ==', + private: false, + ssh_url: 'git@github.com:mralexgray/agvtool-xcode-plugin.git', + svn_url: 'https://github.com/mralexgray/agvtool-xcode-plugin', + archived: false, + disabled: false, + has_wiki: true, + homepage: null, + html_url: 'https://github.com/mralexgray/agvtool-xcode-plugin', + keys_url: + 'https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/keys{/key_id}', + language: 'Objective-C', + tags_url: + 'https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/tags', + watchers: 0, + blobs_url: + 'https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/git/blobs{/sha}', + clone_url: 'https://github.com/mralexgray/agvtool-xcode-plugin.git', + forks_url: + 'https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/forks', + full_name: 'mralexgray/agvtool-xcode-plugin', + has_pages: false, + hooks_url: + 'https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/hooks', + pulls_url: + 'https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/pulls{/number}', + pushed_at: '2015-03-08T00:04:31Z', + teams_url: + 'https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/teams', + trees_url: + 'https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/git/trees{/sha}', + created_at: '2015-03-07T22:15:38Z', + events_url: + 'https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/events', + has_issues: false, + issues_url: + 'https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/issues{/number}', + labels_url: + 'https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/labels{/name}', + merges_url: + 'https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/merges', + mirror_url: null, + updated_at: '2015-03-07T22:15:41Z', + visibility: 'public', + archive_url: + 'https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/{archive_format}{/ref}', + commits_url: + 'https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/commits{/sha}', + compare_url: + 'https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/compare/{base}...{head}', + description: 'this is a plugin wrapper for agvtool for xcode.', + forks_count: 0, + is_template: false, + open_issues: 0, + branches_url: + 'https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/branches{/branch}', + comments_url: + 'https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/comments{/number}', + contents_url: + 'https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/contents/{+path}', + git_refs_url: + 'https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/git/refs{/sha}', + git_tags_url: + 'https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/git/tags{/sha}', + has_projects: true, + releases_url: + 'https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/releases{/id}', + statuses_url: + 'https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/statuses/{sha}', + allow_forking: true, + assignees_url: + 'https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/assignees{/user}', + downloads_url: + 'https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/downloads', + has_downloads: true, + languages_url: + 'https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/languages', + default_branch: 'master', + milestones_url: + 'https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/milestones{/number}', + stargazers_url: + 'https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/stargazers', + watchers_count: 0, + deployments_url: + 'https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/deployments', + git_commits_url: + 'https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/git/commits{/sha}', + subscribers_url: + 'https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/subscribers', + contributors_url: + 'https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/contributors', + issue_events_url: + 'https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/issues/events{/number}', + stargazers_count: 0, + subscription_url: + 'https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/subscription', + collaborators_url: + 'https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/collaborators{/collaborator}', + issue_comment_url: + 'https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/issues/comments{/number}', + notifications_url: + 'https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/notifications{?since,all,participating}', + open_issues_count: 0, + web_commit_signoff_required: false, + }, + { + id: 9227846, + url: 'https://api.github.com/repos/mralexgray/AHContentBrowser', + fork: true, + name: 'AHContentBrowser', + size: 223, + forks: 0, + owner: { + id: 262517, + url: 'https://api.github.com/users/mralexgray', + type: 'User', + login: 'mralexgray', + node_id: 'MDQ6VXNlcjI2MjUxNw==', + html_url: 'https://github.com/mralexgray', + gists_url: 'https://api.github.com/users/mralexgray/gists{/gist_id}', + repos_url: 'https://api.github.com/users/mralexgray/repos', + avatar_url: 'https://avatars.githubusercontent.com/u/262517?v=4', + events_url: 'https://api.github.com/users/mralexgray/events{/privacy}', + site_admin: false, + gravatar_id: '', + starred_url: + 'https://api.github.com/users/mralexgray/starred{/owner}{/repo}', + followers_url: 'https://api.github.com/users/mralexgray/followers', + following_url: + 'https://api.github.com/users/mralexgray/following{/other_user}', + organizations_url: 'https://api.github.com/users/mralexgray/orgs', + subscriptions_url: + 'https://api.github.com/users/mralexgray/subscriptions', + received_events_url: + 'https://api.github.com/users/mralexgray/received_events', + }, + topics: [], + git_url: 'git://github.com/mralexgray/AHContentBrowser.git', + license: null, + node_id: 'MDEwOlJlcG9zaXRvcnk5MjI3ODQ2', + private: false, + ssh_url: 'git@github.com:mralexgray/AHContentBrowser.git', + svn_url: 'https://github.com/mralexgray/AHContentBrowser', + archived: false, + disabled: false, + has_wiki: true, + homepage: '', + html_url: 'https://github.com/mralexgray/AHContentBrowser', + keys_url: + 'https://api.github.com/repos/mralexgray/AHContentBrowser/keys{/key_id}', + language: 'Objective-C', + tags_url: 'https://api.github.com/repos/mralexgray/AHContentBrowser/tags', + watchers: 0, + blobs_url: + 'https://api.github.com/repos/mralexgray/AHContentBrowser/git/blobs{/sha}', + clone_url: 'https://github.com/mralexgray/AHContentBrowser.git', + forks_url: + 'https://api.github.com/repos/mralexgray/AHContentBrowser/forks', + full_name: 'mralexgray/AHContentBrowser', + has_pages: false, + hooks_url: + 'https://api.github.com/repos/mralexgray/AHContentBrowser/hooks', + pulls_url: + 'https://api.github.com/repos/mralexgray/AHContentBrowser/pulls{/number}', + pushed_at: '2013-03-13T17:38:23Z', + teams_url: + 'https://api.github.com/repos/mralexgray/AHContentBrowser/teams', + trees_url: + 'https://api.github.com/repos/mralexgray/AHContentBrowser/git/trees{/sha}', + created_at: '2013-04-04T20:56:16Z', + events_url: + 'https://api.github.com/repos/mralexgray/AHContentBrowser/events', + has_issues: false, + issues_url: + 'https://api.github.com/repos/mralexgray/AHContentBrowser/issues{/number}', + labels_url: + 'https://api.github.com/repos/mralexgray/AHContentBrowser/labels{/name}', + merges_url: + 'https://api.github.com/repos/mralexgray/AHContentBrowser/merges', + mirror_url: null, + updated_at: '2015-10-22T05:00:24Z', + visibility: 'public', + archive_url: + 'https://api.github.com/repos/mralexgray/AHContentBrowser/{archive_format}{/ref}', + commits_url: + 'https://api.github.com/repos/mralexgray/AHContentBrowser/commits{/sha}', + compare_url: + 'https://api.github.com/repos/mralexgray/AHContentBrowser/compare/{base}...{head}', + description: + 'A Mac only webview that loads a fast readable version of the website if available.', + forks_count: 0, + is_template: false, + open_issues: 0, + branches_url: + 'https://api.github.com/repos/mralexgray/AHContentBrowser/branches{/branch}', + comments_url: + 'https://api.github.com/repos/mralexgray/AHContentBrowser/comments{/number}', + contents_url: + 'https://api.github.com/repos/mralexgray/AHContentBrowser/contents/{+path}', + git_refs_url: + 'https://api.github.com/repos/mralexgray/AHContentBrowser/git/refs{/sha}', + git_tags_url: + 'https://api.github.com/repos/mralexgray/AHContentBrowser/git/tags{/sha}', + has_projects: true, + releases_url: + 'https://api.github.com/repos/mralexgray/AHContentBrowser/releases{/id}', + statuses_url: + 'https://api.github.com/repos/mralexgray/AHContentBrowser/statuses/{sha}', + allow_forking: true, + assignees_url: + 'https://api.github.com/repos/mralexgray/AHContentBrowser/assignees{/user}', + downloads_url: + 'https://api.github.com/repos/mralexgray/AHContentBrowser/downloads', + has_downloads: true, + languages_url: + 'https://api.github.com/repos/mralexgray/AHContentBrowser/languages', + default_branch: 'master', + milestones_url: + 'https://api.github.com/repos/mralexgray/AHContentBrowser/milestones{/number}', + stargazers_url: + 'https://api.github.com/repos/mralexgray/AHContentBrowser/stargazers', + watchers_count: 0, + deployments_url: + 'https://api.github.com/repos/mralexgray/AHContentBrowser/deployments', + git_commits_url: + 'https://api.github.com/repos/mralexgray/AHContentBrowser/git/commits{/sha}', + subscribers_url: + 'https://api.github.com/repos/mralexgray/AHContentBrowser/subscribers', + contributors_url: + 'https://api.github.com/repos/mralexgray/AHContentBrowser/contributors', + issue_events_url: + 'https://api.github.com/repos/mralexgray/AHContentBrowser/issues/events{/number}', + stargazers_count: 0, + subscription_url: + 'https://api.github.com/repos/mralexgray/AHContentBrowser/subscription', + collaborators_url: + 'https://api.github.com/repos/mralexgray/AHContentBrowser/collaborators{/collaborator}', + issue_comment_url: + 'https://api.github.com/repos/mralexgray/AHContentBrowser/issues/comments{/number}', + notifications_url: + 'https://api.github.com/repos/mralexgray/AHContentBrowser/notifications{?since,all,participating}', + open_issues_count: 0, + web_commit_signoff_required: false, + }, + { + id: 37430328, + url: 'https://api.github.com/repos/mralexgray/AHLaunchCtl', + fork: true, + name: 'AHLaunchCtl', + size: 592, + forks: 0, + owner: { + id: 262517, + url: 'https://api.github.com/users/mralexgray', + type: 'User', + login: 'mralexgray', + node_id: 'MDQ6VXNlcjI2MjUxNw==', + html_url: 'https://github.com/mralexgray', + gists_url: 'https://api.github.com/users/mralexgray/gists{/gist_id}', + repos_url: 'https://api.github.com/users/mralexgray/repos', + avatar_url: 'https://avatars.githubusercontent.com/u/262517?v=4', + events_url: 'https://api.github.com/users/mralexgray/events{/privacy}', + site_admin: false, + gravatar_id: '', + starred_url: + 'https://api.github.com/users/mralexgray/starred{/owner}{/repo}', + followers_url: 'https://api.github.com/users/mralexgray/followers', + following_url: + 'https://api.github.com/users/mralexgray/following{/other_user}', + organizations_url: 'https://api.github.com/users/mralexgray/orgs', + subscriptions_url: + 'https://api.github.com/users/mralexgray/subscriptions', + received_events_url: + 'https://api.github.com/users/mralexgray/received_events', + }, + topics: [], + git_url: 'git://github.com/mralexgray/AHLaunchCtl.git', + license: { + key: 'mit', + url: 'https://api.github.com/licenses/mit', + name: 'MIT License', + node_id: 'MDc6TGljZW5zZTEz', + spdx_id: 'MIT', + }, + node_id: 'MDEwOlJlcG9zaXRvcnkzNzQzMDMyOA==', + private: false, + ssh_url: 'git@github.com:mralexgray/AHLaunchCtl.git', + svn_url: 'https://github.com/mralexgray/AHLaunchCtl', + archived: false, + disabled: false, + has_wiki: true, + homepage: '', + html_url: 'https://github.com/mralexgray/AHLaunchCtl', + keys_url: + 'https://api.github.com/repos/mralexgray/AHLaunchCtl/keys{/key_id}', + language: 'Objective-C', + tags_url: 'https://api.github.com/repos/mralexgray/AHLaunchCtl/tags', + watchers: 0, + blobs_url: + 'https://api.github.com/repos/mralexgray/AHLaunchCtl/git/blobs{/sha}', + clone_url: 'https://github.com/mralexgray/AHLaunchCtl.git', + forks_url: 'https://api.github.com/repos/mralexgray/AHLaunchCtl/forks', + full_name: 'mralexgray/AHLaunchCtl', + has_pages: false, + hooks_url: 'https://api.github.com/repos/mralexgray/AHLaunchCtl/hooks', + pulls_url: + 'https://api.github.com/repos/mralexgray/AHLaunchCtl/pulls{/number}', + pushed_at: '2015-05-26T18:50:48Z', + teams_url: 'https://api.github.com/repos/mralexgray/AHLaunchCtl/teams', + trees_url: + 'https://api.github.com/repos/mralexgray/AHLaunchCtl/git/trees{/sha}', + created_at: '2015-06-14T21:31:03Z', + events_url: 'https://api.github.com/repos/mralexgray/AHLaunchCtl/events', + has_issues: false, + issues_url: + 'https://api.github.com/repos/mralexgray/AHLaunchCtl/issues{/number}', + labels_url: + 'https://api.github.com/repos/mralexgray/AHLaunchCtl/labels{/name}', + merges_url: 'https://api.github.com/repos/mralexgray/AHLaunchCtl/merges', + mirror_url: null, + updated_at: '2015-06-14T21:31:04Z', + visibility: 'public', + archive_url: + 'https://api.github.com/repos/mralexgray/AHLaunchCtl/{archive_format}{/ref}', + commits_url: + 'https://api.github.com/repos/mralexgray/AHLaunchCtl/commits{/sha}', + compare_url: + 'https://api.github.com/repos/mralexgray/AHLaunchCtl/compare/{base}...{head}', + description: 'LaunchD Framework for Cocoa Apps', + forks_count: 0, + is_template: false, + open_issues: 0, + branches_url: + 'https://api.github.com/repos/mralexgray/AHLaunchCtl/branches{/branch}', + comments_url: + 'https://api.github.com/repos/mralexgray/AHLaunchCtl/comments{/number}', + contents_url: + 'https://api.github.com/repos/mralexgray/AHLaunchCtl/contents/{+path}', + git_refs_url: + 'https://api.github.com/repos/mralexgray/AHLaunchCtl/git/refs{/sha}', + git_tags_url: + 'https://api.github.com/repos/mralexgray/AHLaunchCtl/git/tags{/sha}', + has_projects: true, + releases_url: + 'https://api.github.com/repos/mralexgray/AHLaunchCtl/releases{/id}', + statuses_url: + 'https://api.github.com/repos/mralexgray/AHLaunchCtl/statuses/{sha}', + allow_forking: true, + assignees_url: + 'https://api.github.com/repos/mralexgray/AHLaunchCtl/assignees{/user}', + downloads_url: + 'https://api.github.com/repos/mralexgray/AHLaunchCtl/downloads', + has_downloads: true, + languages_url: + 'https://api.github.com/repos/mralexgray/AHLaunchCtl/languages', + default_branch: 'master', + milestones_url: + 'https://api.github.com/repos/mralexgray/AHLaunchCtl/milestones{/number}', + stargazers_url: + 'https://api.github.com/repos/mralexgray/AHLaunchCtl/stargazers', + watchers_count: 0, + deployments_url: + 'https://api.github.com/repos/mralexgray/AHLaunchCtl/deployments', + git_commits_url: + 'https://api.github.com/repos/mralexgray/AHLaunchCtl/git/commits{/sha}', + subscribers_url: + 'https://api.github.com/repos/mralexgray/AHLaunchCtl/subscribers', + contributors_url: + 'https://api.github.com/repos/mralexgray/AHLaunchCtl/contributors', + issue_events_url: + 'https://api.github.com/repos/mralexgray/AHLaunchCtl/issues/events{/number}', + stargazers_count: 0, + subscription_url: + 'https://api.github.com/repos/mralexgray/AHLaunchCtl/subscription', + collaborators_url: + 'https://api.github.com/repos/mralexgray/AHLaunchCtl/collaborators{/collaborator}', + issue_comment_url: + 'https://api.github.com/repos/mralexgray/AHLaunchCtl/issues/comments{/number}', + notifications_url: + 'https://api.github.com/repos/mralexgray/AHLaunchCtl/notifications{?since,all,participating}', + open_issues_count: 0, + web_commit_signoff_required: false, + }, + { + id: 9167473, + url: 'https://api.github.com/repos/mralexgray/AHLayout', + fork: true, + name: 'AHLayout', + size: 359, + forks: 0, + owner: { + id: 262517, + url: 'https://api.github.com/users/mralexgray', + type: 'User', + login: 'mralexgray', + node_id: 'MDQ6VXNlcjI2MjUxNw==', + html_url: 'https://github.com/mralexgray', + gists_url: 'https://api.github.com/users/mralexgray/gists{/gist_id}', + repos_url: 'https://api.github.com/users/mralexgray/repos', + avatar_url: 'https://avatars.githubusercontent.com/u/262517?v=4', + events_url: 'https://api.github.com/users/mralexgray/events{/privacy}', + site_admin: false, + gravatar_id: '', + starred_url: + 'https://api.github.com/users/mralexgray/starred{/owner}{/repo}', + followers_url: 'https://api.github.com/users/mralexgray/followers', + following_url: + 'https://api.github.com/users/mralexgray/following{/other_user}', + organizations_url: 'https://api.github.com/users/mralexgray/orgs', + subscriptions_url: + 'https://api.github.com/users/mralexgray/subscriptions', + received_events_url: + 'https://api.github.com/users/mralexgray/received_events', + }, + topics: [], + git_url: 'git://github.com/mralexgray/AHLayout.git', + license: null, + node_id: 'MDEwOlJlcG9zaXRvcnk5MTY3NDcz', + private: false, + ssh_url: 'git@github.com:mralexgray/AHLayout.git', + svn_url: 'https://github.com/mralexgray/AHLayout', + archived: false, + disabled: false, + has_wiki: true, + homepage: null, + html_url: 'https://github.com/mralexgray/AHLayout', + keys_url: + 'https://api.github.com/repos/mralexgray/AHLayout/keys{/key_id}', + language: 'Objective-C', + tags_url: 'https://api.github.com/repos/mralexgray/AHLayout/tags', + watchers: 0, + blobs_url: + 'https://api.github.com/repos/mralexgray/AHLayout/git/blobs{/sha}', + clone_url: 'https://github.com/mralexgray/AHLayout.git', + forks_url: 'https://api.github.com/repos/mralexgray/AHLayout/forks', + full_name: 'mralexgray/AHLayout', + has_pages: false, + hooks_url: 'https://api.github.com/repos/mralexgray/AHLayout/hooks', + pulls_url: + 'https://api.github.com/repos/mralexgray/AHLayout/pulls{/number}', + pushed_at: '2013-07-08T02:31:14Z', + teams_url: 'https://api.github.com/repos/mralexgray/AHLayout/teams', + trees_url: + 'https://api.github.com/repos/mralexgray/AHLayout/git/trees{/sha}', + created_at: '2013-04-02T10:10:30Z', + events_url: 'https://api.github.com/repos/mralexgray/AHLayout/events', + has_issues: false, + issues_url: + 'https://api.github.com/repos/mralexgray/AHLayout/issues{/number}', + labels_url: + 'https://api.github.com/repos/mralexgray/AHLayout/labels{/name}', + merges_url: 'https://api.github.com/repos/mralexgray/AHLayout/merges', + mirror_url: null, + updated_at: '2013-07-08T02:31:17Z', + visibility: 'public', + archive_url: + 'https://api.github.com/repos/mralexgray/AHLayout/{archive_format}{/ref}', + commits_url: + 'https://api.github.com/repos/mralexgray/AHLayout/commits{/sha}', + compare_url: + 'https://api.github.com/repos/mralexgray/AHLayout/compare/{base}...{head}', + description: 'AHLayout', + forks_count: 0, + is_template: false, + open_issues: 0, + branches_url: + 'https://api.github.com/repos/mralexgray/AHLayout/branches{/branch}', + comments_url: + 'https://api.github.com/repos/mralexgray/AHLayout/comments{/number}', + contents_url: + 'https://api.github.com/repos/mralexgray/AHLayout/contents/{+path}', + git_refs_url: + 'https://api.github.com/repos/mralexgray/AHLayout/git/refs{/sha}', + git_tags_url: + 'https://api.github.com/repos/mralexgray/AHLayout/git/tags{/sha}', + has_projects: true, + releases_url: + 'https://api.github.com/repos/mralexgray/AHLayout/releases{/id}', + statuses_url: + 'https://api.github.com/repos/mralexgray/AHLayout/statuses/{sha}', + allow_forking: true, + assignees_url: + 'https://api.github.com/repos/mralexgray/AHLayout/assignees{/user}', + downloads_url: + 'https://api.github.com/repos/mralexgray/AHLayout/downloads', + has_downloads: true, + languages_url: + 'https://api.github.com/repos/mralexgray/AHLayout/languages', + default_branch: 'master', + milestones_url: + 'https://api.github.com/repos/mralexgray/AHLayout/milestones{/number}', + stargazers_url: + 'https://api.github.com/repos/mralexgray/AHLayout/stargazers', + watchers_count: 0, + deployments_url: + 'https://api.github.com/repos/mralexgray/AHLayout/deployments', + git_commits_url: + 'https://api.github.com/repos/mralexgray/AHLayout/git/commits{/sha}', + subscribers_url: + 'https://api.github.com/repos/mralexgray/AHLayout/subscribers', + contributors_url: + 'https://api.github.com/repos/mralexgray/AHLayout/contributors', + issue_events_url: + 'https://api.github.com/repos/mralexgray/AHLayout/issues/events{/number}', + stargazers_count: 0, + subscription_url: + 'https://api.github.com/repos/mralexgray/AHLayout/subscription', + collaborators_url: + 'https://api.github.com/repos/mralexgray/AHLayout/collaborators{/collaborator}', + issue_comment_url: + 'https://api.github.com/repos/mralexgray/AHLayout/issues/comments{/number}', + notifications_url: + 'https://api.github.com/repos/mralexgray/AHLayout/notifications{?since,all,participating}', + open_issues_count: 0, + web_commit_signoff_required: false, + }, + { + id: 18450201, + url: 'https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework', + fork: true, + name: 'Airmail-Plug-In-Framework', + size: 888, + forks: 0, + owner: { + id: 262517, + url: 'https://api.github.com/users/mralexgray', + type: 'User', + login: 'mralexgray', + node_id: 'MDQ6VXNlcjI2MjUxNw==', + html_url: 'https://github.com/mralexgray', + gists_url: 'https://api.github.com/users/mralexgray/gists{/gist_id}', + repos_url: 'https://api.github.com/users/mralexgray/repos', + avatar_url: 'https://avatars.githubusercontent.com/u/262517?v=4', + events_url: 'https://api.github.com/users/mralexgray/events{/privacy}', + site_admin: false, + gravatar_id: '', + starred_url: + 'https://api.github.com/users/mralexgray/starred{/owner}{/repo}', + followers_url: 'https://api.github.com/users/mralexgray/followers', + following_url: + 'https://api.github.com/users/mralexgray/following{/other_user}', + organizations_url: 'https://api.github.com/users/mralexgray/orgs', + subscriptions_url: + 'https://api.github.com/users/mralexgray/subscriptions', + received_events_url: + 'https://api.github.com/users/mralexgray/received_events', + }, + topics: [], + git_url: 'git://github.com/mralexgray/Airmail-Plug-In-Framework.git', + license: { + key: 'gpl-2.0', + url: 'https://api.github.com/licenses/gpl-2.0', + name: 'GNU General Public License v2.0', + node_id: 'MDc6TGljZW5zZTg=', + spdx_id: 'GPL-2.0', + }, + node_id: 'MDEwOlJlcG9zaXRvcnkxODQ1MDIwMQ==', + private: false, + ssh_url: 'git@github.com:mralexgray/Airmail-Plug-In-Framework.git', + svn_url: 'https://github.com/mralexgray/Airmail-Plug-In-Framework', + archived: false, + disabled: false, + has_wiki: true, + homepage: null, + html_url: 'https://github.com/mralexgray/Airmail-Plug-In-Framework', + keys_url: + 'https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/keys{/key_id}', + language: null, + tags_url: + 'https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/tags', + watchers: 0, + blobs_url: + 'https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/git/blobs{/sha}', + clone_url: 'https://github.com/mralexgray/Airmail-Plug-In-Framework.git', + forks_url: + 'https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/forks', + full_name: 'mralexgray/Airmail-Plug-In-Framework', + has_pages: false, + hooks_url: + 'https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/hooks', + pulls_url: + 'https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/pulls{/number}', + pushed_at: '2014-03-27T15:42:19Z', + teams_url: + 'https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/teams', + trees_url: + 'https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/git/trees{/sha}', + created_at: '2014-04-04T19:33:54Z', + events_url: + 'https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/events', + has_issues: false, + issues_url: + 'https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/issues{/number}', + labels_url: + 'https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/labels{/name}', + merges_url: + 'https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/merges', + mirror_url: null, + updated_at: '2014-11-23T19:31:04Z', + visibility: 'public', + archive_url: + 'https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/{archive_format}{/ref}', + commits_url: + 'https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/commits{/sha}', + compare_url: + 'https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/compare/{base}...{head}', + description: null, + forks_count: 0, + is_template: false, + open_issues: 0, + branches_url: + 'https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/branches{/branch}', + comments_url: + 'https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/comments{/number}', + contents_url: + 'https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/contents/{+path}', + git_refs_url: + 'https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/git/refs{/sha}', + git_tags_url: + 'https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/git/tags{/sha}', + has_projects: true, + releases_url: + 'https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/releases{/id}', + statuses_url: + 'https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/statuses/{sha}', + allow_forking: true, + assignees_url: + 'https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/assignees{/user}', + downloads_url: + 'https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/downloads', + has_downloads: true, + languages_url: + 'https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/languages', + default_branch: 'master', + milestones_url: + 'https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/milestones{/number}', + stargazers_url: + 'https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/stargazers', + watchers_count: 0, + deployments_url: + 'https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/deployments', + git_commits_url: + 'https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/git/commits{/sha}', + subscribers_url: + 'https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/subscribers', + contributors_url: + 'https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/contributors', + issue_events_url: + 'https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/issues/events{/number}', + stargazers_count: 0, + subscription_url: + 'https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/subscription', + collaborators_url: + 'https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/collaborators{/collaborator}', + issue_comment_url: + 'https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/issues/comments{/number}', + notifications_url: + 'https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/notifications{?since,all,participating}', + open_issues_count: 0, + web_commit_signoff_required: false, + }, + { + id: 5203219, + url: 'https://api.github.com/repos/mralexgray/AJS-iTunes-API', + fork: true, + name: 'AJS-iTunes-API', + size: 103, + forks: 0, + owner: { + id: 262517, + url: 'https://api.github.com/users/mralexgray', + type: 'User', + login: 'mralexgray', + node_id: 'MDQ6VXNlcjI2MjUxNw==', + html_url: 'https://github.com/mralexgray', + gists_url: 'https://api.github.com/users/mralexgray/gists{/gist_id}', + repos_url: 'https://api.github.com/users/mralexgray/repos', + avatar_url: 'https://avatars.githubusercontent.com/u/262517?v=4', + events_url: 'https://api.github.com/users/mralexgray/events{/privacy}', + site_admin: false, + gravatar_id: '', + starred_url: + 'https://api.github.com/users/mralexgray/starred{/owner}{/repo}', + followers_url: 'https://api.github.com/users/mralexgray/followers', + following_url: + 'https://api.github.com/users/mralexgray/following{/other_user}', + organizations_url: 'https://api.github.com/users/mralexgray/orgs', + subscriptions_url: + 'https://api.github.com/users/mralexgray/subscriptions', + received_events_url: + 'https://api.github.com/users/mralexgray/received_events', + }, + topics: [], + git_url: 'git://github.com/mralexgray/AJS-iTunes-API.git', + license: null, + node_id: 'MDEwOlJlcG9zaXRvcnk1MjAzMjE5', + private: false, + ssh_url: 'git@github.com:mralexgray/AJS-iTunes-API.git', + svn_url: 'https://github.com/mralexgray/AJS-iTunes-API', + archived: false, + disabled: false, + has_wiki: true, + homepage: '', + html_url: 'https://github.com/mralexgray/AJS-iTunes-API', + keys_url: + 'https://api.github.com/repos/mralexgray/AJS-iTunes-API/keys{/key_id}', + language: 'Objective-C', + tags_url: 'https://api.github.com/repos/mralexgray/AJS-iTunes-API/tags', + watchers: 2, + blobs_url: + 'https://api.github.com/repos/mralexgray/AJS-iTunes-API/git/blobs{/sha}', + clone_url: 'https://github.com/mralexgray/AJS-iTunes-API.git', + forks_url: 'https://api.github.com/repos/mralexgray/AJS-iTunes-API/forks', + full_name: 'mralexgray/AJS-iTunes-API', + has_pages: false, + hooks_url: 'https://api.github.com/repos/mralexgray/AJS-iTunes-API/hooks', + pulls_url: + 'https://api.github.com/repos/mralexgray/AJS-iTunes-API/pulls{/number}', + pushed_at: '2011-10-30T22:26:48Z', + teams_url: 'https://api.github.com/repos/mralexgray/AJS-iTunes-API/teams', + trees_url: + 'https://api.github.com/repos/mralexgray/AJS-iTunes-API/git/trees{/sha}', + created_at: '2012-07-27T10:20:58Z', + events_url: + 'https://api.github.com/repos/mralexgray/AJS-iTunes-API/events', + has_issues: false, + issues_url: + 'https://api.github.com/repos/mralexgray/AJS-iTunes-API/issues{/number}', + labels_url: + 'https://api.github.com/repos/mralexgray/AJS-iTunes-API/labels{/name}', + merges_url: + 'https://api.github.com/repos/mralexgray/AJS-iTunes-API/merges', + mirror_url: null, + updated_at: '2013-01-11T11:00:05Z', + visibility: 'public', + archive_url: + 'https://api.github.com/repos/mralexgray/AJS-iTunes-API/{archive_format}{/ref}', + commits_url: + 'https://api.github.com/repos/mralexgray/AJS-iTunes-API/commits{/sha}', + compare_url: + 'https://api.github.com/repos/mralexgray/AJS-iTunes-API/compare/{base}...{head}', + description: + 'Cocoa wrapper for the iTunes search API - for iOS and Mac OSX projects', + forks_count: 0, + is_template: false, + open_issues: 0, + branches_url: + 'https://api.github.com/repos/mralexgray/AJS-iTunes-API/branches{/branch}', + comments_url: + 'https://api.github.com/repos/mralexgray/AJS-iTunes-API/comments{/number}', + contents_url: + 'https://api.github.com/repos/mralexgray/AJS-iTunes-API/contents/{+path}', + git_refs_url: + 'https://api.github.com/repos/mralexgray/AJS-iTunes-API/git/refs{/sha}', + git_tags_url: + 'https://api.github.com/repos/mralexgray/AJS-iTunes-API/git/tags{/sha}', + has_projects: true, + releases_url: + 'https://api.github.com/repos/mralexgray/AJS-iTunes-API/releases{/id}', + statuses_url: + 'https://api.github.com/repos/mralexgray/AJS-iTunes-API/statuses/{sha}', + allow_forking: true, + assignees_url: + 'https://api.github.com/repos/mralexgray/AJS-iTunes-API/assignees{/user}', + downloads_url: + 'https://api.github.com/repos/mralexgray/AJS-iTunes-API/downloads', + has_downloads: true, + languages_url: + 'https://api.github.com/repos/mralexgray/AJS-iTunes-API/languages', + default_branch: 'master', + milestones_url: + 'https://api.github.com/repos/mralexgray/AJS-iTunes-API/milestones{/number}', + stargazers_url: + 'https://api.github.com/repos/mralexgray/AJS-iTunes-API/stargazers', + watchers_count: 2, + deployments_url: + 'https://api.github.com/repos/mralexgray/AJS-iTunes-API/deployments', + git_commits_url: + 'https://api.github.com/repos/mralexgray/AJS-iTunes-API/git/commits{/sha}', + subscribers_url: + 'https://api.github.com/repos/mralexgray/AJS-iTunes-API/subscribers', + contributors_url: + 'https://api.github.com/repos/mralexgray/AJS-iTunes-API/contributors', + issue_events_url: + 'https://api.github.com/repos/mralexgray/AJS-iTunes-API/issues/events{/number}', + stargazers_count: 2, + subscription_url: + 'https://api.github.com/repos/mralexgray/AJS-iTunes-API/subscription', + collaborators_url: + 'https://api.github.com/repos/mralexgray/AJS-iTunes-API/collaborators{/collaborator}', + issue_comment_url: + 'https://api.github.com/repos/mralexgray/AJS-iTunes-API/issues/comments{/number}', + notifications_url: + 'https://api.github.com/repos/mralexgray/AJS-iTunes-API/notifications{?since,all,participating}', + open_issues_count: 0, + web_commit_signoff_required: false, + }, + { + id: 10093801, + url: 'https://api.github.com/repos/mralexgray/Alcatraz', + fork: true, + name: 'Alcatraz', + size: 3668, + forks: 0, + owner: { + id: 262517, + url: 'https://api.github.com/users/mralexgray', + type: 'User', + login: 'mralexgray', + node_id: 'MDQ6VXNlcjI2MjUxNw==', + html_url: 'https://github.com/mralexgray', + gists_url: 'https://api.github.com/users/mralexgray/gists{/gist_id}', + repos_url: 'https://api.github.com/users/mralexgray/repos', + avatar_url: 'https://avatars.githubusercontent.com/u/262517?v=4', + events_url: 'https://api.github.com/users/mralexgray/events{/privacy}', + site_admin: false, + gravatar_id: '', + starred_url: + 'https://api.github.com/users/mralexgray/starred{/owner}{/repo}', + followers_url: 'https://api.github.com/users/mralexgray/followers', + following_url: + 'https://api.github.com/users/mralexgray/following{/other_user}', + organizations_url: 'https://api.github.com/users/mralexgray/orgs', + subscriptions_url: + 'https://api.github.com/users/mralexgray/subscriptions', + received_events_url: + 'https://api.github.com/users/mralexgray/received_events', + }, + topics: [], + git_url: 'git://github.com/mralexgray/Alcatraz.git', + license: { + key: 'mit', + url: 'https://api.github.com/licenses/mit', + name: 'MIT License', + node_id: 'MDc6TGljZW5zZTEz', + spdx_id: 'MIT', + }, + node_id: 'MDEwOlJlcG9zaXRvcnkxMDA5MzgwMQ==', + private: false, + ssh_url: 'git@github.com:mralexgray/Alcatraz.git', + svn_url: 'https://github.com/mralexgray/Alcatraz', + archived: false, + disabled: false, + has_wiki: false, + homepage: 'mneorr.github.com/Alcatraz', + html_url: 'https://github.com/mralexgray/Alcatraz', + keys_url: + 'https://api.github.com/repos/mralexgray/Alcatraz/keys{/key_id}', + language: 'Objective-C', + tags_url: 'https://api.github.com/repos/mralexgray/Alcatraz/tags', + watchers: 0, + blobs_url: + 'https://api.github.com/repos/mralexgray/Alcatraz/git/blobs{/sha}', + clone_url: 'https://github.com/mralexgray/Alcatraz.git', + forks_url: 'https://api.github.com/repos/mralexgray/Alcatraz/forks', + full_name: 'mralexgray/Alcatraz', + has_pages: false, + hooks_url: 'https://api.github.com/repos/mralexgray/Alcatraz/hooks', + pulls_url: + 'https://api.github.com/repos/mralexgray/Alcatraz/pulls{/number}', + pushed_at: '2014-03-19T12:50:37Z', + teams_url: 'https://api.github.com/repos/mralexgray/Alcatraz/teams', + trees_url: + 'https://api.github.com/repos/mralexgray/Alcatraz/git/trees{/sha}', + created_at: '2013-05-16T04:41:13Z', + events_url: 'https://api.github.com/repos/mralexgray/Alcatraz/events', + has_issues: false, + issues_url: + 'https://api.github.com/repos/mralexgray/Alcatraz/issues{/number}', + labels_url: + 'https://api.github.com/repos/mralexgray/Alcatraz/labels{/name}', + merges_url: 'https://api.github.com/repos/mralexgray/Alcatraz/merges', + mirror_url: null, + updated_at: '2014-03-19T20:38:35Z', + visibility: 'public', + archive_url: + 'https://api.github.com/repos/mralexgray/Alcatraz/{archive_format}{/ref}', + commits_url: + 'https://api.github.com/repos/mralexgray/Alcatraz/commits{/sha}', + compare_url: + 'https://api.github.com/repos/mralexgray/Alcatraz/compare/{base}...{head}', + description: 'The most awesome (and only) Xcode package manager!', + forks_count: 0, + is_template: false, + open_issues: 0, + branches_url: + 'https://api.github.com/repos/mralexgray/Alcatraz/branches{/branch}', + comments_url: + 'https://api.github.com/repos/mralexgray/Alcatraz/comments{/number}', + contents_url: + 'https://api.github.com/repos/mralexgray/Alcatraz/contents/{+path}', + git_refs_url: + 'https://api.github.com/repos/mralexgray/Alcatraz/git/refs{/sha}', + git_tags_url: + 'https://api.github.com/repos/mralexgray/Alcatraz/git/tags{/sha}', + has_projects: true, + releases_url: + 'https://api.github.com/repos/mralexgray/Alcatraz/releases{/id}', + statuses_url: + 'https://api.github.com/repos/mralexgray/Alcatraz/statuses/{sha}', + allow_forking: true, + assignees_url: + 'https://api.github.com/repos/mralexgray/Alcatraz/assignees{/user}', + downloads_url: + 'https://api.github.com/repos/mralexgray/Alcatraz/downloads', + has_downloads: true, + languages_url: + 'https://api.github.com/repos/mralexgray/Alcatraz/languages', + default_branch: 'master', + milestones_url: + 'https://api.github.com/repos/mralexgray/Alcatraz/milestones{/number}', + stargazers_url: + 'https://api.github.com/repos/mralexgray/Alcatraz/stargazers', + watchers_count: 0, + deployments_url: + 'https://api.github.com/repos/mralexgray/Alcatraz/deployments', + git_commits_url: + 'https://api.github.com/repos/mralexgray/Alcatraz/git/commits{/sha}', + subscribers_url: + 'https://api.github.com/repos/mralexgray/Alcatraz/subscribers', + contributors_url: + 'https://api.github.com/repos/mralexgray/Alcatraz/contributors', + issue_events_url: + 'https://api.github.com/repos/mralexgray/Alcatraz/issues/events{/number}', + stargazers_count: 0, + subscription_url: + 'https://api.github.com/repos/mralexgray/Alcatraz/subscription', + collaborators_url: + 'https://api.github.com/repos/mralexgray/Alcatraz/collaborators{/collaborator}', + issue_comment_url: + 'https://api.github.com/repos/mralexgray/Alcatraz/issues/comments{/number}', + notifications_url: + 'https://api.github.com/repos/mralexgray/Alcatraz/notifications{?since,all,participating}', + open_issues_count: 0, + web_commit_signoff_required: false, + }, + { + id: 12916552, + url: 'https://api.github.com/repos/mralexgray/alcatraz-packages', + fork: true, + name: 'alcatraz-packages', + size: 826, + forks: 0, + owner: { + id: 262517, + url: 'https://api.github.com/users/mralexgray', + type: 'User', + login: 'mralexgray', + node_id: 'MDQ6VXNlcjI2MjUxNw==', + html_url: 'https://github.com/mralexgray', + gists_url: 'https://api.github.com/users/mralexgray/gists{/gist_id}', + repos_url: 'https://api.github.com/users/mralexgray/repos', + avatar_url: 'https://avatars.githubusercontent.com/u/262517?v=4', + events_url: 'https://api.github.com/users/mralexgray/events{/privacy}', + site_admin: false, + gravatar_id: '', + starred_url: + 'https://api.github.com/users/mralexgray/starred{/owner}{/repo}', + followers_url: 'https://api.github.com/users/mralexgray/followers', + following_url: + 'https://api.github.com/users/mralexgray/following{/other_user}', + organizations_url: 'https://api.github.com/users/mralexgray/orgs', + subscriptions_url: + 'https://api.github.com/users/mralexgray/subscriptions', + received_events_url: + 'https://api.github.com/users/mralexgray/received_events', + }, + topics: [], + git_url: 'git://github.com/mralexgray/alcatraz-packages.git', + license: null, + node_id: 'MDEwOlJlcG9zaXRvcnkxMjkxNjU1Mg==', + private: false, + ssh_url: 'git@github.com:mralexgray/alcatraz-packages.git', + svn_url: 'https://github.com/mralexgray/alcatraz-packages', + archived: false, + disabled: false, + has_wiki: true, + homepage: 'mneorr.github.com/Alcatraz', + html_url: 'https://github.com/mralexgray/alcatraz-packages', + keys_url: + 'https://api.github.com/repos/mralexgray/alcatraz-packages/keys{/key_id}', + language: 'Ruby', + tags_url: + 'https://api.github.com/repos/mralexgray/alcatraz-packages/tags', + watchers: 0, + blobs_url: + 'https://api.github.com/repos/mralexgray/alcatraz-packages/git/blobs{/sha}', + clone_url: 'https://github.com/mralexgray/alcatraz-packages.git', + forks_url: + 'https://api.github.com/repos/mralexgray/alcatraz-packages/forks', + full_name: 'mralexgray/alcatraz-packages', + has_pages: false, + hooks_url: + 'https://api.github.com/repos/mralexgray/alcatraz-packages/hooks', + pulls_url: + 'https://api.github.com/repos/mralexgray/alcatraz-packages/pulls{/number}', + pushed_at: '2015-12-14T16:21:31Z', + teams_url: + 'https://api.github.com/repos/mralexgray/alcatraz-packages/teams', + trees_url: + 'https://api.github.com/repos/mralexgray/alcatraz-packages/git/trees{/sha}', + created_at: '2013-09-18T07:15:24Z', + events_url: + 'https://api.github.com/repos/mralexgray/alcatraz-packages/events', + has_issues: false, + issues_url: + 'https://api.github.com/repos/mralexgray/alcatraz-packages/issues{/number}', + labels_url: + 'https://api.github.com/repos/mralexgray/alcatraz-packages/labels{/name}', + merges_url: + 'https://api.github.com/repos/mralexgray/alcatraz-packages/merges', + mirror_url: null, + updated_at: '2015-11-10T20:52:30Z', + visibility: 'public', + archive_url: + 'https://api.github.com/repos/mralexgray/alcatraz-packages/{archive_format}{/ref}', + commits_url: + 'https://api.github.com/repos/mralexgray/alcatraz-packages/commits{/sha}', + compare_url: + 'https://api.github.com/repos/mralexgray/alcatraz-packages/compare/{base}...{head}', + description: 'Package list repository for Alcatraz', + forks_count: 0, + is_template: false, + open_issues: 0, + branches_url: + 'https://api.github.com/repos/mralexgray/alcatraz-packages/branches{/branch}', + comments_url: + 'https://api.github.com/repos/mralexgray/alcatraz-packages/comments{/number}', + contents_url: + 'https://api.github.com/repos/mralexgray/alcatraz-packages/contents/{+path}', + git_refs_url: + 'https://api.github.com/repos/mralexgray/alcatraz-packages/git/refs{/sha}', + git_tags_url: + 'https://api.github.com/repos/mralexgray/alcatraz-packages/git/tags{/sha}', + has_projects: true, + releases_url: + 'https://api.github.com/repos/mralexgray/alcatraz-packages/releases{/id}', + statuses_url: + 'https://api.github.com/repos/mralexgray/alcatraz-packages/statuses/{sha}', + allow_forking: true, + assignees_url: + 'https://api.github.com/repos/mralexgray/alcatraz-packages/assignees{/user}', + downloads_url: + 'https://api.github.com/repos/mralexgray/alcatraz-packages/downloads', + has_downloads: true, + languages_url: + 'https://api.github.com/repos/mralexgray/alcatraz-packages/languages', + default_branch: 'master', + milestones_url: + 'https://api.github.com/repos/mralexgray/alcatraz-packages/milestones{/number}', + stargazers_url: + 'https://api.github.com/repos/mralexgray/alcatraz-packages/stargazers', + watchers_count: 0, + deployments_url: + 'https://api.github.com/repos/mralexgray/alcatraz-packages/deployments', + git_commits_url: + 'https://api.github.com/repos/mralexgray/alcatraz-packages/git/commits{/sha}', + subscribers_url: + 'https://api.github.com/repos/mralexgray/alcatraz-packages/subscribers', + contributors_url: + 'https://api.github.com/repos/mralexgray/alcatraz-packages/contributors', + issue_events_url: + 'https://api.github.com/repos/mralexgray/alcatraz-packages/issues/events{/number}', + stargazers_count: 0, + subscription_url: + 'https://api.github.com/repos/mralexgray/alcatraz-packages/subscription', + collaborators_url: + 'https://api.github.com/repos/mralexgray/alcatraz-packages/collaborators{/collaborator}', + issue_comment_url: + 'https://api.github.com/repos/mralexgray/alcatraz-packages/issues/comments{/number}', + notifications_url: + 'https://api.github.com/repos/mralexgray/alcatraz-packages/notifications{?since,all,participating}', + open_issues_count: 0, + web_commit_signoff_required: false, + }, + { + id: 44278362, + url: 'https://api.github.com/repos/mralexgray/alexicons', + fork: true, + name: 'alexicons', + size: 257, + forks: 0, + owner: { + id: 262517, + url: 'https://api.github.com/users/mralexgray', + type: 'User', + login: 'mralexgray', + node_id: 'MDQ6VXNlcjI2MjUxNw==', + html_url: 'https://github.com/mralexgray', + gists_url: 'https://api.github.com/users/mralexgray/gists{/gist_id}', + repos_url: 'https://api.github.com/users/mralexgray/repos', + avatar_url: 'https://avatars.githubusercontent.com/u/262517?v=4', + events_url: 'https://api.github.com/users/mralexgray/events{/privacy}', + site_admin: false, + gravatar_id: '', + starred_url: + 'https://api.github.com/users/mralexgray/starred{/owner}{/repo}', + followers_url: 'https://api.github.com/users/mralexgray/followers', + following_url: + 'https://api.github.com/users/mralexgray/following{/other_user}', + organizations_url: 'https://api.github.com/users/mralexgray/orgs', + subscriptions_url: + 'https://api.github.com/users/mralexgray/subscriptions', + received_events_url: + 'https://api.github.com/users/mralexgray/received_events', + }, + topics: [], + git_url: 'git://github.com/mralexgray/alexicons.git', + license: null, + node_id: 'MDEwOlJlcG9zaXRvcnk0NDI3ODM2Mg==', + private: false, + ssh_url: 'git@github.com:mralexgray/alexicons.git', + svn_url: 'https://github.com/mralexgray/alexicons', + archived: false, + disabled: false, + has_wiki: false, + homepage: null, + html_url: 'https://github.com/mralexgray/alexicons', + keys_url: + 'https://api.github.com/repos/mralexgray/alexicons/keys{/key_id}', + language: 'CoffeeScript', + tags_url: 'https://api.github.com/repos/mralexgray/alexicons/tags', + watchers: 0, + blobs_url: + 'https://api.github.com/repos/mralexgray/alexicons/git/blobs{/sha}', + clone_url: 'https://github.com/mralexgray/alexicons.git', + forks_url: 'https://api.github.com/repos/mralexgray/alexicons/forks', + full_name: 'mralexgray/alexicons', + has_pages: false, + hooks_url: 'https://api.github.com/repos/mralexgray/alexicons/hooks', + pulls_url: + 'https://api.github.com/repos/mralexgray/alexicons/pulls{/number}', + pushed_at: '2015-10-16T03:57:51Z', + teams_url: 'https://api.github.com/repos/mralexgray/alexicons/teams', + trees_url: + 'https://api.github.com/repos/mralexgray/alexicons/git/trees{/sha}', + created_at: '2015-10-14T21:49:39Z', + events_url: 'https://api.github.com/repos/mralexgray/alexicons/events', + has_issues: false, + issues_url: + 'https://api.github.com/repos/mralexgray/alexicons/issues{/number}', + labels_url: + 'https://api.github.com/repos/mralexgray/alexicons/labels{/name}', + merges_url: 'https://api.github.com/repos/mralexgray/alexicons/merges', + mirror_url: null, + updated_at: '2015-10-15T06:20:08Z', + visibility: 'public', + archive_url: + 'https://api.github.com/repos/mralexgray/alexicons/{archive_format}{/ref}', + commits_url: + 'https://api.github.com/repos/mralexgray/alexicons/commits{/sha}', + compare_url: + 'https://api.github.com/repos/mralexgray/alexicons/compare/{base}...{head}', + description: 'Get popular cat names', + forks_count: 0, + is_template: false, + open_issues: 0, + branches_url: + 'https://api.github.com/repos/mralexgray/alexicons/branches{/branch}', + comments_url: + 'https://api.github.com/repos/mralexgray/alexicons/comments{/number}', + contents_url: + 'https://api.github.com/repos/mralexgray/alexicons/contents/{+path}', + git_refs_url: + 'https://api.github.com/repos/mralexgray/alexicons/git/refs{/sha}', + git_tags_url: + 'https://api.github.com/repos/mralexgray/alexicons/git/tags{/sha}', + has_projects: true, + releases_url: + 'https://api.github.com/repos/mralexgray/alexicons/releases{/id}', + statuses_url: + 'https://api.github.com/repos/mralexgray/alexicons/statuses/{sha}', + allow_forking: true, + assignees_url: + 'https://api.github.com/repos/mralexgray/alexicons/assignees{/user}', + downloads_url: + 'https://api.github.com/repos/mralexgray/alexicons/downloads', + has_downloads: true, + languages_url: + 'https://api.github.com/repos/mralexgray/alexicons/languages', + default_branch: 'master', + milestones_url: + 'https://api.github.com/repos/mralexgray/alexicons/milestones{/number}', + stargazers_url: + 'https://api.github.com/repos/mralexgray/alexicons/stargazers', + watchers_count: 0, + deployments_url: + 'https://api.github.com/repos/mralexgray/alexicons/deployments', + git_commits_url: + 'https://api.github.com/repos/mralexgray/alexicons/git/commits{/sha}', + subscribers_url: + 'https://api.github.com/repos/mralexgray/alexicons/subscribers', + contributors_url: + 'https://api.github.com/repos/mralexgray/alexicons/contributors', + issue_events_url: + 'https://api.github.com/repos/mralexgray/alexicons/issues/events{/number}', + stargazers_count: 0, + subscription_url: + 'https://api.github.com/repos/mralexgray/alexicons/subscription', + collaborators_url: + 'https://api.github.com/repos/mralexgray/alexicons/collaborators{/collaborator}', + issue_comment_url: + 'https://api.github.com/repos/mralexgray/alexicons/issues/comments{/number}', + notifications_url: + 'https://api.github.com/repos/mralexgray/alexicons/notifications{?since,all,participating}', + open_issues_count: 0, + web_commit_signoff_required: false, + }, + { + id: 10476467, + url: 'https://api.github.com/repos/mralexgray/Alfred-Google-Translate', + fork: true, + name: 'Alfred-Google-Translate', + size: 103, + forks: 0, + owner: { + id: 262517, + url: 'https://api.github.com/users/mralexgray', + type: 'User', + login: 'mralexgray', + node_id: 'MDQ6VXNlcjI2MjUxNw==', + html_url: 'https://github.com/mralexgray', + gists_url: 'https://api.github.com/users/mralexgray/gists{/gist_id}', + repos_url: 'https://api.github.com/users/mralexgray/repos', + avatar_url: 'https://avatars.githubusercontent.com/u/262517?v=4', + events_url: 'https://api.github.com/users/mralexgray/events{/privacy}', + site_admin: false, + gravatar_id: '', + starred_url: + 'https://api.github.com/users/mralexgray/starred{/owner}{/repo}', + followers_url: 'https://api.github.com/users/mralexgray/followers', + following_url: + 'https://api.github.com/users/mralexgray/following{/other_user}', + organizations_url: 'https://api.github.com/users/mralexgray/orgs', + subscriptions_url: + 'https://api.github.com/users/mralexgray/subscriptions', + received_events_url: + 'https://api.github.com/users/mralexgray/received_events', + }, + topics: [], + git_url: 'git://github.com/mralexgray/Alfred-Google-Translate.git', + license: null, + node_id: 'MDEwOlJlcG9zaXRvcnkxMDQ3NjQ2Nw==', + private: false, + ssh_url: 'git@github.com:mralexgray/Alfred-Google-Translate.git', + svn_url: 'https://github.com/mralexgray/Alfred-Google-Translate', + archived: false, + disabled: false, + has_wiki: true, + homepage: null, + html_url: 'https://github.com/mralexgray/Alfred-Google-Translate', + keys_url: + 'https://api.github.com/repos/mralexgray/Alfred-Google-Translate/keys{/key_id}', + language: 'Shell', + tags_url: + 'https://api.github.com/repos/mralexgray/Alfred-Google-Translate/tags', + watchers: 0, + blobs_url: + 'https://api.github.com/repos/mralexgray/Alfred-Google-Translate/git/blobs{/sha}', + clone_url: 'https://github.com/mralexgray/Alfred-Google-Translate.git', + forks_url: + 'https://api.github.com/repos/mralexgray/Alfred-Google-Translate/forks', + full_name: 'mralexgray/Alfred-Google-Translate', + has_pages: false, + hooks_url: + 'https://api.github.com/repos/mralexgray/Alfred-Google-Translate/hooks', + pulls_url: + 'https://api.github.com/repos/mralexgray/Alfred-Google-Translate/pulls{/number}', + pushed_at: '2013-01-12T19:39:03Z', + teams_url: + 'https://api.github.com/repos/mralexgray/Alfred-Google-Translate/teams', + trees_url: + 'https://api.github.com/repos/mralexgray/Alfred-Google-Translate/git/trees{/sha}', + created_at: '2013-06-04T10:45:10Z', + events_url: + 'https://api.github.com/repos/mralexgray/Alfred-Google-Translate/events', + has_issues: false, + issues_url: + 'https://api.github.com/repos/mralexgray/Alfred-Google-Translate/issues{/number}', + labels_url: + 'https://api.github.com/repos/mralexgray/Alfred-Google-Translate/labels{/name}', + merges_url: + 'https://api.github.com/repos/mralexgray/Alfred-Google-Translate/merges', + mirror_url: null, + updated_at: '2013-06-04T10:45:10Z', + visibility: 'public', + archive_url: + 'https://api.github.com/repos/mralexgray/Alfred-Google-Translate/{archive_format}{/ref}', + commits_url: + 'https://api.github.com/repos/mralexgray/Alfred-Google-Translate/commits{/sha}', + compare_url: + 'https://api.github.com/repos/mralexgray/Alfred-Google-Translate/compare/{base}...{head}', + description: + 'Extension for Alfred that will do a Google translate for you', + forks_count: 0, + is_template: false, + open_issues: 0, + branches_url: + 'https://api.github.com/repos/mralexgray/Alfred-Google-Translate/branches{/branch}', + comments_url: + 'https://api.github.com/repos/mralexgray/Alfred-Google-Translate/comments{/number}', + contents_url: + 'https://api.github.com/repos/mralexgray/Alfred-Google-Translate/contents/{+path}', + git_refs_url: + 'https://api.github.com/repos/mralexgray/Alfred-Google-Translate/git/refs{/sha}', + git_tags_url: + 'https://api.github.com/repos/mralexgray/Alfred-Google-Translate/git/tags{/sha}', + has_projects: true, + releases_url: + 'https://api.github.com/repos/mralexgray/Alfred-Google-Translate/releases{/id}', + statuses_url: + 'https://api.github.com/repos/mralexgray/Alfred-Google-Translate/statuses/{sha}', + allow_forking: true, + assignees_url: + 'https://api.github.com/repos/mralexgray/Alfred-Google-Translate/assignees{/user}', + downloads_url: + 'https://api.github.com/repos/mralexgray/Alfred-Google-Translate/downloads', + has_downloads: true, + languages_url: + 'https://api.github.com/repos/mralexgray/Alfred-Google-Translate/languages', + default_branch: 'master', + milestones_url: + 'https://api.github.com/repos/mralexgray/Alfred-Google-Translate/milestones{/number}', + stargazers_url: + 'https://api.github.com/repos/mralexgray/Alfred-Google-Translate/stargazers', + watchers_count: 0, + deployments_url: + 'https://api.github.com/repos/mralexgray/Alfred-Google-Translate/deployments', + git_commits_url: + 'https://api.github.com/repos/mralexgray/Alfred-Google-Translate/git/commits{/sha}', + subscribers_url: + 'https://api.github.com/repos/mralexgray/Alfred-Google-Translate/subscribers', + contributors_url: + 'https://api.github.com/repos/mralexgray/Alfred-Google-Translate/contributors', + issue_events_url: + 'https://api.github.com/repos/mralexgray/Alfred-Google-Translate/issues/events{/number}', + stargazers_count: 0, + subscription_url: + 'https://api.github.com/repos/mralexgray/Alfred-Google-Translate/subscription', + collaborators_url: + 'https://api.github.com/repos/mralexgray/Alfred-Google-Translate/collaborators{/collaborator}', + issue_comment_url: + 'https://api.github.com/repos/mralexgray/Alfred-Google-Translate/issues/comments{/number}', + notifications_url: + 'https://api.github.com/repos/mralexgray/Alfred-Google-Translate/notifications{?since,all,participating}', + open_issues_count: 0, + web_commit_signoff_required: false, + }, + { + id: 5524019, + url: 'https://api.github.com/repos/mralexgray/Amber', + fork: false, + name: 'Amber', + size: 48, + forks: 0, + owner: { + id: 262517, + url: 'https://api.github.com/users/mralexgray', + type: 'User', + login: 'mralexgray', + node_id: 'MDQ6VXNlcjI2MjUxNw==', + html_url: 'https://github.com/mralexgray', + gists_url: 'https://api.github.com/users/mralexgray/gists{/gist_id}', + repos_url: 'https://api.github.com/users/mralexgray/repos', + avatar_url: 'https://avatars.githubusercontent.com/u/262517?v=4', + events_url: 'https://api.github.com/users/mralexgray/events{/privacy}', + site_admin: false, + gravatar_id: '', + starred_url: + 'https://api.github.com/users/mralexgray/starred{/owner}{/repo}', + followers_url: 'https://api.github.com/users/mralexgray/followers', + following_url: + 'https://api.github.com/users/mralexgray/following{/other_user}', + organizations_url: 'https://api.github.com/users/mralexgray/orgs', + subscriptions_url: + 'https://api.github.com/users/mralexgray/subscriptions', + received_events_url: + 'https://api.github.com/users/mralexgray/received_events', + }, + topics: [], + git_url: 'git://github.com/mralexgray/Amber.git', + license: null, + node_id: 'MDEwOlJlcG9zaXRvcnk1NTI0MDE5', + private: false, + ssh_url: 'git@github.com:mralexgray/Amber.git', + svn_url: 'https://github.com/mralexgray/Amber', + archived: false, + disabled: false, + has_wiki: true, + homepage: null, + html_url: 'https://github.com/mralexgray/Amber', + keys_url: 'https://api.github.com/repos/mralexgray/Amber/keys{/key_id}', + language: null, + tags_url: 'https://api.github.com/repos/mralexgray/Amber/tags', + watchers: 0, + blobs_url: + 'https://api.github.com/repos/mralexgray/Amber/git/blobs{/sha}', + clone_url: 'https://github.com/mralexgray/Amber.git', + forks_url: 'https://api.github.com/repos/mralexgray/Amber/forks', + full_name: 'mralexgray/Amber', + has_pages: false, + hooks_url: 'https://api.github.com/repos/mralexgray/Amber/hooks', + pulls_url: 'https://api.github.com/repos/mralexgray/Amber/pulls{/number}', + pushed_at: '2012-08-23T10:38:25Z', + teams_url: 'https://api.github.com/repos/mralexgray/Amber/teams', + trees_url: + 'https://api.github.com/repos/mralexgray/Amber/git/trees{/sha}', + created_at: '2012-08-23T10:38:24Z', + events_url: 'https://api.github.com/repos/mralexgray/Amber/events', + has_issues: true, + issues_url: + 'https://api.github.com/repos/mralexgray/Amber/issues{/number}', + labels_url: 'https://api.github.com/repos/mralexgray/Amber/labels{/name}', + merges_url: 'https://api.github.com/repos/mralexgray/Amber/merges', + mirror_url: null, + updated_at: '2013-01-11T22:25:35Z', + visibility: 'public', + archive_url: + 'https://api.github.com/repos/mralexgray/Amber/{archive_format}{/ref}', + commits_url: + 'https://api.github.com/repos/mralexgray/Amber/commits{/sha}', + compare_url: + 'https://api.github.com/repos/mralexgray/Amber/compare/{base}...{head}', + description: 'Fork of the difficult-to-deal-with Amber.framework', + forks_count: 0, + is_template: false, + open_issues: 0, + branches_url: + 'https://api.github.com/repos/mralexgray/Amber/branches{/branch}', + comments_url: + 'https://api.github.com/repos/mralexgray/Amber/comments{/number}', + contents_url: + 'https://api.github.com/repos/mralexgray/Amber/contents/{+path}', + git_refs_url: + 'https://api.github.com/repos/mralexgray/Amber/git/refs{/sha}', + git_tags_url: + 'https://api.github.com/repos/mralexgray/Amber/git/tags{/sha}', + has_projects: true, + releases_url: + 'https://api.github.com/repos/mralexgray/Amber/releases{/id}', + statuses_url: + 'https://api.github.com/repos/mralexgray/Amber/statuses/{sha}', + allow_forking: true, + assignees_url: + 'https://api.github.com/repos/mralexgray/Amber/assignees{/user}', + downloads_url: 'https://api.github.com/repos/mralexgray/Amber/downloads', + has_downloads: true, + languages_url: 'https://api.github.com/repos/mralexgray/Amber/languages', + default_branch: 'master', + milestones_url: + 'https://api.github.com/repos/mralexgray/Amber/milestones{/number}', + stargazers_url: + 'https://api.github.com/repos/mralexgray/Amber/stargazers', + watchers_count: 0, + deployments_url: + 'https://api.github.com/repos/mralexgray/Amber/deployments', + git_commits_url: + 'https://api.github.com/repos/mralexgray/Amber/git/commits{/sha}', + subscribers_url: + 'https://api.github.com/repos/mralexgray/Amber/subscribers', + contributors_url: + 'https://api.github.com/repos/mralexgray/Amber/contributors', + issue_events_url: + 'https://api.github.com/repos/mralexgray/Amber/issues/events{/number}', + stargazers_count: 0, + subscription_url: + 'https://api.github.com/repos/mralexgray/Amber/subscription', + collaborators_url: + 'https://api.github.com/repos/mralexgray/Amber/collaborators{/collaborator}', + issue_comment_url: + 'https://api.github.com/repos/mralexgray/Amber/issues/comments{/number}', + notifications_url: + 'https://api.github.com/repos/mralexgray/Amber/notifications{?since,all,participating}', + open_issues_count: 0, + web_commit_signoff_required: false, + }, + { + id: 10809060, + url: 'https://api.github.com/repos/mralexgray/Amethyst', + fork: true, + name: 'Amethyst', + size: 12623, + forks: 0, + owner: { + id: 262517, + url: 'https://api.github.com/users/mralexgray', + type: 'User', + login: 'mralexgray', + node_id: 'MDQ6VXNlcjI2MjUxNw==', + html_url: 'https://github.com/mralexgray', + gists_url: 'https://api.github.com/users/mralexgray/gists{/gist_id}', + repos_url: 'https://api.github.com/users/mralexgray/repos', + avatar_url: 'https://avatars.githubusercontent.com/u/262517?v=4', + events_url: 'https://api.github.com/users/mralexgray/events{/privacy}', + site_admin: false, + gravatar_id: '', + starred_url: + 'https://api.github.com/users/mralexgray/starred{/owner}{/repo}', + followers_url: 'https://api.github.com/users/mralexgray/followers', + following_url: + 'https://api.github.com/users/mralexgray/following{/other_user}', + organizations_url: 'https://api.github.com/users/mralexgray/orgs', + subscriptions_url: + 'https://api.github.com/users/mralexgray/subscriptions', + received_events_url: + 'https://api.github.com/users/mralexgray/received_events', + }, + topics: [], + git_url: 'git://github.com/mralexgray/Amethyst.git', + license: { + key: 'mit', + url: 'https://api.github.com/licenses/mit', + name: 'MIT License', + node_id: 'MDc6TGljZW5zZTEz', + spdx_id: 'MIT', + }, + node_id: 'MDEwOlJlcG9zaXRvcnkxMDgwOTA2MA==', + private: false, + ssh_url: 'git@github.com:mralexgray/Amethyst.git', + svn_url: 'https://github.com/mralexgray/Amethyst', + archived: false, + disabled: false, + has_wiki: true, + homepage: 'http://ianyh.github.io/Amethyst/', + html_url: 'https://github.com/mralexgray/Amethyst', + keys_url: + 'https://api.github.com/repos/mralexgray/Amethyst/keys{/key_id}', + language: 'Objective-C', + tags_url: 'https://api.github.com/repos/mralexgray/Amethyst/tags', + watchers: 0, + blobs_url: + 'https://api.github.com/repos/mralexgray/Amethyst/git/blobs{/sha}', + clone_url: 'https://github.com/mralexgray/Amethyst.git', + forks_url: 'https://api.github.com/repos/mralexgray/Amethyst/forks', + full_name: 'mralexgray/Amethyst', + has_pages: false, + hooks_url: 'https://api.github.com/repos/mralexgray/Amethyst/hooks', + pulls_url: + 'https://api.github.com/repos/mralexgray/Amethyst/pulls{/number}', + pushed_at: '2013-06-18T02:54:11Z', + teams_url: 'https://api.github.com/repos/mralexgray/Amethyst/teams', + trees_url: + 'https://api.github.com/repos/mralexgray/Amethyst/git/trees{/sha}', + created_at: '2013-06-20T00:34:22Z', + events_url: 'https://api.github.com/repos/mralexgray/Amethyst/events', + has_issues: false, + issues_url: + 'https://api.github.com/repos/mralexgray/Amethyst/issues{/number}', + labels_url: + 'https://api.github.com/repos/mralexgray/Amethyst/labels{/name}', + merges_url: 'https://api.github.com/repos/mralexgray/Amethyst/merges', + mirror_url: null, + updated_at: '2013-06-20T00:34:22Z', + visibility: 'public', + archive_url: + 'https://api.github.com/repos/mralexgray/Amethyst/{archive_format}{/ref}', + commits_url: + 'https://api.github.com/repos/mralexgray/Amethyst/commits{/sha}', + compare_url: + 'https://api.github.com/repos/mralexgray/Amethyst/compare/{base}...{head}', + description: 'Tiling window manager for OS X.', + forks_count: 0, + is_template: false, + open_issues: 0, + branches_url: + 'https://api.github.com/repos/mralexgray/Amethyst/branches{/branch}', + comments_url: + 'https://api.github.com/repos/mralexgray/Amethyst/comments{/number}', + contents_url: + 'https://api.github.com/repos/mralexgray/Amethyst/contents/{+path}', + git_refs_url: + 'https://api.github.com/repos/mralexgray/Amethyst/git/refs{/sha}', + git_tags_url: + 'https://api.github.com/repos/mralexgray/Amethyst/git/tags{/sha}', + has_projects: true, + releases_url: + 'https://api.github.com/repos/mralexgray/Amethyst/releases{/id}', + statuses_url: + 'https://api.github.com/repos/mralexgray/Amethyst/statuses/{sha}', + allow_forking: true, + assignees_url: + 'https://api.github.com/repos/mralexgray/Amethyst/assignees{/user}', + downloads_url: + 'https://api.github.com/repos/mralexgray/Amethyst/downloads', + has_downloads: true, + languages_url: + 'https://api.github.com/repos/mralexgray/Amethyst/languages', + default_branch: 'master', + milestones_url: + 'https://api.github.com/repos/mralexgray/Amethyst/milestones{/number}', + stargazers_url: + 'https://api.github.com/repos/mralexgray/Amethyst/stargazers', + watchers_count: 0, + deployments_url: + 'https://api.github.com/repos/mralexgray/Amethyst/deployments', + git_commits_url: + 'https://api.github.com/repos/mralexgray/Amethyst/git/commits{/sha}', + subscribers_url: + 'https://api.github.com/repos/mralexgray/Amethyst/subscribers', + contributors_url: + 'https://api.github.com/repos/mralexgray/Amethyst/contributors', + issue_events_url: + 'https://api.github.com/repos/mralexgray/Amethyst/issues/events{/number}', + stargazers_count: 0, + subscription_url: + 'https://api.github.com/repos/mralexgray/Amethyst/subscription', + collaborators_url: + 'https://api.github.com/repos/mralexgray/Amethyst/collaborators{/collaborator}', + issue_comment_url: + 'https://api.github.com/repos/mralexgray/Amethyst/issues/comments{/number}', + notifications_url: + 'https://api.github.com/repos/mralexgray/Amethyst/notifications{?since,all,participating}', + open_issues_count: 0, + web_commit_signoff_required: false, + }, + { + id: 3684286, + url: 'https://api.github.com/repos/mralexgray/Animated-Paths', + fork: true, + name: 'Animated-Paths', + size: 411, + forks: 0, + owner: { + id: 262517, + url: 'https://api.github.com/users/mralexgray', + type: 'User', + login: 'mralexgray', + node_id: 'MDQ6VXNlcjI2MjUxNw==', + html_url: 'https://github.com/mralexgray', + gists_url: 'https://api.github.com/users/mralexgray/gists{/gist_id}', + repos_url: 'https://api.github.com/users/mralexgray/repos', + avatar_url: 'https://avatars.githubusercontent.com/u/262517?v=4', + events_url: 'https://api.github.com/users/mralexgray/events{/privacy}', + site_admin: false, + gravatar_id: '', + starred_url: + 'https://api.github.com/users/mralexgray/starred{/owner}{/repo}', + followers_url: 'https://api.github.com/users/mralexgray/followers', + following_url: + 'https://api.github.com/users/mralexgray/following{/other_user}', + organizations_url: 'https://api.github.com/users/mralexgray/orgs', + subscriptions_url: + 'https://api.github.com/users/mralexgray/subscriptions', + received_events_url: + 'https://api.github.com/users/mralexgray/received_events', + }, + topics: [], + git_url: 'git://github.com/mralexgray/Animated-Paths.git', + license: { + key: 'other', + url: null, + name: 'Other', + node_id: 'MDc6TGljZW5zZTA=', + spdx_id: 'NOASSERTION', + }, + node_id: 'MDEwOlJlcG9zaXRvcnkzNjg0Mjg2', + private: false, + ssh_url: 'git@github.com:mralexgray/Animated-Paths.git', + svn_url: 'https://github.com/mralexgray/Animated-Paths', + archived: false, + disabled: false, + has_wiki: true, + homepage: + 'http://oleb.net/blog/2010/12/animating-drawing-of-cgpath-with-cashapelayer/', + html_url: 'https://github.com/mralexgray/Animated-Paths', + keys_url: + 'https://api.github.com/repos/mralexgray/Animated-Paths/keys{/key_id}', + language: 'Objective-C', + tags_url: 'https://api.github.com/repos/mralexgray/Animated-Paths/tags', + watchers: 2, + blobs_url: + 'https://api.github.com/repos/mralexgray/Animated-Paths/git/blobs{/sha}', + clone_url: 'https://github.com/mralexgray/Animated-Paths.git', + forks_url: 'https://api.github.com/repos/mralexgray/Animated-Paths/forks', + full_name: 'mralexgray/Animated-Paths', + has_pages: false, + hooks_url: 'https://api.github.com/repos/mralexgray/Animated-Paths/hooks', + pulls_url: + 'https://api.github.com/repos/mralexgray/Animated-Paths/pulls{/number}', + pushed_at: '2010-12-30T20:56:51Z', + teams_url: 'https://api.github.com/repos/mralexgray/Animated-Paths/teams', + trees_url: + 'https://api.github.com/repos/mralexgray/Animated-Paths/git/trees{/sha}', + created_at: '2012-03-11T02:56:38Z', + events_url: + 'https://api.github.com/repos/mralexgray/Animated-Paths/events', + has_issues: false, + issues_url: + 'https://api.github.com/repos/mralexgray/Animated-Paths/issues{/number}', + labels_url: + 'https://api.github.com/repos/mralexgray/Animated-Paths/labels{/name}', + merges_url: + 'https://api.github.com/repos/mralexgray/Animated-Paths/merges', + mirror_url: null, + updated_at: '2013-01-08T04:12:21Z', + visibility: 'public', + archive_url: + 'https://api.github.com/repos/mralexgray/Animated-Paths/{archive_format}{/ref}', + commits_url: + 'https://api.github.com/repos/mralexgray/Animated-Paths/commits{/sha}', + compare_url: + 'https://api.github.com/repos/mralexgray/Animated-Paths/compare/{base}...{head}', + description: + 'Demo project: Animating the drawing of a CGPath with CAShapeLayer.strokeEnd', + forks_count: 0, + is_template: false, + open_issues: 0, + branches_url: + 'https://api.github.com/repos/mralexgray/Animated-Paths/branches{/branch}', + comments_url: + 'https://api.github.com/repos/mralexgray/Animated-Paths/comments{/number}', + contents_url: + 'https://api.github.com/repos/mralexgray/Animated-Paths/contents/{+path}', + git_refs_url: + 'https://api.github.com/repos/mralexgray/Animated-Paths/git/refs{/sha}', + git_tags_url: + 'https://api.github.com/repos/mralexgray/Animated-Paths/git/tags{/sha}', + has_projects: true, + releases_url: + 'https://api.github.com/repos/mralexgray/Animated-Paths/releases{/id}', + statuses_url: + 'https://api.github.com/repos/mralexgray/Animated-Paths/statuses/{sha}', + allow_forking: true, + assignees_url: + 'https://api.github.com/repos/mralexgray/Animated-Paths/assignees{/user}', + downloads_url: + 'https://api.github.com/repos/mralexgray/Animated-Paths/downloads', + has_downloads: true, + languages_url: + 'https://api.github.com/repos/mralexgray/Animated-Paths/languages', + default_branch: 'master', + milestones_url: + 'https://api.github.com/repos/mralexgray/Animated-Paths/milestones{/number}', + stargazers_url: + 'https://api.github.com/repos/mralexgray/Animated-Paths/stargazers', + watchers_count: 2, + deployments_url: + 'https://api.github.com/repos/mralexgray/Animated-Paths/deployments', + git_commits_url: + 'https://api.github.com/repos/mralexgray/Animated-Paths/git/commits{/sha}', + subscribers_url: + 'https://api.github.com/repos/mralexgray/Animated-Paths/subscribers', + contributors_url: + 'https://api.github.com/repos/mralexgray/Animated-Paths/contributors', + issue_events_url: + 'https://api.github.com/repos/mralexgray/Animated-Paths/issues/events{/number}', + stargazers_count: 2, + subscription_url: + 'https://api.github.com/repos/mralexgray/Animated-Paths/subscription', + collaborators_url: + 'https://api.github.com/repos/mralexgray/Animated-Paths/collaborators{/collaborator}', + issue_comment_url: + 'https://api.github.com/repos/mralexgray/Animated-Paths/issues/comments{/number}', + notifications_url: + 'https://api.github.com/repos/mralexgray/Animated-Paths/notifications{?since,all,participating}', + open_issues_count: 0, + web_commit_signoff_required: false, + }, + { + id: 16662874, + url: 'https://api.github.com/repos/mralexgray/AnsiLove.framework', + fork: true, + name: 'AnsiLove.framework', + size: 3780, + forks: 0, + owner: { + id: 262517, + url: 'https://api.github.com/users/mralexgray', + type: 'User', + login: 'mralexgray', + node_id: 'MDQ6VXNlcjI2MjUxNw==', + html_url: 'https://github.com/mralexgray', + gists_url: 'https://api.github.com/users/mralexgray/gists{/gist_id}', + repos_url: 'https://api.github.com/users/mralexgray/repos', + avatar_url: 'https://avatars.githubusercontent.com/u/262517?v=4', + events_url: 'https://api.github.com/users/mralexgray/events{/privacy}', + site_admin: false, + gravatar_id: '', + starred_url: + 'https://api.github.com/users/mralexgray/starred{/owner}{/repo}', + followers_url: 'https://api.github.com/users/mralexgray/followers', + following_url: + 'https://api.github.com/users/mralexgray/following{/other_user}', + organizations_url: 'https://api.github.com/users/mralexgray/orgs', + subscriptions_url: + 'https://api.github.com/users/mralexgray/subscriptions', + received_events_url: + 'https://api.github.com/users/mralexgray/received_events', + }, + topics: [], + git_url: 'git://github.com/mralexgray/AnsiLove.framework.git', + license: { + key: 'other', + url: null, + name: 'Other', + node_id: 'MDc6TGljZW5zZTA=', + spdx_id: 'NOASSERTION', + }, + node_id: 'MDEwOlJlcG9zaXRvcnkxNjY2Mjg3NA==', + private: false, + ssh_url: 'git@github.com:mralexgray/AnsiLove.framework.git', + svn_url: 'https://github.com/mralexgray/AnsiLove.framework', + archived: false, + disabled: false, + has_wiki: false, + homepage: 'http://byteproject.net', + html_url: 'https://github.com/mralexgray/AnsiLove.framework', + keys_url: + 'https://api.github.com/repos/mralexgray/AnsiLove.framework/keys{/key_id}', + language: 'M', + tags_url: + 'https://api.github.com/repos/mralexgray/AnsiLove.framework/tags', + watchers: 0, + blobs_url: + 'https://api.github.com/repos/mralexgray/AnsiLove.framework/git/blobs{/sha}', + clone_url: 'https://github.com/mralexgray/AnsiLove.framework.git', + forks_url: + 'https://api.github.com/repos/mralexgray/AnsiLove.framework/forks', + full_name: 'mralexgray/AnsiLove.framework', + has_pages: false, + hooks_url: + 'https://api.github.com/repos/mralexgray/AnsiLove.framework/hooks', + pulls_url: + 'https://api.github.com/repos/mralexgray/AnsiLove.framework/pulls{/number}', + pushed_at: '2013-10-04T14:08:38Z', + teams_url: + 'https://api.github.com/repos/mralexgray/AnsiLove.framework/teams', + trees_url: + 'https://api.github.com/repos/mralexgray/AnsiLove.framework/git/trees{/sha}', + created_at: '2014-02-09T08:30:27Z', + events_url: + 'https://api.github.com/repos/mralexgray/AnsiLove.framework/events', + has_issues: false, + issues_url: + 'https://api.github.com/repos/mralexgray/AnsiLove.framework/issues{/number}', + labels_url: + 'https://api.github.com/repos/mralexgray/AnsiLove.framework/labels{/name}', + merges_url: + 'https://api.github.com/repos/mralexgray/AnsiLove.framework/merges', + mirror_url: null, + updated_at: '2015-01-13T20:41:46Z', + visibility: 'public', + archive_url: + 'https://api.github.com/repos/mralexgray/AnsiLove.framework/{archive_format}{/ref}', + commits_url: + 'https://api.github.com/repos/mralexgray/AnsiLove.framework/commits{/sha}', + compare_url: + 'https://api.github.com/repos/mralexgray/AnsiLove.framework/compare/{base}...{head}', + description: 'Cocoa Framework for rendering ANSi / ASCII art', + forks_count: 0, + is_template: false, + open_issues: 0, + branches_url: + 'https://api.github.com/repos/mralexgray/AnsiLove.framework/branches{/branch}', + comments_url: + 'https://api.github.com/repos/mralexgray/AnsiLove.framework/comments{/number}', + contents_url: + 'https://api.github.com/repos/mralexgray/AnsiLove.framework/contents/{+path}', + git_refs_url: + 'https://api.github.com/repos/mralexgray/AnsiLove.framework/git/refs{/sha}', + git_tags_url: + 'https://api.github.com/repos/mralexgray/AnsiLove.framework/git/tags{/sha}', + has_projects: true, + releases_url: + 'https://api.github.com/repos/mralexgray/AnsiLove.framework/releases{/id}', + statuses_url: + 'https://api.github.com/repos/mralexgray/AnsiLove.framework/statuses/{sha}', + allow_forking: true, + assignees_url: + 'https://api.github.com/repos/mralexgray/AnsiLove.framework/assignees{/user}', + downloads_url: + 'https://api.github.com/repos/mralexgray/AnsiLove.framework/downloads', + has_downloads: true, + languages_url: + 'https://api.github.com/repos/mralexgray/AnsiLove.framework/languages', + default_branch: 'master', + milestones_url: + 'https://api.github.com/repos/mralexgray/AnsiLove.framework/milestones{/number}', + stargazers_url: + 'https://api.github.com/repos/mralexgray/AnsiLove.framework/stargazers', + watchers_count: 0, + deployments_url: + 'https://api.github.com/repos/mralexgray/AnsiLove.framework/deployments', + git_commits_url: + 'https://api.github.com/repos/mralexgray/AnsiLove.framework/git/commits{/sha}', + subscribers_url: + 'https://api.github.com/repos/mralexgray/AnsiLove.framework/subscribers', + contributors_url: + 'https://api.github.com/repos/mralexgray/AnsiLove.framework/contributors', + issue_events_url: + 'https://api.github.com/repos/mralexgray/AnsiLove.framework/issues/events{/number}', + stargazers_count: 0, + subscription_url: + 'https://api.github.com/repos/mralexgray/AnsiLove.framework/subscription', + collaborators_url: + 'https://api.github.com/repos/mralexgray/AnsiLove.framework/collaborators{/collaborator}', + issue_comment_url: + 'https://api.github.com/repos/mralexgray/AnsiLove.framework/issues/comments{/number}', + notifications_url: + 'https://api.github.com/repos/mralexgray/AnsiLove.framework/notifications{?since,all,participating}', + open_issues_count: 0, + web_commit_signoff_required: false, + }, + { + id: 5189563, + url: 'https://api.github.com/repos/mralexgray/ANTrackBar', + fork: true, + name: 'ANTrackBar', + size: 94, + forks: 0, + owner: { + id: 262517, + url: 'https://api.github.com/users/mralexgray', + type: 'User', + login: 'mralexgray', + node_id: 'MDQ6VXNlcjI2MjUxNw==', + html_url: 'https://github.com/mralexgray', + gists_url: 'https://api.github.com/users/mralexgray/gists{/gist_id}', + repos_url: 'https://api.github.com/users/mralexgray/repos', + avatar_url: 'https://avatars.githubusercontent.com/u/262517?v=4', + events_url: 'https://api.github.com/users/mralexgray/events{/privacy}', + site_admin: false, + gravatar_id: '', + starred_url: + 'https://api.github.com/users/mralexgray/starred{/owner}{/repo}', + followers_url: 'https://api.github.com/users/mralexgray/followers', + following_url: + 'https://api.github.com/users/mralexgray/following{/other_user}', + organizations_url: 'https://api.github.com/users/mralexgray/orgs', + subscriptions_url: + 'https://api.github.com/users/mralexgray/subscriptions', + received_events_url: + 'https://api.github.com/users/mralexgray/received_events', + }, + topics: [], + git_url: 'git://github.com/mralexgray/ANTrackBar.git', + license: null, + node_id: 'MDEwOlJlcG9zaXRvcnk1MTg5NTYz', + private: false, + ssh_url: 'git@github.com:mralexgray/ANTrackBar.git', + svn_url: 'https://github.com/mralexgray/ANTrackBar', + archived: false, + disabled: false, + has_wiki: true, + homepage: '', + html_url: 'https://github.com/mralexgray/ANTrackBar', + keys_url: + 'https://api.github.com/repos/mralexgray/ANTrackBar/keys{/key_id}', + language: 'Objective-C', + tags_url: 'https://api.github.com/repos/mralexgray/ANTrackBar/tags', + watchers: 2, + blobs_url: + 'https://api.github.com/repos/mralexgray/ANTrackBar/git/blobs{/sha}', + clone_url: 'https://github.com/mralexgray/ANTrackBar.git', + forks_url: 'https://api.github.com/repos/mralexgray/ANTrackBar/forks', + full_name: 'mralexgray/ANTrackBar', + has_pages: false, + hooks_url: 'https://api.github.com/repos/mralexgray/ANTrackBar/hooks', + pulls_url: + 'https://api.github.com/repos/mralexgray/ANTrackBar/pulls{/number}', + pushed_at: '2012-03-09T01:40:02Z', + teams_url: 'https://api.github.com/repos/mralexgray/ANTrackBar/teams', + trees_url: + 'https://api.github.com/repos/mralexgray/ANTrackBar/git/trees{/sha}', + created_at: '2012-07-26T08:17:22Z', + events_url: 'https://api.github.com/repos/mralexgray/ANTrackBar/events', + has_issues: false, + issues_url: + 'https://api.github.com/repos/mralexgray/ANTrackBar/issues{/number}', + labels_url: + 'https://api.github.com/repos/mralexgray/ANTrackBar/labels{/name}', + merges_url: 'https://api.github.com/repos/mralexgray/ANTrackBar/merges', + mirror_url: null, + updated_at: '2013-01-11T10:29:56Z', + visibility: 'public', + archive_url: + 'https://api.github.com/repos/mralexgray/ANTrackBar/{archive_format}{/ref}', + commits_url: + 'https://api.github.com/repos/mralexgray/ANTrackBar/commits{/sha}', + compare_url: + 'https://api.github.com/repos/mralexgray/ANTrackBar/compare/{base}...{head}', + description: 'An easy-to-use Cocoa seek bar with a pleasing appearance', + forks_count: 0, + is_template: false, + open_issues: 0, + branches_url: + 'https://api.github.com/repos/mralexgray/ANTrackBar/branches{/branch}', + comments_url: + 'https://api.github.com/repos/mralexgray/ANTrackBar/comments{/number}', + contents_url: + 'https://api.github.com/repos/mralexgray/ANTrackBar/contents/{+path}', + git_refs_url: + 'https://api.github.com/repos/mralexgray/ANTrackBar/git/refs{/sha}', + git_tags_url: + 'https://api.github.com/repos/mralexgray/ANTrackBar/git/tags{/sha}', + has_projects: true, + releases_url: + 'https://api.github.com/repos/mralexgray/ANTrackBar/releases{/id}', + statuses_url: + 'https://api.github.com/repos/mralexgray/ANTrackBar/statuses/{sha}', + allow_forking: true, + assignees_url: + 'https://api.github.com/repos/mralexgray/ANTrackBar/assignees{/user}', + downloads_url: + 'https://api.github.com/repos/mralexgray/ANTrackBar/downloads', + has_downloads: true, + languages_url: + 'https://api.github.com/repos/mralexgray/ANTrackBar/languages', + default_branch: 'master', + milestones_url: + 'https://api.github.com/repos/mralexgray/ANTrackBar/milestones{/number}', + stargazers_url: + 'https://api.github.com/repos/mralexgray/ANTrackBar/stargazers', + watchers_count: 2, + deployments_url: + 'https://api.github.com/repos/mralexgray/ANTrackBar/deployments', + git_commits_url: + 'https://api.github.com/repos/mralexgray/ANTrackBar/git/commits{/sha}', + subscribers_url: + 'https://api.github.com/repos/mralexgray/ANTrackBar/subscribers', + contributors_url: + 'https://api.github.com/repos/mralexgray/ANTrackBar/contributors', + issue_events_url: + 'https://api.github.com/repos/mralexgray/ANTrackBar/issues/events{/number}', + stargazers_count: 2, + subscription_url: + 'https://api.github.com/repos/mralexgray/ANTrackBar/subscription', + collaborators_url: + 'https://api.github.com/repos/mralexgray/ANTrackBar/collaborators{/collaborator}', + issue_comment_url: + 'https://api.github.com/repos/mralexgray/ANTrackBar/issues/comments{/number}', + notifications_url: + 'https://api.github.com/repos/mralexgray/ANTrackBar/notifications{?since,all,participating}', + open_issues_count: 0, + web_commit_signoff_required: false, + }, + { + id: 16240152, + url: 'https://api.github.com/repos/mralexgray/AOP-in-Objective-C', + fork: true, + name: 'AOP-in-Objective-C', + size: 340, + forks: 1, + owner: { + id: 262517, + url: 'https://api.github.com/users/mralexgray', + type: 'User', + login: 'mralexgray', + node_id: 'MDQ6VXNlcjI2MjUxNw==', + html_url: 'https://github.com/mralexgray', + gists_url: 'https://api.github.com/users/mralexgray/gists{/gist_id}', + repos_url: 'https://api.github.com/users/mralexgray/repos', + avatar_url: 'https://avatars.githubusercontent.com/u/262517?v=4', + events_url: 'https://api.github.com/users/mralexgray/events{/privacy}', + site_admin: false, + gravatar_id: '', + starred_url: + 'https://api.github.com/users/mralexgray/starred{/owner}{/repo}', + followers_url: 'https://api.github.com/users/mralexgray/followers', + following_url: + 'https://api.github.com/users/mralexgray/following{/other_user}', + organizations_url: 'https://api.github.com/users/mralexgray/orgs', + subscriptions_url: + 'https://api.github.com/users/mralexgray/subscriptions', + received_events_url: + 'https://api.github.com/users/mralexgray/received_events', + }, + topics: [], + git_url: 'git://github.com/mralexgray/AOP-in-Objective-C.git', + license: null, + node_id: 'MDEwOlJlcG9zaXRvcnkxNjI0MDE1Mg==', + private: false, + ssh_url: 'git@github.com:mralexgray/AOP-in-Objective-C.git', + svn_url: 'https://github.com/mralexgray/AOP-in-Objective-C', + archived: false, + disabled: false, + has_wiki: true, + homepage: 'http://innoli.hu/en/opensource/', + html_url: 'https://github.com/mralexgray/AOP-in-Objective-C', + keys_url: + 'https://api.github.com/repos/mralexgray/AOP-in-Objective-C/keys{/key_id}', + language: 'Objective-C', + tags_url: + 'https://api.github.com/repos/mralexgray/AOP-in-Objective-C/tags', + watchers: 0, + blobs_url: + 'https://api.github.com/repos/mralexgray/AOP-in-Objective-C/git/blobs{/sha}', + clone_url: 'https://github.com/mralexgray/AOP-in-Objective-C.git', + forks_url: + 'https://api.github.com/repos/mralexgray/AOP-in-Objective-C/forks', + full_name: 'mralexgray/AOP-in-Objective-C', + has_pages: false, + hooks_url: + 'https://api.github.com/repos/mralexgray/AOP-in-Objective-C/hooks', + pulls_url: + 'https://api.github.com/repos/mralexgray/AOP-in-Objective-C/pulls{/number}', + pushed_at: '2014-02-12T16:23:20Z', + teams_url: + 'https://api.github.com/repos/mralexgray/AOP-in-Objective-C/teams', + trees_url: + 'https://api.github.com/repos/mralexgray/AOP-in-Objective-C/git/trees{/sha}', + created_at: '2014-01-25T21:18:04Z', + events_url: + 'https://api.github.com/repos/mralexgray/AOP-in-Objective-C/events', + has_issues: false, + issues_url: + 'https://api.github.com/repos/mralexgray/AOP-in-Objective-C/issues{/number}', + labels_url: + 'https://api.github.com/repos/mralexgray/AOP-in-Objective-C/labels{/name}', + merges_url: + 'https://api.github.com/repos/mralexgray/AOP-in-Objective-C/merges', + mirror_url: null, + updated_at: '2014-06-19T19:38:12Z', + visibility: 'public', + archive_url: + 'https://api.github.com/repos/mralexgray/AOP-in-Objective-C/{archive_format}{/ref}', + commits_url: + 'https://api.github.com/repos/mralexgray/AOP-in-Objective-C/commits{/sha}', + compare_url: + 'https://api.github.com/repos/mralexgray/AOP-in-Objective-C/compare/{base}...{head}', + description: + 'An NSProxy based library for easily enabling AOP like functionality in Objective-C.', + forks_count: 1, + is_template: false, + open_issues: 0, + branches_url: + 'https://api.github.com/repos/mralexgray/AOP-in-Objective-C/branches{/branch}', + comments_url: + 'https://api.github.com/repos/mralexgray/AOP-in-Objective-C/comments{/number}', + contents_url: + 'https://api.github.com/repos/mralexgray/AOP-in-Objective-C/contents/{+path}', + git_refs_url: + 'https://api.github.com/repos/mralexgray/AOP-in-Objective-C/git/refs{/sha}', + git_tags_url: + 'https://api.github.com/repos/mralexgray/AOP-in-Objective-C/git/tags{/sha}', + has_projects: true, + releases_url: + 'https://api.github.com/repos/mralexgray/AOP-in-Objective-C/releases{/id}', + statuses_url: + 'https://api.github.com/repos/mralexgray/AOP-in-Objective-C/statuses/{sha}', + allow_forking: true, + assignees_url: + 'https://api.github.com/repos/mralexgray/AOP-in-Objective-C/assignees{/user}', + downloads_url: + 'https://api.github.com/repos/mralexgray/AOP-in-Objective-C/downloads', + has_downloads: true, + languages_url: + 'https://api.github.com/repos/mralexgray/AOP-in-Objective-C/languages', + default_branch: 'travis-coveralls', + milestones_url: + 'https://api.github.com/repos/mralexgray/AOP-in-Objective-C/milestones{/number}', + stargazers_url: + 'https://api.github.com/repos/mralexgray/AOP-in-Objective-C/stargazers', + watchers_count: 0, + deployments_url: + 'https://api.github.com/repos/mralexgray/AOP-in-Objective-C/deployments', + git_commits_url: + 'https://api.github.com/repos/mralexgray/AOP-in-Objective-C/git/commits{/sha}', + subscribers_url: + 'https://api.github.com/repos/mralexgray/AOP-in-Objective-C/subscribers', + contributors_url: + 'https://api.github.com/repos/mralexgray/AOP-in-Objective-C/contributors', + issue_events_url: + 'https://api.github.com/repos/mralexgray/AOP-in-Objective-C/issues/events{/number}', + stargazers_count: 0, + subscription_url: + 'https://api.github.com/repos/mralexgray/AOP-in-Objective-C/subscription', + collaborators_url: + 'https://api.github.com/repos/mralexgray/AOP-in-Objective-C/collaborators{/collaborator}', + issue_comment_url: + 'https://api.github.com/repos/mralexgray/AOP-in-Objective-C/issues/comments{/number}', + notifications_url: + 'https://api.github.com/repos/mralexgray/AOP-in-Objective-C/notifications{?since,all,participating}', + open_issues_count: 0, + web_commit_signoff_required: false, + }, + { + id: 13141936, + url: 'https://api.github.com/repos/mralexgray/Apaxy', + fork: true, + name: 'Apaxy', + size: 113, + forks: 0, + owner: { + id: 262517, + url: 'https://api.github.com/users/mralexgray', + type: 'User', + login: 'mralexgray', + node_id: 'MDQ6VXNlcjI2MjUxNw==', + html_url: 'https://github.com/mralexgray', + gists_url: 'https://api.github.com/users/mralexgray/gists{/gist_id}', + repos_url: 'https://api.github.com/users/mralexgray/repos', + avatar_url: 'https://avatars.githubusercontent.com/u/262517?v=4', + events_url: 'https://api.github.com/users/mralexgray/events{/privacy}', + site_admin: false, + gravatar_id: '', + starred_url: + 'https://api.github.com/users/mralexgray/starred{/owner}{/repo}', + followers_url: 'https://api.github.com/users/mralexgray/followers', + following_url: + 'https://api.github.com/users/mralexgray/following{/other_user}', + organizations_url: 'https://api.github.com/users/mralexgray/orgs', + subscriptions_url: + 'https://api.github.com/users/mralexgray/subscriptions', + received_events_url: + 'https://api.github.com/users/mralexgray/received_events', + }, + topics: [], + git_url: 'git://github.com/mralexgray/Apaxy.git', + license: { + key: 'unlicense', + url: 'https://api.github.com/licenses/unlicense', + name: 'The Unlicense', + node_id: 'MDc6TGljZW5zZTE1', + spdx_id: 'Unlicense', + }, + node_id: 'MDEwOlJlcG9zaXRvcnkxMzE0MTkzNg==', + private: false, + ssh_url: 'git@github.com:mralexgray/Apaxy.git', + svn_url: 'https://github.com/mralexgray/Apaxy', + archived: false, + disabled: false, + has_wiki: true, + homepage: null, + html_url: 'https://github.com/mralexgray/Apaxy', + keys_url: 'https://api.github.com/repos/mralexgray/Apaxy/keys{/key_id}', + language: 'CSS', + tags_url: 'https://api.github.com/repos/mralexgray/Apaxy/tags', + watchers: 0, + blobs_url: + 'https://api.github.com/repos/mralexgray/Apaxy/git/blobs{/sha}', + clone_url: 'https://github.com/mralexgray/Apaxy.git', + forks_url: 'https://api.github.com/repos/mralexgray/Apaxy/forks', + full_name: 'mralexgray/Apaxy', + has_pages: false, + hooks_url: 'https://api.github.com/repos/mralexgray/Apaxy/hooks', + pulls_url: 'https://api.github.com/repos/mralexgray/Apaxy/pulls{/number}', + pushed_at: '2013-08-02T16:01:32Z', + teams_url: 'https://api.github.com/repos/mralexgray/Apaxy/teams', + trees_url: + 'https://api.github.com/repos/mralexgray/Apaxy/git/trees{/sha}', + created_at: '2013-09-27T05:05:35Z', + events_url: 'https://api.github.com/repos/mralexgray/Apaxy/events', + has_issues: false, + issues_url: + 'https://api.github.com/repos/mralexgray/Apaxy/issues{/number}', + labels_url: 'https://api.github.com/repos/mralexgray/Apaxy/labels{/name}', + merges_url: 'https://api.github.com/repos/mralexgray/Apaxy/merges', + mirror_url: null, + updated_at: '2018-02-16T21:40:24Z', + visibility: 'public', + archive_url: + 'https://api.github.com/repos/mralexgray/Apaxy/{archive_format}{/ref}', + commits_url: + 'https://api.github.com/repos/mralexgray/Apaxy/commits{/sha}', + compare_url: + 'https://api.github.com/repos/mralexgray/Apaxy/compare/{base}...{head}', + description: + 'A simple, customisable theme for your Apache directory listing.', + forks_count: 0, + is_template: false, + open_issues: 0, + branches_url: + 'https://api.github.com/repos/mralexgray/Apaxy/branches{/branch}', + comments_url: + 'https://api.github.com/repos/mralexgray/Apaxy/comments{/number}', + contents_url: + 'https://api.github.com/repos/mralexgray/Apaxy/contents/{+path}', + git_refs_url: + 'https://api.github.com/repos/mralexgray/Apaxy/git/refs{/sha}', + git_tags_url: + 'https://api.github.com/repos/mralexgray/Apaxy/git/tags{/sha}', + has_projects: true, + releases_url: + 'https://api.github.com/repos/mralexgray/Apaxy/releases{/id}', + statuses_url: + 'https://api.github.com/repos/mralexgray/Apaxy/statuses/{sha}', + allow_forking: true, + assignees_url: + 'https://api.github.com/repos/mralexgray/Apaxy/assignees{/user}', + downloads_url: 'https://api.github.com/repos/mralexgray/Apaxy/downloads', + has_downloads: true, + languages_url: 'https://api.github.com/repos/mralexgray/Apaxy/languages', + default_branch: 'master', + milestones_url: + 'https://api.github.com/repos/mralexgray/Apaxy/milestones{/number}', + stargazers_url: + 'https://api.github.com/repos/mralexgray/Apaxy/stargazers', + watchers_count: 0, + deployments_url: + 'https://api.github.com/repos/mralexgray/Apaxy/deployments', + git_commits_url: + 'https://api.github.com/repos/mralexgray/Apaxy/git/commits{/sha}', + subscribers_url: + 'https://api.github.com/repos/mralexgray/Apaxy/subscribers', + contributors_url: + 'https://api.github.com/repos/mralexgray/Apaxy/contributors', + issue_events_url: + 'https://api.github.com/repos/mralexgray/Apaxy/issues/events{/number}', + stargazers_count: 0, + subscription_url: + 'https://api.github.com/repos/mralexgray/Apaxy/subscription', + collaborators_url: + 'https://api.github.com/repos/mralexgray/Apaxy/collaborators{/collaborator}', + issue_comment_url: + 'https://api.github.com/repos/mralexgray/Apaxy/issues/comments{/number}', + notifications_url: + 'https://api.github.com/repos/mralexgray/Apaxy/notifications{?since,all,participating}', + open_issues_count: 0, + web_commit_signoff_required: false, + }, + { + id: 20027360, + url: 'https://api.github.com/repos/mralexgray/app', + fork: true, + name: 'app', + size: 1890, + forks: 0, + owner: { + id: 262517, + url: 'https://api.github.com/users/mralexgray', + type: 'User', + login: 'mralexgray', + node_id: 'MDQ6VXNlcjI2MjUxNw==', + html_url: 'https://github.com/mralexgray', + gists_url: 'https://api.github.com/users/mralexgray/gists{/gist_id}', + repos_url: 'https://api.github.com/users/mralexgray/repos', + avatar_url: 'https://avatars.githubusercontent.com/u/262517?v=4', + events_url: 'https://api.github.com/users/mralexgray/events{/privacy}', + site_admin: false, + gravatar_id: '', + starred_url: + 'https://api.github.com/users/mralexgray/starred{/owner}{/repo}', + followers_url: 'https://api.github.com/users/mralexgray/followers', + following_url: + 'https://api.github.com/users/mralexgray/following{/other_user}', + organizations_url: 'https://api.github.com/users/mralexgray/orgs', + subscriptions_url: + 'https://api.github.com/users/mralexgray/subscriptions', + received_events_url: + 'https://api.github.com/users/mralexgray/received_events', + }, + topics: [], + git_url: 'git://github.com/mralexgray/app.git', + license: { + key: 'other', + url: null, + name: 'Other', + node_id: 'MDc6TGljZW5zZTA=', + spdx_id: 'NOASSERTION', + }, + node_id: 'MDEwOlJlcG9zaXRvcnkyMDAyNzM2MA==', + private: false, + ssh_url: 'git@github.com:mralexgray/app.git', + svn_url: 'https://github.com/mralexgray/app', + archived: false, + disabled: false, + has_wiki: true, + homepage: null, + html_url: 'https://github.com/mralexgray/app', + keys_url: 'https://api.github.com/repos/mralexgray/app/keys{/key_id}', + language: 'JavaScript', + tags_url: 'https://api.github.com/repos/mralexgray/app/tags', + watchers: 0, + blobs_url: 'https://api.github.com/repos/mralexgray/app/git/blobs{/sha}', + clone_url: 'https://github.com/mralexgray/app.git', + forks_url: 'https://api.github.com/repos/mralexgray/app/forks', + full_name: 'mralexgray/app', + has_pages: false, + hooks_url: 'https://api.github.com/repos/mralexgray/app/hooks', + pulls_url: 'https://api.github.com/repos/mralexgray/app/pulls{/number}', + pushed_at: '2014-05-20T19:51:38Z', + teams_url: 'https://api.github.com/repos/mralexgray/app/teams', + trees_url: 'https://api.github.com/repos/mralexgray/app/git/trees{/sha}', + created_at: '2014-05-21T15:54:20Z', + events_url: 'https://api.github.com/repos/mralexgray/app/events', + has_issues: false, + issues_url: 'https://api.github.com/repos/mralexgray/app/issues{/number}', + labels_url: 'https://api.github.com/repos/mralexgray/app/labels{/name}', + merges_url: 'https://api.github.com/repos/mralexgray/app/merges', + mirror_url: null, + updated_at: '2014-05-21T15:54:22Z', + visibility: 'public', + archive_url: + 'https://api.github.com/repos/mralexgray/app/{archive_format}{/ref}', + commits_url: 'https://api.github.com/repos/mralexgray/app/commits{/sha}', + compare_url: + 'https://api.github.com/repos/mralexgray/app/compare/{base}...{head}', + description: 'Instant mobile web app creation', + forks_count: 0, + is_template: false, + open_issues: 0, + branches_url: + 'https://api.github.com/repos/mralexgray/app/branches{/branch}', + comments_url: + 'https://api.github.com/repos/mralexgray/app/comments{/number}', + contents_url: + 'https://api.github.com/repos/mralexgray/app/contents/{+path}', + git_refs_url: + 'https://api.github.com/repos/mralexgray/app/git/refs{/sha}', + git_tags_url: + 'https://api.github.com/repos/mralexgray/app/git/tags{/sha}', + has_projects: true, + releases_url: 'https://api.github.com/repos/mralexgray/app/releases{/id}', + statuses_url: + 'https://api.github.com/repos/mralexgray/app/statuses/{sha}', + allow_forking: true, + assignees_url: + 'https://api.github.com/repos/mralexgray/app/assignees{/user}', + downloads_url: 'https://api.github.com/repos/mralexgray/app/downloads', + has_downloads: true, + languages_url: 'https://api.github.com/repos/mralexgray/app/languages', + default_branch: 'master', + milestones_url: + 'https://api.github.com/repos/mralexgray/app/milestones{/number}', + stargazers_url: 'https://api.github.com/repos/mralexgray/app/stargazers', + watchers_count: 0, + deployments_url: + 'https://api.github.com/repos/mralexgray/app/deployments', + git_commits_url: + 'https://api.github.com/repos/mralexgray/app/git/commits{/sha}', + subscribers_url: + 'https://api.github.com/repos/mralexgray/app/subscribers', + contributors_url: + 'https://api.github.com/repos/mralexgray/app/contributors', + issue_events_url: + 'https://api.github.com/repos/mralexgray/app/issues/events{/number}', + stargazers_count: 0, + subscription_url: + 'https://api.github.com/repos/mralexgray/app/subscription', + collaborators_url: + 'https://api.github.com/repos/mralexgray/app/collaborators{/collaborator}', + issue_comment_url: + 'https://api.github.com/repos/mralexgray/app/issues/comments{/number}', + notifications_url: + 'https://api.github.com/repos/mralexgray/app/notifications{?since,all,participating}', + open_issues_count: 0, + web_commit_signoff_required: false, + }, + ], + name: 'Shirt', + revenue: 4.99, + }, + receivedAt: '2022-08-18T08:43:13.521+05:30', + request_ip: '[::1]', + anonymousId: 'anon-id-new', + originalTimestamp: '2022-08-18T08:43:15.539+05:30', + }, + PayloadSize: 48375, + LastJobStatus: { + JobID: 0, + JobState: '', + AttemptNum: 0, + ExecTime: '0001-01-01T00:00:00Z', + RetryTime: '0001-01-01T00:00:00Z', + ErrorCode: '', + ErrorResponse: null, + Parameters: null, + WorkspaceId: '', + }, + Parameters: { + record_id: null, + source_id: '2DTlLPQxignYp4ag9sISgGN2uY7', + event_name: 'Product Purchased new', + event_type: 'track', + message_id: '9f8fb785-c720-4381-a009-bf22a13f4ced', + received_at: '2022-08-18T08:43:13.521+05:30', + workspaceId: '2DTlBMipxWfJZzZ1SsjELQWvkwd', + transform_at: 'router', + source_job_id: '', + destination_id: '2DTozIMGtBwTGNJtuvdPByFSL2Z', + gateway_job_id: 6, + source_task_id: '', + source_batch_id: '', + source_category: '', + source_job_run_id: '', + source_task_run_id: '', + source_definition_id: '2DTlJaW1jHhM8B27Et2CMTZoxZF', + destination_definition_id: '', + }, + WorkspaceId: '2DTlBMipxWfJZzZ1SsjELQWvkwd', + }, + workerAssignedTime: '2022-08-18T08:43:16.586825+05:30', + }, + destination: { + ID: '2DTozIMGtBwTGNJtuvdPByFSL2Z', + Name: 'Lambda test', + DestinationDefinition: { + ID: '2DTlHvPWOzBUksUQUvggRnalUkj', + Name: 'LAMBDA', + DisplayName: 'AWS Lambda', + Config: { + destConfig: { + defaultConfig: [ + 'region', + 'iamRoleARN', + 'externalID', + 'accessKeyId', + 'accessKey', + 'lambda', + 'enableBatchInput', + 'clientContext', + 'roleBasedAuth', + 'maxBatchSize', + ], + }, + excludeKeys: [], + includeKeys: [], + saveDestinationResponse: true, + secretKeys: ['accessKeyId', 'accessKey', 'iamRoleARN', 'externalID'], + supportedMessageTypes: [ + 'identify', + 'page', + 'screen', + 'track', + 'alias', + 'group', + ], + supportedSourceTypes: [ + 'amp', + 'android', + 'cordova', + 'cloud', + 'flutter', + 'ios', + 'reactnative', + 'unity', + 'warehouse', + 'web', + ], + transformAt: 'router', + transformAtV1: 'router', + }, + ResponseRules: {}, + }, + Config: { + accessKey: '', + accessKeyId: '', + clientContext: '', + enableBatchInput: true, + externalID: '', + iamRoleARN: '', + lambda: 'testFunction', + maxBatchSize: '2', + region: 'us-west-2', + roleBasedAuth: false, + }, + Enabled: true, + Transformations: [], + IsProcessorEnabled: true, + RevisionID: '2DVji2YjKiWRL0Qdx73xg9r8ReQ', + }, + }, + { + message: { + name: 'Page View', + type: 'page', + sentAt: '2022-08-18T08:43:15.539+05:30', + userId: 'identified user id', + context: { + ip: '14.5.67.21', + library: { + name: 'http', + }, + }, + rudderId: 'daf823fb-e8d3-413a-8313-d34cd756f968', + messageId: '5f58d1f7-cbd6-4bff-8571-9933be7210b1', + timestamp: '2020-02-02T00:23:09.544Z', + properties: { + path: '/', + title: 'Home', + }, + receivedAt: '2022-08-18T08:43:13.521+05:30', + request_ip: '[::1]', + anonymousId: 'anon-id-new', + originalTimestamp: '2022-08-18T08:43:15.539+05:30', + }, + metadata: { + userId: 'anon-id-new<<>>identified user id', + jobId: 33, + sourceId: '2DTlLPQxignYp4ag9sISgGN2uY7', + destinationId: '2DTozIMGtBwTGNJtuvdPByFSL2Z', + attemptNum: 0, + receivedAt: '2022-08-18T08:43:13.521+05:30', + createdAt: '2022-08-18T03:13:15.549Z', + firstAttemptedAt: '', + transformAt: 'router', + workspaceId: '2DTlBMipxWfJZzZ1SsjELQWvkwd', + secret: null, + jobsT: { + UUID: 'bf616af4-2c6b-495f-8b2d-b522c93bdca2', + JobID: 33, + UserID: 'anon-id-new<<>>identified user id', + CreatedAt: '2022-08-18T03:13:15.549078Z', + ExpireAt: '2022-08-18T03:13:15.549078Z', + CustomVal: 'LAMBDA', + EventCount: 1, + EventPayload: { + name: 'Page View', + type: 'page', + sentAt: '2022-08-18T08:43:15.539+05:30', + userId: 'identified user id', + context: { + ip: '14.5.67.21', + library: { + name: 'http', + }, + }, + rudderId: 'daf823fb-e8d3-413a-8313-d34cd756f968', + messageId: '5f58d1f7-cbd6-4bff-8571-9933be7210b1', + timestamp: '2020-02-02T00:23:09.544Z', + properties: { + path: '/', + title: 'Home', + }, + receivedAt: '2022-08-18T08:43:13.521+05:30', + request_ip: '[::1]', + anonymousId: 'anon-id-new', + originalTimestamp: '2022-08-18T08:43:15.539+05:30', + }, + PayloadSize: 548, + LastJobStatus: { + JobID: 0, + JobState: '', + AttemptNum: 0, + ExecTime: '0001-01-01T00:00:00Z', + RetryTime: '0001-01-01T00:00:00Z', + ErrorCode: '', + ErrorResponse: null, + Parameters: null, + WorkspaceId: '', + }, + Parameters: { + record_id: null, + source_id: '2DTlLPQxignYp4ag9sISgGN2uY7', + event_name: '', + event_type: 'page', + message_id: '5f58d1f7-cbd6-4bff-8571-9933be7210b1', + received_at: '2022-08-18T08:43:13.521+05:30', + workspaceId: '2DTlBMipxWfJZzZ1SsjELQWvkwd', + transform_at: 'router', + source_job_id: '', + destination_id: '2DTozIMGtBwTGNJtuvdPByFSL2Z', + gateway_job_id: 6, + source_task_id: '', + source_batch_id: '', + source_category: '', + source_job_run_id: '', + source_task_run_id: '', + source_definition_id: '2DTlJaW1jHhM8B27Et2CMTZoxZF', + destination_definition_id: '', + }, + WorkspaceId: '2DTlBMipxWfJZzZ1SsjELQWvkwd', + }, + workerAssignedTime: '2022-08-18T08:43:16.586825+05:30', + }, + destination: { + ID: '2DTozIMGtBwTGNJtuvdPByFSL2Z', + Name: 'Lambda test', + DestinationDefinition: { + ID: '2DTlHvPWOzBUksUQUvggRnalUkj', + Name: 'LAMBDA', + DisplayName: 'AWS Lambda', + Config: { + destConfig: { + defaultConfig: [ + 'region', + 'iamRoleARN', + 'externalID', + 'accessKeyId', + 'accessKey', + 'lambda', + 'enableBatchInput', + 'clientContext', + 'roleBasedAuth', + 'maxBatchSize', + ], + }, + excludeKeys: [], + includeKeys: [], + saveDestinationResponse: true, + secretKeys: ['accessKeyId', 'accessKey', 'iamRoleARN', 'externalID'], + supportedMessageTypes: [ + 'identify', + 'page', + 'screen', + 'track', + 'alias', + 'group', + ], + supportedSourceTypes: [ + 'amp', + 'android', + 'cordova', + 'cloud', + 'flutter', + 'ios', + 'reactnative', + 'unity', + 'warehouse', + 'web', + ], + transformAt: 'router', + transformAtV1: 'router', + }, + ResponseRules: {}, + }, + Config: { + accessKey: '', + accessKeyId: '', + clientContext: '', + enableBatchInput: true, + externalID: '', + iamRoleARN: '', + lambda: 'testFunction', + maxBatchSize: '2', + region: 'us-west-2', + roleBasedAuth: false, + }, + Enabled: true, + Transformations: [], + IsProcessorEnabled: true, + RevisionID: '2DVji2YjKiWRL0Qdx73xg9r8ReQ', + }, + }, + { + message: { + name: 'Screen View', + type: 'screen', + sentAt: '2022-08-18T08:43:15.539+05:30', + userId: 'identified user id', + context: { + ip: '14.5.67.21', + library: { + name: 'http', + }, + }, + rudderId: 'daf823fb-e8d3-413a-8313-d34cd756f968', + messageId: '1b8ee4c3-ffad-4457-b453-31b32da1dfea', + timestamp: '2020-02-02T00:23:09.544Z', + properties: { + prop1: '5', + }, + receivedAt: '2022-08-18T08:43:13.521+05:30', + request_ip: '[::1]', + anonymousId: 'anon-id-new', + originalTimestamp: '2022-08-18T08:43:15.539+05:30', + }, + metadata: { + userId: 'anon-id-new<<>>identified user id', + jobId: 34, + sourceId: '2DTlLPQxignYp4ag9sISgGN2uY7', + destinationId: '2DTozIMGtBwTGNJtuvdPByFSL2Z', + attemptNum: 0, + receivedAt: '2022-08-18T08:43:13.521+05:30', + createdAt: '2022-08-18T03:13:15.549Z', + firstAttemptedAt: '', + transformAt: 'router', + workspaceId: '2DTlBMipxWfJZzZ1SsjELQWvkwd', + secret: null, + jobsT: { + UUID: '8faa9d6d-d8a8-468c-bef4-c2db52f6101b', + JobID: 34, + UserID: 'anon-id-new<<>>identified user id', + CreatedAt: '2022-08-18T03:13:15.549078Z', + ExpireAt: '2022-08-18T03:13:15.549078Z', + CustomVal: 'LAMBDA', + EventCount: 1, + EventPayload: { + name: 'Screen View', + type: 'screen', + sentAt: '2022-08-18T08:43:15.539+05:30', + userId: 'identified user id', + context: { + ip: '14.5.67.21', + library: { + name: 'http', + }, + }, + rudderId: 'daf823fb-e8d3-413a-8313-d34cd756f968', + messageId: '1b8ee4c3-ffad-4457-b453-31b32da1dfea', + timestamp: '2020-02-02T00:23:09.544Z', + properties: { + prop1: '5', + }, + receivedAt: '2022-08-18T08:43:13.521+05:30', + request_ip: '[::1]', + anonymousId: 'anon-id-new', + originalTimestamp: '2022-08-18T08:43:15.539+05:30', + }, + PayloadSize: 536, + LastJobStatus: { + JobID: 0, + JobState: '', + AttemptNum: 0, + ExecTime: '0001-01-01T00:00:00Z', + RetryTime: '0001-01-01T00:00:00Z', + ErrorCode: '', + ErrorResponse: null, + Parameters: null, + WorkspaceId: '', + }, + Parameters: { + record_id: null, + source_id: '2DTlLPQxignYp4ag9sISgGN2uY7', + event_name: '', + event_type: 'screen', + message_id: '1b8ee4c3-ffad-4457-b453-31b32da1dfea', + received_at: '2022-08-18T08:43:13.521+05:30', + workspaceId: '2DTlBMipxWfJZzZ1SsjELQWvkwd', + transform_at: 'router', + source_job_id: '', + destination_id: '2DTozIMGtBwTGNJtuvdPByFSL2Z', + gateway_job_id: 6, + source_task_id: '', + source_batch_id: '', + source_category: '', + source_job_run_id: '', + source_task_run_id: '', + source_definition_id: '2DTlJaW1jHhM8B27Et2CMTZoxZF', + destination_definition_id: '', + }, + WorkspaceId: '2DTlBMipxWfJZzZ1SsjELQWvkwd', + }, + workerAssignedTime: '2022-08-18T08:43:16.586825+05:30', + }, + destination: { + ID: '2DTozIMGtBwTGNJtuvdPByFSL2Z', + Name: 'Lambda test', + DestinationDefinition: { + ID: '2DTlHvPWOzBUksUQUvggRnalUkj', + Name: 'LAMBDA', + DisplayName: 'AWS Lambda', + Config: { + destConfig: { + defaultConfig: [ + 'region', + 'iamRoleARN', + 'externalID', + 'accessKeyId', + 'accessKey', + 'lambda', + 'enableBatchInput', + 'clientContext', + 'roleBasedAuth', + 'maxBatchSize', + ], + }, + excludeKeys: [], + includeKeys: [], + saveDestinationResponse: true, + secretKeys: ['accessKeyId', 'accessKey', 'iamRoleARN', 'externalID'], + supportedMessageTypes: [ + 'identify', + 'page', + 'screen', + 'track', + 'alias', + 'group', + ], + supportedSourceTypes: [ + 'amp', + 'android', + 'cordova', + 'cloud', + 'flutter', + 'ios', + 'reactnative', + 'unity', + 'warehouse', + 'web', + ], + transformAt: 'router', + transformAtV1: 'router', + }, + ResponseRules: {}, + }, + Config: { + accessKey: '', + accessKeyId: '', + clientContext: '', + enableBatchInput: true, + externalID: '', + iamRoleARN: '', + lambda: 'testFunction', + maxBatchSize: '2', + region: 'us-west-2', + roleBasedAuth: false, + }, + Enabled: true, + Transformations: [], + IsProcessorEnabled: true, + RevisionID: '2DVji2YjKiWRL0Qdx73xg9r8ReQ', + }, + }, + { + message: { + type: 'group', + sentAt: '2022-08-18T08:43:15.539+05:30', + traits: { + name: 'Company', + industry: 'Industry', + employees: 123, + }, + userId: 'user123', + context: { + ip: '14.5.67.21', + traits: { + trait1: 'new-val', + }, + library: { + name: 'http', + }, + }, + groupId: 'group1', + rudderId: 'bda76e3e-87eb-4153-9d1e-e9c2ed48b7a5', + messageId: '2c59b527-3235-4fc2-9680-f41ec52ebb51', + timestamp: '2020-01-21T00:21:34.208Z', + receivedAt: '2022-08-18T08:43:13.521+05:30', + request_ip: '[::1]', + originalTimestamp: '2022-08-18T08:43:15.539+05:30', + }, + metadata: { + userId: 'anon-id-new<<>>identified user id', + jobId: 35, + sourceId: '2DTlLPQxignYp4ag9sISgGN2uY7', + destinationId: '2DTozIMGtBwTGNJtuvdPByFSL2Z', + attemptNum: 0, + receivedAt: '2022-08-18T08:43:13.521+05:30', + createdAt: '2022-08-18T03:13:15.549Z', + firstAttemptedAt: '', + transformAt: 'router', + workspaceId: '2DTlBMipxWfJZzZ1SsjELQWvkwd', + secret: null, + jobsT: { + UUID: '73cea314-998a-4b72-8004-34b0618093a3', + JobID: 35, + UserID: 'anon-id-new<<>>identified user id', + CreatedAt: '2022-08-18T03:13:15.549078Z', + ExpireAt: '2022-08-18T03:13:15.549078Z', + CustomVal: 'LAMBDA', + EventCount: 1, + EventPayload: { + type: 'group', + sentAt: '2022-08-18T08:43:15.539+05:30', + traits: { + name: 'Company', + industry: 'Industry', + employees: 123, + }, + userId: 'user123', + context: { + ip: '14.5.67.21', + traits: { + trait1: 'new-val', + }, + library: { + name: 'http', + }, + }, + groupId: 'group1', + rudderId: 'bda76e3e-87eb-4153-9d1e-e9c2ed48b7a5', + messageId: '2c59b527-3235-4fc2-9680-f41ec52ebb51', + timestamp: '2020-01-21T00:21:34.208Z', + receivedAt: '2022-08-18T08:43:13.521+05:30', + request_ip: '[::1]', + originalTimestamp: '2022-08-18T08:43:15.539+05:30', + }, + PayloadSize: 589, + LastJobStatus: { + JobID: 0, + JobState: '', + AttemptNum: 0, + ExecTime: '0001-01-01T00:00:00Z', + RetryTime: '0001-01-01T00:00:00Z', + ErrorCode: '', + ErrorResponse: null, + Parameters: null, + WorkspaceId: '', + }, + Parameters: { + record_id: null, + source_id: '2DTlLPQxignYp4ag9sISgGN2uY7', + event_name: '', + event_type: 'group', + message_id: '2c59b527-3235-4fc2-9680-f41ec52ebb51', + received_at: '2022-08-18T08:43:13.521+05:30', + workspaceId: '2DTlBMipxWfJZzZ1SsjELQWvkwd', + transform_at: 'router', + source_job_id: '', + destination_id: '2DTozIMGtBwTGNJtuvdPByFSL2Z', + gateway_job_id: 6, + source_task_id: '', + source_batch_id: '', + source_category: '', + source_job_run_id: '', + source_task_run_id: '', + source_definition_id: '2DTlJaW1jHhM8B27Et2CMTZoxZF', + destination_definition_id: '', + }, + WorkspaceId: '2DTlBMipxWfJZzZ1SsjELQWvkwd', + }, + workerAssignedTime: '2022-08-18T08:43:16.586825+05:30', + }, + destination: { + ID: '2DTozIMGtBwTGNJtuvdPByFSL2Z', + Name: 'Lambda test', + DestinationDefinition: { + ID: '2DTlHvPWOzBUksUQUvggRnalUkj', + Name: 'LAMBDA', + DisplayName: 'AWS Lambda', + Config: { + destConfig: { + defaultConfig: [ + 'region', + 'iamRoleARN', + 'externalID', + 'accessKeyId', + 'accessKey', + 'lambda', + 'enableBatchInput', + 'clientContext', + 'roleBasedAuth', + 'maxBatchSize', + ], + }, + excludeKeys: [], + includeKeys: [], + saveDestinationResponse: true, + secretKeys: ['accessKeyId', 'accessKey', 'iamRoleARN', 'externalID'], + supportedMessageTypes: [ + 'identify', + 'page', + 'screen', + 'track', + 'alias', + 'group', + ], + supportedSourceTypes: [ + 'amp', + 'android', + 'cordova', + 'cloud', + 'flutter', + 'ios', + 'reactnative', + 'unity', + 'warehouse', + 'web', + ], + transformAt: 'router', + transformAtV1: 'router', + }, + ResponseRules: {}, + }, + Config: { + accessKey: '', + accessKeyId: '', + clientContext: '', + enableBatchInput: true, + externalID: '', + iamRoleARN: '', + lambda: 'testFunction', + maxBatchSize: '2', + region: 'us-west-2', + roleBasedAuth: false, + }, + Enabled: true, + Transformations: [], + IsProcessorEnabled: true, + RevisionID: '2DVji2YjKiWRL0Qdx73xg9r8ReQ', + }, + }, + { + message: { + type: 'alias', + sentAt: '2022-08-18T08:43:15.539+05:30', + userId: 'user123', + context: { + ip: '14.5.67.21', + traits: { + trait1: 'new-val', + }, + library: { + name: 'http', + }, + }, + rudderId: 'bda76e3e-87eb-4153-9d1e-e9c2ed48b7a5', + messageId: '3ff8d400-b6d4-43a4-a0ff-1bc7ae8b5f7d', + timestamp: '2020-01-21T00:21:34.208Z', + previousId: 'previd1', + receivedAt: '2022-08-18T08:43:13.521+05:30', + request_ip: '[::1]', + originalTimestamp: '2022-08-18T08:43:15.539+05:30', + }, + metadata: { + userId: 'anon-id-new<<>>identified user id', + jobId: 36, + sourceId: '2DTlLPQxignYp4ag9sISgGN2uY7', + destinationId: '2DTozIMGtBwTGNJtuvdPByFSL2Z', + attemptNum: 0, + receivedAt: '2022-08-18T08:43:13.521+05:30', + createdAt: '2022-08-18T03:13:15.549Z', + firstAttemptedAt: '', + transformAt: 'router', + workspaceId: '2DTlBMipxWfJZzZ1SsjELQWvkwd', + secret: null, + jobsT: { + UUID: 'ac80629c-9eb6-4e92-bee8-4647e88f7fc0', + JobID: 36, + UserID: 'anon-id-new<<>>identified user id', + CreatedAt: '2022-08-18T03:13:15.549078Z', + ExpireAt: '2022-08-18T03:13:15.549078Z', + CustomVal: 'LAMBDA', + EventCount: 1, + EventPayload: { + type: 'alias', + sentAt: '2022-08-18T08:43:15.539+05:30', + userId: 'user123', + context: { + ip: '14.5.67.21', + traits: { + trait1: 'new-val', + }, + library: { + name: 'http', + }, + }, + rudderId: 'bda76e3e-87eb-4153-9d1e-e9c2ed48b7a5', + messageId: '3ff8d400-b6d4-43a4-a0ff-1bc7ae8b5f7d', + timestamp: '2020-01-21T00:21:34.208Z', + previousId: 'previd1', + receivedAt: '2022-08-18T08:43:13.521+05:30', + request_ip: '[::1]', + originalTimestamp: '2022-08-18T08:43:15.539+05:30', + }, + PayloadSize: 506, + LastJobStatus: { + JobID: 0, + JobState: '', + AttemptNum: 0, + ExecTime: '0001-01-01T00:00:00Z', + RetryTime: '0001-01-01T00:00:00Z', + ErrorCode: '', + ErrorResponse: null, + Parameters: null, + WorkspaceId: '', + }, + Parameters: { + record_id: null, + source_id: '2DTlLPQxignYp4ag9sISgGN2uY7', + event_name: '', + event_type: 'alias', + message_id: '3ff8d400-b6d4-43a4-a0ff-1bc7ae8b5f7d', + received_at: '2022-08-18T08:43:13.521+05:30', + workspaceId: '2DTlBMipxWfJZzZ1SsjELQWvkwd', + transform_at: 'router', + source_job_id: '', + destination_id: '2DTozIMGtBwTGNJtuvdPByFSL2Z', + gateway_job_id: 6, + source_task_id: '', + source_batch_id: '', + source_category: '', + source_job_run_id: '', + source_task_run_id: '', + source_definition_id: '2DTlJaW1jHhM8B27Et2CMTZoxZF', + destination_definition_id: '', + }, + WorkspaceId: '2DTlBMipxWfJZzZ1SsjELQWvkwd', + }, + workerAssignedTime: '2022-08-18T08:43:16.586825+05:30', + }, + destination: { + ID: '2DTozIMGtBwTGNJtuvdPByFSL2Z', + Name: 'Lambda test', + DestinationDefinition: { + ID: '2DTlHvPWOzBUksUQUvggRnalUkj', + Name: 'LAMBDA', + DisplayName: 'AWS Lambda', + Config: { + destConfig: { + defaultConfig: [ + 'region', + 'iamRoleARN', + 'externalID', + 'accessKeyId', + 'accessKey', + 'lambda', + 'enableBatchInput', + 'clientContext', + 'roleBasedAuth', + 'maxBatchSize', + ], + }, + excludeKeys: [], + includeKeys: [], + saveDestinationResponse: true, + secretKeys: ['accessKeyId', 'accessKey', 'iamRoleARN', 'externalID'], + supportedMessageTypes: [ + 'identify', + 'page', + 'screen', + 'track', + 'alias', + 'group', + ], + supportedSourceTypes: [ + 'amp', + 'android', + 'cordova', + 'cloud', + 'flutter', + 'ios', + 'reactnative', + 'unity', + 'warehouse', + 'web', + ], + transformAt: 'router', + transformAtV1: 'router', + }, + ResponseRules: {}, + }, + Config: { + accessKey: '', + accessKeyId: '', + clientContext: '', + enableBatchInput: true, + externalID: '', + iamRoleARN: '', + lambda: 'testFunction', + maxBatchSize: '2', + region: 'us-west-2', + roleBasedAuth: false, + }, + Enabled: true, + Transformations: [], + IsProcessorEnabled: true, + RevisionID: '2DVji2YjKiWRL0Qdx73xg9r8ReQ', + }, + }, + ], + destType: 'lambda', + }, + method: 'POST', + }, + }, + output: { + response: { + status: 200, + body: { + output: [ + { + batchedRequest: { + payload: + '[{"type":"track","event":"Product Purchased new","sentAt":"2022-08-18T08:43:15.539+05:30","userId":"identified user id","context":{"ip":"14.5.67.21","library":{"name":"http"}},"rudderId":"daf823fb-e8d3-413a-8313-d34cd756f968","messageId":"9f8fb785-c720-4381-a009-bf22a13f4ced","timestamp":"2020-02-02T00:23:09.544Z","properties":{"data":[{"id":6104546,"url":"https://api.github.com/repos/mralexgray/-REPONAME","fork":false,"name":"-REPONAME","size":48,"forks":0,"owner":{"id":262517,"url":"https://api.github.com/users/mralexgray","type":"User","login":"mralexgray","node_id":"MDQ6VXNlcjI2MjUxNw==","html_url":"https://github.com/mralexgray","gists_url":"https://api.github.com/users/mralexgray/gists{/gist_id}","repos_url":"https://api.github.com/users/mralexgray/repos","avatar_url":"https://avatars.githubusercontent.com/u/262517?v=4","events_url":"https://api.github.com/users/mralexgray/events{/privacy}","site_admin":false,"gravatar_id":"","starred_url":"https://api.github.com/users/mralexgray/starred{/owner}{/repo}","followers_url":"https://api.github.com/users/mralexgray/followers","following_url":"https://api.github.com/users/mralexgray/following{/other_user}","organizations_url":"https://api.github.com/users/mralexgray/orgs","subscriptions_url":"https://api.github.com/users/mralexgray/subscriptions","received_events_url":"https://api.github.com/users/mralexgray/received_events"},"topics":[],"git_url":"git://github.com/mralexgray/-REPONAME.git","license":null,"node_id":"MDEwOlJlcG9zaXRvcnk2MTA0NTQ2","private":false,"ssh_url":"git@github.com:mralexgray/-REPONAME.git","svn_url":"https://github.com/mralexgray/-REPONAME","archived":false,"disabled":false,"has_wiki":true,"homepage":null,"html_url":"https://github.com/mralexgray/-REPONAME","keys_url":"https://api.github.com/repos/mralexgray/-REPONAME/keys{/key_id}","language":null,"tags_url":"https://api.github.com/repos/mralexgray/-REPONAME/tags","watchers":0,"blobs_url":"https://api.github.com/repos/mralexgray/-REPONAME/git/blobs{/sha}","clone_url":"https://github.com/mralexgray/-REPONAME.git","forks_url":"https://api.github.com/repos/mralexgray/-REPONAME/forks","full_name":"mralexgray/-REPONAME","has_pages":false,"hooks_url":"https://api.github.com/repos/mralexgray/-REPONAME/hooks","pulls_url":"https://api.github.com/repos/mralexgray/-REPONAME/pulls{/number}","pushed_at":"2012-10-06T16:37:39Z","teams_url":"https://api.github.com/repos/mralexgray/-REPONAME/teams","trees_url":"https://api.github.com/repos/mralexgray/-REPONAME/git/trees{/sha}","created_at":"2012-10-06T16:37:39Z","events_url":"https://api.github.com/repos/mralexgray/-REPONAME/events","has_issues":true,"issues_url":"https://api.github.com/repos/mralexgray/-REPONAME/issues{/number}","labels_url":"https://api.github.com/repos/mralexgray/-REPONAME/labels{/name}","merges_url":"https://api.github.com/repos/mralexgray/-REPONAME/merges","mirror_url":null,"updated_at":"2013-01-12T13:39:30Z","visibility":"public","archive_url":"https://api.github.com/repos/mralexgray/-REPONAME/{archive_format}{/ref}","commits_url":"https://api.github.com/repos/mralexgray/-REPONAME/commits{/sha}","compare_url":"https://api.github.com/repos/mralexgray/-REPONAME/compare/{base}...{head}","description":null,"forks_count":0,"is_template":false,"open_issues":0,"branches_url":"https://api.github.com/repos/mralexgray/-REPONAME/branches{/branch}","comments_url":"https://api.github.com/repos/mralexgray/-REPONAME/comments{/number}","contents_url":"https://api.github.com/repos/mralexgray/-REPONAME/contents/{+path}","git_refs_url":"https://api.github.com/repos/mralexgray/-REPONAME/git/refs{/sha}","git_tags_url":"https://api.github.com/repos/mralexgray/-REPONAME/git/tags{/sha}","has_projects":true,"releases_url":"https://api.github.com/repos/mralexgray/-REPONAME/releases{/id}","statuses_url":"https://api.github.com/repos/mralexgray/-REPONAME/statuses/{sha}","allow_forking":true,"assignees_url":"https://api.github.com/repos/mralexgray/-REPONAME/assignees{/user}","downloads_url":"https://api.github.com/repos/mralexgray/-REPONAME/downloads","has_downloads":true,"languages_url":"https://api.github.com/repos/mralexgray/-REPONAME/languages","default_branch":"master","milestones_url":"https://api.github.com/repos/mralexgray/-REPONAME/milestones{/number}","stargazers_url":"https://api.github.com/repos/mralexgray/-REPONAME/stargazers","watchers_count":0,"deployments_url":"https://api.github.com/repos/mralexgray/-REPONAME/deployments","git_commits_url":"https://api.github.com/repos/mralexgray/-REPONAME/git/commits{/sha}","subscribers_url":"https://api.github.com/repos/mralexgray/-REPONAME/subscribers","contributors_url":"https://api.github.com/repos/mralexgray/-REPONAME/contributors","issue_events_url":"https://api.github.com/repos/mralexgray/-REPONAME/issues/events{/number}","stargazers_count":0,"subscription_url":"https://api.github.com/repos/mralexgray/-REPONAME/subscription","collaborators_url":"https://api.github.com/repos/mralexgray/-REPONAME/collaborators{/collaborator}","issue_comment_url":"https://api.github.com/repos/mralexgray/-REPONAME/issues/comments{/number}","notifications_url":"https://api.github.com/repos/mralexgray/-REPONAME/notifications{?since,all,participating}","open_issues_count":0,"web_commit_signoff_required":false},{"id":104510411,"url":"https://api.github.com/repos/mralexgray/...","fork":true,"name":"...","size":113,"forks":0,"owner":{"id":262517,"url":"https://api.github.com/users/mralexgray","type":"User","login":"mralexgray","node_id":"MDQ6VXNlcjI2MjUxNw==","html_url":"https://github.com/mralexgray","gists_url":"https://api.github.com/users/mralexgray/gists{/gist_id}","repos_url":"https://api.github.com/users/mralexgray/repos","avatar_url":"https://avatars.githubusercontent.com/u/262517?v=4","events_url":"https://api.github.com/users/mralexgray/events{/privacy}","site_admin":false,"gravatar_id":"","starred_url":"https://api.github.com/users/mralexgray/starred{/owner}{/repo}","followers_url":"https://api.github.com/users/mralexgray/followers","following_url":"https://api.github.com/users/mralexgray/following{/other_user}","organizations_url":"https://api.github.com/users/mralexgray/orgs","subscriptions_url":"https://api.github.com/users/mralexgray/subscriptions","received_events_url":"https://api.github.com/users/mralexgray/received_events"},"topics":[],"git_url":"git://github.com/mralexgray/....git","license":{"key":"mit","url":"https://api.github.com/licenses/mit","name":"MIT License","node_id":"MDc6TGljZW5zZTEz","spdx_id":"MIT"},"node_id":"MDEwOlJlcG9zaXRvcnkxMDQ1MTA0MTE=","private":false,"ssh_url":"git@github.com:mralexgray/....git","svn_url":"https://github.com/mralexgray/...","archived":false,"disabled":false,"has_wiki":false,"homepage":"https://driesvints.com/blog/getting-started-with-dotfiles","html_url":"https://github.com/mralexgray/...","keys_url":"https://api.github.com/repos/mralexgray/.../keys{/key_id}","language":"Shell","tags_url":"https://api.github.com/repos/mralexgray/.../tags","watchers":0,"blobs_url":"https://api.github.com/repos/mralexgray/.../git/blobs{/sha}","clone_url":"https://github.com/mralexgray/....git","forks_url":"https://api.github.com/repos/mralexgray/.../forks","full_name":"mralexgray/...","has_pages":false,"hooks_url":"https://api.github.com/repos/mralexgray/.../hooks","pulls_url":"https://api.github.com/repos/mralexgray/.../pulls{/number}","pushed_at":"2017-09-15T08:27:32Z","teams_url":"https://api.github.com/repos/mralexgray/.../teams","trees_url":"https://api.github.com/repos/mralexgray/.../git/trees{/sha}","created_at":"2017-09-22T19:19:42Z","events_url":"https://api.github.com/repos/mralexgray/.../events","has_issues":false,"issues_url":"https://api.github.com/repos/mralexgray/.../issues{/number}","labels_url":"https://api.github.com/repos/mralexgray/.../labels{/name}","merges_url":"https://api.github.com/repos/mralexgray/.../merges","mirror_url":null,"updated_at":"2017-09-22T19:20:22Z","visibility":"public","archive_url":"https://api.github.com/repos/mralexgray/.../{archive_format}{/ref}","commits_url":"https://api.github.com/repos/mralexgray/.../commits{/sha}","compare_url":"https://api.github.com/repos/mralexgray/.../compare/{base}...{head}","description":":computer: Public repo for my personal dotfiles.","forks_count":0,"is_template":false,"open_issues":0,"branches_url":"https://api.github.com/repos/mralexgray/.../branches{/branch}","comments_url":"https://api.github.com/repos/mralexgray/.../comments{/number}","contents_url":"https://api.github.com/repos/mralexgray/.../contents/{+path}","git_refs_url":"https://api.github.com/repos/mralexgray/.../git/refs{/sha}","git_tags_url":"https://api.github.com/repos/mralexgray/.../git/tags{/sha}","has_projects":true,"releases_url":"https://api.github.com/repos/mralexgray/.../releases{/id}","statuses_url":"https://api.github.com/repos/mralexgray/.../statuses/{sha}","allow_forking":true,"assignees_url":"https://api.github.com/repos/mralexgray/.../assignees{/user}","downloads_url":"https://api.github.com/repos/mralexgray/.../downloads","has_downloads":true,"languages_url":"https://api.github.com/repos/mralexgray/.../languages","default_branch":"master","milestones_url":"https://api.github.com/repos/mralexgray/.../milestones{/number}","stargazers_url":"https://api.github.com/repos/mralexgray/.../stargazers","watchers_count":0,"deployments_url":"https://api.github.com/repos/mralexgray/.../deployments","git_commits_url":"https://api.github.com/repos/mralexgray/.../git/commits{/sha}","subscribers_url":"https://api.github.com/repos/mralexgray/.../subscribers","contributors_url":"https://api.github.com/repos/mralexgray/.../contributors","issue_events_url":"https://api.github.com/repos/mralexgray/.../issues/events{/number}","stargazers_count":0,"subscription_url":"https://api.github.com/repos/mralexgray/.../subscription","collaborators_url":"https://api.github.com/repos/mralexgray/.../collaborators{/collaborator}","issue_comment_url":"https://api.github.com/repos/mralexgray/.../issues/comments{/number}","notifications_url":"https://api.github.com/repos/mralexgray/.../notifications{?since,all,participating}","open_issues_count":0,"web_commit_signoff_required":false},{"id":58656723,"url":"https://api.github.com/repos/mralexgray/2200087-Serial-Protocol","fork":true,"name":"2200087-Serial-Protocol","size":41,"forks":1,"owner":{"id":262517,"url":"https://api.github.com/users/mralexgray","type":"User","login":"mralexgray","node_id":"MDQ6VXNlcjI2MjUxNw==","html_url":"https://github.com/mralexgray","gists_url":"https://api.github.com/users/mralexgray/gists{/gist_id}","repos_url":"https://api.github.com/users/mralexgray/repos","avatar_url":"https://avatars.githubusercontent.com/u/262517?v=4","events_url":"https://api.github.com/users/mralexgray/events{/privacy}","site_admin":false,"gravatar_id":"","starred_url":"https://api.github.com/users/mralexgray/starred{/owner}{/repo}","followers_url":"https://api.github.com/users/mralexgray/followers","following_url":"https://api.github.com/users/mralexgray/following{/other_user}","organizations_url":"https://api.github.com/users/mralexgray/orgs","subscriptions_url":"https://api.github.com/users/mralexgray/subscriptions","received_events_url":"https://api.github.com/users/mralexgray/received_events"},"topics":[],"git_url":"git://github.com/mralexgray/2200087-Serial-Protocol.git","license":{"key":"gpl-2.0","url":"https://api.github.com/licenses/gpl-2.0","name":"GNU General Public License v2.0","node_id":"MDc6TGljZW5zZTg=","spdx_id":"GPL-2.0"},"node_id":"MDEwOlJlcG9zaXRvcnk1ODY1NjcyMw==","private":false,"ssh_url":"git@github.com:mralexgray/2200087-Serial-Protocol.git","svn_url":"https://github.com/mralexgray/2200087-Serial-Protocol","archived":false,"disabled":false,"has_wiki":true,"homepage":"http://daviddworken.com","html_url":"https://github.com/mralexgray/2200087-Serial-Protocol","keys_url":"https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/keys{/key_id}","language":"Python","tags_url":"https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/tags","watchers":0,"blobs_url":"https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/git/blobs{/sha}","clone_url":"https://github.com/mralexgray/2200087-Serial-Protocol.git","forks_url":"https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/forks","full_name":"mralexgray/2200087-Serial-Protocol","has_pages":false,"hooks_url":"https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/hooks","pulls_url":"https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/pulls{/number}","pushed_at":"2016-05-12T16:07:24Z","teams_url":"https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/teams","trees_url":"https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/git/trees{/sha}","created_at":"2016-05-12T16:05:28Z","events_url":"https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/events","has_issues":false,"issues_url":"https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/issues{/number}","labels_url":"https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/labels{/name}","merges_url":"https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/merges","mirror_url":null,"updated_at":"2016-05-12T16:05:30Z","visibility":"public","archive_url":"https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/{archive_format}{/ref}","commits_url":"https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/commits{/sha}","compare_url":"https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/compare/{base}...{head}","description":"A reverse engineered protocol description and accompanying code for Radioshack\'s 2200087 multimeter","forks_count":1,"is_template":false,"open_issues":0,"branches_url":"https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/branches{/branch}","comments_url":"https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/comments{/number}","contents_url":"https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/contents/{+path}","git_refs_url":"https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/git/refs{/sha}","git_tags_url":"https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/git/tags{/sha}","has_projects":true,"releases_url":"https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/releases{/id}","statuses_url":"https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/statuses/{sha}","allow_forking":true,"assignees_url":"https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/assignees{/user}","downloads_url":"https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/downloads","has_downloads":true,"languages_url":"https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/languages","default_branch":"master","milestones_url":"https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/milestones{/number}","stargazers_url":"https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/stargazers","watchers_count":0,"deployments_url":"https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/deployments","git_commits_url":"https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/git/commits{/sha}","subscribers_url":"https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/subscribers","contributors_url":"https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/contributors","issue_events_url":"https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/issues/events{/number}","stargazers_count":0,"subscription_url":"https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/subscription","collaborators_url":"https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/collaborators{/collaborator}","issue_comment_url":"https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/issues/comments{/number}","notifications_url":"https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/notifications{?since,all,participating}","open_issues_count":0,"web_commit_signoff_required":false},{"id":13121042,"url":"https://api.github.com/repos/mralexgray/ace","fork":true,"name":"ace","size":21080,"forks":1,"owner":{"id":262517,"url":"https://api.github.com/users/mralexgray","type":"User","login":"mralexgray","node_id":"MDQ6VXNlcjI2MjUxNw==","html_url":"https://github.com/mralexgray","gists_url":"https://api.github.com/users/mralexgray/gists{/gist_id}","repos_url":"https://api.github.com/users/mralexgray/repos","avatar_url":"https://avatars.githubusercontent.com/u/262517?v=4","events_url":"https://api.github.com/users/mralexgray/events{/privacy}","site_admin":false,"gravatar_id":"","starred_url":"https://api.github.com/users/mralexgray/starred{/owner}{/repo}","followers_url":"https://api.github.com/users/mralexgray/followers","following_url":"https://api.github.com/users/mralexgray/following{/other_user}","organizations_url":"https://api.github.com/users/mralexgray/orgs","subscriptions_url":"https://api.github.com/users/mralexgray/subscriptions","received_events_url":"https://api.github.com/users/mralexgray/received_events"},"topics":[],"git_url":"git://github.com/mralexgray/ace.git","license":{"key":"other","url":null,"name":"Other","node_id":"MDc6TGljZW5zZTA=","spdx_id":"NOASSERTION"},"node_id":"MDEwOlJlcG9zaXRvcnkxMzEyMTA0Mg==","private":false,"ssh_url":"git@github.com:mralexgray/ace.git","svn_url":"https://github.com/mralexgray/ace","archived":false,"disabled":false,"has_wiki":true,"homepage":"http://ace.c9.io","html_url":"https://github.com/mralexgray/ace","keys_url":"https://api.github.com/repos/mralexgray/ace/keys{/key_id}","language":"JavaScript","tags_url":"https://api.github.com/repos/mralexgray/ace/tags","watchers":0,"blobs_url":"https://api.github.com/repos/mralexgray/ace/git/blobs{/sha}","clone_url":"https://github.com/mralexgray/ace.git","forks_url":"https://api.github.com/repos/mralexgray/ace/forks","full_name":"mralexgray/ace","has_pages":false,"hooks_url":"https://api.github.com/repos/mralexgray/ace/hooks","pulls_url":"https://api.github.com/repos/mralexgray/ace/pulls{/number}","pushed_at":"2013-10-26T12:34:48Z","teams_url":"https://api.github.com/repos/mralexgray/ace/teams","trees_url":"https://api.github.com/repos/mralexgray/ace/git/trees{/sha}","created_at":"2013-09-26T11:58:10Z","events_url":"https://api.github.com/repos/mralexgray/ace/events","has_issues":false,"issues_url":"https://api.github.com/repos/mralexgray/ace/issues{/number}","labels_url":"https://api.github.com/repos/mralexgray/ace/labels{/name}","merges_url":"https://api.github.com/repos/mralexgray/ace/merges","mirror_url":null,"updated_at":"2013-10-26T12:34:49Z","visibility":"public","archive_url":"https://api.github.com/repos/mralexgray/ace/{archive_format}{/ref}","commits_url":"https://api.github.com/repos/mralexgray/ace/commits{/sha}","compare_url":"https://api.github.com/repos/mralexgray/ace/compare/{base}...{head}","description":"Ace (Ajax.org Cloud9 Editor)","forks_count":1,"is_template":false,"open_issues":0,"branches_url":"https://api.github.com/repos/mralexgray/ace/branches{/branch}","comments_url":"https://api.github.com/repos/mralexgray/ace/comments{/number}","contents_url":"https://api.github.com/repos/mralexgray/ace/contents/{+path}","git_refs_url":"https://api.github.com/repos/mralexgray/ace/git/refs{/sha}","git_tags_url":"https://api.github.com/repos/mralexgray/ace/git/tags{/sha}","has_projects":true,"releases_url":"https://api.github.com/repos/mralexgray/ace/releases{/id}","statuses_url":"https://api.github.com/repos/mralexgray/ace/statuses/{sha}","allow_forking":true,"assignees_url":"https://api.github.com/repos/mralexgray/ace/assignees{/user}","downloads_url":"https://api.github.com/repos/mralexgray/ace/downloads","has_downloads":true,"languages_url":"https://api.github.com/repos/mralexgray/ace/languages","default_branch":"master","milestones_url":"https://api.github.com/repos/mralexgray/ace/milestones{/number}","stargazers_url":"https://api.github.com/repos/mralexgray/ace/stargazers","watchers_count":0,"deployments_url":"https://api.github.com/repos/mralexgray/ace/deployments","git_commits_url":"https://api.github.com/repos/mralexgray/ace/git/commits{/sha}","subscribers_url":"https://api.github.com/repos/mralexgray/ace/subscribers","contributors_url":"https://api.github.com/repos/mralexgray/ace/contributors","issue_events_url":"https://api.github.com/repos/mralexgray/ace/issues/events{/number}","stargazers_count":0,"subscription_url":"https://api.github.com/repos/mralexgray/ace/subscription","collaborators_url":"https://api.github.com/repos/mralexgray/ace/collaborators{/collaborator}","issue_comment_url":"https://api.github.com/repos/mralexgray/ace/issues/comments{/number}","notifications_url":"https://api.github.com/repos/mralexgray/ace/notifications{?since,all,participating}","open_issues_count":0,"web_commit_signoff_required":false},{"id":10791045,"url":"https://api.github.com/repos/mralexgray/ACEView","fork":true,"name":"ACEView","size":1733,"forks":1,"owner":{"id":262517,"url":"https://api.github.com/users/mralexgray","type":"User","login":"mralexgray","node_id":"MDQ6VXNlcjI2MjUxNw==","html_url":"https://github.com/mralexgray","gists_url":"https://api.github.com/users/mralexgray/gists{/gist_id}","repos_url":"https://api.github.com/users/mralexgray/repos","avatar_url":"https://avatars.githubusercontent.com/u/262517?v=4","events_url":"https://api.github.com/users/mralexgray/events{/privacy}","site_admin":false,"gravatar_id":"","starred_url":"https://api.github.com/users/mralexgray/starred{/owner}{/repo}","followers_url":"https://api.github.com/users/mralexgray/followers","following_url":"https://api.github.com/users/mralexgray/following{/other_user}","organizations_url":"https://api.github.com/users/mralexgray/orgs","subscriptions_url":"https://api.github.com/users/mralexgray/subscriptions","received_events_url":"https://api.github.com/users/mralexgray/received_events"},"topics":[],"git_url":"git://github.com/mralexgray/ACEView.git","license":{"key":"other","url":null,"name":"Other","node_id":"MDc6TGljZW5zZTA=","spdx_id":"NOASSERTION"},"node_id":"MDEwOlJlcG9zaXRvcnkxMDc5MTA0NQ==","private":false,"ssh_url":"git@github.com:mralexgray/ACEView.git","svn_url":"https://github.com/mralexgray/ACEView","archived":false,"disabled":false,"has_wiki":true,"homepage":null,"html_url":"https://github.com/mralexgray/ACEView","keys_url":"https://api.github.com/repos/mralexgray/ACEView/keys{/key_id}","language":"Objective-C","tags_url":"https://api.github.com/repos/mralexgray/ACEView/tags","watchers":0,"blobs_url":"https://api.github.com/repos/mralexgray/ACEView/git/blobs{/sha}","clone_url":"https://github.com/mralexgray/ACEView.git","forks_url":"https://api.github.com/repos/mralexgray/ACEView/forks","full_name":"mralexgray/ACEView","has_pages":false,"hooks_url":"https://api.github.com/repos/mralexgray/ACEView/hooks","pulls_url":"https://api.github.com/repos/mralexgray/ACEView/pulls{/number}","pushed_at":"2014-05-09T01:36:23Z","teams_url":"https://api.github.com/repos/mralexgray/ACEView/teams","trees_url":"https://api.github.com/repos/mralexgray/ACEView/git/trees{/sha}","created_at":"2013-06-19T12:15:04Z","events_url":"https://api.github.com/repos/mralexgray/ACEView/events","has_issues":false,"issues_url":"https://api.github.com/repos/mralexgray/ACEView/issues{/number}","labels_url":"https://api.github.com/repos/mralexgray/ACEView/labels{/name}","merges_url":"https://api.github.com/repos/mralexgray/ACEView/merges","mirror_url":null,"updated_at":"2015-11-24T01:14:10Z","visibility":"public","archive_url":"https://api.github.com/repos/mralexgray/ACEView/{archive_format}{/ref}","commits_url":"https://api.github.com/repos/mralexgray/ACEView/commits{/sha}","compare_url":"https://api.github.com/repos/mralexgray/ACEView/compare/{base}...{head}","description":"Use the wonderful ACE editor in your Cocoa applications","forks_count":1,"is_template":false,"open_issues":0,"branches_url":"https://api.github.com/repos/mralexgray/ACEView/branches{/branch}","comments_url":"https://api.github.com/repos/mralexgray/ACEView/comments{/number}","contents_url":"https://api.github.com/repos/mralexgray/ACEView/contents/{+path}","git_refs_url":"https://api.github.com/repos/mralexgray/ACEView/git/refs{/sha}","git_tags_url":"https://api.github.com/repos/mralexgray/ACEView/git/tags{/sha}","has_projects":true,"releases_url":"https://api.github.com/repos/mralexgray/ACEView/releases{/id}","statuses_url":"https://api.github.com/repos/mralexgray/ACEView/statuses/{sha}","allow_forking":true,"assignees_url":"https://api.github.com/repos/mralexgray/ACEView/assignees{/user}","downloads_url":"https://api.github.com/repos/mralexgray/ACEView/downloads","has_downloads":true,"languages_url":"https://api.github.com/repos/mralexgray/ACEView/languages","default_branch":"master","milestones_url":"https://api.github.com/repos/mralexgray/ACEView/milestones{/number}","stargazers_url":"https://api.github.com/repos/mralexgray/ACEView/stargazers","watchers_count":0,"deployments_url":"https://api.github.com/repos/mralexgray/ACEView/deployments","git_commits_url":"https://api.github.com/repos/mralexgray/ACEView/git/commits{/sha}","subscribers_url":"https://api.github.com/repos/mralexgray/ACEView/subscribers","contributors_url":"https://api.github.com/repos/mralexgray/ACEView/contributors","issue_events_url":"https://api.github.com/repos/mralexgray/ACEView/issues/events{/number}","stargazers_count":0,"subscription_url":"https://api.github.com/repos/mralexgray/ACEView/subscription","collaborators_url":"https://api.github.com/repos/mralexgray/ACEView/collaborators{/collaborator}","issue_comment_url":"https://api.github.com/repos/mralexgray/ACEView/issues/comments{/number}","notifications_url":"https://api.github.com/repos/mralexgray/ACEView/notifications{?since,all,participating}","open_issues_count":0,"web_commit_signoff_required":false},{"id":13623648,"url":"https://api.github.com/repos/mralexgray/ActiveLog","fork":true,"name":"ActiveLog","size":60,"forks":0,"owner":{"id":262517,"url":"https://api.github.com/users/mralexgray","type":"User","login":"mralexgray","node_id":"MDQ6VXNlcjI2MjUxNw==","html_url":"https://github.com/mralexgray","gists_url":"https://api.github.com/users/mralexgray/gists{/gist_id}","repos_url":"https://api.github.com/users/mralexgray/repos","avatar_url":"https://avatars.githubusercontent.com/u/262517?v=4","events_url":"https://api.github.com/users/mralexgray/events{/privacy}","site_admin":false,"gravatar_id":"","starred_url":"https://api.github.com/users/mralexgray/starred{/owner}{/repo}","followers_url":"https://api.github.com/users/mralexgray/followers","following_url":"https://api.github.com/users/mralexgray/following{/other_user}","organizations_url":"https://api.github.com/users/mralexgray/orgs","subscriptions_url":"https://api.github.com/users/mralexgray/subscriptions","received_events_url":"https://api.github.com/users/mralexgray/received_events"},"topics":[],"git_url":"git://github.com/mralexgray/ActiveLog.git","license":null,"node_id":"MDEwOlJlcG9zaXRvcnkxMzYyMzY0OA==","private":false,"ssh_url":"git@github.com:mralexgray/ActiveLog.git","svn_url":"https://github.com/mralexgray/ActiveLog","archived":false,"disabled":false,"has_wiki":true,"homepage":"http://deepitpro.com/en/articles/ActiveLog/info/","html_url":"https://github.com/mralexgray/ActiveLog","keys_url":"https://api.github.com/repos/mralexgray/ActiveLog/keys{/key_id}","language":"Objective-C","tags_url":"https://api.github.com/repos/mralexgray/ActiveLog/tags","watchers":0,"blobs_url":"https://api.github.com/repos/mralexgray/ActiveLog/git/blobs{/sha}","clone_url":"https://github.com/mralexgray/ActiveLog.git","forks_url":"https://api.github.com/repos/mralexgray/ActiveLog/forks","full_name":"mralexgray/ActiveLog","has_pages":false,"hooks_url":"https://api.github.com/repos/mralexgray/ActiveLog/hooks","pulls_url":"https://api.github.com/repos/mralexgray/ActiveLog/pulls{/number}","pushed_at":"2011-07-03T06:28:59Z","teams_url":"https://api.github.com/repos/mralexgray/ActiveLog/teams","trees_url":"https://api.github.com/repos/mralexgray/ActiveLog/git/trees{/sha}","created_at":"2013-10-16T15:52:37Z","events_url":"https://api.github.com/repos/mralexgray/ActiveLog/events","has_issues":false,"issues_url":"https://api.github.com/repos/mralexgray/ActiveLog/issues{/number}","labels_url":"https://api.github.com/repos/mralexgray/ActiveLog/labels{/name}","merges_url":"https://api.github.com/repos/mralexgray/ActiveLog/merges","mirror_url":null,"updated_at":"2013-10-16T15:52:37Z","visibility":"public","archive_url":"https://api.github.com/repos/mralexgray/ActiveLog/{archive_format}{/ref}","commits_url":"https://api.github.com/repos/mralexgray/ActiveLog/commits{/sha}","compare_url":"https://api.github.com/repos/mralexgray/ActiveLog/compare/{base}...{head}","description":"Shut up all logs with active filter.","forks_count":0,"is_template":false,"open_issues":0,"branches_url":"https://api.github.com/repos/mralexgray/ActiveLog/branches{/branch}","comments_url":"https://api.github.com/repos/mralexgray/ActiveLog/comments{/number}","contents_url":"https://api.github.com/repos/mralexgray/ActiveLog/contents/{+path}","git_refs_url":"https://api.github.com/repos/mralexgray/ActiveLog/git/refs{/sha}","git_tags_url":"https://api.github.com/repos/mralexgray/ActiveLog/git/tags{/sha}","has_projects":true,"releases_url":"https://api.github.com/repos/mralexgray/ActiveLog/releases{/id}","statuses_url":"https://api.github.com/repos/mralexgray/ActiveLog/statuses/{sha}","allow_forking":true,"assignees_url":"https://api.github.com/repos/mralexgray/ActiveLog/assignees{/user}","downloads_url":"https://api.github.com/repos/mralexgray/ActiveLog/downloads","has_downloads":true,"languages_url":"https://api.github.com/repos/mralexgray/ActiveLog/languages","default_branch":"master","milestones_url":"https://api.github.com/repos/mralexgray/ActiveLog/milestones{/number}","stargazers_url":"https://api.github.com/repos/mralexgray/ActiveLog/stargazers","watchers_count":0,"deployments_url":"https://api.github.com/repos/mralexgray/ActiveLog/deployments","git_commits_url":"https://api.github.com/repos/mralexgray/ActiveLog/git/commits{/sha}","subscribers_url":"https://api.github.com/repos/mralexgray/ActiveLog/subscribers","contributors_url":"https://api.github.com/repos/mralexgray/ActiveLog/contributors","issue_events_url":"https://api.github.com/repos/mralexgray/ActiveLog/issues/events{/number}","stargazers_count":0,"subscription_url":"https://api.github.com/repos/mralexgray/ActiveLog/subscription","collaborators_url":"https://api.github.com/repos/mralexgray/ActiveLog/collaborators{/collaborator}","issue_comment_url":"https://api.github.com/repos/mralexgray/ActiveLog/issues/comments{/number}","notifications_url":"https://api.github.com/repos/mralexgray/ActiveLog/notifications{?since,all,participating}","open_issues_count":0,"web_commit_signoff_required":false},{"id":9716210,"url":"https://api.github.com/repos/mralexgray/adium","fork":false,"name":"adium","size":277719,"forks":37,"owner":{"id":262517,"url":"https://api.github.com/users/mralexgray","type":"User","login":"mralexgray","node_id":"MDQ6VXNlcjI2MjUxNw==","html_url":"https://github.com/mralexgray","gists_url":"https://api.github.com/users/mralexgray/gists{/gist_id}","repos_url":"https://api.github.com/users/mralexgray/repos","avatar_url":"https://avatars.githubusercontent.com/u/262517?v=4","events_url":"https://api.github.com/users/mralexgray/events{/privacy}","site_admin":false,"gravatar_id":"","starred_url":"https://api.github.com/users/mralexgray/starred{/owner}{/repo}","followers_url":"https://api.github.com/users/mralexgray/followers","following_url":"https://api.github.com/users/mralexgray/following{/other_user}","organizations_url":"https://api.github.com/users/mralexgray/orgs","subscriptions_url":"https://api.github.com/users/mralexgray/subscriptions","received_events_url":"https://api.github.com/users/mralexgray/received_events"},"topics":[],"git_url":"git://github.com/mralexgray/adium.git","license":{"key":"other","url":null,"name":"Other","node_id":"MDc6TGljZW5zZTA=","spdx_id":"NOASSERTION"},"node_id":"MDEwOlJlcG9zaXRvcnk5NzE2MjEw","private":false,"ssh_url":"git@github.com:mralexgray/adium.git","svn_url":"https://github.com/mralexgray/adium","archived":false,"disabled":false,"has_wiki":false,"homepage":null,"html_url":"https://github.com/mralexgray/adium","keys_url":"https://api.github.com/repos/mralexgray/adium/keys{/key_id}","language":"Objective-C","tags_url":"https://api.github.com/repos/mralexgray/adium/tags","watchers":0,"blobs_url":"https://api.github.com/repos/mralexgray/adium/git/blobs{/sha}","clone_url":"https://github.com/mralexgray/adium.git","forks_url":"https://api.github.com/repos/mralexgray/adium/forks","full_name":"mralexgray/adium","has_pages":false,"hooks_url":"https://api.github.com/repos/mralexgray/adium/hooks","pulls_url":"https://api.github.com/repos/mralexgray/adium/pulls{/number}","pushed_at":"2013-04-26T16:43:53Z","teams_url":"https://api.github.com/repos/mralexgray/adium/teams","trees_url":"https://api.github.com/repos/mralexgray/adium/git/trees{/sha}","created_at":"2013-04-27T14:59:33Z","events_url":"https://api.github.com/repos/mralexgray/adium/events","has_issues":false,"issues_url":"https://api.github.com/repos/mralexgray/adium/issues{/number}","labels_url":"https://api.github.com/repos/mralexgray/adium/labels{/name}","merges_url":"https://api.github.com/repos/mralexgray/adium/merges","mirror_url":null,"updated_at":"2019-12-11T06:51:45Z","visibility":"public","archive_url":"https://api.github.com/repos/mralexgray/adium/{archive_format}{/ref}","commits_url":"https://api.github.com/repos/mralexgray/adium/commits{/sha}","compare_url":"https://api.github.com/repos/mralexgray/adium/compare/{base}...{head}","description":"Official mirror of hg.adium.im","forks_count":37,"is_template":false,"open_issues":0,"branches_url":"https://api.github.com/repos/mralexgray/adium/branches{/branch}","comments_url":"https://api.github.com/repos/mralexgray/adium/comments{/number}","contents_url":"https://api.github.com/repos/mralexgray/adium/contents/{+path}","git_refs_url":"https://api.github.com/repos/mralexgray/adium/git/refs{/sha}","git_tags_url":"https://api.github.com/repos/mralexgray/adium/git/tags{/sha}","has_projects":true,"releases_url":"https://api.github.com/repos/mralexgray/adium/releases{/id}","statuses_url":"https://api.github.com/repos/mralexgray/adium/statuses/{sha}","allow_forking":true,"assignees_url":"https://api.github.com/repos/mralexgray/adium/assignees{/user}","downloads_url":"https://api.github.com/repos/mralexgray/adium/downloads","has_downloads":true,"languages_url":"https://api.github.com/repos/mralexgray/adium/languages","default_branch":"master","milestones_url":"https://api.github.com/repos/mralexgray/adium/milestones{/number}","stargazers_url":"https://api.github.com/repos/mralexgray/adium/stargazers","watchers_count":0,"deployments_url":"https://api.github.com/repos/mralexgray/adium/deployments","git_commits_url":"https://api.github.com/repos/mralexgray/adium/git/commits{/sha}","subscribers_url":"https://api.github.com/repos/mralexgray/adium/subscribers","contributors_url":"https://api.github.com/repos/mralexgray/adium/contributors","issue_events_url":"https://api.github.com/repos/mralexgray/adium/issues/events{/number}","stargazers_count":0,"subscription_url":"https://api.github.com/repos/mralexgray/adium/subscription","collaborators_url":"https://api.github.com/repos/mralexgray/adium/collaborators{/collaborator}","issue_comment_url":"https://api.github.com/repos/mralexgray/adium/issues/comments{/number}","notifications_url":"https://api.github.com/repos/mralexgray/adium/notifications{?since,all,participating}","open_issues_count":0,"web_commit_signoff_required":false},{"id":12752329,"url":"https://api.github.com/repos/mralexgray/ADLivelyTableView","fork":true,"name":"ADLivelyTableView","size":73,"forks":0,"owner":{"id":262517,"url":"https://api.github.com/users/mralexgray","type":"User","login":"mralexgray","node_id":"MDQ6VXNlcjI2MjUxNw==","html_url":"https://github.com/mralexgray","gists_url":"https://api.github.com/users/mralexgray/gists{/gist_id}","repos_url":"https://api.github.com/users/mralexgray/repos","avatar_url":"https://avatars.githubusercontent.com/u/262517?v=4","events_url":"https://api.github.com/users/mralexgray/events{/privacy}","site_admin":false,"gravatar_id":"","starred_url":"https://api.github.com/users/mralexgray/starred{/owner}{/repo}","followers_url":"https://api.github.com/users/mralexgray/followers","following_url":"https://api.github.com/users/mralexgray/following{/other_user}","organizations_url":"https://api.github.com/users/mralexgray/orgs","subscriptions_url":"https://api.github.com/users/mralexgray/subscriptions","received_events_url":"https://api.github.com/users/mralexgray/received_events"},"topics":[],"git_url":"git://github.com/mralexgray/ADLivelyTableView.git","license":{"key":"other","url":null,"name":"Other","node_id":"MDc6TGljZW5zZTA=","spdx_id":"NOASSERTION"},"node_id":"MDEwOlJlcG9zaXRvcnkxMjc1MjMyOQ==","private":false,"ssh_url":"git@github.com:mralexgray/ADLivelyTableView.git","svn_url":"https://github.com/mralexgray/ADLivelyTableView","archived":false,"disabled":false,"has_wiki":true,"homepage":"http://applidium.com/en/news/lively_uitableview/","html_url":"https://github.com/mralexgray/ADLivelyTableView","keys_url":"https://api.github.com/repos/mralexgray/ADLivelyTableView/keys{/key_id}","language":"Objective-C","tags_url":"https://api.github.com/repos/mralexgray/ADLivelyTableView/tags","watchers":0,"blobs_url":"https://api.github.com/repos/mralexgray/ADLivelyTableView/git/blobs{/sha}","clone_url":"https://github.com/mralexgray/ADLivelyTableView.git","forks_url":"https://api.github.com/repos/mralexgray/ADLivelyTableView/forks","full_name":"mralexgray/ADLivelyTableView","has_pages":false,"hooks_url":"https://api.github.com/repos/mralexgray/ADLivelyTableView/hooks","pulls_url":"https://api.github.com/repos/mralexgray/ADLivelyTableView/pulls{/number}","pushed_at":"2012-05-10T10:40:15Z","teams_url":"https://api.github.com/repos/mralexgray/ADLivelyTableView/teams","trees_url":"https://api.github.com/repos/mralexgray/ADLivelyTableView/git/trees{/sha}","created_at":"2013-09-11T09:18:01Z","events_url":"https://api.github.com/repos/mralexgray/ADLivelyTableView/events","has_issues":false,"issues_url":"https://api.github.com/repos/mralexgray/ADLivelyTableView/issues{/number}","labels_url":"https://api.github.com/repos/mralexgray/ADLivelyTableView/labels{/name}","merges_url":"https://api.github.com/repos/mralexgray/ADLivelyTableView/merges","mirror_url":null,"updated_at":"2013-09-11T09:18:03Z","visibility":"public","archive_url":"https://api.github.com/repos/mralexgray/ADLivelyTableView/{archive_format}{/ref}","commits_url":"https://api.github.com/repos/mralexgray/ADLivelyTableView/commits{/sha}","compare_url":"https://api.github.com/repos/mralexgray/ADLivelyTableView/compare/{base}...{head}","description":"Lively UITableView","forks_count":0,"is_template":false,"open_issues":0,"branches_url":"https://api.github.com/repos/mralexgray/ADLivelyTableView/branches{/branch}","comments_url":"https://api.github.com/repos/mralexgray/ADLivelyTableView/comments{/number}","contents_url":"https://api.github.com/repos/mralexgray/ADLivelyTableView/contents/{+path}","git_refs_url":"https://api.github.com/repos/mralexgray/ADLivelyTableView/git/refs{/sha}","git_tags_url":"https://api.github.com/repos/mralexgray/ADLivelyTableView/git/tags{/sha}","has_projects":true,"releases_url":"https://api.github.com/repos/mralexgray/ADLivelyTableView/releases{/id}","statuses_url":"https://api.github.com/repos/mralexgray/ADLivelyTableView/statuses/{sha}","allow_forking":true,"assignees_url":"https://api.github.com/repos/mralexgray/ADLivelyTableView/assignees{/user}","downloads_url":"https://api.github.com/repos/mralexgray/ADLivelyTableView/downloads","has_downloads":true,"languages_url":"https://api.github.com/repos/mralexgray/ADLivelyTableView/languages","default_branch":"master","milestones_url":"https://api.github.com/repos/mralexgray/ADLivelyTableView/milestones{/number}","stargazers_url":"https://api.github.com/repos/mralexgray/ADLivelyTableView/stargazers","watchers_count":0,"deployments_url":"https://api.github.com/repos/mralexgray/ADLivelyTableView/deployments","git_commits_url":"https://api.github.com/repos/mralexgray/ADLivelyTableView/git/commits{/sha}","subscribers_url":"https://api.github.com/repos/mralexgray/ADLivelyTableView/subscribers","contributors_url":"https://api.github.com/repos/mralexgray/ADLivelyTableView/contributors","issue_events_url":"https://api.github.com/repos/mralexgray/ADLivelyTableView/issues/events{/number}","stargazers_count":0,"subscription_url":"https://api.github.com/repos/mralexgray/ADLivelyTableView/subscription","collaborators_url":"https://api.github.com/repos/mralexgray/ADLivelyTableView/collaborators{/collaborator}","issue_comment_url":"https://api.github.com/repos/mralexgray/ADLivelyTableView/issues/comments{/number}","notifications_url":"https://api.github.com/repos/mralexgray/ADLivelyTableView/notifications{?since,all,participating}","open_issues_count":0,"web_commit_signoff_required":false},{"id":5697379,"url":"https://api.github.com/repos/mralexgray/AFIncrementalStore","fork":true,"name":"AFIncrementalStore","size":139,"forks":0,"owner":{"id":262517,"url":"https://api.github.com/users/mralexgray","type":"User","login":"mralexgray","node_id":"MDQ6VXNlcjI2MjUxNw==","html_url":"https://github.com/mralexgray","gists_url":"https://api.github.com/users/mralexgray/gists{/gist_id}","repos_url":"https://api.github.com/users/mralexgray/repos","avatar_url":"https://avatars.githubusercontent.com/u/262517?v=4","events_url":"https://api.github.com/users/mralexgray/events{/privacy}","site_admin":false,"gravatar_id":"","starred_url":"https://api.github.com/users/mralexgray/starred{/owner}{/repo}","followers_url":"https://api.github.com/users/mralexgray/followers","following_url":"https://api.github.com/users/mralexgray/following{/other_user}","organizations_url":"https://api.github.com/users/mralexgray/orgs","subscriptions_url":"https://api.github.com/users/mralexgray/subscriptions","received_events_url":"https://api.github.com/users/mralexgray/received_events"},"topics":[],"git_url":"git://github.com/mralexgray/AFIncrementalStore.git","license":{"key":"mit","url":"https://api.github.com/licenses/mit","name":"MIT License","node_id":"MDc6TGljZW5zZTEz","spdx_id":"MIT"},"node_id":"MDEwOlJlcG9zaXRvcnk1Njk3Mzc5","private":false,"ssh_url":"git@github.com:mralexgray/AFIncrementalStore.git","svn_url":"https://github.com/mralexgray/AFIncrementalStore","archived":false,"disabled":false,"has_wiki":true,"homepage":null,"html_url":"https://github.com/mralexgray/AFIncrementalStore","keys_url":"https://api.github.com/repos/mralexgray/AFIncrementalStore/keys{/key_id}","language":"Objective-C","tags_url":"https://api.github.com/repos/mralexgray/AFIncrementalStore/tags","watchers":0,"blobs_url":"https://api.github.com/repos/mralexgray/AFIncrementalStore/git/blobs{/sha}","clone_url":"https://github.com/mralexgray/AFIncrementalStore.git","forks_url":"https://api.github.com/repos/mralexgray/AFIncrementalStore/forks","full_name":"mralexgray/AFIncrementalStore","has_pages":false,"hooks_url":"https://api.github.com/repos/mralexgray/AFIncrementalStore/hooks","pulls_url":"https://api.github.com/repos/mralexgray/AFIncrementalStore/pulls{/number}","pushed_at":"2012-09-01T22:46:25Z","teams_url":"https://api.github.com/repos/mralexgray/AFIncrementalStore/teams","trees_url":"https://api.github.com/repos/mralexgray/AFIncrementalStore/git/trees{/sha}","created_at":"2012-09-06T04:20:33Z","events_url":"https://api.github.com/repos/mralexgray/AFIncrementalStore/events","has_issues":false,"issues_url":"https://api.github.com/repos/mralexgray/AFIncrementalStore/issues{/number}","labels_url":"https://api.github.com/repos/mralexgray/AFIncrementalStore/labels{/name}","merges_url":"https://api.github.com/repos/mralexgray/AFIncrementalStore/merges","mirror_url":null,"updated_at":"2013-01-12T03:15:29Z","visibility":"public","archive_url":"https://api.github.com/repos/mralexgray/AFIncrementalStore/{archive_format}{/ref}","commits_url":"https://api.github.com/repos/mralexgray/AFIncrementalStore/commits{/sha}","compare_url":"https://api.github.com/repos/mralexgray/AFIncrementalStore/compare/{base}...{head}","description":"Core Data Persistence with AFNetworking, Done Right","forks_count":0,"is_template":false,"open_issues":0,"branches_url":"https://api.github.com/repos/mralexgray/AFIncrementalStore/branches{/branch}","comments_url":"https://api.github.com/repos/mralexgray/AFIncrementalStore/comments{/number}","contents_url":"https://api.github.com/repos/mralexgray/AFIncrementalStore/contents/{+path}","git_refs_url":"https://api.github.com/repos/mralexgray/AFIncrementalStore/git/refs{/sha}","git_tags_url":"https://api.github.com/repos/mralexgray/AFIncrementalStore/git/tags{/sha}","has_projects":true,"releases_url":"https://api.github.com/repos/mralexgray/AFIncrementalStore/releases{/id}","statuses_url":"https://api.github.com/repos/mralexgray/AFIncrementalStore/statuses/{sha}","allow_forking":true,"assignees_url":"https://api.github.com/repos/mralexgray/AFIncrementalStore/assignees{/user}","downloads_url":"https://api.github.com/repos/mralexgray/AFIncrementalStore/downloads","has_downloads":true,"languages_url":"https://api.github.com/repos/mralexgray/AFIncrementalStore/languages","default_branch":"master","milestones_url":"https://api.github.com/repos/mralexgray/AFIncrementalStore/milestones{/number}","stargazers_url":"https://api.github.com/repos/mralexgray/AFIncrementalStore/stargazers","watchers_count":0,"deployments_url":"https://api.github.com/repos/mralexgray/AFIncrementalStore/deployments","git_commits_url":"https://api.github.com/repos/mralexgray/AFIncrementalStore/git/commits{/sha}","subscribers_url":"https://api.github.com/repos/mralexgray/AFIncrementalStore/subscribers","contributors_url":"https://api.github.com/repos/mralexgray/AFIncrementalStore/contributors","issue_events_url":"https://api.github.com/repos/mralexgray/AFIncrementalStore/issues/events{/number}","stargazers_count":0,"subscription_url":"https://api.github.com/repos/mralexgray/AFIncrementalStore/subscription","collaborators_url":"https://api.github.com/repos/mralexgray/AFIncrementalStore/collaborators{/collaborator}","issue_comment_url":"https://api.github.com/repos/mralexgray/AFIncrementalStore/issues/comments{/number}","notifications_url":"https://api.github.com/repos/mralexgray/AFIncrementalStore/notifications{?since,all,participating}","open_issues_count":0,"web_commit_signoff_required":false},{"id":6969621,"url":"https://api.github.com/repos/mralexgray/AFNetworking","fork":true,"name":"AFNetworking","size":4341,"forks":0,"owner":{"id":262517,"url":"https://api.github.com/users/mralexgray","type":"User","login":"mralexgray","node_id":"MDQ6VXNlcjI2MjUxNw==","html_url":"https://github.com/mralexgray","gists_url":"https://api.github.com/users/mralexgray/gists{/gist_id}","repos_url":"https://api.github.com/users/mralexgray/repos","avatar_url":"https://avatars.githubusercontent.com/u/262517?v=4","events_url":"https://api.github.com/users/mralexgray/events{/privacy}","site_admin":false,"gravatar_id":"","starred_url":"https://api.github.com/users/mralexgray/starred{/owner}{/repo}","followers_url":"https://api.github.com/users/mralexgray/followers","following_url":"https://api.github.com/users/mralexgray/following{/other_user}","organizations_url":"https://api.github.com/users/mralexgray/orgs","subscriptions_url":"https://api.github.com/users/mralexgray/subscriptions","received_events_url":"https://api.github.com/users/mralexgray/received_events"},"topics":[],"git_url":"git://github.com/mralexgray/AFNetworking.git","license":{"key":"mit","url":"https://api.github.com/licenses/mit","name":"MIT License","node_id":"MDc6TGljZW5zZTEz","spdx_id":"MIT"},"node_id":"MDEwOlJlcG9zaXRvcnk2OTY5NjIx","private":false,"ssh_url":"git@github.com:mralexgray/AFNetworking.git","svn_url":"https://github.com/mralexgray/AFNetworking","archived":false,"disabled":false,"has_wiki":true,"homepage":"http://afnetworking.com","html_url":"https://github.com/mralexgray/AFNetworking","keys_url":"https://api.github.com/repos/mralexgray/AFNetworking/keys{/key_id}","language":"Objective-C","tags_url":"https://api.github.com/repos/mralexgray/AFNetworking/tags","watchers":2,"blobs_url":"https://api.github.com/repos/mralexgray/AFNetworking/git/blobs{/sha}","clone_url":"https://github.com/mralexgray/AFNetworking.git","forks_url":"https://api.github.com/repos/mralexgray/AFNetworking/forks","full_name":"mralexgray/AFNetworking","has_pages":false,"hooks_url":"https://api.github.com/repos/mralexgray/AFNetworking/hooks","pulls_url":"https://api.github.com/repos/mralexgray/AFNetworking/pulls{/number}","pushed_at":"2014-01-24T07:14:32Z","teams_url":"https://api.github.com/repos/mralexgray/AFNetworking/teams","trees_url":"https://api.github.com/repos/mralexgray/AFNetworking/git/trees{/sha}","created_at":"2012-12-02T17:00:04Z","events_url":"https://api.github.com/repos/mralexgray/AFNetworking/events","has_issues":false,"issues_url":"https://api.github.com/repos/mralexgray/AFNetworking/issues{/number}","labels_url":"https://api.github.com/repos/mralexgray/AFNetworking/labels{/name}","merges_url":"https://api.github.com/repos/mralexgray/AFNetworking/merges","mirror_url":null,"updated_at":"2014-01-24T07:14:33Z","visibility":"public","archive_url":"https://api.github.com/repos/mralexgray/AFNetworking/{archive_format}{/ref}","commits_url":"https://api.github.com/repos/mralexgray/AFNetworking/commits{/sha}","compare_url":"https://api.github.com/repos/mralexgray/AFNetworking/compare/{base}...{head}","description":"A delightful iOS and OS X networking framework","forks_count":0,"is_template":false,"open_issues":0,"branches_url":"https://api.github.com/repos/mralexgray/AFNetworking/branches{/branch}","comments_url":"https://api.github.com/repos/mralexgray/AFNetworking/comments{/number}","contents_url":"https://api.github.com/repos/mralexgray/AFNetworking/contents/{+path}","git_refs_url":"https://api.github.com/repos/mralexgray/AFNetworking/git/refs{/sha}","git_tags_url":"https://api.github.com/repos/mralexgray/AFNetworking/git/tags{/sha}","has_projects":true,"releases_url":"https://api.github.com/repos/mralexgray/AFNetworking/releases{/id}","statuses_url":"https://api.github.com/repos/mralexgray/AFNetworking/statuses/{sha}","allow_forking":true,"assignees_url":"https://api.github.com/repos/mralexgray/AFNetworking/assignees{/user}","downloads_url":"https://api.github.com/repos/mralexgray/AFNetworking/downloads","has_downloads":true,"languages_url":"https://api.github.com/repos/mralexgray/AFNetworking/languages","default_branch":"master","milestones_url":"https://api.github.com/repos/mralexgray/AFNetworking/milestones{/number}","stargazers_url":"https://api.github.com/repos/mralexgray/AFNetworking/stargazers","watchers_count":2,"deployments_url":"https://api.github.com/repos/mralexgray/AFNetworking/deployments","git_commits_url":"https://api.github.com/repos/mralexgray/AFNetworking/git/commits{/sha}","subscribers_url":"https://api.github.com/repos/mralexgray/AFNetworking/subscribers","contributors_url":"https://api.github.com/repos/mralexgray/AFNetworking/contributors","issue_events_url":"https://api.github.com/repos/mralexgray/AFNetworking/issues/events{/number}","stargazers_count":2,"subscription_url":"https://api.github.com/repos/mralexgray/AFNetworking/subscription","collaborators_url":"https://api.github.com/repos/mralexgray/AFNetworking/collaborators{/collaborator}","issue_comment_url":"https://api.github.com/repos/mralexgray/AFNetworking/issues/comments{/number}","notifications_url":"https://api.github.com/repos/mralexgray/AFNetworking/notifications{?since,all,participating}","open_issues_count":0,"web_commit_signoff_required":false},{"id":9485541,"url":"https://api.github.com/repos/mralexgray/AGNSSplitView","fork":true,"name":"AGNSSplitView","size":68,"forks":0,"owner":{"id":262517,"url":"https://api.github.com/users/mralexgray","type":"User","login":"mralexgray","node_id":"MDQ6VXNlcjI2MjUxNw==","html_url":"https://github.com/mralexgray","gists_url":"https://api.github.com/users/mralexgray/gists{/gist_id}","repos_url":"https://api.github.com/users/mralexgray/repos","avatar_url":"https://avatars.githubusercontent.com/u/262517?v=4","events_url":"https://api.github.com/users/mralexgray/events{/privacy}","site_admin":false,"gravatar_id":"","starred_url":"https://api.github.com/users/mralexgray/starred{/owner}{/repo}","followers_url":"https://api.github.com/users/mralexgray/followers","following_url":"https://api.github.com/users/mralexgray/following{/other_user}","organizations_url":"https://api.github.com/users/mralexgray/orgs","subscriptions_url":"https://api.github.com/users/mralexgray/subscriptions","received_events_url":"https://api.github.com/users/mralexgray/received_events"},"topics":[],"git_url":"git://github.com/mralexgray/AGNSSplitView.git","license":null,"node_id":"MDEwOlJlcG9zaXRvcnk5NDg1NTQx","private":false,"ssh_url":"git@github.com:mralexgray/AGNSSplitView.git","svn_url":"https://github.com/mralexgray/AGNSSplitView","archived":false,"disabled":false,"has_wiki":true,"homepage":null,"html_url":"https://github.com/mralexgray/AGNSSplitView","keys_url":"https://api.github.com/repos/mralexgray/AGNSSplitView/keys{/key_id}","language":"Objective-C","tags_url":"https://api.github.com/repos/mralexgray/AGNSSplitView/tags","watchers":0,"blobs_url":"https://api.github.com/repos/mralexgray/AGNSSplitView/git/blobs{/sha}","clone_url":"https://github.com/mralexgray/AGNSSplitView.git","forks_url":"https://api.github.com/repos/mralexgray/AGNSSplitView/forks","full_name":"mralexgray/AGNSSplitView","has_pages":false,"hooks_url":"https://api.github.com/repos/mralexgray/AGNSSplitView/hooks","pulls_url":"https://api.github.com/repos/mralexgray/AGNSSplitView/pulls{/number}","pushed_at":"2013-02-26T00:32:32Z","teams_url":"https://api.github.com/repos/mralexgray/AGNSSplitView/teams","trees_url":"https://api.github.com/repos/mralexgray/AGNSSplitView/git/trees{/sha}","created_at":"2013-04-17T00:10:13Z","events_url":"https://api.github.com/repos/mralexgray/AGNSSplitView/events","has_issues":false,"issues_url":"https://api.github.com/repos/mralexgray/AGNSSplitView/issues{/number}","labels_url":"https://api.github.com/repos/mralexgray/AGNSSplitView/labels{/name}","merges_url":"https://api.github.com/repos/mralexgray/AGNSSplitView/merges","mirror_url":null,"updated_at":"2013-04-17T00:10:13Z","visibility":"public","archive_url":"https://api.github.com/repos/mralexgray/AGNSSplitView/{archive_format}{/ref}","commits_url":"https://api.github.com/repos/mralexgray/AGNSSplitView/commits{/sha}","compare_url":"https://api.github.com/repos/mralexgray/AGNSSplitView/compare/{base}...{head}","description":"Simple NSSplitView additions.","forks_count":0,"is_template":false,"open_issues":0,"branches_url":"https://api.github.com/repos/mralexgray/AGNSSplitView/branches{/branch}","comments_url":"https://api.github.com/repos/mralexgray/AGNSSplitView/comments{/number}","contents_url":"https://api.github.com/repos/mralexgray/AGNSSplitView/contents/{+path}","git_refs_url":"https://api.github.com/repos/mralexgray/AGNSSplitView/git/refs{/sha}","git_tags_url":"https://api.github.com/repos/mralexgray/AGNSSplitView/git/tags{/sha}","has_projects":true,"releases_url":"https://api.github.com/repos/mralexgray/AGNSSplitView/releases{/id}","statuses_url":"https://api.github.com/repos/mralexgray/AGNSSplitView/statuses/{sha}","allow_forking":true,"assignees_url":"https://api.github.com/repos/mralexgray/AGNSSplitView/assignees{/user}","downloads_url":"https://api.github.com/repos/mralexgray/AGNSSplitView/downloads","has_downloads":true,"languages_url":"https://api.github.com/repos/mralexgray/AGNSSplitView/languages","default_branch":"master","milestones_url":"https://api.github.com/repos/mralexgray/AGNSSplitView/milestones{/number}","stargazers_url":"https://api.github.com/repos/mralexgray/AGNSSplitView/stargazers","watchers_count":0,"deployments_url":"https://api.github.com/repos/mralexgray/AGNSSplitView/deployments","git_commits_url":"https://api.github.com/repos/mralexgray/AGNSSplitView/git/commits{/sha}","subscribers_url":"https://api.github.com/repos/mralexgray/AGNSSplitView/subscribers","contributors_url":"https://api.github.com/repos/mralexgray/AGNSSplitView/contributors","issue_events_url":"https://api.github.com/repos/mralexgray/AGNSSplitView/issues/events{/number}","stargazers_count":0,"subscription_url":"https://api.github.com/repos/mralexgray/AGNSSplitView/subscription","collaborators_url":"https://api.github.com/repos/mralexgray/AGNSSplitView/collaborators{/collaborator}","issue_comment_url":"https://api.github.com/repos/mralexgray/AGNSSplitView/issues/comments{/number}","notifications_url":"https://api.github.com/repos/mralexgray/AGNSSplitView/notifications{?since,all,participating}","open_issues_count":0,"web_commit_signoff_required":false},{"id":12767784,"url":"https://api.github.com/repos/mralexgray/AGScopeBar","fork":true,"name":"AGScopeBar","size":64,"forks":0,"owner":{"id":262517,"url":"https://api.github.com/users/mralexgray","type":"User","login":"mralexgray","node_id":"MDQ6VXNlcjI2MjUxNw==","html_url":"https://github.com/mralexgray","gists_url":"https://api.github.com/users/mralexgray/gists{/gist_id}","repos_url":"https://api.github.com/users/mralexgray/repos","avatar_url":"https://avatars.githubusercontent.com/u/262517?v=4","events_url":"https://api.github.com/users/mralexgray/events{/privacy}","site_admin":false,"gravatar_id":"","starred_url":"https://api.github.com/users/mralexgray/starred{/owner}{/repo}","followers_url":"https://api.github.com/users/mralexgray/followers","following_url":"https://api.github.com/users/mralexgray/following{/other_user}","organizations_url":"https://api.github.com/users/mralexgray/orgs","subscriptions_url":"https://api.github.com/users/mralexgray/subscriptions","received_events_url":"https://api.github.com/users/mralexgray/received_events"},"topics":[],"git_url":"git://github.com/mralexgray/AGScopeBar.git","license":null,"node_id":"MDEwOlJlcG9zaXRvcnkxMjc2Nzc4NA==","private":false,"ssh_url":"git@github.com:mralexgray/AGScopeBar.git","svn_url":"https://github.com/mralexgray/AGScopeBar","archived":false,"disabled":false,"has_wiki":true,"homepage":null,"html_url":"https://github.com/mralexgray/AGScopeBar","keys_url":"https://api.github.com/repos/mralexgray/AGScopeBar/keys{/key_id}","language":"Objective-C","tags_url":"https://api.github.com/repos/mralexgray/AGScopeBar/tags","watchers":0,"blobs_url":"https://api.github.com/repos/mralexgray/AGScopeBar/git/blobs{/sha}","clone_url":"https://github.com/mralexgray/AGScopeBar.git","forks_url":"https://api.github.com/repos/mralexgray/AGScopeBar/forks","full_name":"mralexgray/AGScopeBar","has_pages":false,"hooks_url":"https://api.github.com/repos/mralexgray/AGScopeBar/hooks","pulls_url":"https://api.github.com/repos/mralexgray/AGScopeBar/pulls{/number}","pushed_at":"2013-05-07T03:35:29Z","teams_url":"https://api.github.com/repos/mralexgray/AGScopeBar/teams","trees_url":"https://api.github.com/repos/mralexgray/AGScopeBar/git/trees{/sha}","created_at":"2013-09-11T21:06:54Z","events_url":"https://api.github.com/repos/mralexgray/AGScopeBar/events","has_issues":false,"issues_url":"https://api.github.com/repos/mralexgray/AGScopeBar/issues{/number}","labels_url":"https://api.github.com/repos/mralexgray/AGScopeBar/labels{/name}","merges_url":"https://api.github.com/repos/mralexgray/AGScopeBar/merges","mirror_url":null,"updated_at":"2013-09-11T21:06:54Z","visibility":"public","archive_url":"https://api.github.com/repos/mralexgray/AGScopeBar/{archive_format}{/ref}","commits_url":"https://api.github.com/repos/mralexgray/AGScopeBar/commits{/sha}","compare_url":"https://api.github.com/repos/mralexgray/AGScopeBar/compare/{base}...{head}","description":"Custom scope bar implementation for Cocoa","forks_count":0,"is_template":false,"open_issues":0,"branches_url":"https://api.github.com/repos/mralexgray/AGScopeBar/branches{/branch}","comments_url":"https://api.github.com/repos/mralexgray/AGScopeBar/comments{/number}","contents_url":"https://api.github.com/repos/mralexgray/AGScopeBar/contents/{+path}","git_refs_url":"https://api.github.com/repos/mralexgray/AGScopeBar/git/refs{/sha}","git_tags_url":"https://api.github.com/repos/mralexgray/AGScopeBar/git/tags{/sha}","has_projects":true,"releases_url":"https://api.github.com/repos/mralexgray/AGScopeBar/releases{/id}","statuses_url":"https://api.github.com/repos/mralexgray/AGScopeBar/statuses/{sha}","allow_forking":true,"assignees_url":"https://api.github.com/repos/mralexgray/AGScopeBar/assignees{/user}","downloads_url":"https://api.github.com/repos/mralexgray/AGScopeBar/downloads","has_downloads":true,"languages_url":"https://api.github.com/repos/mralexgray/AGScopeBar/languages","default_branch":"master","milestones_url":"https://api.github.com/repos/mralexgray/AGScopeBar/milestones{/number}","stargazers_url":"https://api.github.com/repos/mralexgray/AGScopeBar/stargazers","watchers_count":0,"deployments_url":"https://api.github.com/repos/mralexgray/AGScopeBar/deployments","git_commits_url":"https://api.github.com/repos/mralexgray/AGScopeBar/git/commits{/sha}","subscribers_url":"https://api.github.com/repos/mralexgray/AGScopeBar/subscribers","contributors_url":"https://api.github.com/repos/mralexgray/AGScopeBar/contributors","issue_events_url":"https://api.github.com/repos/mralexgray/AGScopeBar/issues/events{/number}","stargazers_count":0,"subscription_url":"https://api.github.com/repos/mralexgray/AGScopeBar/subscription","collaborators_url":"https://api.github.com/repos/mralexgray/AGScopeBar/collaborators{/collaborator}","issue_comment_url":"https://api.github.com/repos/mralexgray/AGScopeBar/issues/comments{/number}","notifications_url":"https://api.github.com/repos/mralexgray/AGScopeBar/notifications{?since,all,participating}","open_issues_count":0,"web_commit_signoff_required":false},{"id":31829499,"url":"https://api.github.com/repos/mralexgray/agvtool-xcode-plugin","fork":true,"name":"agvtool-xcode-plugin","size":102,"forks":0,"owner":{"id":262517,"url":"https://api.github.com/users/mralexgray","type":"User","login":"mralexgray","node_id":"MDQ6VXNlcjI2MjUxNw==","html_url":"https://github.com/mralexgray","gists_url":"https://api.github.com/users/mralexgray/gists{/gist_id}","repos_url":"https://api.github.com/users/mralexgray/repos","avatar_url":"https://avatars.githubusercontent.com/u/262517?v=4","events_url":"https://api.github.com/users/mralexgray/events{/privacy}","site_admin":false,"gravatar_id":"","starred_url":"https://api.github.com/users/mralexgray/starred{/owner}{/repo}","followers_url":"https://api.github.com/users/mralexgray/followers","following_url":"https://api.github.com/users/mralexgray/following{/other_user}","organizations_url":"https://api.github.com/users/mralexgray/orgs","subscriptions_url":"https://api.github.com/users/mralexgray/subscriptions","received_events_url":"https://api.github.com/users/mralexgray/received_events"},"topics":[],"git_url":"git://github.com/mralexgray/agvtool-xcode-plugin.git","license":null,"node_id":"MDEwOlJlcG9zaXRvcnkzMTgyOTQ5OQ==","private":false,"ssh_url":"git@github.com:mralexgray/agvtool-xcode-plugin.git","svn_url":"https://github.com/mralexgray/agvtool-xcode-plugin","archived":false,"disabled":false,"has_wiki":true,"homepage":null,"html_url":"https://github.com/mralexgray/agvtool-xcode-plugin","keys_url":"https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/keys{/key_id}","language":"Objective-C","tags_url":"https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/tags","watchers":0,"blobs_url":"https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/git/blobs{/sha}","clone_url":"https://github.com/mralexgray/agvtool-xcode-plugin.git","forks_url":"https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/forks","full_name":"mralexgray/agvtool-xcode-plugin","has_pages":false,"hooks_url":"https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/hooks","pulls_url":"https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/pulls{/number}","pushed_at":"2015-03-08T00:04:31Z","teams_url":"https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/teams","trees_url":"https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/git/trees{/sha}","created_at":"2015-03-07T22:15:38Z","events_url":"https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/events","has_issues":false,"issues_url":"https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/issues{/number}","labels_url":"https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/labels{/name}","merges_url":"https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/merges","mirror_url":null,"updated_at":"2015-03-07T22:15:41Z","visibility":"public","archive_url":"https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/{archive_format}{/ref}","commits_url":"https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/commits{/sha}","compare_url":"https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/compare/{base}...{head}","description":"this is a plugin wrapper for agvtool for xcode.","forks_count":0,"is_template":false,"open_issues":0,"branches_url":"https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/branches{/branch}","comments_url":"https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/comments{/number}","contents_url":"https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/contents/{+path}","git_refs_url":"https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/git/refs{/sha}","git_tags_url":"https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/git/tags{/sha}","has_projects":true,"releases_url":"https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/releases{/id}","statuses_url":"https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/statuses/{sha}","allow_forking":true,"assignees_url":"https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/assignees{/user}","downloads_url":"https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/downloads","has_downloads":true,"languages_url":"https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/languages","default_branch":"master","milestones_url":"https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/milestones{/number}","stargazers_url":"https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/stargazers","watchers_count":0,"deployments_url":"https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/deployments","git_commits_url":"https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/git/commits{/sha}","subscribers_url":"https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/subscribers","contributors_url":"https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/contributors","issue_events_url":"https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/issues/events{/number}","stargazers_count":0,"subscription_url":"https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/subscription","collaborators_url":"https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/collaborators{/collaborator}","issue_comment_url":"https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/issues/comments{/number}","notifications_url":"https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/notifications{?since,all,participating}","open_issues_count":0,"web_commit_signoff_required":false},{"id":9227846,"url":"https://api.github.com/repos/mralexgray/AHContentBrowser","fork":true,"name":"AHContentBrowser","size":223,"forks":0,"owner":{"id":262517,"url":"https://api.github.com/users/mralexgray","type":"User","login":"mralexgray","node_id":"MDQ6VXNlcjI2MjUxNw==","html_url":"https://github.com/mralexgray","gists_url":"https://api.github.com/users/mralexgray/gists{/gist_id}","repos_url":"https://api.github.com/users/mralexgray/repos","avatar_url":"https://avatars.githubusercontent.com/u/262517?v=4","events_url":"https://api.github.com/users/mralexgray/events{/privacy}","site_admin":false,"gravatar_id":"","starred_url":"https://api.github.com/users/mralexgray/starred{/owner}{/repo}","followers_url":"https://api.github.com/users/mralexgray/followers","following_url":"https://api.github.com/users/mralexgray/following{/other_user}","organizations_url":"https://api.github.com/users/mralexgray/orgs","subscriptions_url":"https://api.github.com/users/mralexgray/subscriptions","received_events_url":"https://api.github.com/users/mralexgray/received_events"},"topics":[],"git_url":"git://github.com/mralexgray/AHContentBrowser.git","license":null,"node_id":"MDEwOlJlcG9zaXRvcnk5MjI3ODQ2","private":false,"ssh_url":"git@github.com:mralexgray/AHContentBrowser.git","svn_url":"https://github.com/mralexgray/AHContentBrowser","archived":false,"disabled":false,"has_wiki":true,"homepage":"","html_url":"https://github.com/mralexgray/AHContentBrowser","keys_url":"https://api.github.com/repos/mralexgray/AHContentBrowser/keys{/key_id}","language":"Objective-C","tags_url":"https://api.github.com/repos/mralexgray/AHContentBrowser/tags","watchers":0,"blobs_url":"https://api.github.com/repos/mralexgray/AHContentBrowser/git/blobs{/sha}","clone_url":"https://github.com/mralexgray/AHContentBrowser.git","forks_url":"https://api.github.com/repos/mralexgray/AHContentBrowser/forks","full_name":"mralexgray/AHContentBrowser","has_pages":false,"hooks_url":"https://api.github.com/repos/mralexgray/AHContentBrowser/hooks","pulls_url":"https://api.github.com/repos/mralexgray/AHContentBrowser/pulls{/number}","pushed_at":"2013-03-13T17:38:23Z","teams_url":"https://api.github.com/repos/mralexgray/AHContentBrowser/teams","trees_url":"https://api.github.com/repos/mralexgray/AHContentBrowser/git/trees{/sha}","created_at":"2013-04-04T20:56:16Z","events_url":"https://api.github.com/repos/mralexgray/AHContentBrowser/events","has_issues":false,"issues_url":"https://api.github.com/repos/mralexgray/AHContentBrowser/issues{/number}","labels_url":"https://api.github.com/repos/mralexgray/AHContentBrowser/labels{/name}","merges_url":"https://api.github.com/repos/mralexgray/AHContentBrowser/merges","mirror_url":null,"updated_at":"2015-10-22T05:00:24Z","visibility":"public","archive_url":"https://api.github.com/repos/mralexgray/AHContentBrowser/{archive_format}{/ref}","commits_url":"https://api.github.com/repos/mralexgray/AHContentBrowser/commits{/sha}","compare_url":"https://api.github.com/repos/mralexgray/AHContentBrowser/compare/{base}...{head}","description":"A Mac only webview that loads a fast readable version of the website if available.","forks_count":0,"is_template":false,"open_issues":0,"branches_url":"https://api.github.com/repos/mralexgray/AHContentBrowser/branches{/branch}","comments_url":"https://api.github.com/repos/mralexgray/AHContentBrowser/comments{/number}","contents_url":"https://api.github.com/repos/mralexgray/AHContentBrowser/contents/{+path}","git_refs_url":"https://api.github.com/repos/mralexgray/AHContentBrowser/git/refs{/sha}","git_tags_url":"https://api.github.com/repos/mralexgray/AHContentBrowser/git/tags{/sha}","has_projects":true,"releases_url":"https://api.github.com/repos/mralexgray/AHContentBrowser/releases{/id}","statuses_url":"https://api.github.com/repos/mralexgray/AHContentBrowser/statuses/{sha}","allow_forking":true,"assignees_url":"https://api.github.com/repos/mralexgray/AHContentBrowser/assignees{/user}","downloads_url":"https://api.github.com/repos/mralexgray/AHContentBrowser/downloads","has_downloads":true,"languages_url":"https://api.github.com/repos/mralexgray/AHContentBrowser/languages","default_branch":"master","milestones_url":"https://api.github.com/repos/mralexgray/AHContentBrowser/milestones{/number}","stargazers_url":"https://api.github.com/repos/mralexgray/AHContentBrowser/stargazers","watchers_count":0,"deployments_url":"https://api.github.com/repos/mralexgray/AHContentBrowser/deployments","git_commits_url":"https://api.github.com/repos/mralexgray/AHContentBrowser/git/commits{/sha}","subscribers_url":"https://api.github.com/repos/mralexgray/AHContentBrowser/subscribers","contributors_url":"https://api.github.com/repos/mralexgray/AHContentBrowser/contributors","issue_events_url":"https://api.github.com/repos/mralexgray/AHContentBrowser/issues/events{/number}","stargazers_count":0,"subscription_url":"https://api.github.com/repos/mralexgray/AHContentBrowser/subscription","collaborators_url":"https://api.github.com/repos/mralexgray/AHContentBrowser/collaborators{/collaborator}","issue_comment_url":"https://api.github.com/repos/mralexgray/AHContentBrowser/issues/comments{/number}","notifications_url":"https://api.github.com/repos/mralexgray/AHContentBrowser/notifications{?since,all,participating}","open_issues_count":0,"web_commit_signoff_required":false},{"id":37430328,"url":"https://api.github.com/repos/mralexgray/AHLaunchCtl","fork":true,"name":"AHLaunchCtl","size":592,"forks":0,"owner":{"id":262517,"url":"https://api.github.com/users/mralexgray","type":"User","login":"mralexgray","node_id":"MDQ6VXNlcjI2MjUxNw==","html_url":"https://github.com/mralexgray","gists_url":"https://api.github.com/users/mralexgray/gists{/gist_id}","repos_url":"https://api.github.com/users/mralexgray/repos","avatar_url":"https://avatars.githubusercontent.com/u/262517?v=4","events_url":"https://api.github.com/users/mralexgray/events{/privacy}","site_admin":false,"gravatar_id":"","starred_url":"https://api.github.com/users/mralexgray/starred{/owner}{/repo}","followers_url":"https://api.github.com/users/mralexgray/followers","following_url":"https://api.github.com/users/mralexgray/following{/other_user}","organizations_url":"https://api.github.com/users/mralexgray/orgs","subscriptions_url":"https://api.github.com/users/mralexgray/subscriptions","received_events_url":"https://api.github.com/users/mralexgray/received_events"},"topics":[],"git_url":"git://github.com/mralexgray/AHLaunchCtl.git","license":{"key":"mit","url":"https://api.github.com/licenses/mit","name":"MIT License","node_id":"MDc6TGljZW5zZTEz","spdx_id":"MIT"},"node_id":"MDEwOlJlcG9zaXRvcnkzNzQzMDMyOA==","private":false,"ssh_url":"git@github.com:mralexgray/AHLaunchCtl.git","svn_url":"https://github.com/mralexgray/AHLaunchCtl","archived":false,"disabled":false,"has_wiki":true,"homepage":"","html_url":"https://github.com/mralexgray/AHLaunchCtl","keys_url":"https://api.github.com/repos/mralexgray/AHLaunchCtl/keys{/key_id}","language":"Objective-C","tags_url":"https://api.github.com/repos/mralexgray/AHLaunchCtl/tags","watchers":0,"blobs_url":"https://api.github.com/repos/mralexgray/AHLaunchCtl/git/blobs{/sha}","clone_url":"https://github.com/mralexgray/AHLaunchCtl.git","forks_url":"https://api.github.com/repos/mralexgray/AHLaunchCtl/forks","full_name":"mralexgray/AHLaunchCtl","has_pages":false,"hooks_url":"https://api.github.com/repos/mralexgray/AHLaunchCtl/hooks","pulls_url":"https://api.github.com/repos/mralexgray/AHLaunchCtl/pulls{/number}","pushed_at":"2015-05-26T18:50:48Z","teams_url":"https://api.github.com/repos/mralexgray/AHLaunchCtl/teams","trees_url":"https://api.github.com/repos/mralexgray/AHLaunchCtl/git/trees{/sha}","created_at":"2015-06-14T21:31:03Z","events_url":"https://api.github.com/repos/mralexgray/AHLaunchCtl/events","has_issues":false,"issues_url":"https://api.github.com/repos/mralexgray/AHLaunchCtl/issues{/number}","labels_url":"https://api.github.com/repos/mralexgray/AHLaunchCtl/labels{/name}","merges_url":"https://api.github.com/repos/mralexgray/AHLaunchCtl/merges","mirror_url":null,"updated_at":"2015-06-14T21:31:04Z","visibility":"public","archive_url":"https://api.github.com/repos/mralexgray/AHLaunchCtl/{archive_format}{/ref}","commits_url":"https://api.github.com/repos/mralexgray/AHLaunchCtl/commits{/sha}","compare_url":"https://api.github.com/repos/mralexgray/AHLaunchCtl/compare/{base}...{head}","description":"LaunchD Framework for Cocoa Apps","forks_count":0,"is_template":false,"open_issues":0,"branches_url":"https://api.github.com/repos/mralexgray/AHLaunchCtl/branches{/branch}","comments_url":"https://api.github.com/repos/mralexgray/AHLaunchCtl/comments{/number}","contents_url":"https://api.github.com/repos/mralexgray/AHLaunchCtl/contents/{+path}","git_refs_url":"https://api.github.com/repos/mralexgray/AHLaunchCtl/git/refs{/sha}","git_tags_url":"https://api.github.com/repos/mralexgray/AHLaunchCtl/git/tags{/sha}","has_projects":true,"releases_url":"https://api.github.com/repos/mralexgray/AHLaunchCtl/releases{/id}","statuses_url":"https://api.github.com/repos/mralexgray/AHLaunchCtl/statuses/{sha}","allow_forking":true,"assignees_url":"https://api.github.com/repos/mralexgray/AHLaunchCtl/assignees{/user}","downloads_url":"https://api.github.com/repos/mralexgray/AHLaunchCtl/downloads","has_downloads":true,"languages_url":"https://api.github.com/repos/mralexgray/AHLaunchCtl/languages","default_branch":"master","milestones_url":"https://api.github.com/repos/mralexgray/AHLaunchCtl/milestones{/number}","stargazers_url":"https://api.github.com/repos/mralexgray/AHLaunchCtl/stargazers","watchers_count":0,"deployments_url":"https://api.github.com/repos/mralexgray/AHLaunchCtl/deployments","git_commits_url":"https://api.github.com/repos/mralexgray/AHLaunchCtl/git/commits{/sha}","subscribers_url":"https://api.github.com/repos/mralexgray/AHLaunchCtl/subscribers","contributors_url":"https://api.github.com/repos/mralexgray/AHLaunchCtl/contributors","issue_events_url":"https://api.github.com/repos/mralexgray/AHLaunchCtl/issues/events{/number}","stargazers_count":0,"subscription_url":"https://api.github.com/repos/mralexgray/AHLaunchCtl/subscription","collaborators_url":"https://api.github.com/repos/mralexgray/AHLaunchCtl/collaborators{/collaborator}","issue_comment_url":"https://api.github.com/repos/mralexgray/AHLaunchCtl/issues/comments{/number}","notifications_url":"https://api.github.com/repos/mralexgray/AHLaunchCtl/notifications{?since,all,participating}","open_issues_count":0,"web_commit_signoff_required":false},{"id":9167473,"url":"https://api.github.com/repos/mralexgray/AHLayout","fork":true,"name":"AHLayout","size":359,"forks":0,"owner":{"id":262517,"url":"https://api.github.com/users/mralexgray","type":"User","login":"mralexgray","node_id":"MDQ6VXNlcjI2MjUxNw==","html_url":"https://github.com/mralexgray","gists_url":"https://api.github.com/users/mralexgray/gists{/gist_id}","repos_url":"https://api.github.com/users/mralexgray/repos","avatar_url":"https://avatars.githubusercontent.com/u/262517?v=4","events_url":"https://api.github.com/users/mralexgray/events{/privacy}","site_admin":false,"gravatar_id":"","starred_url":"https://api.github.com/users/mralexgray/starred{/owner}{/repo}","followers_url":"https://api.github.com/users/mralexgray/followers","following_url":"https://api.github.com/users/mralexgray/following{/other_user}","organizations_url":"https://api.github.com/users/mralexgray/orgs","subscriptions_url":"https://api.github.com/users/mralexgray/subscriptions","received_events_url":"https://api.github.com/users/mralexgray/received_events"},"topics":[],"git_url":"git://github.com/mralexgray/AHLayout.git","license":null,"node_id":"MDEwOlJlcG9zaXRvcnk5MTY3NDcz","private":false,"ssh_url":"git@github.com:mralexgray/AHLayout.git","svn_url":"https://github.com/mralexgray/AHLayout","archived":false,"disabled":false,"has_wiki":true,"homepage":null,"html_url":"https://github.com/mralexgray/AHLayout","keys_url":"https://api.github.com/repos/mralexgray/AHLayout/keys{/key_id}","language":"Objective-C","tags_url":"https://api.github.com/repos/mralexgray/AHLayout/tags","watchers":0,"blobs_url":"https://api.github.com/repos/mralexgray/AHLayout/git/blobs{/sha}","clone_url":"https://github.com/mralexgray/AHLayout.git","forks_url":"https://api.github.com/repos/mralexgray/AHLayout/forks","full_name":"mralexgray/AHLayout","has_pages":false,"hooks_url":"https://api.github.com/repos/mralexgray/AHLayout/hooks","pulls_url":"https://api.github.com/repos/mralexgray/AHLayout/pulls{/number}","pushed_at":"2013-07-08T02:31:14Z","teams_url":"https://api.github.com/repos/mralexgray/AHLayout/teams","trees_url":"https://api.github.com/repos/mralexgray/AHLayout/git/trees{/sha}","created_at":"2013-04-02T10:10:30Z","events_url":"https://api.github.com/repos/mralexgray/AHLayout/events","has_issues":false,"issues_url":"https://api.github.com/repos/mralexgray/AHLayout/issues{/number}","labels_url":"https://api.github.com/repos/mralexgray/AHLayout/labels{/name}","merges_url":"https://api.github.com/repos/mralexgray/AHLayout/merges","mirror_url":null,"updated_at":"2013-07-08T02:31:17Z","visibility":"public","archive_url":"https://api.github.com/repos/mralexgray/AHLayout/{archive_format}{/ref}","commits_url":"https://api.github.com/repos/mralexgray/AHLayout/commits{/sha}","compare_url":"https://api.github.com/repos/mralexgray/AHLayout/compare/{base}...{head}","description":"AHLayout","forks_count":0,"is_template":false,"open_issues":0,"branches_url":"https://api.github.com/repos/mralexgray/AHLayout/branches{/branch}","comments_url":"https://api.github.com/repos/mralexgray/AHLayout/comments{/number}","contents_url":"https://api.github.com/repos/mralexgray/AHLayout/contents/{+path}","git_refs_url":"https://api.github.com/repos/mralexgray/AHLayout/git/refs{/sha}","git_tags_url":"https://api.github.com/repos/mralexgray/AHLayout/git/tags{/sha}","has_projects":true,"releases_url":"https://api.github.com/repos/mralexgray/AHLayout/releases{/id}","statuses_url":"https://api.github.com/repos/mralexgray/AHLayout/statuses/{sha}","allow_forking":true,"assignees_url":"https://api.github.com/repos/mralexgray/AHLayout/assignees{/user}","downloads_url":"https://api.github.com/repos/mralexgray/AHLayout/downloads","has_downloads":true,"languages_url":"https://api.github.com/repos/mralexgray/AHLayout/languages","default_branch":"master","milestones_url":"https://api.github.com/repos/mralexgray/AHLayout/milestones{/number}","stargazers_url":"https://api.github.com/repos/mralexgray/AHLayout/stargazers","watchers_count":0,"deployments_url":"https://api.github.com/repos/mralexgray/AHLayout/deployments","git_commits_url":"https://api.github.com/repos/mralexgray/AHLayout/git/commits{/sha}","subscribers_url":"https://api.github.com/repos/mralexgray/AHLayout/subscribers","contributors_url":"https://api.github.com/repos/mralexgray/AHLayout/contributors","issue_events_url":"https://api.github.com/repos/mralexgray/AHLayout/issues/events{/number}","stargazers_count":0,"subscription_url":"https://api.github.com/repos/mralexgray/AHLayout/subscription","collaborators_url":"https://api.github.com/repos/mralexgray/AHLayout/collaborators{/collaborator}","issue_comment_url":"https://api.github.com/repos/mralexgray/AHLayout/issues/comments{/number}","notifications_url":"https://api.github.com/repos/mralexgray/AHLayout/notifications{?since,all,participating}","open_issues_count":0,"web_commit_signoff_required":false},{"id":18450201,"url":"https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework","fork":true,"name":"Airmail-Plug-In-Framework","size":888,"forks":0,"owner":{"id":262517,"url":"https://api.github.com/users/mralexgray","type":"User","login":"mralexgray","node_id":"MDQ6VXNlcjI2MjUxNw==","html_url":"https://github.com/mralexgray","gists_url":"https://api.github.com/users/mralexgray/gists{/gist_id}","repos_url":"https://api.github.com/users/mralexgray/repos","avatar_url":"https://avatars.githubusercontent.com/u/262517?v=4","events_url":"https://api.github.com/users/mralexgray/events{/privacy}","site_admin":false,"gravatar_id":"","starred_url":"https://api.github.com/users/mralexgray/starred{/owner}{/repo}","followers_url":"https://api.github.com/users/mralexgray/followers","following_url":"https://api.github.com/users/mralexgray/following{/other_user}","organizations_url":"https://api.github.com/users/mralexgray/orgs","subscriptions_url":"https://api.github.com/users/mralexgray/subscriptions","received_events_url":"https://api.github.com/users/mralexgray/received_events"},"topics":[],"git_url":"git://github.com/mralexgray/Airmail-Plug-In-Framework.git","license":{"key":"gpl-2.0","url":"https://api.github.com/licenses/gpl-2.0","name":"GNU General Public License v2.0","node_id":"MDc6TGljZW5zZTg=","spdx_id":"GPL-2.0"},"node_id":"MDEwOlJlcG9zaXRvcnkxODQ1MDIwMQ==","private":false,"ssh_url":"git@github.com:mralexgray/Airmail-Plug-In-Framework.git","svn_url":"https://github.com/mralexgray/Airmail-Plug-In-Framework","archived":false,"disabled":false,"has_wiki":true,"homepage":null,"html_url":"https://github.com/mralexgray/Airmail-Plug-In-Framework","keys_url":"https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/keys{/key_id}","language":null,"tags_url":"https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/tags","watchers":0,"blobs_url":"https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/git/blobs{/sha}","clone_url":"https://github.com/mralexgray/Airmail-Plug-In-Framework.git","forks_url":"https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/forks","full_name":"mralexgray/Airmail-Plug-In-Framework","has_pages":false,"hooks_url":"https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/hooks","pulls_url":"https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/pulls{/number}","pushed_at":"2014-03-27T15:42:19Z","teams_url":"https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/teams","trees_url":"https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/git/trees{/sha}","created_at":"2014-04-04T19:33:54Z","events_url":"https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/events","has_issues":false,"issues_url":"https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/issues{/number}","labels_url":"https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/labels{/name}","merges_url":"https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/merges","mirror_url":null,"updated_at":"2014-11-23T19:31:04Z","visibility":"public","archive_url":"https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/{archive_format}{/ref}","commits_url":"https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/commits{/sha}","compare_url":"https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/compare/{base}...{head}","description":null,"forks_count":0,"is_template":false,"open_issues":0,"branches_url":"https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/branches{/branch}","comments_url":"https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/comments{/number}","contents_url":"https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/contents/{+path}","git_refs_url":"https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/git/refs{/sha}","git_tags_url":"https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/git/tags{/sha}","has_projects":true,"releases_url":"https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/releases{/id}","statuses_url":"https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/statuses/{sha}","allow_forking":true,"assignees_url":"https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/assignees{/user}","downloads_url":"https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/downloads","has_downloads":true,"languages_url":"https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/languages","default_branch":"master","milestones_url":"https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/milestones{/number}","stargazers_url":"https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/stargazers","watchers_count":0,"deployments_url":"https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/deployments","git_commits_url":"https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/git/commits{/sha}","subscribers_url":"https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/subscribers","contributors_url":"https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/contributors","issue_events_url":"https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/issues/events{/number}","stargazers_count":0,"subscription_url":"https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/subscription","collaborators_url":"https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/collaborators{/collaborator}","issue_comment_url":"https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/issues/comments{/number}","notifications_url":"https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/notifications{?since,all,participating}","open_issues_count":0,"web_commit_signoff_required":false},{"id":5203219,"url":"https://api.github.com/repos/mralexgray/AJS-iTunes-API","fork":true,"name":"AJS-iTunes-API","size":103,"forks":0,"owner":{"id":262517,"url":"https://api.github.com/users/mralexgray","type":"User","login":"mralexgray","node_id":"MDQ6VXNlcjI2MjUxNw==","html_url":"https://github.com/mralexgray","gists_url":"https://api.github.com/users/mralexgray/gists{/gist_id}","repos_url":"https://api.github.com/users/mralexgray/repos","avatar_url":"https://avatars.githubusercontent.com/u/262517?v=4","events_url":"https://api.github.com/users/mralexgray/events{/privacy}","site_admin":false,"gravatar_id":"","starred_url":"https://api.github.com/users/mralexgray/starred{/owner}{/repo}","followers_url":"https://api.github.com/users/mralexgray/followers","following_url":"https://api.github.com/users/mralexgray/following{/other_user}","organizations_url":"https://api.github.com/users/mralexgray/orgs","subscriptions_url":"https://api.github.com/users/mralexgray/subscriptions","received_events_url":"https://api.github.com/users/mralexgray/received_events"},"topics":[],"git_url":"git://github.com/mralexgray/AJS-iTunes-API.git","license":null,"node_id":"MDEwOlJlcG9zaXRvcnk1MjAzMjE5","private":false,"ssh_url":"git@github.com:mralexgray/AJS-iTunes-API.git","svn_url":"https://github.com/mralexgray/AJS-iTunes-API","archived":false,"disabled":false,"has_wiki":true,"homepage":"","html_url":"https://github.com/mralexgray/AJS-iTunes-API","keys_url":"https://api.github.com/repos/mralexgray/AJS-iTunes-API/keys{/key_id}","language":"Objective-C","tags_url":"https://api.github.com/repos/mralexgray/AJS-iTunes-API/tags","watchers":2,"blobs_url":"https://api.github.com/repos/mralexgray/AJS-iTunes-API/git/blobs{/sha}","clone_url":"https://github.com/mralexgray/AJS-iTunes-API.git","forks_url":"https://api.github.com/repos/mralexgray/AJS-iTunes-API/forks","full_name":"mralexgray/AJS-iTunes-API","has_pages":false,"hooks_url":"https://api.github.com/repos/mralexgray/AJS-iTunes-API/hooks","pulls_url":"https://api.github.com/repos/mralexgray/AJS-iTunes-API/pulls{/number}","pushed_at":"2011-10-30T22:26:48Z","teams_url":"https://api.github.com/repos/mralexgray/AJS-iTunes-API/teams","trees_url":"https://api.github.com/repos/mralexgray/AJS-iTunes-API/git/trees{/sha}","created_at":"2012-07-27T10:20:58Z","events_url":"https://api.github.com/repos/mralexgray/AJS-iTunes-API/events","has_issues":false,"issues_url":"https://api.github.com/repos/mralexgray/AJS-iTunes-API/issues{/number}","labels_url":"https://api.github.com/repos/mralexgray/AJS-iTunes-API/labels{/name}","merges_url":"https://api.github.com/repos/mralexgray/AJS-iTunes-API/merges","mirror_url":null,"updated_at":"2013-01-11T11:00:05Z","visibility":"public","archive_url":"https://api.github.com/repos/mralexgray/AJS-iTunes-API/{archive_format}{/ref}","commits_url":"https://api.github.com/repos/mralexgray/AJS-iTunes-API/commits{/sha}","compare_url":"https://api.github.com/repos/mralexgray/AJS-iTunes-API/compare/{base}...{head}","description":"Cocoa wrapper for the iTunes search API - for iOS and Mac OSX projects","forks_count":0,"is_template":false,"open_issues":0,"branches_url":"https://api.github.com/repos/mralexgray/AJS-iTunes-API/branches{/branch}","comments_url":"https://api.github.com/repos/mralexgray/AJS-iTunes-API/comments{/number}","contents_url":"https://api.github.com/repos/mralexgray/AJS-iTunes-API/contents/{+path}","git_refs_url":"https://api.github.com/repos/mralexgray/AJS-iTunes-API/git/refs{/sha}","git_tags_url":"https://api.github.com/repos/mralexgray/AJS-iTunes-API/git/tags{/sha}","has_projects":true,"releases_url":"https://api.github.com/repos/mralexgray/AJS-iTunes-API/releases{/id}","statuses_url":"https://api.github.com/repos/mralexgray/AJS-iTunes-API/statuses/{sha}","allow_forking":true,"assignees_url":"https://api.github.com/repos/mralexgray/AJS-iTunes-API/assignees{/user}","downloads_url":"https://api.github.com/repos/mralexgray/AJS-iTunes-API/downloads","has_downloads":true,"languages_url":"https://api.github.com/repos/mralexgray/AJS-iTunes-API/languages","default_branch":"master","milestones_url":"https://api.github.com/repos/mralexgray/AJS-iTunes-API/milestones{/number}","stargazers_url":"https://api.github.com/repos/mralexgray/AJS-iTunes-API/stargazers","watchers_count":2,"deployments_url":"https://api.github.com/repos/mralexgray/AJS-iTunes-API/deployments","git_commits_url":"https://api.github.com/repos/mralexgray/AJS-iTunes-API/git/commits{/sha}","subscribers_url":"https://api.github.com/repos/mralexgray/AJS-iTunes-API/subscribers","contributors_url":"https://api.github.com/repos/mralexgray/AJS-iTunes-API/contributors","issue_events_url":"https://api.github.com/repos/mralexgray/AJS-iTunes-API/issues/events{/number}","stargazers_count":2,"subscription_url":"https://api.github.com/repos/mralexgray/AJS-iTunes-API/subscription","collaborators_url":"https://api.github.com/repos/mralexgray/AJS-iTunes-API/collaborators{/collaborator}","issue_comment_url":"https://api.github.com/repos/mralexgray/AJS-iTunes-API/issues/comments{/number}","notifications_url":"https://api.github.com/repos/mralexgray/AJS-iTunes-API/notifications{?since,all,participating}","open_issues_count":0,"web_commit_signoff_required":false},{"id":10093801,"url":"https://api.github.com/repos/mralexgray/Alcatraz","fork":true,"name":"Alcatraz","size":3668,"forks":0,"owner":{"id":262517,"url":"https://api.github.com/users/mralexgray","type":"User","login":"mralexgray","node_id":"MDQ6VXNlcjI2MjUxNw==","html_url":"https://github.com/mralexgray","gists_url":"https://api.github.com/users/mralexgray/gists{/gist_id}","repos_url":"https://api.github.com/users/mralexgray/repos","avatar_url":"https://avatars.githubusercontent.com/u/262517?v=4","events_url":"https://api.github.com/users/mralexgray/events{/privacy}","site_admin":false,"gravatar_id":"","starred_url":"https://api.github.com/users/mralexgray/starred{/owner}{/repo}","followers_url":"https://api.github.com/users/mralexgray/followers","following_url":"https://api.github.com/users/mralexgray/following{/other_user}","organizations_url":"https://api.github.com/users/mralexgray/orgs","subscriptions_url":"https://api.github.com/users/mralexgray/subscriptions","received_events_url":"https://api.github.com/users/mralexgray/received_events"},"topics":[],"git_url":"git://github.com/mralexgray/Alcatraz.git","license":{"key":"mit","url":"https://api.github.com/licenses/mit","name":"MIT License","node_id":"MDc6TGljZW5zZTEz","spdx_id":"MIT"},"node_id":"MDEwOlJlcG9zaXRvcnkxMDA5MzgwMQ==","private":false,"ssh_url":"git@github.com:mralexgray/Alcatraz.git","svn_url":"https://github.com/mralexgray/Alcatraz","archived":false,"disabled":false,"has_wiki":false,"homepage":"mneorr.github.com/Alcatraz","html_url":"https://github.com/mralexgray/Alcatraz","keys_url":"https://api.github.com/repos/mralexgray/Alcatraz/keys{/key_id}","language":"Objective-C","tags_url":"https://api.github.com/repos/mralexgray/Alcatraz/tags","watchers":0,"blobs_url":"https://api.github.com/repos/mralexgray/Alcatraz/git/blobs{/sha}","clone_url":"https://github.com/mralexgray/Alcatraz.git","forks_url":"https://api.github.com/repos/mralexgray/Alcatraz/forks","full_name":"mralexgray/Alcatraz","has_pages":false,"hooks_url":"https://api.github.com/repos/mralexgray/Alcatraz/hooks","pulls_url":"https://api.github.com/repos/mralexgray/Alcatraz/pulls{/number}","pushed_at":"2014-03-19T12:50:37Z","teams_url":"https://api.github.com/repos/mralexgray/Alcatraz/teams","trees_url":"https://api.github.com/repos/mralexgray/Alcatraz/git/trees{/sha}","created_at":"2013-05-16T04:41:13Z","events_url":"https://api.github.com/repos/mralexgray/Alcatraz/events","has_issues":false,"issues_url":"https://api.github.com/repos/mralexgray/Alcatraz/issues{/number}","labels_url":"https://api.github.com/repos/mralexgray/Alcatraz/labels{/name}","merges_url":"https://api.github.com/repos/mralexgray/Alcatraz/merges","mirror_url":null,"updated_at":"2014-03-19T20:38:35Z","visibility":"public","archive_url":"https://api.github.com/repos/mralexgray/Alcatraz/{archive_format}{/ref}","commits_url":"https://api.github.com/repos/mralexgray/Alcatraz/commits{/sha}","compare_url":"https://api.github.com/repos/mralexgray/Alcatraz/compare/{base}...{head}","description":"The most awesome (and only) Xcode package manager!","forks_count":0,"is_template":false,"open_issues":0,"branches_url":"https://api.github.com/repos/mralexgray/Alcatraz/branches{/branch}","comments_url":"https://api.github.com/repos/mralexgray/Alcatraz/comments{/number}","contents_url":"https://api.github.com/repos/mralexgray/Alcatraz/contents/{+path}","git_refs_url":"https://api.github.com/repos/mralexgray/Alcatraz/git/refs{/sha}","git_tags_url":"https://api.github.com/repos/mralexgray/Alcatraz/git/tags{/sha}","has_projects":true,"releases_url":"https://api.github.com/repos/mralexgray/Alcatraz/releases{/id}","statuses_url":"https://api.github.com/repos/mralexgray/Alcatraz/statuses/{sha}","allow_forking":true,"assignees_url":"https://api.github.com/repos/mralexgray/Alcatraz/assignees{/user}","downloads_url":"https://api.github.com/repos/mralexgray/Alcatraz/downloads","has_downloads":true,"languages_url":"https://api.github.com/repos/mralexgray/Alcatraz/languages","default_branch":"master","milestones_url":"https://api.github.com/repos/mralexgray/Alcatraz/milestones{/number}","stargazers_url":"https://api.github.com/repos/mralexgray/Alcatraz/stargazers","watchers_count":0,"deployments_url":"https://api.github.com/repos/mralexgray/Alcatraz/deployments","git_commits_url":"https://api.github.com/repos/mralexgray/Alcatraz/git/commits{/sha}","subscribers_url":"https://api.github.com/repos/mralexgray/Alcatraz/subscribers","contributors_url":"https://api.github.com/repos/mralexgray/Alcatraz/contributors","issue_events_url":"https://api.github.com/repos/mralexgray/Alcatraz/issues/events{/number}","stargazers_count":0,"subscription_url":"https://api.github.com/repos/mralexgray/Alcatraz/subscription","collaborators_url":"https://api.github.com/repos/mralexgray/Alcatraz/collaborators{/collaborator}","issue_comment_url":"https://api.github.com/repos/mralexgray/Alcatraz/issues/comments{/number}","notifications_url":"https://api.github.com/repos/mralexgray/Alcatraz/notifications{?since,all,participating}","open_issues_count":0,"web_commit_signoff_required":false},{"id":12916552,"url":"https://api.github.com/repos/mralexgray/alcatraz-packages","fork":true,"name":"alcatraz-packages","size":826,"forks":0,"owner":{"id":262517,"url":"https://api.github.com/users/mralexgray","type":"User","login":"mralexgray","node_id":"MDQ6VXNlcjI2MjUxNw==","html_url":"https://github.com/mralexgray","gists_url":"https://api.github.com/users/mralexgray/gists{/gist_id}","repos_url":"https://api.github.com/users/mralexgray/repos","avatar_url":"https://avatars.githubusercontent.com/u/262517?v=4","events_url":"https://api.github.com/users/mralexgray/events{/privacy}","site_admin":false,"gravatar_id":"","starred_url":"https://api.github.com/users/mralexgray/starred{/owner}{/repo}","followers_url":"https://api.github.com/users/mralexgray/followers","following_url":"https://api.github.com/users/mralexgray/following{/other_user}","organizations_url":"https://api.github.com/users/mralexgray/orgs","subscriptions_url":"https://api.github.com/users/mralexgray/subscriptions","received_events_url":"https://api.github.com/users/mralexgray/received_events"},"topics":[],"git_url":"git://github.com/mralexgray/alcatraz-packages.git","license":null,"node_id":"MDEwOlJlcG9zaXRvcnkxMjkxNjU1Mg==","private":false,"ssh_url":"git@github.com:mralexgray/alcatraz-packages.git","svn_url":"https://github.com/mralexgray/alcatraz-packages","archived":false,"disabled":false,"has_wiki":true,"homepage":"mneorr.github.com/Alcatraz","html_url":"https://github.com/mralexgray/alcatraz-packages","keys_url":"https://api.github.com/repos/mralexgray/alcatraz-packages/keys{/key_id}","language":"Ruby","tags_url":"https://api.github.com/repos/mralexgray/alcatraz-packages/tags","watchers":0,"blobs_url":"https://api.github.com/repos/mralexgray/alcatraz-packages/git/blobs{/sha}","clone_url":"https://github.com/mralexgray/alcatraz-packages.git","forks_url":"https://api.github.com/repos/mralexgray/alcatraz-packages/forks","full_name":"mralexgray/alcatraz-packages","has_pages":false,"hooks_url":"https://api.github.com/repos/mralexgray/alcatraz-packages/hooks","pulls_url":"https://api.github.com/repos/mralexgray/alcatraz-packages/pulls{/number}","pushed_at":"2015-12-14T16:21:31Z","teams_url":"https://api.github.com/repos/mralexgray/alcatraz-packages/teams","trees_url":"https://api.github.com/repos/mralexgray/alcatraz-packages/git/trees{/sha}","created_at":"2013-09-18T07:15:24Z","events_url":"https://api.github.com/repos/mralexgray/alcatraz-packages/events","has_issues":false,"issues_url":"https://api.github.com/repos/mralexgray/alcatraz-packages/issues{/number}","labels_url":"https://api.github.com/repos/mralexgray/alcatraz-packages/labels{/name}","merges_url":"https://api.github.com/repos/mralexgray/alcatraz-packages/merges","mirror_url":null,"updated_at":"2015-11-10T20:52:30Z","visibility":"public","archive_url":"https://api.github.com/repos/mralexgray/alcatraz-packages/{archive_format}{/ref}","commits_url":"https://api.github.com/repos/mralexgray/alcatraz-packages/commits{/sha}","compare_url":"https://api.github.com/repos/mralexgray/alcatraz-packages/compare/{base}...{head}","description":"Package list repository for Alcatraz","forks_count":0,"is_template":false,"open_issues":0,"branches_url":"https://api.github.com/repos/mralexgray/alcatraz-packages/branches{/branch}","comments_url":"https://api.github.com/repos/mralexgray/alcatraz-packages/comments{/number}","contents_url":"https://api.github.com/repos/mralexgray/alcatraz-packages/contents/{+path}","git_refs_url":"https://api.github.com/repos/mralexgray/alcatraz-packages/git/refs{/sha}","git_tags_url":"https://api.github.com/repos/mralexgray/alcatraz-packages/git/tags{/sha}","has_projects":true,"releases_url":"https://api.github.com/repos/mralexgray/alcatraz-packages/releases{/id}","statuses_url":"https://api.github.com/repos/mralexgray/alcatraz-packages/statuses/{sha}","allow_forking":true,"assignees_url":"https://api.github.com/repos/mralexgray/alcatraz-packages/assignees{/user}","downloads_url":"https://api.github.com/repos/mralexgray/alcatraz-packages/downloads","has_downloads":true,"languages_url":"https://api.github.com/repos/mralexgray/alcatraz-packages/languages","default_branch":"master","milestones_url":"https://api.github.com/repos/mralexgray/alcatraz-packages/milestones{/number}","stargazers_url":"https://api.github.com/repos/mralexgray/alcatraz-packages/stargazers","watchers_count":0,"deployments_url":"https://api.github.com/repos/mralexgray/alcatraz-packages/deployments","git_commits_url":"https://api.github.com/repos/mralexgray/alcatraz-packages/git/commits{/sha}","subscribers_url":"https://api.github.com/repos/mralexgray/alcatraz-packages/subscribers","contributors_url":"https://api.github.com/repos/mralexgray/alcatraz-packages/contributors","issue_events_url":"https://api.github.com/repos/mralexgray/alcatraz-packages/issues/events{/number}","stargazers_count":0,"subscription_url":"https://api.github.com/repos/mralexgray/alcatraz-packages/subscription","collaborators_url":"https://api.github.com/repos/mralexgray/alcatraz-packages/collaborators{/collaborator}","issue_comment_url":"https://api.github.com/repos/mralexgray/alcatraz-packages/issues/comments{/number}","notifications_url":"https://api.github.com/repos/mralexgray/alcatraz-packages/notifications{?since,all,participating}","open_issues_count":0,"web_commit_signoff_required":false},{"id":44278362,"url":"https://api.github.com/repos/mralexgray/alexicons","fork":true,"name":"alexicons","size":257,"forks":0,"owner":{"id":262517,"url":"https://api.github.com/users/mralexgray","type":"User","login":"mralexgray","node_id":"MDQ6VXNlcjI2MjUxNw==","html_url":"https://github.com/mralexgray","gists_url":"https://api.github.com/users/mralexgray/gists{/gist_id}","repos_url":"https://api.github.com/users/mralexgray/repos","avatar_url":"https://avatars.githubusercontent.com/u/262517?v=4","events_url":"https://api.github.com/users/mralexgray/events{/privacy}","site_admin":false,"gravatar_id":"","starred_url":"https://api.github.com/users/mralexgray/starred{/owner}{/repo}","followers_url":"https://api.github.com/users/mralexgray/followers","following_url":"https://api.github.com/users/mralexgray/following{/other_user}","organizations_url":"https://api.github.com/users/mralexgray/orgs","subscriptions_url":"https://api.github.com/users/mralexgray/subscriptions","received_events_url":"https://api.github.com/users/mralexgray/received_events"},"topics":[],"git_url":"git://github.com/mralexgray/alexicons.git","license":null,"node_id":"MDEwOlJlcG9zaXRvcnk0NDI3ODM2Mg==","private":false,"ssh_url":"git@github.com:mralexgray/alexicons.git","svn_url":"https://github.com/mralexgray/alexicons","archived":false,"disabled":false,"has_wiki":false,"homepage":null,"html_url":"https://github.com/mralexgray/alexicons","keys_url":"https://api.github.com/repos/mralexgray/alexicons/keys{/key_id}","language":"CoffeeScript","tags_url":"https://api.github.com/repos/mralexgray/alexicons/tags","watchers":0,"blobs_url":"https://api.github.com/repos/mralexgray/alexicons/git/blobs{/sha}","clone_url":"https://github.com/mralexgray/alexicons.git","forks_url":"https://api.github.com/repos/mralexgray/alexicons/forks","full_name":"mralexgray/alexicons","has_pages":false,"hooks_url":"https://api.github.com/repos/mralexgray/alexicons/hooks","pulls_url":"https://api.github.com/repos/mralexgray/alexicons/pulls{/number}","pushed_at":"2015-10-16T03:57:51Z","teams_url":"https://api.github.com/repos/mralexgray/alexicons/teams","trees_url":"https://api.github.com/repos/mralexgray/alexicons/git/trees{/sha}","created_at":"2015-10-14T21:49:39Z","events_url":"https://api.github.com/repos/mralexgray/alexicons/events","has_issues":false,"issues_url":"https://api.github.com/repos/mralexgray/alexicons/issues{/number}","labels_url":"https://api.github.com/repos/mralexgray/alexicons/labels{/name}","merges_url":"https://api.github.com/repos/mralexgray/alexicons/merges","mirror_url":null,"updated_at":"2015-10-15T06:20:08Z","visibility":"public","archive_url":"https://api.github.com/repos/mralexgray/alexicons/{archive_format}{/ref}","commits_url":"https://api.github.com/repos/mralexgray/alexicons/commits{/sha}","compare_url":"https://api.github.com/repos/mralexgray/alexicons/compare/{base}...{head}","description":"Get popular cat names","forks_count":0,"is_template":false,"open_issues":0,"branches_url":"https://api.github.com/repos/mralexgray/alexicons/branches{/branch}","comments_url":"https://api.github.com/repos/mralexgray/alexicons/comments{/number}","contents_url":"https://api.github.com/repos/mralexgray/alexicons/contents/{+path}","git_refs_url":"https://api.github.com/repos/mralexgray/alexicons/git/refs{/sha}","git_tags_url":"https://api.github.com/repos/mralexgray/alexicons/git/tags{/sha}","has_projects":true,"releases_url":"https://api.github.com/repos/mralexgray/alexicons/releases{/id}","statuses_url":"https://api.github.com/repos/mralexgray/alexicons/statuses/{sha}","allow_forking":true,"assignees_url":"https://api.github.com/repos/mralexgray/alexicons/assignees{/user}","downloads_url":"https://api.github.com/repos/mralexgray/alexicons/downloads","has_downloads":true,"languages_url":"https://api.github.com/repos/mralexgray/alexicons/languages","default_branch":"master","milestones_url":"https://api.github.com/repos/mralexgray/alexicons/milestones{/number}","stargazers_url":"https://api.github.com/repos/mralexgray/alexicons/stargazers","watchers_count":0,"deployments_url":"https://api.github.com/repos/mralexgray/alexicons/deployments","git_commits_url":"https://api.github.com/repos/mralexgray/alexicons/git/commits{/sha}","subscribers_url":"https://api.github.com/repos/mralexgray/alexicons/subscribers","contributors_url":"https://api.github.com/repos/mralexgray/alexicons/contributors","issue_events_url":"https://api.github.com/repos/mralexgray/alexicons/issues/events{/number}","stargazers_count":0,"subscription_url":"https://api.github.com/repos/mralexgray/alexicons/subscription","collaborators_url":"https://api.github.com/repos/mralexgray/alexicons/collaborators{/collaborator}","issue_comment_url":"https://api.github.com/repos/mralexgray/alexicons/issues/comments{/number}","notifications_url":"https://api.github.com/repos/mralexgray/alexicons/notifications{?since,all,participating}","open_issues_count":0,"web_commit_signoff_required":false},{"id":10476467,"url":"https://api.github.com/repos/mralexgray/Alfred-Google-Translate","fork":true,"name":"Alfred-Google-Translate","size":103,"forks":0,"owner":{"id":262517,"url":"https://api.github.com/users/mralexgray","type":"User","login":"mralexgray","node_id":"MDQ6VXNlcjI2MjUxNw==","html_url":"https://github.com/mralexgray","gists_url":"https://api.github.com/users/mralexgray/gists{/gist_id}","repos_url":"https://api.github.com/users/mralexgray/repos","avatar_url":"https://avatars.githubusercontent.com/u/262517?v=4","events_url":"https://api.github.com/users/mralexgray/events{/privacy}","site_admin":false,"gravatar_id":"","starred_url":"https://api.github.com/users/mralexgray/starred{/owner}{/repo}","followers_url":"https://api.github.com/users/mralexgray/followers","following_url":"https://api.github.com/users/mralexgray/following{/other_user}","organizations_url":"https://api.github.com/users/mralexgray/orgs","subscriptions_url":"https://api.github.com/users/mralexgray/subscriptions","received_events_url":"https://api.github.com/users/mralexgray/received_events"},"topics":[],"git_url":"git://github.com/mralexgray/Alfred-Google-Translate.git","license":null,"node_id":"MDEwOlJlcG9zaXRvcnkxMDQ3NjQ2Nw==","private":false,"ssh_url":"git@github.com:mralexgray/Alfred-Google-Translate.git","svn_url":"https://github.com/mralexgray/Alfred-Google-Translate","archived":false,"disabled":false,"has_wiki":true,"homepage":null,"html_url":"https://github.com/mralexgray/Alfred-Google-Translate","keys_url":"https://api.github.com/repos/mralexgray/Alfred-Google-Translate/keys{/key_id}","language":"Shell","tags_url":"https://api.github.com/repos/mralexgray/Alfred-Google-Translate/tags","watchers":0,"blobs_url":"https://api.github.com/repos/mralexgray/Alfred-Google-Translate/git/blobs{/sha}","clone_url":"https://github.com/mralexgray/Alfred-Google-Translate.git","forks_url":"https://api.github.com/repos/mralexgray/Alfred-Google-Translate/forks","full_name":"mralexgray/Alfred-Google-Translate","has_pages":false,"hooks_url":"https://api.github.com/repos/mralexgray/Alfred-Google-Translate/hooks","pulls_url":"https://api.github.com/repos/mralexgray/Alfred-Google-Translate/pulls{/number}","pushed_at":"2013-01-12T19:39:03Z","teams_url":"https://api.github.com/repos/mralexgray/Alfred-Google-Translate/teams","trees_url":"https://api.github.com/repos/mralexgray/Alfred-Google-Translate/git/trees{/sha}","created_at":"2013-06-04T10:45:10Z","events_url":"https://api.github.com/repos/mralexgray/Alfred-Google-Translate/events","has_issues":false,"issues_url":"https://api.github.com/repos/mralexgray/Alfred-Google-Translate/issues{/number}","labels_url":"https://api.github.com/repos/mralexgray/Alfred-Google-Translate/labels{/name}","merges_url":"https://api.github.com/repos/mralexgray/Alfred-Google-Translate/merges","mirror_url":null,"updated_at":"2013-06-04T10:45:10Z","visibility":"public","archive_url":"https://api.github.com/repos/mralexgray/Alfred-Google-Translate/{archive_format}{/ref}","commits_url":"https://api.github.com/repos/mralexgray/Alfred-Google-Translate/commits{/sha}","compare_url":"https://api.github.com/repos/mralexgray/Alfred-Google-Translate/compare/{base}...{head}","description":"Extension for Alfred that will do a Google translate for you","forks_count":0,"is_template":false,"open_issues":0,"branches_url":"https://api.github.com/repos/mralexgray/Alfred-Google-Translate/branches{/branch}","comments_url":"https://api.github.com/repos/mralexgray/Alfred-Google-Translate/comments{/number}","contents_url":"https://api.github.com/repos/mralexgray/Alfred-Google-Translate/contents/{+path}","git_refs_url":"https://api.github.com/repos/mralexgray/Alfred-Google-Translate/git/refs{/sha}","git_tags_url":"https://api.github.com/repos/mralexgray/Alfred-Google-Translate/git/tags{/sha}","has_projects":true,"releases_url":"https://api.github.com/repos/mralexgray/Alfred-Google-Translate/releases{/id}","statuses_url":"https://api.github.com/repos/mralexgray/Alfred-Google-Translate/statuses/{sha}","allow_forking":true,"assignees_url":"https://api.github.com/repos/mralexgray/Alfred-Google-Translate/assignees{/user}","downloads_url":"https://api.github.com/repos/mralexgray/Alfred-Google-Translate/downloads","has_downloads":true,"languages_url":"https://api.github.com/repos/mralexgray/Alfred-Google-Translate/languages","default_branch":"master","milestones_url":"https://api.github.com/repos/mralexgray/Alfred-Google-Translate/milestones{/number}","stargazers_url":"https://api.github.com/repos/mralexgray/Alfred-Google-Translate/stargazers","watchers_count":0,"deployments_url":"https://api.github.com/repos/mralexgray/Alfred-Google-Translate/deployments","git_commits_url":"https://api.github.com/repos/mralexgray/Alfred-Google-Translate/git/commits{/sha}","subscribers_url":"https://api.github.com/repos/mralexgray/Alfred-Google-Translate/subscribers","contributors_url":"https://api.github.com/repos/mralexgray/Alfred-Google-Translate/contributors","issue_events_url":"https://api.github.com/repos/mralexgray/Alfred-Google-Translate/issues/events{/number}","stargazers_count":0,"subscription_url":"https://api.github.com/repos/mralexgray/Alfred-Google-Translate/subscription","collaborators_url":"https://api.github.com/repos/mralexgray/Alfred-Google-Translate/collaborators{/collaborator}","issue_comment_url":"https://api.github.com/repos/mralexgray/Alfred-Google-Translate/issues/comments{/number}","notifications_url":"https://api.github.com/repos/mralexgray/Alfred-Google-Translate/notifications{?since,all,participating}","open_issues_count":0,"web_commit_signoff_required":false},{"id":5524019,"url":"https://api.github.com/repos/mralexgray/Amber","fork":false,"name":"Amber","size":48,"forks":0,"owner":{"id":262517,"url":"https://api.github.com/users/mralexgray","type":"User","login":"mralexgray","node_id":"MDQ6VXNlcjI2MjUxNw==","html_url":"https://github.com/mralexgray","gists_url":"https://api.github.com/users/mralexgray/gists{/gist_id}","repos_url":"https://api.github.com/users/mralexgray/repos","avatar_url":"https://avatars.githubusercontent.com/u/262517?v=4","events_url":"https://api.github.com/users/mralexgray/events{/privacy}","site_admin":false,"gravatar_id":"","starred_url":"https://api.github.com/users/mralexgray/starred{/owner}{/repo}","followers_url":"https://api.github.com/users/mralexgray/followers","following_url":"https://api.github.com/users/mralexgray/following{/other_user}","organizations_url":"https://api.github.com/users/mralexgray/orgs","subscriptions_url":"https://api.github.com/users/mralexgray/subscriptions","received_events_url":"https://api.github.com/users/mralexgray/received_events"},"topics":[],"git_url":"git://github.com/mralexgray/Amber.git","license":null,"node_id":"MDEwOlJlcG9zaXRvcnk1NTI0MDE5","private":false,"ssh_url":"git@github.com:mralexgray/Amber.git","svn_url":"https://github.com/mralexgray/Amber","archived":false,"disabled":false,"has_wiki":true,"homepage":null,"html_url":"https://github.com/mralexgray/Amber","keys_url":"https://api.github.com/repos/mralexgray/Amber/keys{/key_id}","language":null,"tags_url":"https://api.github.com/repos/mralexgray/Amber/tags","watchers":0,"blobs_url":"https://api.github.com/repos/mralexgray/Amber/git/blobs{/sha}","clone_url":"https://github.com/mralexgray/Amber.git","forks_url":"https://api.github.com/repos/mralexgray/Amber/forks","full_name":"mralexgray/Amber","has_pages":false,"hooks_url":"https://api.github.com/repos/mralexgray/Amber/hooks","pulls_url":"https://api.github.com/repos/mralexgray/Amber/pulls{/number}","pushed_at":"2012-08-23T10:38:25Z","teams_url":"https://api.github.com/repos/mralexgray/Amber/teams","trees_url":"https://api.github.com/repos/mralexgray/Amber/git/trees{/sha}","created_at":"2012-08-23T10:38:24Z","events_url":"https://api.github.com/repos/mralexgray/Amber/events","has_issues":true,"issues_url":"https://api.github.com/repos/mralexgray/Amber/issues{/number}","labels_url":"https://api.github.com/repos/mralexgray/Amber/labels{/name}","merges_url":"https://api.github.com/repos/mralexgray/Amber/merges","mirror_url":null,"updated_at":"2013-01-11T22:25:35Z","visibility":"public","archive_url":"https://api.github.com/repos/mralexgray/Amber/{archive_format}{/ref}","commits_url":"https://api.github.com/repos/mralexgray/Amber/commits{/sha}","compare_url":"https://api.github.com/repos/mralexgray/Amber/compare/{base}...{head}","description":"Fork of the difficult-to-deal-with Amber.framework","forks_count":0,"is_template":false,"open_issues":0,"branches_url":"https://api.github.com/repos/mralexgray/Amber/branches{/branch}","comments_url":"https://api.github.com/repos/mralexgray/Amber/comments{/number}","contents_url":"https://api.github.com/repos/mralexgray/Amber/contents/{+path}","git_refs_url":"https://api.github.com/repos/mralexgray/Amber/git/refs{/sha}","git_tags_url":"https://api.github.com/repos/mralexgray/Amber/git/tags{/sha}","has_projects":true,"releases_url":"https://api.github.com/repos/mralexgray/Amber/releases{/id}","statuses_url":"https://api.github.com/repos/mralexgray/Amber/statuses/{sha}","allow_forking":true,"assignees_url":"https://api.github.com/repos/mralexgray/Amber/assignees{/user}","downloads_url":"https://api.github.com/repos/mralexgray/Amber/downloads","has_downloads":true,"languages_url":"https://api.github.com/repos/mralexgray/Amber/languages","default_branch":"master","milestones_url":"https://api.github.com/repos/mralexgray/Amber/milestones{/number}","stargazers_url":"https://api.github.com/repos/mralexgray/Amber/stargazers","watchers_count":0,"deployments_url":"https://api.github.com/repos/mralexgray/Amber/deployments","git_commits_url":"https://api.github.com/repos/mralexgray/Amber/git/commits{/sha}","subscribers_url":"https://api.github.com/repos/mralexgray/Amber/subscribers","contributors_url":"https://api.github.com/repos/mralexgray/Amber/contributors","issue_events_url":"https://api.github.com/repos/mralexgray/Amber/issues/events{/number}","stargazers_count":0,"subscription_url":"https://api.github.com/repos/mralexgray/Amber/subscription","collaborators_url":"https://api.github.com/repos/mralexgray/Amber/collaborators{/collaborator}","issue_comment_url":"https://api.github.com/repos/mralexgray/Amber/issues/comments{/number}","notifications_url":"https://api.github.com/repos/mralexgray/Amber/notifications{?since,all,participating}","open_issues_count":0,"web_commit_signoff_required":false},{"id":10809060,"url":"https://api.github.com/repos/mralexgray/Amethyst","fork":true,"name":"Amethyst","size":12623,"forks":0,"owner":{"id":262517,"url":"https://api.github.com/users/mralexgray","type":"User","login":"mralexgray","node_id":"MDQ6VXNlcjI2MjUxNw==","html_url":"https://github.com/mralexgray","gists_url":"https://api.github.com/users/mralexgray/gists{/gist_id}","repos_url":"https://api.github.com/users/mralexgray/repos","avatar_url":"https://avatars.githubusercontent.com/u/262517?v=4","events_url":"https://api.github.com/users/mralexgray/events{/privacy}","site_admin":false,"gravatar_id":"","starred_url":"https://api.github.com/users/mralexgray/starred{/owner}{/repo}","followers_url":"https://api.github.com/users/mralexgray/followers","following_url":"https://api.github.com/users/mralexgray/following{/other_user}","organizations_url":"https://api.github.com/users/mralexgray/orgs","subscriptions_url":"https://api.github.com/users/mralexgray/subscriptions","received_events_url":"https://api.github.com/users/mralexgray/received_events"},"topics":[],"git_url":"git://github.com/mralexgray/Amethyst.git","license":{"key":"mit","url":"https://api.github.com/licenses/mit","name":"MIT License","node_id":"MDc6TGljZW5zZTEz","spdx_id":"MIT"},"node_id":"MDEwOlJlcG9zaXRvcnkxMDgwOTA2MA==","private":false,"ssh_url":"git@github.com:mralexgray/Amethyst.git","svn_url":"https://github.com/mralexgray/Amethyst","archived":false,"disabled":false,"has_wiki":true,"homepage":"http://ianyh.github.io/Amethyst/","html_url":"https://github.com/mralexgray/Amethyst","keys_url":"https://api.github.com/repos/mralexgray/Amethyst/keys{/key_id}","language":"Objective-C","tags_url":"https://api.github.com/repos/mralexgray/Amethyst/tags","watchers":0,"blobs_url":"https://api.github.com/repos/mralexgray/Amethyst/git/blobs{/sha}","clone_url":"https://github.com/mralexgray/Amethyst.git","forks_url":"https://api.github.com/repos/mralexgray/Amethyst/forks","full_name":"mralexgray/Amethyst","has_pages":false,"hooks_url":"https://api.github.com/repos/mralexgray/Amethyst/hooks","pulls_url":"https://api.github.com/repos/mralexgray/Amethyst/pulls{/number}","pushed_at":"2013-06-18T02:54:11Z","teams_url":"https://api.github.com/repos/mralexgray/Amethyst/teams","trees_url":"https://api.github.com/repos/mralexgray/Amethyst/git/trees{/sha}","created_at":"2013-06-20T00:34:22Z","events_url":"https://api.github.com/repos/mralexgray/Amethyst/events","has_issues":false,"issues_url":"https://api.github.com/repos/mralexgray/Amethyst/issues{/number}","labels_url":"https://api.github.com/repos/mralexgray/Amethyst/labels{/name}","merges_url":"https://api.github.com/repos/mralexgray/Amethyst/merges","mirror_url":null,"updated_at":"2013-06-20T00:34:22Z","visibility":"public","archive_url":"https://api.github.com/repos/mralexgray/Amethyst/{archive_format}{/ref}","commits_url":"https://api.github.com/repos/mralexgray/Amethyst/commits{/sha}","compare_url":"https://api.github.com/repos/mralexgray/Amethyst/compare/{base}...{head}","description":"Tiling window manager for OS X.","forks_count":0,"is_template":false,"open_issues":0,"branches_url":"https://api.github.com/repos/mralexgray/Amethyst/branches{/branch}","comments_url":"https://api.github.com/repos/mralexgray/Amethyst/comments{/number}","contents_url":"https://api.github.com/repos/mralexgray/Amethyst/contents/{+path}","git_refs_url":"https://api.github.com/repos/mralexgray/Amethyst/git/refs{/sha}","git_tags_url":"https://api.github.com/repos/mralexgray/Amethyst/git/tags{/sha}","has_projects":true,"releases_url":"https://api.github.com/repos/mralexgray/Amethyst/releases{/id}","statuses_url":"https://api.github.com/repos/mralexgray/Amethyst/statuses/{sha}","allow_forking":true,"assignees_url":"https://api.github.com/repos/mralexgray/Amethyst/assignees{/user}","downloads_url":"https://api.github.com/repos/mralexgray/Amethyst/downloads","has_downloads":true,"languages_url":"https://api.github.com/repos/mralexgray/Amethyst/languages","default_branch":"master","milestones_url":"https://api.github.com/repos/mralexgray/Amethyst/milestones{/number}","stargazers_url":"https://api.github.com/repos/mralexgray/Amethyst/stargazers","watchers_count":0,"deployments_url":"https://api.github.com/repos/mralexgray/Amethyst/deployments","git_commits_url":"https://api.github.com/repos/mralexgray/Amethyst/git/commits{/sha}","subscribers_url":"https://api.github.com/repos/mralexgray/Amethyst/subscribers","contributors_url":"https://api.github.com/repos/mralexgray/Amethyst/contributors","issue_events_url":"https://api.github.com/repos/mralexgray/Amethyst/issues/events{/number}","stargazers_count":0,"subscription_url":"https://api.github.com/repos/mralexgray/Amethyst/subscription","collaborators_url":"https://api.github.com/repos/mralexgray/Amethyst/collaborators{/collaborator}","issue_comment_url":"https://api.github.com/repos/mralexgray/Amethyst/issues/comments{/number}","notifications_url":"https://api.github.com/repos/mralexgray/Amethyst/notifications{?since,all,participating}","open_issues_count":0,"web_commit_signoff_required":false},{"id":3684286,"url":"https://api.github.com/repos/mralexgray/Animated-Paths","fork":true,"name":"Animated-Paths","size":411,"forks":0,"owner":{"id":262517,"url":"https://api.github.com/users/mralexgray","type":"User","login":"mralexgray","node_id":"MDQ6VXNlcjI2MjUxNw==","html_url":"https://github.com/mralexgray","gists_url":"https://api.github.com/users/mralexgray/gists{/gist_id}","repos_url":"https://api.github.com/users/mralexgray/repos","avatar_url":"https://avatars.githubusercontent.com/u/262517?v=4","events_url":"https://api.github.com/users/mralexgray/events{/privacy}","site_admin":false,"gravatar_id":"","starred_url":"https://api.github.com/users/mralexgray/starred{/owner}{/repo}","followers_url":"https://api.github.com/users/mralexgray/followers","following_url":"https://api.github.com/users/mralexgray/following{/other_user}","organizations_url":"https://api.github.com/users/mralexgray/orgs","subscriptions_url":"https://api.github.com/users/mralexgray/subscriptions","received_events_url":"https://api.github.com/users/mralexgray/received_events"},"topics":[],"git_url":"git://github.com/mralexgray/Animated-Paths.git","license":{"key":"other","url":null,"name":"Other","node_id":"MDc6TGljZW5zZTA=","spdx_id":"NOASSERTION"},"node_id":"MDEwOlJlcG9zaXRvcnkzNjg0Mjg2","private":false,"ssh_url":"git@github.com:mralexgray/Animated-Paths.git","svn_url":"https://github.com/mralexgray/Animated-Paths","archived":false,"disabled":false,"has_wiki":true,"homepage":"http://oleb.net/blog/2010/12/animating-drawing-of-cgpath-with-cashapelayer/","html_url":"https://github.com/mralexgray/Animated-Paths","keys_url":"https://api.github.com/repos/mralexgray/Animated-Paths/keys{/key_id}","language":"Objective-C","tags_url":"https://api.github.com/repos/mralexgray/Animated-Paths/tags","watchers":2,"blobs_url":"https://api.github.com/repos/mralexgray/Animated-Paths/git/blobs{/sha}","clone_url":"https://github.com/mralexgray/Animated-Paths.git","forks_url":"https://api.github.com/repos/mralexgray/Animated-Paths/forks","full_name":"mralexgray/Animated-Paths","has_pages":false,"hooks_url":"https://api.github.com/repos/mralexgray/Animated-Paths/hooks","pulls_url":"https://api.github.com/repos/mralexgray/Animated-Paths/pulls{/number}","pushed_at":"2010-12-30T20:56:51Z","teams_url":"https://api.github.com/repos/mralexgray/Animated-Paths/teams","trees_url":"https://api.github.com/repos/mralexgray/Animated-Paths/git/trees{/sha}","created_at":"2012-03-11T02:56:38Z","events_url":"https://api.github.com/repos/mralexgray/Animated-Paths/events","has_issues":false,"issues_url":"https://api.github.com/repos/mralexgray/Animated-Paths/issues{/number}","labels_url":"https://api.github.com/repos/mralexgray/Animated-Paths/labels{/name}","merges_url":"https://api.github.com/repos/mralexgray/Animated-Paths/merges","mirror_url":null,"updated_at":"2013-01-08T04:12:21Z","visibility":"public","archive_url":"https://api.github.com/repos/mralexgray/Animated-Paths/{archive_format}{/ref}","commits_url":"https://api.github.com/repos/mralexgray/Animated-Paths/commits{/sha}","compare_url":"https://api.github.com/repos/mralexgray/Animated-Paths/compare/{base}...{head}","description":"Demo project: Animating the drawing of a CGPath with CAShapeLayer.strokeEnd","forks_count":0,"is_template":false,"open_issues":0,"branches_url":"https://api.github.com/repos/mralexgray/Animated-Paths/branches{/branch}","comments_url":"https://api.github.com/repos/mralexgray/Animated-Paths/comments{/number}","contents_url":"https://api.github.com/repos/mralexgray/Animated-Paths/contents/{+path}","git_refs_url":"https://api.github.com/repos/mralexgray/Animated-Paths/git/refs{/sha}","git_tags_url":"https://api.github.com/repos/mralexgray/Animated-Paths/git/tags{/sha}","has_projects":true,"releases_url":"https://api.github.com/repos/mralexgray/Animated-Paths/releases{/id}","statuses_url":"https://api.github.com/repos/mralexgray/Animated-Paths/statuses/{sha}","allow_forking":true,"assignees_url":"https://api.github.com/repos/mralexgray/Animated-Paths/assignees{/user}","downloads_url":"https://api.github.com/repos/mralexgray/Animated-Paths/downloads","has_downloads":true,"languages_url":"https://api.github.com/repos/mralexgray/Animated-Paths/languages","default_branch":"master","milestones_url":"https://api.github.com/repos/mralexgray/Animated-Paths/milestones{/number}","stargazers_url":"https://api.github.com/repos/mralexgray/Animated-Paths/stargazers","watchers_count":2,"deployments_url":"https://api.github.com/repos/mralexgray/Animated-Paths/deployments","git_commits_url":"https://api.github.com/repos/mralexgray/Animated-Paths/git/commits{/sha}","subscribers_url":"https://api.github.com/repos/mralexgray/Animated-Paths/subscribers","contributors_url":"https://api.github.com/repos/mralexgray/Animated-Paths/contributors","issue_events_url":"https://api.github.com/repos/mralexgray/Animated-Paths/issues/events{/number}","stargazers_count":2,"subscription_url":"https://api.github.com/repos/mralexgray/Animated-Paths/subscription","collaborators_url":"https://api.github.com/repos/mralexgray/Animated-Paths/collaborators{/collaborator}","issue_comment_url":"https://api.github.com/repos/mralexgray/Animated-Paths/issues/comments{/number}","notifications_url":"https://api.github.com/repos/mralexgray/Animated-Paths/notifications{?since,all,participating}","open_issues_count":0,"web_commit_signoff_required":false},{"id":16662874,"url":"https://api.github.com/repos/mralexgray/AnsiLove.framework","fork":true,"name":"AnsiLove.framework","size":3780,"forks":0,"owner":{"id":262517,"url":"https://api.github.com/users/mralexgray","type":"User","login":"mralexgray","node_id":"MDQ6VXNlcjI2MjUxNw==","html_url":"https://github.com/mralexgray","gists_url":"https://api.github.com/users/mralexgray/gists{/gist_id}","repos_url":"https://api.github.com/users/mralexgray/repos","avatar_url":"https://avatars.githubusercontent.com/u/262517?v=4","events_url":"https://api.github.com/users/mralexgray/events{/privacy}","site_admin":false,"gravatar_id":"","starred_url":"https://api.github.com/users/mralexgray/starred{/owner}{/repo}","followers_url":"https://api.github.com/users/mralexgray/followers","following_url":"https://api.github.com/users/mralexgray/following{/other_user}","organizations_url":"https://api.github.com/users/mralexgray/orgs","subscriptions_url":"https://api.github.com/users/mralexgray/subscriptions","received_events_url":"https://api.github.com/users/mralexgray/received_events"},"topics":[],"git_url":"git://github.com/mralexgray/AnsiLove.framework.git","license":{"key":"other","url":null,"name":"Other","node_id":"MDc6TGljZW5zZTA=","spdx_id":"NOASSERTION"},"node_id":"MDEwOlJlcG9zaXRvcnkxNjY2Mjg3NA==","private":false,"ssh_url":"git@github.com:mralexgray/AnsiLove.framework.git","svn_url":"https://github.com/mralexgray/AnsiLove.framework","archived":false,"disabled":false,"has_wiki":false,"homepage":"http://byteproject.net","html_url":"https://github.com/mralexgray/AnsiLove.framework","keys_url":"https://api.github.com/repos/mralexgray/AnsiLove.framework/keys{/key_id}","language":"M","tags_url":"https://api.github.com/repos/mralexgray/AnsiLove.framework/tags","watchers":0,"blobs_url":"https://api.github.com/repos/mralexgray/AnsiLove.framework/git/blobs{/sha}","clone_url":"https://github.com/mralexgray/AnsiLove.framework.git","forks_url":"https://api.github.com/repos/mralexgray/AnsiLove.framework/forks","full_name":"mralexgray/AnsiLove.framework","has_pages":false,"hooks_url":"https://api.github.com/repos/mralexgray/AnsiLove.framework/hooks","pulls_url":"https://api.github.com/repos/mralexgray/AnsiLove.framework/pulls{/number}","pushed_at":"2013-10-04T14:08:38Z","teams_url":"https://api.github.com/repos/mralexgray/AnsiLove.framework/teams","trees_url":"https://api.github.com/repos/mralexgray/AnsiLove.framework/git/trees{/sha}","created_at":"2014-02-09T08:30:27Z","events_url":"https://api.github.com/repos/mralexgray/AnsiLove.framework/events","has_issues":false,"issues_url":"https://api.github.com/repos/mralexgray/AnsiLove.framework/issues{/number}","labels_url":"https://api.github.com/repos/mralexgray/AnsiLove.framework/labels{/name}","merges_url":"https://api.github.com/repos/mralexgray/AnsiLove.framework/merges","mirror_url":null,"updated_at":"2015-01-13T20:41:46Z","visibility":"public","archive_url":"https://api.github.com/repos/mralexgray/AnsiLove.framework/{archive_format}{/ref}","commits_url":"https://api.github.com/repos/mralexgray/AnsiLove.framework/commits{/sha}","compare_url":"https://api.github.com/repos/mralexgray/AnsiLove.framework/compare/{base}...{head}","description":"Cocoa Framework for rendering ANSi / ASCII art","forks_count":0,"is_template":false,"open_issues":0,"branches_url":"https://api.github.com/repos/mralexgray/AnsiLove.framework/branches{/branch}","comments_url":"https://api.github.com/repos/mralexgray/AnsiLove.framework/comments{/number}","contents_url":"https://api.github.com/repos/mralexgray/AnsiLove.framework/contents/{+path}","git_refs_url":"https://api.github.com/repos/mralexgray/AnsiLove.framework/git/refs{/sha}","git_tags_url":"https://api.github.com/repos/mralexgray/AnsiLove.framework/git/tags{/sha}","has_projects":true,"releases_url":"https://api.github.com/repos/mralexgray/AnsiLove.framework/releases{/id}","statuses_url":"https://api.github.com/repos/mralexgray/AnsiLove.framework/statuses/{sha}","allow_forking":true,"assignees_url":"https://api.github.com/repos/mralexgray/AnsiLove.framework/assignees{/user}","downloads_url":"https://api.github.com/repos/mralexgray/AnsiLove.framework/downloads","has_downloads":true,"languages_url":"https://api.github.com/repos/mralexgray/AnsiLove.framework/languages","default_branch":"master","milestones_url":"https://api.github.com/repos/mralexgray/AnsiLove.framework/milestones{/number}","stargazers_url":"https://api.github.com/repos/mralexgray/AnsiLove.framework/stargazers","watchers_count":0,"deployments_url":"https://api.github.com/repos/mralexgray/AnsiLove.framework/deployments","git_commits_url":"https://api.github.com/repos/mralexgray/AnsiLove.framework/git/commits{/sha}","subscribers_url":"https://api.github.com/repos/mralexgray/AnsiLove.framework/subscribers","contributors_url":"https://api.github.com/repos/mralexgray/AnsiLove.framework/contributors","issue_events_url":"https://api.github.com/repos/mralexgray/AnsiLove.framework/issues/events{/number}","stargazers_count":0,"subscription_url":"https://api.github.com/repos/mralexgray/AnsiLove.framework/subscription","collaborators_url":"https://api.github.com/repos/mralexgray/AnsiLove.framework/collaborators{/collaborator}","issue_comment_url":"https://api.github.com/repos/mralexgray/AnsiLove.framework/issues/comments{/number}","notifications_url":"https://api.github.com/repos/mralexgray/AnsiLove.framework/notifications{?since,all,participating}","open_issues_count":0,"web_commit_signoff_required":false},{"id":5189563,"url":"https://api.github.com/repos/mralexgray/ANTrackBar","fork":true,"name":"ANTrackBar","size":94,"forks":0,"owner":{"id":262517,"url":"https://api.github.com/users/mralexgray","type":"User","login":"mralexgray","node_id":"MDQ6VXNlcjI2MjUxNw==","html_url":"https://github.com/mralexgray","gists_url":"https://api.github.com/users/mralexgray/gists{/gist_id}","repos_url":"https://api.github.com/users/mralexgray/repos","avatar_url":"https://avatars.githubusercontent.com/u/262517?v=4","events_url":"https://api.github.com/users/mralexgray/events{/privacy}","site_admin":false,"gravatar_id":"","starred_url":"https://api.github.com/users/mralexgray/starred{/owner}{/repo}","followers_url":"https://api.github.com/users/mralexgray/followers","following_url":"https://api.github.com/users/mralexgray/following{/other_user}","organizations_url":"https://api.github.com/users/mralexgray/orgs","subscriptions_url":"https://api.github.com/users/mralexgray/subscriptions","received_events_url":"https://api.github.com/users/mralexgray/received_events"},"topics":[],"git_url":"git://github.com/mralexgray/ANTrackBar.git","license":null,"node_id":"MDEwOlJlcG9zaXRvcnk1MTg5NTYz","private":false,"ssh_url":"git@github.com:mralexgray/ANTrackBar.git","svn_url":"https://github.com/mralexgray/ANTrackBar","archived":false,"disabled":false,"has_wiki":true,"homepage":"","html_url":"https://github.com/mralexgray/ANTrackBar","keys_url":"https://api.github.com/repos/mralexgray/ANTrackBar/keys{/key_id}","language":"Objective-C","tags_url":"https://api.github.com/repos/mralexgray/ANTrackBar/tags","watchers":2,"blobs_url":"https://api.github.com/repos/mralexgray/ANTrackBar/git/blobs{/sha}","clone_url":"https://github.com/mralexgray/ANTrackBar.git","forks_url":"https://api.github.com/repos/mralexgray/ANTrackBar/forks","full_name":"mralexgray/ANTrackBar","has_pages":false,"hooks_url":"https://api.github.com/repos/mralexgray/ANTrackBar/hooks","pulls_url":"https://api.github.com/repos/mralexgray/ANTrackBar/pulls{/number}","pushed_at":"2012-03-09T01:40:02Z","teams_url":"https://api.github.com/repos/mralexgray/ANTrackBar/teams","trees_url":"https://api.github.com/repos/mralexgray/ANTrackBar/git/trees{/sha}","created_at":"2012-07-26T08:17:22Z","events_url":"https://api.github.com/repos/mralexgray/ANTrackBar/events","has_issues":false,"issues_url":"https://api.github.com/repos/mralexgray/ANTrackBar/issues{/number}","labels_url":"https://api.github.com/repos/mralexgray/ANTrackBar/labels{/name}","merges_url":"https://api.github.com/repos/mralexgray/ANTrackBar/merges","mirror_url":null,"updated_at":"2013-01-11T10:29:56Z","visibility":"public","archive_url":"https://api.github.com/repos/mralexgray/ANTrackBar/{archive_format}{/ref}","commits_url":"https://api.github.com/repos/mralexgray/ANTrackBar/commits{/sha}","compare_url":"https://api.github.com/repos/mralexgray/ANTrackBar/compare/{base}...{head}","description":"An easy-to-use Cocoa seek bar with a pleasing appearance","forks_count":0,"is_template":false,"open_issues":0,"branches_url":"https://api.github.com/repos/mralexgray/ANTrackBar/branches{/branch}","comments_url":"https://api.github.com/repos/mralexgray/ANTrackBar/comments{/number}","contents_url":"https://api.github.com/repos/mralexgray/ANTrackBar/contents/{+path}","git_refs_url":"https://api.github.com/repos/mralexgray/ANTrackBar/git/refs{/sha}","git_tags_url":"https://api.github.com/repos/mralexgray/ANTrackBar/git/tags{/sha}","has_projects":true,"releases_url":"https://api.github.com/repos/mralexgray/ANTrackBar/releases{/id}","statuses_url":"https://api.github.com/repos/mralexgray/ANTrackBar/statuses/{sha}","allow_forking":true,"assignees_url":"https://api.github.com/repos/mralexgray/ANTrackBar/assignees{/user}","downloads_url":"https://api.github.com/repos/mralexgray/ANTrackBar/downloads","has_downloads":true,"languages_url":"https://api.github.com/repos/mralexgray/ANTrackBar/languages","default_branch":"master","milestones_url":"https://api.github.com/repos/mralexgray/ANTrackBar/milestones{/number}","stargazers_url":"https://api.github.com/repos/mralexgray/ANTrackBar/stargazers","watchers_count":2,"deployments_url":"https://api.github.com/repos/mralexgray/ANTrackBar/deployments","git_commits_url":"https://api.github.com/repos/mralexgray/ANTrackBar/git/commits{/sha}","subscribers_url":"https://api.github.com/repos/mralexgray/ANTrackBar/subscribers","contributors_url":"https://api.github.com/repos/mralexgray/ANTrackBar/contributors","issue_events_url":"https://api.github.com/repos/mralexgray/ANTrackBar/issues/events{/number}","stargazers_count":2,"subscription_url":"https://api.github.com/repos/mralexgray/ANTrackBar/subscription","collaborators_url":"https://api.github.com/repos/mralexgray/ANTrackBar/collaborators{/collaborator}","issue_comment_url":"https://api.github.com/repos/mralexgray/ANTrackBar/issues/comments{/number}","notifications_url":"https://api.github.com/repos/mralexgray/ANTrackBar/notifications{?since,all,participating}","open_issues_count":0,"web_commit_signoff_required":false},{"id":16240152,"url":"https://api.github.com/repos/mralexgray/AOP-in-Objective-C","fork":true,"name":"AOP-in-Objective-C","size":340,"forks":1,"owner":{"id":262517,"url":"https://api.github.com/users/mralexgray","type":"User","login":"mralexgray","node_id":"MDQ6VXNlcjI2MjUxNw==","html_url":"https://github.com/mralexgray","gists_url":"https://api.github.com/users/mralexgray/gists{/gist_id}","repos_url":"https://api.github.com/users/mralexgray/repos","avatar_url":"https://avatars.githubusercontent.com/u/262517?v=4","events_url":"https://api.github.com/users/mralexgray/events{/privacy}","site_admin":false,"gravatar_id":"","starred_url":"https://api.github.com/users/mralexgray/starred{/owner}{/repo}","followers_url":"https://api.github.com/users/mralexgray/followers","following_url":"https://api.github.com/users/mralexgray/following{/other_user}","organizations_url":"https://api.github.com/users/mralexgray/orgs","subscriptions_url":"https://api.github.com/users/mralexgray/subscriptions","received_events_url":"https://api.github.com/users/mralexgray/received_events"},"topics":[],"git_url":"git://github.com/mralexgray/AOP-in-Objective-C.git","license":null,"node_id":"MDEwOlJlcG9zaXRvcnkxNjI0MDE1Mg==","private":false,"ssh_url":"git@github.com:mralexgray/AOP-in-Objective-C.git","svn_url":"https://github.com/mralexgray/AOP-in-Objective-C","archived":false,"disabled":false,"has_wiki":true,"homepage":"http://innoli.hu/en/opensource/","html_url":"https://github.com/mralexgray/AOP-in-Objective-C","keys_url":"https://api.github.com/repos/mralexgray/AOP-in-Objective-C/keys{/key_id}","language":"Objective-C","tags_url":"https://api.github.com/repos/mralexgray/AOP-in-Objective-C/tags","watchers":0,"blobs_url":"https://api.github.com/repos/mralexgray/AOP-in-Objective-C/git/blobs{/sha}","clone_url":"https://github.com/mralexgray/AOP-in-Objective-C.git","forks_url":"https://api.github.com/repos/mralexgray/AOP-in-Objective-C/forks","full_name":"mralexgray/AOP-in-Objective-C","has_pages":false,"hooks_url":"https://api.github.com/repos/mralexgray/AOP-in-Objective-C/hooks","pulls_url":"https://api.github.com/repos/mralexgray/AOP-in-Objective-C/pulls{/number}","pushed_at":"2014-02-12T16:23:20Z","teams_url":"https://api.github.com/repos/mralexgray/AOP-in-Objective-C/teams","trees_url":"https://api.github.com/repos/mralexgray/AOP-in-Objective-C/git/trees{/sha}","created_at":"2014-01-25T21:18:04Z","events_url":"https://api.github.com/repos/mralexgray/AOP-in-Objective-C/events","has_issues":false,"issues_url":"https://api.github.com/repos/mralexgray/AOP-in-Objective-C/issues{/number}","labels_url":"https://api.github.com/repos/mralexgray/AOP-in-Objective-C/labels{/name}","merges_url":"https://api.github.com/repos/mralexgray/AOP-in-Objective-C/merges","mirror_url":null,"updated_at":"2014-06-19T19:38:12Z","visibility":"public","archive_url":"https://api.github.com/repos/mralexgray/AOP-in-Objective-C/{archive_format}{/ref}","commits_url":"https://api.github.com/repos/mralexgray/AOP-in-Objective-C/commits{/sha}","compare_url":"https://api.github.com/repos/mralexgray/AOP-in-Objective-C/compare/{base}...{head}","description":"An NSProxy based library for easily enabling AOP like functionality in Objective-C.","forks_count":1,"is_template":false,"open_issues":0,"branches_url":"https://api.github.com/repos/mralexgray/AOP-in-Objective-C/branches{/branch}","comments_url":"https://api.github.com/repos/mralexgray/AOP-in-Objective-C/comments{/number}","contents_url":"https://api.github.com/repos/mralexgray/AOP-in-Objective-C/contents/{+path}","git_refs_url":"https://api.github.com/repos/mralexgray/AOP-in-Objective-C/git/refs{/sha}","git_tags_url":"https://api.github.com/repos/mralexgray/AOP-in-Objective-C/git/tags{/sha}","has_projects":true,"releases_url":"https://api.github.com/repos/mralexgray/AOP-in-Objective-C/releases{/id}","statuses_url":"https://api.github.com/repos/mralexgray/AOP-in-Objective-C/statuses/{sha}","allow_forking":true,"assignees_url":"https://api.github.com/repos/mralexgray/AOP-in-Objective-C/assignees{/user}","downloads_url":"https://api.github.com/repos/mralexgray/AOP-in-Objective-C/downloads","has_downloads":true,"languages_url":"https://api.github.com/repos/mralexgray/AOP-in-Objective-C/languages","default_branch":"travis-coveralls","milestones_url":"https://api.github.com/repos/mralexgray/AOP-in-Objective-C/milestones{/number}","stargazers_url":"https://api.github.com/repos/mralexgray/AOP-in-Objective-C/stargazers","watchers_count":0,"deployments_url":"https://api.github.com/repos/mralexgray/AOP-in-Objective-C/deployments","git_commits_url":"https://api.github.com/repos/mralexgray/AOP-in-Objective-C/git/commits{/sha}","subscribers_url":"https://api.github.com/repos/mralexgray/AOP-in-Objective-C/subscribers","contributors_url":"https://api.github.com/repos/mralexgray/AOP-in-Objective-C/contributors","issue_events_url":"https://api.github.com/repos/mralexgray/AOP-in-Objective-C/issues/events{/number}","stargazers_count":0,"subscription_url":"https://api.github.com/repos/mralexgray/AOP-in-Objective-C/subscription","collaborators_url":"https://api.github.com/repos/mralexgray/AOP-in-Objective-C/collaborators{/collaborator}","issue_comment_url":"https://api.github.com/repos/mralexgray/AOP-in-Objective-C/issues/comments{/number}","notifications_url":"https://api.github.com/repos/mralexgray/AOP-in-Objective-C/notifications{?since,all,participating}","open_issues_count":0,"web_commit_signoff_required":false},{"id":13141936,"url":"https://api.github.com/repos/mralexgray/Apaxy","fork":true,"name":"Apaxy","size":113,"forks":0,"owner":{"id":262517,"url":"https://api.github.com/users/mralexgray","type":"User","login":"mralexgray","node_id":"MDQ6VXNlcjI2MjUxNw==","html_url":"https://github.com/mralexgray","gists_url":"https://api.github.com/users/mralexgray/gists{/gist_id}","repos_url":"https://api.github.com/users/mralexgray/repos","avatar_url":"https://avatars.githubusercontent.com/u/262517?v=4","events_url":"https://api.github.com/users/mralexgray/events{/privacy}","site_admin":false,"gravatar_id":"","starred_url":"https://api.github.com/users/mralexgray/starred{/owner}{/repo}","followers_url":"https://api.github.com/users/mralexgray/followers","following_url":"https://api.github.com/users/mralexgray/following{/other_user}","organizations_url":"https://api.github.com/users/mralexgray/orgs","subscriptions_url":"https://api.github.com/users/mralexgray/subscriptions","received_events_url":"https://api.github.com/users/mralexgray/received_events"},"topics":[],"git_url":"git://github.com/mralexgray/Apaxy.git","license":{"key":"unlicense","url":"https://api.github.com/licenses/unlicense","name":"The Unlicense","node_id":"MDc6TGljZW5zZTE1","spdx_id":"Unlicense"},"node_id":"MDEwOlJlcG9zaXRvcnkxMzE0MTkzNg==","private":false,"ssh_url":"git@github.com:mralexgray/Apaxy.git","svn_url":"https://github.com/mralexgray/Apaxy","archived":false,"disabled":false,"has_wiki":true,"homepage":null,"html_url":"https://github.com/mralexgray/Apaxy","keys_url":"https://api.github.com/repos/mralexgray/Apaxy/keys{/key_id}","language":"CSS","tags_url":"https://api.github.com/repos/mralexgray/Apaxy/tags","watchers":0,"blobs_url":"https://api.github.com/repos/mralexgray/Apaxy/git/blobs{/sha}","clone_url":"https://github.com/mralexgray/Apaxy.git","forks_url":"https://api.github.com/repos/mralexgray/Apaxy/forks","full_name":"mralexgray/Apaxy","has_pages":false,"hooks_url":"https://api.github.com/repos/mralexgray/Apaxy/hooks","pulls_url":"https://api.github.com/repos/mralexgray/Apaxy/pulls{/number}","pushed_at":"2013-08-02T16:01:32Z","teams_url":"https://api.github.com/repos/mralexgray/Apaxy/teams","trees_url":"https://api.github.com/repos/mralexgray/Apaxy/git/trees{/sha}","created_at":"2013-09-27T05:05:35Z","events_url":"https://api.github.com/repos/mralexgray/Apaxy/events","has_issues":false,"issues_url":"https://api.github.com/repos/mralexgray/Apaxy/issues{/number}","labels_url":"https://api.github.com/repos/mralexgray/Apaxy/labels{/name}","merges_url":"https://api.github.com/repos/mralexgray/Apaxy/merges","mirror_url":null,"updated_at":"2018-02-16T21:40:24Z","visibility":"public","archive_url":"https://api.github.com/repos/mralexgray/Apaxy/{archive_format}{/ref}","commits_url":"https://api.github.com/repos/mralexgray/Apaxy/commits{/sha}","compare_url":"https://api.github.com/repos/mralexgray/Apaxy/compare/{base}...{head}","description":"A simple, customisable theme for your Apache directory listing.","forks_count":0,"is_template":false,"open_issues":0,"branches_url":"https://api.github.com/repos/mralexgray/Apaxy/branches{/branch}","comments_url":"https://api.github.com/repos/mralexgray/Apaxy/comments{/number}","contents_url":"https://api.github.com/repos/mralexgray/Apaxy/contents/{+path}","git_refs_url":"https://api.github.com/repos/mralexgray/Apaxy/git/refs{/sha}","git_tags_url":"https://api.github.com/repos/mralexgray/Apaxy/git/tags{/sha}","has_projects":true,"releases_url":"https://api.github.com/repos/mralexgray/Apaxy/releases{/id}","statuses_url":"https://api.github.com/repos/mralexgray/Apaxy/statuses/{sha}","allow_forking":true,"assignees_url":"https://api.github.com/repos/mralexgray/Apaxy/assignees{/user}","downloads_url":"https://api.github.com/repos/mralexgray/Apaxy/downloads","has_downloads":true,"languages_url":"https://api.github.com/repos/mralexgray/Apaxy/languages","default_branch":"master","milestones_url":"https://api.github.com/repos/mralexgray/Apaxy/milestones{/number}","stargazers_url":"https://api.github.com/repos/mralexgray/Apaxy/stargazers","watchers_count":0,"deployments_url":"https://api.github.com/repos/mralexgray/Apaxy/deployments","git_commits_url":"https://api.github.com/repos/mralexgray/Apaxy/git/commits{/sha}","subscribers_url":"https://api.github.com/repos/mralexgray/Apaxy/subscribers","contributors_url":"https://api.github.com/repos/mralexgray/Apaxy/contributors","issue_events_url":"https://api.github.com/repos/mralexgray/Apaxy/issues/events{/number}","stargazers_count":0,"subscription_url":"https://api.github.com/repos/mralexgray/Apaxy/subscription","collaborators_url":"https://api.github.com/repos/mralexgray/Apaxy/collaborators{/collaborator}","issue_comment_url":"https://api.github.com/repos/mralexgray/Apaxy/issues/comments{/number}","notifications_url":"https://api.github.com/repos/mralexgray/Apaxy/notifications{?since,all,participating}","open_issues_count":0,"web_commit_signoff_required":false},{"id":20027360,"url":"https://api.github.com/repos/mralexgray/app","fork":true,"name":"app","size":1890,"forks":0,"owner":{"id":262517,"url":"https://api.github.com/users/mralexgray","type":"User","login":"mralexgray","node_id":"MDQ6VXNlcjI2MjUxNw==","html_url":"https://github.com/mralexgray","gists_url":"https://api.github.com/users/mralexgray/gists{/gist_id}","repos_url":"https://api.github.com/users/mralexgray/repos","avatar_url":"https://avatars.githubusercontent.com/u/262517?v=4","events_url":"https://api.github.com/users/mralexgray/events{/privacy}","site_admin":false,"gravatar_id":"","starred_url":"https://api.github.com/users/mralexgray/starred{/owner}{/repo}","followers_url":"https://api.github.com/users/mralexgray/followers","following_url":"https://api.github.com/users/mralexgray/following{/other_user}","organizations_url":"https://api.github.com/users/mralexgray/orgs","subscriptions_url":"https://api.github.com/users/mralexgray/subscriptions","received_events_url":"https://api.github.com/users/mralexgray/received_events"},"topics":[],"git_url":"git://github.com/mralexgray/app.git","license":{"key":"other","url":null,"name":"Other","node_id":"MDc6TGljZW5zZTA=","spdx_id":"NOASSERTION"},"node_id":"MDEwOlJlcG9zaXRvcnkyMDAyNzM2MA==","private":false,"ssh_url":"git@github.com:mralexgray/app.git","svn_url":"https://github.com/mralexgray/app","archived":false,"disabled":false,"has_wiki":true,"homepage":null,"html_url":"https://github.com/mralexgray/app","keys_url":"https://api.github.com/repos/mralexgray/app/keys{/key_id}","language":"JavaScript","tags_url":"https://api.github.com/repos/mralexgray/app/tags","watchers":0,"blobs_url":"https://api.github.com/repos/mralexgray/app/git/blobs{/sha}","clone_url":"https://github.com/mralexgray/app.git","forks_url":"https://api.github.com/repos/mralexgray/app/forks","full_name":"mralexgray/app","has_pages":false,"hooks_url":"https://api.github.com/repos/mralexgray/app/hooks","pulls_url":"https://api.github.com/repos/mralexgray/app/pulls{/number}","pushed_at":"2014-05-20T19:51:38Z","teams_url":"https://api.github.com/repos/mralexgray/app/teams","trees_url":"https://api.github.com/repos/mralexgray/app/git/trees{/sha}","created_at":"2014-05-21T15:54:20Z","events_url":"https://api.github.com/repos/mralexgray/app/events","has_issues":false,"issues_url":"https://api.github.com/repos/mralexgray/app/issues{/number}","labels_url":"https://api.github.com/repos/mralexgray/app/labels{/name}","merges_url":"https://api.github.com/repos/mralexgray/app/merges","mirror_url":null,"updated_at":"2014-05-21T15:54:22Z","visibility":"public","archive_url":"https://api.github.com/repos/mralexgray/app/{archive_format}{/ref}","commits_url":"https://api.github.com/repos/mralexgray/app/commits{/sha}","compare_url":"https://api.github.com/repos/mralexgray/app/compare/{base}...{head}","description":"Instant mobile web app creation","forks_count":0,"is_template":false,"open_issues":0,"branches_url":"https://api.github.com/repos/mralexgray/app/branches{/branch}","comments_url":"https://api.github.com/repos/mralexgray/app/comments{/number}","contents_url":"https://api.github.com/repos/mralexgray/app/contents/{+path}","git_refs_url":"https://api.github.com/repos/mralexgray/app/git/refs{/sha}","git_tags_url":"https://api.github.com/repos/mralexgray/app/git/tags{/sha}","has_projects":true,"releases_url":"https://api.github.com/repos/mralexgray/app/releases{/id}","statuses_url":"https://api.github.com/repos/mralexgray/app/statuses/{sha}","allow_forking":true,"assignees_url":"https://api.github.com/repos/mralexgray/app/assignees{/user}","downloads_url":"https://api.github.com/repos/mralexgray/app/downloads","has_downloads":true,"languages_url":"https://api.github.com/repos/mralexgray/app/languages","default_branch":"master","milestones_url":"https://api.github.com/repos/mralexgray/app/milestones{/number}","stargazers_url":"https://api.github.com/repos/mralexgray/app/stargazers","watchers_count":0,"deployments_url":"https://api.github.com/repos/mralexgray/app/deployments","git_commits_url":"https://api.github.com/repos/mralexgray/app/git/commits{/sha}","subscribers_url":"https://api.github.com/repos/mralexgray/app/subscribers","contributors_url":"https://api.github.com/repos/mralexgray/app/contributors","issue_events_url":"https://api.github.com/repos/mralexgray/app/issues/events{/number}","stargazers_count":0,"subscription_url":"https://api.github.com/repos/mralexgray/app/subscription","collaborators_url":"https://api.github.com/repos/mralexgray/app/collaborators{/collaborator}","issue_comment_url":"https://api.github.com/repos/mralexgray/app/issues/comments{/number}","notifications_url":"https://api.github.com/repos/mralexgray/app/notifications{?since,all,participating}","open_issues_count":0,"web_commit_signoff_required":false}],"name":"Shirt","revenue":4.99},"receivedAt":"2022-08-18T08:43:13.521+05:30","request_ip":"[::1]","anonymousId":"anon-id-new","originalTimestamp":"2022-08-18T08:43:15.539+05:30"},{"name":"Page View","type":"page","sentAt":"2022-08-18T08:43:15.539+05:30","userId":"identified user id","context":{"ip":"14.5.67.21","library":{"name":"http"}},"rudderId":"daf823fb-e8d3-413a-8313-d34cd756f968","messageId":"5f58d1f7-cbd6-4bff-8571-9933be7210b1","timestamp":"2020-02-02T00:23:09.544Z","properties":{"path":"/","title":"Home"},"receivedAt":"2022-08-18T08:43:13.521+05:30","request_ip":"[::1]","anonymousId":"anon-id-new","originalTimestamp":"2022-08-18T08:43:15.539+05:30"}]', + destConfig: { + clientContext: '', + lambda: 'testFunction', + invocationType: 'Event', + }, + }, + metadata: [ + { + userId: 'anon-id-new<<>>identified user id', + jobId: 32, + sourceId: '2DTlLPQxignYp4ag9sISgGN2uY7', + destinationId: '2DTozIMGtBwTGNJtuvdPByFSL2Z', + attemptNum: 0, + receivedAt: '2022-08-18T08:43:13.521+05:30', + createdAt: '2022-08-18T03:13:15.549Z', + firstAttemptedAt: '', + transformAt: 'router', + workspaceId: '2DTlBMipxWfJZzZ1SsjELQWvkwd', + secret: null, + jobsT: { + UUID: 'dc239cd1-bef4-4999-88e1-7332c64bf78c', + JobID: 32, + UserID: 'anon-id-new<<>>identified user id', + CreatedAt: '2022-08-18T03:13:15.549078Z', + ExpireAt: '2022-08-18T03:13:15.549078Z', + CustomVal: 'LAMBDA', + EventCount: 1, + EventPayload: { + type: 'track', + event: 'Product Purchased new', + sentAt: '2022-08-18T08:43:15.539+05:30', + userId: 'identified user id', + context: { + ip: '14.5.67.21', + library: { + name: 'http', + }, + }, + rudderId: 'daf823fb-e8d3-413a-8313-d34cd756f968', + messageId: '9f8fb785-c720-4381-a009-bf22a13f4ced', + timestamp: '2020-02-02T00:23:09.544Z', + properties: { + data: [ + { + id: 6104546, + url: 'https://api.github.com/repos/mralexgray/-REPONAME', + fork: false, + name: '-REPONAME', + size: 48, + forks: 0, + owner: { + id: 262517, + url: 'https://api.github.com/users/mralexgray', + type: 'User', + login: 'mralexgray', + node_id: 'MDQ6VXNlcjI2MjUxNw==', + html_url: 'https://github.com/mralexgray', + gists_url: 'https://api.github.com/users/mralexgray/gists{/gist_id}', + repos_url: 'https://api.github.com/users/mralexgray/repos', + avatar_url: 'https://avatars.githubusercontent.com/u/262517?v=4', + events_url: + 'https://api.github.com/users/mralexgray/events{/privacy}', + site_admin: false, + gravatar_id: '', + starred_url: + 'https://api.github.com/users/mralexgray/starred{/owner}{/repo}', + followers_url: 'https://api.github.com/users/mralexgray/followers', + following_url: + 'https://api.github.com/users/mralexgray/following{/other_user}', + organizations_url: 'https://api.github.com/users/mralexgray/orgs', + subscriptions_url: + 'https://api.github.com/users/mralexgray/subscriptions', + received_events_url: + 'https://api.github.com/users/mralexgray/received_events', + }, + topics: [], + git_url: 'git://github.com/mralexgray/-REPONAME.git', + license: null, + node_id: 'MDEwOlJlcG9zaXRvcnk2MTA0NTQ2', + private: false, + ssh_url: 'git@github.com:mralexgray/-REPONAME.git', + svn_url: 'https://github.com/mralexgray/-REPONAME', + archived: false, + disabled: false, + has_wiki: true, + homepage: null, + html_url: 'https://github.com/mralexgray/-REPONAME', + keys_url: + 'https://api.github.com/repos/mralexgray/-REPONAME/keys{/key_id}', + language: null, + tags_url: 'https://api.github.com/repos/mralexgray/-REPONAME/tags', + watchers: 0, + blobs_url: + 'https://api.github.com/repos/mralexgray/-REPONAME/git/blobs{/sha}', + clone_url: 'https://github.com/mralexgray/-REPONAME.git', + forks_url: 'https://api.github.com/repos/mralexgray/-REPONAME/forks', + full_name: 'mralexgray/-REPONAME', + has_pages: false, + hooks_url: 'https://api.github.com/repos/mralexgray/-REPONAME/hooks', + pulls_url: + 'https://api.github.com/repos/mralexgray/-REPONAME/pulls{/number}', + pushed_at: '2012-10-06T16:37:39Z', + teams_url: 'https://api.github.com/repos/mralexgray/-REPONAME/teams', + trees_url: + 'https://api.github.com/repos/mralexgray/-REPONAME/git/trees{/sha}', + created_at: '2012-10-06T16:37:39Z', + events_url: 'https://api.github.com/repos/mralexgray/-REPONAME/events', + has_issues: true, + issues_url: + 'https://api.github.com/repos/mralexgray/-REPONAME/issues{/number}', + labels_url: + 'https://api.github.com/repos/mralexgray/-REPONAME/labels{/name}', + merges_url: 'https://api.github.com/repos/mralexgray/-REPONAME/merges', + mirror_url: null, + updated_at: '2013-01-12T13:39:30Z', + visibility: 'public', + archive_url: + 'https://api.github.com/repos/mralexgray/-REPONAME/{archive_format}{/ref}', + commits_url: + 'https://api.github.com/repos/mralexgray/-REPONAME/commits{/sha}', + compare_url: + 'https://api.github.com/repos/mralexgray/-REPONAME/compare/{base}...{head}', + description: null, + forks_count: 0, + is_template: false, + open_issues: 0, + branches_url: + 'https://api.github.com/repos/mralexgray/-REPONAME/branches{/branch}', + comments_url: + 'https://api.github.com/repos/mralexgray/-REPONAME/comments{/number}', + contents_url: + 'https://api.github.com/repos/mralexgray/-REPONAME/contents/{+path}', + git_refs_url: + 'https://api.github.com/repos/mralexgray/-REPONAME/git/refs{/sha}', + git_tags_url: + 'https://api.github.com/repos/mralexgray/-REPONAME/git/tags{/sha}', + has_projects: true, + releases_url: + 'https://api.github.com/repos/mralexgray/-REPONAME/releases{/id}', + statuses_url: + 'https://api.github.com/repos/mralexgray/-REPONAME/statuses/{sha}', + allow_forking: true, + assignees_url: + 'https://api.github.com/repos/mralexgray/-REPONAME/assignees{/user}', + downloads_url: + 'https://api.github.com/repos/mralexgray/-REPONAME/downloads', + has_downloads: true, + languages_url: + 'https://api.github.com/repos/mralexgray/-REPONAME/languages', + default_branch: 'master', + milestones_url: + 'https://api.github.com/repos/mralexgray/-REPONAME/milestones{/number}', + stargazers_url: + 'https://api.github.com/repos/mralexgray/-REPONAME/stargazers', + watchers_count: 0, + deployments_url: + 'https://api.github.com/repos/mralexgray/-REPONAME/deployments', + git_commits_url: + 'https://api.github.com/repos/mralexgray/-REPONAME/git/commits{/sha}', + subscribers_url: + 'https://api.github.com/repos/mralexgray/-REPONAME/subscribers', + contributors_url: + 'https://api.github.com/repos/mralexgray/-REPONAME/contributors', + issue_events_url: + 'https://api.github.com/repos/mralexgray/-REPONAME/issues/events{/number}', + stargazers_count: 0, + subscription_url: + 'https://api.github.com/repos/mralexgray/-REPONAME/subscription', + collaborators_url: + 'https://api.github.com/repos/mralexgray/-REPONAME/collaborators{/collaborator}', + issue_comment_url: + 'https://api.github.com/repos/mralexgray/-REPONAME/issues/comments{/number}', + notifications_url: + 'https://api.github.com/repos/mralexgray/-REPONAME/notifications{?since,all,participating}', + open_issues_count: 0, + web_commit_signoff_required: false, + }, + { + id: 104510411, + url: 'https://api.github.com/repos/mralexgray/...', + fork: true, + name: '...', + size: 113, + forks: 0, + owner: { + id: 262517, + url: 'https://api.github.com/users/mralexgray', + type: 'User', + login: 'mralexgray', + node_id: 'MDQ6VXNlcjI2MjUxNw==', + html_url: 'https://github.com/mralexgray', + gists_url: 'https://api.github.com/users/mralexgray/gists{/gist_id}', + repos_url: 'https://api.github.com/users/mralexgray/repos', + avatar_url: 'https://avatars.githubusercontent.com/u/262517?v=4', + events_url: + 'https://api.github.com/users/mralexgray/events{/privacy}', + site_admin: false, + gravatar_id: '', + starred_url: + 'https://api.github.com/users/mralexgray/starred{/owner}{/repo}', + followers_url: 'https://api.github.com/users/mralexgray/followers', + following_url: + 'https://api.github.com/users/mralexgray/following{/other_user}', + organizations_url: 'https://api.github.com/users/mralexgray/orgs', + subscriptions_url: + 'https://api.github.com/users/mralexgray/subscriptions', + received_events_url: + 'https://api.github.com/users/mralexgray/received_events', + }, + topics: [], + git_url: 'git://github.com/mralexgray/....git', + license: { + key: 'mit', + url: 'https://api.github.com/licenses/mit', + name: 'MIT License', + node_id: 'MDc6TGljZW5zZTEz', + spdx_id: 'MIT', + }, + node_id: 'MDEwOlJlcG9zaXRvcnkxMDQ1MTA0MTE=', + private: false, + ssh_url: 'git@github.com:mralexgray/....git', + svn_url: 'https://github.com/mralexgray/...', + archived: false, + disabled: false, + has_wiki: false, + homepage: 'https://driesvints.com/blog/getting-started-with-dotfiles', + html_url: 'https://github.com/mralexgray/...', + keys_url: 'https://api.github.com/repos/mralexgray/.../keys{/key_id}', + language: 'Shell', + tags_url: 'https://api.github.com/repos/mralexgray/.../tags', + watchers: 0, + blobs_url: + 'https://api.github.com/repos/mralexgray/.../git/blobs{/sha}', + clone_url: 'https://github.com/mralexgray/....git', + forks_url: 'https://api.github.com/repos/mralexgray/.../forks', + full_name: 'mralexgray/...', + has_pages: false, + hooks_url: 'https://api.github.com/repos/mralexgray/.../hooks', + pulls_url: 'https://api.github.com/repos/mralexgray/.../pulls{/number}', + pushed_at: '2017-09-15T08:27:32Z', + teams_url: 'https://api.github.com/repos/mralexgray/.../teams', + trees_url: + 'https://api.github.com/repos/mralexgray/.../git/trees{/sha}', + created_at: '2017-09-22T19:19:42Z', + events_url: 'https://api.github.com/repos/mralexgray/.../events', + has_issues: false, + issues_url: + 'https://api.github.com/repos/mralexgray/.../issues{/number}', + labels_url: 'https://api.github.com/repos/mralexgray/.../labels{/name}', + merges_url: 'https://api.github.com/repos/mralexgray/.../merges', + mirror_url: null, + updated_at: '2017-09-22T19:20:22Z', + visibility: 'public', + archive_url: + 'https://api.github.com/repos/mralexgray/.../{archive_format}{/ref}', + commits_url: + 'https://api.github.com/repos/mralexgray/.../commits{/sha}', + compare_url: + 'https://api.github.com/repos/mralexgray/.../compare/{base}...{head}', + description: ':computer: Public repo for my personal dotfiles.', + forks_count: 0, + is_template: false, + open_issues: 0, + branches_url: + 'https://api.github.com/repos/mralexgray/.../branches{/branch}', + comments_url: + 'https://api.github.com/repos/mralexgray/.../comments{/number}', + contents_url: + 'https://api.github.com/repos/mralexgray/.../contents/{+path}', + git_refs_url: + 'https://api.github.com/repos/mralexgray/.../git/refs{/sha}', + git_tags_url: + 'https://api.github.com/repos/mralexgray/.../git/tags{/sha}', + has_projects: true, + releases_url: + 'https://api.github.com/repos/mralexgray/.../releases{/id}', + statuses_url: + 'https://api.github.com/repos/mralexgray/.../statuses/{sha}', + allow_forking: true, + assignees_url: + 'https://api.github.com/repos/mralexgray/.../assignees{/user}', + downloads_url: 'https://api.github.com/repos/mralexgray/.../downloads', + has_downloads: true, + languages_url: 'https://api.github.com/repos/mralexgray/.../languages', + default_branch: 'master', + milestones_url: + 'https://api.github.com/repos/mralexgray/.../milestones{/number}', + stargazers_url: + 'https://api.github.com/repos/mralexgray/.../stargazers', + watchers_count: 0, + deployments_url: + 'https://api.github.com/repos/mralexgray/.../deployments', + git_commits_url: + 'https://api.github.com/repos/mralexgray/.../git/commits{/sha}', + subscribers_url: + 'https://api.github.com/repos/mralexgray/.../subscribers', + contributors_url: + 'https://api.github.com/repos/mralexgray/.../contributors', + issue_events_url: + 'https://api.github.com/repos/mralexgray/.../issues/events{/number}', + stargazers_count: 0, + subscription_url: + 'https://api.github.com/repos/mralexgray/.../subscription', + collaborators_url: + 'https://api.github.com/repos/mralexgray/.../collaborators{/collaborator}', + issue_comment_url: + 'https://api.github.com/repos/mralexgray/.../issues/comments{/number}', + notifications_url: + 'https://api.github.com/repos/mralexgray/.../notifications{?since,all,participating}', + open_issues_count: 0, + web_commit_signoff_required: false, + }, + { + id: 58656723, + url: 'https://api.github.com/repos/mralexgray/2200087-Serial-Protocol', + fork: true, + name: '2200087-Serial-Protocol', + size: 41, + forks: 1, + owner: { + id: 262517, + url: 'https://api.github.com/users/mralexgray', + type: 'User', + login: 'mralexgray', + node_id: 'MDQ6VXNlcjI2MjUxNw==', + html_url: 'https://github.com/mralexgray', + gists_url: 'https://api.github.com/users/mralexgray/gists{/gist_id}', + repos_url: 'https://api.github.com/users/mralexgray/repos', + avatar_url: 'https://avatars.githubusercontent.com/u/262517?v=4', + events_url: + 'https://api.github.com/users/mralexgray/events{/privacy}', + site_admin: false, + gravatar_id: '', + starred_url: + 'https://api.github.com/users/mralexgray/starred{/owner}{/repo}', + followers_url: 'https://api.github.com/users/mralexgray/followers', + following_url: + 'https://api.github.com/users/mralexgray/following{/other_user}', + organizations_url: 'https://api.github.com/users/mralexgray/orgs', + subscriptions_url: + 'https://api.github.com/users/mralexgray/subscriptions', + received_events_url: + 'https://api.github.com/users/mralexgray/received_events', + }, + topics: [], + git_url: 'git://github.com/mralexgray/2200087-Serial-Protocol.git', + license: { + key: 'gpl-2.0', + url: 'https://api.github.com/licenses/gpl-2.0', + name: 'GNU General Public License v2.0', + node_id: 'MDc6TGljZW5zZTg=', + spdx_id: 'GPL-2.0', + }, + node_id: 'MDEwOlJlcG9zaXRvcnk1ODY1NjcyMw==', + private: false, + ssh_url: 'git@github.com:mralexgray/2200087-Serial-Protocol.git', + svn_url: 'https://github.com/mralexgray/2200087-Serial-Protocol', + archived: false, + disabled: false, + has_wiki: true, + homepage: 'http://daviddworken.com', + html_url: 'https://github.com/mralexgray/2200087-Serial-Protocol', + keys_url: + 'https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/keys{/key_id}', + language: 'Python', + tags_url: + 'https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/tags', + watchers: 0, + blobs_url: + 'https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/git/blobs{/sha}', + clone_url: 'https://github.com/mralexgray/2200087-Serial-Protocol.git', + forks_url: + 'https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/forks', + full_name: 'mralexgray/2200087-Serial-Protocol', + has_pages: false, + hooks_url: + 'https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/hooks', + pulls_url: + 'https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/pulls{/number}', + pushed_at: '2016-05-12T16:07:24Z', + teams_url: + 'https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/teams', + trees_url: + 'https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/git/trees{/sha}', + created_at: '2016-05-12T16:05:28Z', + events_url: + 'https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/events', + has_issues: false, + issues_url: + 'https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/issues{/number}', + labels_url: + 'https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/labels{/name}', + merges_url: + 'https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/merges', + mirror_url: null, + updated_at: '2016-05-12T16:05:30Z', + visibility: 'public', + archive_url: + 'https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/{archive_format}{/ref}', + commits_url: + 'https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/commits{/sha}', + compare_url: + 'https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/compare/{base}...{head}', + description: + "A reverse engineered protocol description and accompanying code for Radioshack's 2200087 multimeter", + forks_count: 1, + is_template: false, + open_issues: 0, + branches_url: + 'https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/branches{/branch}', + comments_url: + 'https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/comments{/number}', + contents_url: + 'https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/contents/{+path}', + git_refs_url: + 'https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/git/refs{/sha}', + git_tags_url: + 'https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/git/tags{/sha}', + has_projects: true, + releases_url: + 'https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/releases{/id}', + statuses_url: + 'https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/statuses/{sha}', + allow_forking: true, + assignees_url: + 'https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/assignees{/user}', + downloads_url: + 'https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/downloads', + has_downloads: true, + languages_url: + 'https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/languages', + default_branch: 'master', + milestones_url: + 'https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/milestones{/number}', + stargazers_url: + 'https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/stargazers', + watchers_count: 0, + deployments_url: + 'https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/deployments', + git_commits_url: + 'https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/git/commits{/sha}', + subscribers_url: + 'https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/subscribers', + contributors_url: + 'https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/contributors', + issue_events_url: + 'https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/issues/events{/number}', + stargazers_count: 0, + subscription_url: + 'https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/subscription', + collaborators_url: + 'https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/collaborators{/collaborator}', + issue_comment_url: + 'https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/issues/comments{/number}', + notifications_url: + 'https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/notifications{?since,all,participating}', + open_issues_count: 0, + web_commit_signoff_required: false, + }, + { + id: 13121042, + url: 'https://api.github.com/repos/mralexgray/ace', + fork: true, + name: 'ace', + size: 21080, + forks: 1, + owner: { + id: 262517, + url: 'https://api.github.com/users/mralexgray', + type: 'User', + login: 'mralexgray', + node_id: 'MDQ6VXNlcjI2MjUxNw==', + html_url: 'https://github.com/mralexgray', + gists_url: 'https://api.github.com/users/mralexgray/gists{/gist_id}', + repos_url: 'https://api.github.com/users/mralexgray/repos', + avatar_url: 'https://avatars.githubusercontent.com/u/262517?v=4', + events_url: + 'https://api.github.com/users/mralexgray/events{/privacy}', + site_admin: false, + gravatar_id: '', + starred_url: + 'https://api.github.com/users/mralexgray/starred{/owner}{/repo}', + followers_url: 'https://api.github.com/users/mralexgray/followers', + following_url: + 'https://api.github.com/users/mralexgray/following{/other_user}', + organizations_url: 'https://api.github.com/users/mralexgray/orgs', + subscriptions_url: + 'https://api.github.com/users/mralexgray/subscriptions', + received_events_url: + 'https://api.github.com/users/mralexgray/received_events', + }, + topics: [], + git_url: 'git://github.com/mralexgray/ace.git', + license: { + key: 'other', + url: null, + name: 'Other', + node_id: 'MDc6TGljZW5zZTA=', + spdx_id: 'NOASSERTION', + }, + node_id: 'MDEwOlJlcG9zaXRvcnkxMzEyMTA0Mg==', + private: false, + ssh_url: 'git@github.com:mralexgray/ace.git', + svn_url: 'https://github.com/mralexgray/ace', + archived: false, + disabled: false, + has_wiki: true, + homepage: 'http://ace.c9.io', + html_url: 'https://github.com/mralexgray/ace', + keys_url: 'https://api.github.com/repos/mralexgray/ace/keys{/key_id}', + language: 'JavaScript', + tags_url: 'https://api.github.com/repos/mralexgray/ace/tags', + watchers: 0, + blobs_url: + 'https://api.github.com/repos/mralexgray/ace/git/blobs{/sha}', + clone_url: 'https://github.com/mralexgray/ace.git', + forks_url: 'https://api.github.com/repos/mralexgray/ace/forks', + full_name: 'mralexgray/ace', + has_pages: false, + hooks_url: 'https://api.github.com/repos/mralexgray/ace/hooks', + pulls_url: 'https://api.github.com/repos/mralexgray/ace/pulls{/number}', + pushed_at: '2013-10-26T12:34:48Z', + teams_url: 'https://api.github.com/repos/mralexgray/ace/teams', + trees_url: + 'https://api.github.com/repos/mralexgray/ace/git/trees{/sha}', + created_at: '2013-09-26T11:58:10Z', + events_url: 'https://api.github.com/repos/mralexgray/ace/events', + has_issues: false, + issues_url: + 'https://api.github.com/repos/mralexgray/ace/issues{/number}', + labels_url: 'https://api.github.com/repos/mralexgray/ace/labels{/name}', + merges_url: 'https://api.github.com/repos/mralexgray/ace/merges', + mirror_url: null, + updated_at: '2013-10-26T12:34:49Z', + visibility: 'public', + archive_url: + 'https://api.github.com/repos/mralexgray/ace/{archive_format}{/ref}', + commits_url: + 'https://api.github.com/repos/mralexgray/ace/commits{/sha}', + compare_url: + 'https://api.github.com/repos/mralexgray/ace/compare/{base}...{head}', + description: 'Ace (Ajax.org Cloud9 Editor)', + forks_count: 1, + is_template: false, + open_issues: 0, + branches_url: + 'https://api.github.com/repos/mralexgray/ace/branches{/branch}', + comments_url: + 'https://api.github.com/repos/mralexgray/ace/comments{/number}', + contents_url: + 'https://api.github.com/repos/mralexgray/ace/contents/{+path}', + git_refs_url: + 'https://api.github.com/repos/mralexgray/ace/git/refs{/sha}', + git_tags_url: + 'https://api.github.com/repos/mralexgray/ace/git/tags{/sha}', + has_projects: true, + releases_url: + 'https://api.github.com/repos/mralexgray/ace/releases{/id}', + statuses_url: + 'https://api.github.com/repos/mralexgray/ace/statuses/{sha}', + allow_forking: true, + assignees_url: + 'https://api.github.com/repos/mralexgray/ace/assignees{/user}', + downloads_url: 'https://api.github.com/repos/mralexgray/ace/downloads', + has_downloads: true, + languages_url: 'https://api.github.com/repos/mralexgray/ace/languages', + default_branch: 'master', + milestones_url: + 'https://api.github.com/repos/mralexgray/ace/milestones{/number}', + stargazers_url: + 'https://api.github.com/repos/mralexgray/ace/stargazers', + watchers_count: 0, + deployments_url: + 'https://api.github.com/repos/mralexgray/ace/deployments', + git_commits_url: + 'https://api.github.com/repos/mralexgray/ace/git/commits{/sha}', + subscribers_url: + 'https://api.github.com/repos/mralexgray/ace/subscribers', + contributors_url: + 'https://api.github.com/repos/mralexgray/ace/contributors', + issue_events_url: + 'https://api.github.com/repos/mralexgray/ace/issues/events{/number}', + stargazers_count: 0, + subscription_url: + 'https://api.github.com/repos/mralexgray/ace/subscription', + collaborators_url: + 'https://api.github.com/repos/mralexgray/ace/collaborators{/collaborator}', + issue_comment_url: + 'https://api.github.com/repos/mralexgray/ace/issues/comments{/number}', + notifications_url: + 'https://api.github.com/repos/mralexgray/ace/notifications{?since,all,participating}', + open_issues_count: 0, + web_commit_signoff_required: false, + }, + { + id: 10791045, + url: 'https://api.github.com/repos/mralexgray/ACEView', + fork: true, + name: 'ACEView', + size: 1733, + forks: 1, + owner: { + id: 262517, + url: 'https://api.github.com/users/mralexgray', + type: 'User', + login: 'mralexgray', + node_id: 'MDQ6VXNlcjI2MjUxNw==', + html_url: 'https://github.com/mralexgray', + gists_url: 'https://api.github.com/users/mralexgray/gists{/gist_id}', + repos_url: 'https://api.github.com/users/mralexgray/repos', + avatar_url: 'https://avatars.githubusercontent.com/u/262517?v=4', + events_url: + 'https://api.github.com/users/mralexgray/events{/privacy}', + site_admin: false, + gravatar_id: '', + starred_url: + 'https://api.github.com/users/mralexgray/starred{/owner}{/repo}', + followers_url: 'https://api.github.com/users/mralexgray/followers', + following_url: + 'https://api.github.com/users/mralexgray/following{/other_user}', + organizations_url: 'https://api.github.com/users/mralexgray/orgs', + subscriptions_url: + 'https://api.github.com/users/mralexgray/subscriptions', + received_events_url: + 'https://api.github.com/users/mralexgray/received_events', + }, + topics: [], + git_url: 'git://github.com/mralexgray/ACEView.git', + license: { + key: 'other', + url: null, + name: 'Other', + node_id: 'MDc6TGljZW5zZTA=', + spdx_id: 'NOASSERTION', + }, + node_id: 'MDEwOlJlcG9zaXRvcnkxMDc5MTA0NQ==', + private: false, + ssh_url: 'git@github.com:mralexgray/ACEView.git', + svn_url: 'https://github.com/mralexgray/ACEView', + archived: false, + disabled: false, + has_wiki: true, + homepage: null, + html_url: 'https://github.com/mralexgray/ACEView', + keys_url: + 'https://api.github.com/repos/mralexgray/ACEView/keys{/key_id}', + language: 'Objective-C', + tags_url: 'https://api.github.com/repos/mralexgray/ACEView/tags', + watchers: 0, + blobs_url: + 'https://api.github.com/repos/mralexgray/ACEView/git/blobs{/sha}', + clone_url: 'https://github.com/mralexgray/ACEView.git', + forks_url: 'https://api.github.com/repos/mralexgray/ACEView/forks', + full_name: 'mralexgray/ACEView', + has_pages: false, + hooks_url: 'https://api.github.com/repos/mralexgray/ACEView/hooks', + pulls_url: + 'https://api.github.com/repos/mralexgray/ACEView/pulls{/number}', + pushed_at: '2014-05-09T01:36:23Z', + teams_url: 'https://api.github.com/repos/mralexgray/ACEView/teams', + trees_url: + 'https://api.github.com/repos/mralexgray/ACEView/git/trees{/sha}', + created_at: '2013-06-19T12:15:04Z', + events_url: 'https://api.github.com/repos/mralexgray/ACEView/events', + has_issues: false, + issues_url: + 'https://api.github.com/repos/mralexgray/ACEView/issues{/number}', + labels_url: + 'https://api.github.com/repos/mralexgray/ACEView/labels{/name}', + merges_url: 'https://api.github.com/repos/mralexgray/ACEView/merges', + mirror_url: null, + updated_at: '2015-11-24T01:14:10Z', + visibility: 'public', + archive_url: + 'https://api.github.com/repos/mralexgray/ACEView/{archive_format}{/ref}', + commits_url: + 'https://api.github.com/repos/mralexgray/ACEView/commits{/sha}', + compare_url: + 'https://api.github.com/repos/mralexgray/ACEView/compare/{base}...{head}', + description: 'Use the wonderful ACE editor in your Cocoa applications', + forks_count: 1, + is_template: false, + open_issues: 0, + branches_url: + 'https://api.github.com/repos/mralexgray/ACEView/branches{/branch}', + comments_url: + 'https://api.github.com/repos/mralexgray/ACEView/comments{/number}', + contents_url: + 'https://api.github.com/repos/mralexgray/ACEView/contents/{+path}', + git_refs_url: + 'https://api.github.com/repos/mralexgray/ACEView/git/refs{/sha}', + git_tags_url: + 'https://api.github.com/repos/mralexgray/ACEView/git/tags{/sha}', + has_projects: true, + releases_url: + 'https://api.github.com/repos/mralexgray/ACEView/releases{/id}', + statuses_url: + 'https://api.github.com/repos/mralexgray/ACEView/statuses/{sha}', + allow_forking: true, + assignees_url: + 'https://api.github.com/repos/mralexgray/ACEView/assignees{/user}', + downloads_url: + 'https://api.github.com/repos/mralexgray/ACEView/downloads', + has_downloads: true, + languages_url: + 'https://api.github.com/repos/mralexgray/ACEView/languages', + default_branch: 'master', + milestones_url: + 'https://api.github.com/repos/mralexgray/ACEView/milestones{/number}', + stargazers_url: + 'https://api.github.com/repos/mralexgray/ACEView/stargazers', + watchers_count: 0, + deployments_url: + 'https://api.github.com/repos/mralexgray/ACEView/deployments', + git_commits_url: + 'https://api.github.com/repos/mralexgray/ACEView/git/commits{/sha}', + subscribers_url: + 'https://api.github.com/repos/mralexgray/ACEView/subscribers', + contributors_url: + 'https://api.github.com/repos/mralexgray/ACEView/contributors', + issue_events_url: + 'https://api.github.com/repos/mralexgray/ACEView/issues/events{/number}', + stargazers_count: 0, + subscription_url: + 'https://api.github.com/repos/mralexgray/ACEView/subscription', + collaborators_url: + 'https://api.github.com/repos/mralexgray/ACEView/collaborators{/collaborator}', + issue_comment_url: + 'https://api.github.com/repos/mralexgray/ACEView/issues/comments{/number}', + notifications_url: + 'https://api.github.com/repos/mralexgray/ACEView/notifications{?since,all,participating}', + open_issues_count: 0, + web_commit_signoff_required: false, + }, + { + id: 13623648, + url: 'https://api.github.com/repos/mralexgray/ActiveLog', + fork: true, + name: 'ActiveLog', + size: 60, + forks: 0, + owner: { + id: 262517, + url: 'https://api.github.com/users/mralexgray', + type: 'User', + login: 'mralexgray', + node_id: 'MDQ6VXNlcjI2MjUxNw==', + html_url: 'https://github.com/mralexgray', + gists_url: 'https://api.github.com/users/mralexgray/gists{/gist_id}', + repos_url: 'https://api.github.com/users/mralexgray/repos', + avatar_url: 'https://avatars.githubusercontent.com/u/262517?v=4', + events_url: + 'https://api.github.com/users/mralexgray/events{/privacy}', + site_admin: false, + gravatar_id: '', + starred_url: + 'https://api.github.com/users/mralexgray/starred{/owner}{/repo}', + followers_url: 'https://api.github.com/users/mralexgray/followers', + following_url: + 'https://api.github.com/users/mralexgray/following{/other_user}', + organizations_url: 'https://api.github.com/users/mralexgray/orgs', + subscriptions_url: + 'https://api.github.com/users/mralexgray/subscriptions', + received_events_url: + 'https://api.github.com/users/mralexgray/received_events', + }, + topics: [], + git_url: 'git://github.com/mralexgray/ActiveLog.git', + license: null, + node_id: 'MDEwOlJlcG9zaXRvcnkxMzYyMzY0OA==', + private: false, + ssh_url: 'git@github.com:mralexgray/ActiveLog.git', + svn_url: 'https://github.com/mralexgray/ActiveLog', + archived: false, + disabled: false, + has_wiki: true, + homepage: 'http://deepitpro.com/en/articles/ActiveLog/info/', + html_url: 'https://github.com/mralexgray/ActiveLog', + keys_url: + 'https://api.github.com/repos/mralexgray/ActiveLog/keys{/key_id}', + language: 'Objective-C', + tags_url: 'https://api.github.com/repos/mralexgray/ActiveLog/tags', + watchers: 0, + blobs_url: + 'https://api.github.com/repos/mralexgray/ActiveLog/git/blobs{/sha}', + clone_url: 'https://github.com/mralexgray/ActiveLog.git', + forks_url: 'https://api.github.com/repos/mralexgray/ActiveLog/forks', + full_name: 'mralexgray/ActiveLog', + has_pages: false, + hooks_url: 'https://api.github.com/repos/mralexgray/ActiveLog/hooks', + pulls_url: + 'https://api.github.com/repos/mralexgray/ActiveLog/pulls{/number}', + pushed_at: '2011-07-03T06:28:59Z', + teams_url: 'https://api.github.com/repos/mralexgray/ActiveLog/teams', + trees_url: + 'https://api.github.com/repos/mralexgray/ActiveLog/git/trees{/sha}', + created_at: '2013-10-16T15:52:37Z', + events_url: 'https://api.github.com/repos/mralexgray/ActiveLog/events', + has_issues: false, + issues_url: + 'https://api.github.com/repos/mralexgray/ActiveLog/issues{/number}', + labels_url: + 'https://api.github.com/repos/mralexgray/ActiveLog/labels{/name}', + merges_url: 'https://api.github.com/repos/mralexgray/ActiveLog/merges', + mirror_url: null, + updated_at: '2013-10-16T15:52:37Z', + visibility: 'public', + archive_url: + 'https://api.github.com/repos/mralexgray/ActiveLog/{archive_format}{/ref}', + commits_url: + 'https://api.github.com/repos/mralexgray/ActiveLog/commits{/sha}', + compare_url: + 'https://api.github.com/repos/mralexgray/ActiveLog/compare/{base}...{head}', + description: 'Shut up all logs with active filter.', + forks_count: 0, + is_template: false, + open_issues: 0, + branches_url: + 'https://api.github.com/repos/mralexgray/ActiveLog/branches{/branch}', + comments_url: + 'https://api.github.com/repos/mralexgray/ActiveLog/comments{/number}', + contents_url: + 'https://api.github.com/repos/mralexgray/ActiveLog/contents/{+path}', + git_refs_url: + 'https://api.github.com/repos/mralexgray/ActiveLog/git/refs{/sha}', + git_tags_url: + 'https://api.github.com/repos/mralexgray/ActiveLog/git/tags{/sha}', + has_projects: true, + releases_url: + 'https://api.github.com/repos/mralexgray/ActiveLog/releases{/id}', + statuses_url: + 'https://api.github.com/repos/mralexgray/ActiveLog/statuses/{sha}', + allow_forking: true, + assignees_url: + 'https://api.github.com/repos/mralexgray/ActiveLog/assignees{/user}', + downloads_url: + 'https://api.github.com/repos/mralexgray/ActiveLog/downloads', + has_downloads: true, + languages_url: + 'https://api.github.com/repos/mralexgray/ActiveLog/languages', + default_branch: 'master', + milestones_url: + 'https://api.github.com/repos/mralexgray/ActiveLog/milestones{/number}', + stargazers_url: + 'https://api.github.com/repos/mralexgray/ActiveLog/stargazers', + watchers_count: 0, + deployments_url: + 'https://api.github.com/repos/mralexgray/ActiveLog/deployments', + git_commits_url: + 'https://api.github.com/repos/mralexgray/ActiveLog/git/commits{/sha}', + subscribers_url: + 'https://api.github.com/repos/mralexgray/ActiveLog/subscribers', + contributors_url: + 'https://api.github.com/repos/mralexgray/ActiveLog/contributors', + issue_events_url: + 'https://api.github.com/repos/mralexgray/ActiveLog/issues/events{/number}', + stargazers_count: 0, + subscription_url: + 'https://api.github.com/repos/mralexgray/ActiveLog/subscription', + collaborators_url: + 'https://api.github.com/repos/mralexgray/ActiveLog/collaborators{/collaborator}', + issue_comment_url: + 'https://api.github.com/repos/mralexgray/ActiveLog/issues/comments{/number}', + notifications_url: + 'https://api.github.com/repos/mralexgray/ActiveLog/notifications{?since,all,participating}', + open_issues_count: 0, + web_commit_signoff_required: false, + }, + { + id: 9716210, + url: 'https://api.github.com/repos/mralexgray/adium', + fork: false, + name: 'adium', + size: 277719, + forks: 37, + owner: { + id: 262517, + url: 'https://api.github.com/users/mralexgray', + type: 'User', + login: 'mralexgray', + node_id: 'MDQ6VXNlcjI2MjUxNw==', + html_url: 'https://github.com/mralexgray', + gists_url: 'https://api.github.com/users/mralexgray/gists{/gist_id}', + repos_url: 'https://api.github.com/users/mralexgray/repos', + avatar_url: 'https://avatars.githubusercontent.com/u/262517?v=4', + events_url: + 'https://api.github.com/users/mralexgray/events{/privacy}', + site_admin: false, + gravatar_id: '', + starred_url: + 'https://api.github.com/users/mralexgray/starred{/owner}{/repo}', + followers_url: 'https://api.github.com/users/mralexgray/followers', + following_url: + 'https://api.github.com/users/mralexgray/following{/other_user}', + organizations_url: 'https://api.github.com/users/mralexgray/orgs', + subscriptions_url: + 'https://api.github.com/users/mralexgray/subscriptions', + received_events_url: + 'https://api.github.com/users/mralexgray/received_events', + }, + topics: [], + git_url: 'git://github.com/mralexgray/adium.git', + license: { + key: 'other', + url: null, + name: 'Other', + node_id: 'MDc6TGljZW5zZTA=', + spdx_id: 'NOASSERTION', + }, + node_id: 'MDEwOlJlcG9zaXRvcnk5NzE2MjEw', + private: false, + ssh_url: 'git@github.com:mralexgray/adium.git', + svn_url: 'https://github.com/mralexgray/adium', + archived: false, + disabled: false, + has_wiki: false, + homepage: null, + html_url: 'https://github.com/mralexgray/adium', + keys_url: 'https://api.github.com/repos/mralexgray/adium/keys{/key_id}', + language: 'Objective-C', + tags_url: 'https://api.github.com/repos/mralexgray/adium/tags', + watchers: 0, + blobs_url: + 'https://api.github.com/repos/mralexgray/adium/git/blobs{/sha}', + clone_url: 'https://github.com/mralexgray/adium.git', + forks_url: 'https://api.github.com/repos/mralexgray/adium/forks', + full_name: 'mralexgray/adium', + has_pages: false, + hooks_url: 'https://api.github.com/repos/mralexgray/adium/hooks', + pulls_url: + 'https://api.github.com/repos/mralexgray/adium/pulls{/number}', + pushed_at: '2013-04-26T16:43:53Z', + teams_url: 'https://api.github.com/repos/mralexgray/adium/teams', + trees_url: + 'https://api.github.com/repos/mralexgray/adium/git/trees{/sha}', + created_at: '2013-04-27T14:59:33Z', + events_url: 'https://api.github.com/repos/mralexgray/adium/events', + has_issues: false, + issues_url: + 'https://api.github.com/repos/mralexgray/adium/issues{/number}', + labels_url: + 'https://api.github.com/repos/mralexgray/adium/labels{/name}', + merges_url: 'https://api.github.com/repos/mralexgray/adium/merges', + mirror_url: null, + updated_at: '2019-12-11T06:51:45Z', + visibility: 'public', + archive_url: + 'https://api.github.com/repos/mralexgray/adium/{archive_format}{/ref}', + commits_url: + 'https://api.github.com/repos/mralexgray/adium/commits{/sha}', + compare_url: + 'https://api.github.com/repos/mralexgray/adium/compare/{base}...{head}', + description: 'Official mirror of hg.adium.im', + forks_count: 37, + is_template: false, + open_issues: 0, + branches_url: + 'https://api.github.com/repos/mralexgray/adium/branches{/branch}', + comments_url: + 'https://api.github.com/repos/mralexgray/adium/comments{/number}', + contents_url: + 'https://api.github.com/repos/mralexgray/adium/contents/{+path}', + git_refs_url: + 'https://api.github.com/repos/mralexgray/adium/git/refs{/sha}', + git_tags_url: + 'https://api.github.com/repos/mralexgray/adium/git/tags{/sha}', + has_projects: true, + releases_url: + 'https://api.github.com/repos/mralexgray/adium/releases{/id}', + statuses_url: + 'https://api.github.com/repos/mralexgray/adium/statuses/{sha}', + allow_forking: true, + assignees_url: + 'https://api.github.com/repos/mralexgray/adium/assignees{/user}', + downloads_url: + 'https://api.github.com/repos/mralexgray/adium/downloads', + has_downloads: true, + languages_url: + 'https://api.github.com/repos/mralexgray/adium/languages', + default_branch: 'master', + milestones_url: + 'https://api.github.com/repos/mralexgray/adium/milestones{/number}', + stargazers_url: + 'https://api.github.com/repos/mralexgray/adium/stargazers', + watchers_count: 0, + deployments_url: + 'https://api.github.com/repos/mralexgray/adium/deployments', + git_commits_url: + 'https://api.github.com/repos/mralexgray/adium/git/commits{/sha}', + subscribers_url: + 'https://api.github.com/repos/mralexgray/adium/subscribers', + contributors_url: + 'https://api.github.com/repos/mralexgray/adium/contributors', + issue_events_url: + 'https://api.github.com/repos/mralexgray/adium/issues/events{/number}', + stargazers_count: 0, + subscription_url: + 'https://api.github.com/repos/mralexgray/adium/subscription', + collaborators_url: + 'https://api.github.com/repos/mralexgray/adium/collaborators{/collaborator}', + issue_comment_url: + 'https://api.github.com/repos/mralexgray/adium/issues/comments{/number}', + notifications_url: + 'https://api.github.com/repos/mralexgray/adium/notifications{?since,all,participating}', + open_issues_count: 0, + web_commit_signoff_required: false, + }, + { + id: 12752329, + url: 'https://api.github.com/repos/mralexgray/ADLivelyTableView', + fork: true, + name: 'ADLivelyTableView', + size: 73, + forks: 0, + owner: { + id: 262517, + url: 'https://api.github.com/users/mralexgray', + type: 'User', + login: 'mralexgray', + node_id: 'MDQ6VXNlcjI2MjUxNw==', + html_url: 'https://github.com/mralexgray', + gists_url: 'https://api.github.com/users/mralexgray/gists{/gist_id}', + repos_url: 'https://api.github.com/users/mralexgray/repos', + avatar_url: 'https://avatars.githubusercontent.com/u/262517?v=4', + events_url: + 'https://api.github.com/users/mralexgray/events{/privacy}', + site_admin: false, + gravatar_id: '', + starred_url: + 'https://api.github.com/users/mralexgray/starred{/owner}{/repo}', + followers_url: 'https://api.github.com/users/mralexgray/followers', + following_url: + 'https://api.github.com/users/mralexgray/following{/other_user}', + organizations_url: 'https://api.github.com/users/mralexgray/orgs', + subscriptions_url: + 'https://api.github.com/users/mralexgray/subscriptions', + received_events_url: + 'https://api.github.com/users/mralexgray/received_events', + }, + topics: [], + git_url: 'git://github.com/mralexgray/ADLivelyTableView.git', + license: { + key: 'other', + url: null, + name: 'Other', + node_id: 'MDc6TGljZW5zZTA=', + spdx_id: 'NOASSERTION', + }, + node_id: 'MDEwOlJlcG9zaXRvcnkxMjc1MjMyOQ==', + private: false, + ssh_url: 'git@github.com:mralexgray/ADLivelyTableView.git', + svn_url: 'https://github.com/mralexgray/ADLivelyTableView', + archived: false, + disabled: false, + has_wiki: true, + homepage: 'http://applidium.com/en/news/lively_uitableview/', + html_url: 'https://github.com/mralexgray/ADLivelyTableView', + keys_url: + 'https://api.github.com/repos/mralexgray/ADLivelyTableView/keys{/key_id}', + language: 'Objective-C', + tags_url: + 'https://api.github.com/repos/mralexgray/ADLivelyTableView/tags', + watchers: 0, + blobs_url: + 'https://api.github.com/repos/mralexgray/ADLivelyTableView/git/blobs{/sha}', + clone_url: 'https://github.com/mralexgray/ADLivelyTableView.git', + forks_url: + 'https://api.github.com/repos/mralexgray/ADLivelyTableView/forks', + full_name: 'mralexgray/ADLivelyTableView', + has_pages: false, + hooks_url: + 'https://api.github.com/repos/mralexgray/ADLivelyTableView/hooks', + pulls_url: + 'https://api.github.com/repos/mralexgray/ADLivelyTableView/pulls{/number}', + pushed_at: '2012-05-10T10:40:15Z', + teams_url: + 'https://api.github.com/repos/mralexgray/ADLivelyTableView/teams', + trees_url: + 'https://api.github.com/repos/mralexgray/ADLivelyTableView/git/trees{/sha}', + created_at: '2013-09-11T09:18:01Z', + events_url: + 'https://api.github.com/repos/mralexgray/ADLivelyTableView/events', + has_issues: false, + issues_url: + 'https://api.github.com/repos/mralexgray/ADLivelyTableView/issues{/number}', + labels_url: + 'https://api.github.com/repos/mralexgray/ADLivelyTableView/labels{/name}', + merges_url: + 'https://api.github.com/repos/mralexgray/ADLivelyTableView/merges', + mirror_url: null, + updated_at: '2013-09-11T09:18:03Z', + visibility: 'public', + archive_url: + 'https://api.github.com/repos/mralexgray/ADLivelyTableView/{archive_format}{/ref}', + commits_url: + 'https://api.github.com/repos/mralexgray/ADLivelyTableView/commits{/sha}', + compare_url: + 'https://api.github.com/repos/mralexgray/ADLivelyTableView/compare/{base}...{head}', + description: 'Lively UITableView', + forks_count: 0, + is_template: false, + open_issues: 0, + branches_url: + 'https://api.github.com/repos/mralexgray/ADLivelyTableView/branches{/branch}', + comments_url: + 'https://api.github.com/repos/mralexgray/ADLivelyTableView/comments{/number}', + contents_url: + 'https://api.github.com/repos/mralexgray/ADLivelyTableView/contents/{+path}', + git_refs_url: + 'https://api.github.com/repos/mralexgray/ADLivelyTableView/git/refs{/sha}', + git_tags_url: + 'https://api.github.com/repos/mralexgray/ADLivelyTableView/git/tags{/sha}', + has_projects: true, + releases_url: + 'https://api.github.com/repos/mralexgray/ADLivelyTableView/releases{/id}', + statuses_url: + 'https://api.github.com/repos/mralexgray/ADLivelyTableView/statuses/{sha}', + allow_forking: true, + assignees_url: + 'https://api.github.com/repos/mralexgray/ADLivelyTableView/assignees{/user}', + downloads_url: + 'https://api.github.com/repos/mralexgray/ADLivelyTableView/downloads', + has_downloads: true, + languages_url: + 'https://api.github.com/repos/mralexgray/ADLivelyTableView/languages', + default_branch: 'master', + milestones_url: + 'https://api.github.com/repos/mralexgray/ADLivelyTableView/milestones{/number}', + stargazers_url: + 'https://api.github.com/repos/mralexgray/ADLivelyTableView/stargazers', + watchers_count: 0, + deployments_url: + 'https://api.github.com/repos/mralexgray/ADLivelyTableView/deployments', + git_commits_url: + 'https://api.github.com/repos/mralexgray/ADLivelyTableView/git/commits{/sha}', + subscribers_url: + 'https://api.github.com/repos/mralexgray/ADLivelyTableView/subscribers', + contributors_url: + 'https://api.github.com/repos/mralexgray/ADLivelyTableView/contributors', + issue_events_url: + 'https://api.github.com/repos/mralexgray/ADLivelyTableView/issues/events{/number}', + stargazers_count: 0, + subscription_url: + 'https://api.github.com/repos/mralexgray/ADLivelyTableView/subscription', + collaborators_url: + 'https://api.github.com/repos/mralexgray/ADLivelyTableView/collaborators{/collaborator}', + issue_comment_url: + 'https://api.github.com/repos/mralexgray/ADLivelyTableView/issues/comments{/number}', + notifications_url: + 'https://api.github.com/repos/mralexgray/ADLivelyTableView/notifications{?since,all,participating}', + open_issues_count: 0, + web_commit_signoff_required: false, + }, + { + id: 5697379, + url: 'https://api.github.com/repos/mralexgray/AFIncrementalStore', + fork: true, + name: 'AFIncrementalStore', + size: 139, + forks: 0, + owner: { + id: 262517, + url: 'https://api.github.com/users/mralexgray', + type: 'User', + login: 'mralexgray', + node_id: 'MDQ6VXNlcjI2MjUxNw==', + html_url: 'https://github.com/mralexgray', + gists_url: 'https://api.github.com/users/mralexgray/gists{/gist_id}', + repos_url: 'https://api.github.com/users/mralexgray/repos', + avatar_url: 'https://avatars.githubusercontent.com/u/262517?v=4', + events_url: + 'https://api.github.com/users/mralexgray/events{/privacy}', + site_admin: false, + gravatar_id: '', + starred_url: + 'https://api.github.com/users/mralexgray/starred{/owner}{/repo}', + followers_url: 'https://api.github.com/users/mralexgray/followers', + following_url: + 'https://api.github.com/users/mralexgray/following{/other_user}', + organizations_url: 'https://api.github.com/users/mralexgray/orgs', + subscriptions_url: + 'https://api.github.com/users/mralexgray/subscriptions', + received_events_url: + 'https://api.github.com/users/mralexgray/received_events', + }, + topics: [], + git_url: 'git://github.com/mralexgray/AFIncrementalStore.git', + license: { + key: 'mit', + url: 'https://api.github.com/licenses/mit', + name: 'MIT License', + node_id: 'MDc6TGljZW5zZTEz', + spdx_id: 'MIT', + }, + node_id: 'MDEwOlJlcG9zaXRvcnk1Njk3Mzc5', + private: false, + ssh_url: 'git@github.com:mralexgray/AFIncrementalStore.git', + svn_url: 'https://github.com/mralexgray/AFIncrementalStore', + archived: false, + disabled: false, + has_wiki: true, + homepage: null, + html_url: 'https://github.com/mralexgray/AFIncrementalStore', + keys_url: + 'https://api.github.com/repos/mralexgray/AFIncrementalStore/keys{/key_id}', + language: 'Objective-C', + tags_url: + 'https://api.github.com/repos/mralexgray/AFIncrementalStore/tags', + watchers: 0, + blobs_url: + 'https://api.github.com/repos/mralexgray/AFIncrementalStore/git/blobs{/sha}', + clone_url: 'https://github.com/mralexgray/AFIncrementalStore.git', + forks_url: + 'https://api.github.com/repos/mralexgray/AFIncrementalStore/forks', + full_name: 'mralexgray/AFIncrementalStore', + has_pages: false, + hooks_url: + 'https://api.github.com/repos/mralexgray/AFIncrementalStore/hooks', + pulls_url: + 'https://api.github.com/repos/mralexgray/AFIncrementalStore/pulls{/number}', + pushed_at: '2012-09-01T22:46:25Z', + teams_url: + 'https://api.github.com/repos/mralexgray/AFIncrementalStore/teams', + trees_url: + 'https://api.github.com/repos/mralexgray/AFIncrementalStore/git/trees{/sha}', + created_at: '2012-09-06T04:20:33Z', + events_url: + 'https://api.github.com/repos/mralexgray/AFIncrementalStore/events', + has_issues: false, + issues_url: + 'https://api.github.com/repos/mralexgray/AFIncrementalStore/issues{/number}', + labels_url: + 'https://api.github.com/repos/mralexgray/AFIncrementalStore/labels{/name}', + merges_url: + 'https://api.github.com/repos/mralexgray/AFIncrementalStore/merges', + mirror_url: null, + updated_at: '2013-01-12T03:15:29Z', + visibility: 'public', + archive_url: + 'https://api.github.com/repos/mralexgray/AFIncrementalStore/{archive_format}{/ref}', + commits_url: + 'https://api.github.com/repos/mralexgray/AFIncrementalStore/commits{/sha}', + compare_url: + 'https://api.github.com/repos/mralexgray/AFIncrementalStore/compare/{base}...{head}', + description: 'Core Data Persistence with AFNetworking, Done Right', + forks_count: 0, + is_template: false, + open_issues: 0, + branches_url: + 'https://api.github.com/repos/mralexgray/AFIncrementalStore/branches{/branch}', + comments_url: + 'https://api.github.com/repos/mralexgray/AFIncrementalStore/comments{/number}', + contents_url: + 'https://api.github.com/repos/mralexgray/AFIncrementalStore/contents/{+path}', + git_refs_url: + 'https://api.github.com/repos/mralexgray/AFIncrementalStore/git/refs{/sha}', + git_tags_url: + 'https://api.github.com/repos/mralexgray/AFIncrementalStore/git/tags{/sha}', + has_projects: true, + releases_url: + 'https://api.github.com/repos/mralexgray/AFIncrementalStore/releases{/id}', + statuses_url: + 'https://api.github.com/repos/mralexgray/AFIncrementalStore/statuses/{sha}', + allow_forking: true, + assignees_url: + 'https://api.github.com/repos/mralexgray/AFIncrementalStore/assignees{/user}', + downloads_url: + 'https://api.github.com/repos/mralexgray/AFIncrementalStore/downloads', + has_downloads: true, + languages_url: + 'https://api.github.com/repos/mralexgray/AFIncrementalStore/languages', + default_branch: 'master', + milestones_url: + 'https://api.github.com/repos/mralexgray/AFIncrementalStore/milestones{/number}', + stargazers_url: + 'https://api.github.com/repos/mralexgray/AFIncrementalStore/stargazers', + watchers_count: 0, + deployments_url: + 'https://api.github.com/repos/mralexgray/AFIncrementalStore/deployments', + git_commits_url: + 'https://api.github.com/repos/mralexgray/AFIncrementalStore/git/commits{/sha}', + subscribers_url: + 'https://api.github.com/repos/mralexgray/AFIncrementalStore/subscribers', + contributors_url: + 'https://api.github.com/repos/mralexgray/AFIncrementalStore/contributors', + issue_events_url: + 'https://api.github.com/repos/mralexgray/AFIncrementalStore/issues/events{/number}', + stargazers_count: 0, + subscription_url: + 'https://api.github.com/repos/mralexgray/AFIncrementalStore/subscription', + collaborators_url: + 'https://api.github.com/repos/mralexgray/AFIncrementalStore/collaborators{/collaborator}', + issue_comment_url: + 'https://api.github.com/repos/mralexgray/AFIncrementalStore/issues/comments{/number}', + notifications_url: + 'https://api.github.com/repos/mralexgray/AFIncrementalStore/notifications{?since,all,participating}', + open_issues_count: 0, + web_commit_signoff_required: false, + }, + { + id: 6969621, + url: 'https://api.github.com/repos/mralexgray/AFNetworking', + fork: true, + name: 'AFNetworking', + size: 4341, + forks: 0, + owner: { + id: 262517, + url: 'https://api.github.com/users/mralexgray', + type: 'User', + login: 'mralexgray', + node_id: 'MDQ6VXNlcjI2MjUxNw==', + html_url: 'https://github.com/mralexgray', + gists_url: 'https://api.github.com/users/mralexgray/gists{/gist_id}', + repos_url: 'https://api.github.com/users/mralexgray/repos', + avatar_url: 'https://avatars.githubusercontent.com/u/262517?v=4', + events_url: + 'https://api.github.com/users/mralexgray/events{/privacy}', + site_admin: false, + gravatar_id: '', + starred_url: + 'https://api.github.com/users/mralexgray/starred{/owner}{/repo}', + followers_url: 'https://api.github.com/users/mralexgray/followers', + following_url: + 'https://api.github.com/users/mralexgray/following{/other_user}', + organizations_url: 'https://api.github.com/users/mralexgray/orgs', + subscriptions_url: + 'https://api.github.com/users/mralexgray/subscriptions', + received_events_url: + 'https://api.github.com/users/mralexgray/received_events', + }, + topics: [], + git_url: 'git://github.com/mralexgray/AFNetworking.git', + license: { + key: 'mit', + url: 'https://api.github.com/licenses/mit', + name: 'MIT License', + node_id: 'MDc6TGljZW5zZTEz', + spdx_id: 'MIT', + }, + node_id: 'MDEwOlJlcG9zaXRvcnk2OTY5NjIx', + private: false, + ssh_url: 'git@github.com:mralexgray/AFNetworking.git', + svn_url: 'https://github.com/mralexgray/AFNetworking', + archived: false, + disabled: false, + has_wiki: true, + homepage: 'http://afnetworking.com', + html_url: 'https://github.com/mralexgray/AFNetworking', + keys_url: + 'https://api.github.com/repos/mralexgray/AFNetworking/keys{/key_id}', + language: 'Objective-C', + tags_url: 'https://api.github.com/repos/mralexgray/AFNetworking/tags', + watchers: 2, + blobs_url: + 'https://api.github.com/repos/mralexgray/AFNetworking/git/blobs{/sha}', + clone_url: 'https://github.com/mralexgray/AFNetworking.git', + forks_url: 'https://api.github.com/repos/mralexgray/AFNetworking/forks', + full_name: 'mralexgray/AFNetworking', + has_pages: false, + hooks_url: 'https://api.github.com/repos/mralexgray/AFNetworking/hooks', + pulls_url: + 'https://api.github.com/repos/mralexgray/AFNetworking/pulls{/number}', + pushed_at: '2014-01-24T07:14:32Z', + teams_url: 'https://api.github.com/repos/mralexgray/AFNetworking/teams', + trees_url: + 'https://api.github.com/repos/mralexgray/AFNetworking/git/trees{/sha}', + created_at: '2012-12-02T17:00:04Z', + events_url: + 'https://api.github.com/repos/mralexgray/AFNetworking/events', + has_issues: false, + issues_url: + 'https://api.github.com/repos/mralexgray/AFNetworking/issues{/number}', + labels_url: + 'https://api.github.com/repos/mralexgray/AFNetworking/labels{/name}', + merges_url: + 'https://api.github.com/repos/mralexgray/AFNetworking/merges', + mirror_url: null, + updated_at: '2014-01-24T07:14:33Z', + visibility: 'public', + archive_url: + 'https://api.github.com/repos/mralexgray/AFNetworking/{archive_format}{/ref}', + commits_url: + 'https://api.github.com/repos/mralexgray/AFNetworking/commits{/sha}', + compare_url: + 'https://api.github.com/repos/mralexgray/AFNetworking/compare/{base}...{head}', + description: 'A delightful iOS and OS X networking framework', + forks_count: 0, + is_template: false, + open_issues: 0, + branches_url: + 'https://api.github.com/repos/mralexgray/AFNetworking/branches{/branch}', + comments_url: + 'https://api.github.com/repos/mralexgray/AFNetworking/comments{/number}', + contents_url: + 'https://api.github.com/repos/mralexgray/AFNetworking/contents/{+path}', + git_refs_url: + 'https://api.github.com/repos/mralexgray/AFNetworking/git/refs{/sha}', + git_tags_url: + 'https://api.github.com/repos/mralexgray/AFNetworking/git/tags{/sha}', + has_projects: true, + releases_url: + 'https://api.github.com/repos/mralexgray/AFNetworking/releases{/id}', + statuses_url: + 'https://api.github.com/repos/mralexgray/AFNetworking/statuses/{sha}', + allow_forking: true, + assignees_url: + 'https://api.github.com/repos/mralexgray/AFNetworking/assignees{/user}', + downloads_url: + 'https://api.github.com/repos/mralexgray/AFNetworking/downloads', + has_downloads: true, + languages_url: + 'https://api.github.com/repos/mralexgray/AFNetworking/languages', + default_branch: 'master', + milestones_url: + 'https://api.github.com/repos/mralexgray/AFNetworking/milestones{/number}', + stargazers_url: + 'https://api.github.com/repos/mralexgray/AFNetworking/stargazers', + watchers_count: 2, + deployments_url: + 'https://api.github.com/repos/mralexgray/AFNetworking/deployments', + git_commits_url: + 'https://api.github.com/repos/mralexgray/AFNetworking/git/commits{/sha}', + subscribers_url: + 'https://api.github.com/repos/mralexgray/AFNetworking/subscribers', + contributors_url: + 'https://api.github.com/repos/mralexgray/AFNetworking/contributors', + issue_events_url: + 'https://api.github.com/repos/mralexgray/AFNetworking/issues/events{/number}', + stargazers_count: 2, + subscription_url: + 'https://api.github.com/repos/mralexgray/AFNetworking/subscription', + collaborators_url: + 'https://api.github.com/repos/mralexgray/AFNetworking/collaborators{/collaborator}', + issue_comment_url: + 'https://api.github.com/repos/mralexgray/AFNetworking/issues/comments{/number}', + notifications_url: + 'https://api.github.com/repos/mralexgray/AFNetworking/notifications{?since,all,participating}', + open_issues_count: 0, + web_commit_signoff_required: false, + }, + { + id: 9485541, + url: 'https://api.github.com/repos/mralexgray/AGNSSplitView', + fork: true, + name: 'AGNSSplitView', + size: 68, + forks: 0, + owner: { + id: 262517, + url: 'https://api.github.com/users/mralexgray', + type: 'User', + login: 'mralexgray', + node_id: 'MDQ6VXNlcjI2MjUxNw==', + html_url: 'https://github.com/mralexgray', + gists_url: 'https://api.github.com/users/mralexgray/gists{/gist_id}', + repos_url: 'https://api.github.com/users/mralexgray/repos', + avatar_url: 'https://avatars.githubusercontent.com/u/262517?v=4', + events_url: + 'https://api.github.com/users/mralexgray/events{/privacy}', + site_admin: false, + gravatar_id: '', + starred_url: + 'https://api.github.com/users/mralexgray/starred{/owner}{/repo}', + followers_url: 'https://api.github.com/users/mralexgray/followers', + following_url: + 'https://api.github.com/users/mralexgray/following{/other_user}', + organizations_url: 'https://api.github.com/users/mralexgray/orgs', + subscriptions_url: + 'https://api.github.com/users/mralexgray/subscriptions', + received_events_url: + 'https://api.github.com/users/mralexgray/received_events', + }, + topics: [], + git_url: 'git://github.com/mralexgray/AGNSSplitView.git', + license: null, + node_id: 'MDEwOlJlcG9zaXRvcnk5NDg1NTQx', + private: false, + ssh_url: 'git@github.com:mralexgray/AGNSSplitView.git', + svn_url: 'https://github.com/mralexgray/AGNSSplitView', + archived: false, + disabled: false, + has_wiki: true, + homepage: null, + html_url: 'https://github.com/mralexgray/AGNSSplitView', + keys_url: + 'https://api.github.com/repos/mralexgray/AGNSSplitView/keys{/key_id}', + language: 'Objective-C', + tags_url: 'https://api.github.com/repos/mralexgray/AGNSSplitView/tags', + watchers: 0, + blobs_url: + 'https://api.github.com/repos/mralexgray/AGNSSplitView/git/blobs{/sha}', + clone_url: 'https://github.com/mralexgray/AGNSSplitView.git', + forks_url: + 'https://api.github.com/repos/mralexgray/AGNSSplitView/forks', + full_name: 'mralexgray/AGNSSplitView', + has_pages: false, + hooks_url: + 'https://api.github.com/repos/mralexgray/AGNSSplitView/hooks', + pulls_url: + 'https://api.github.com/repos/mralexgray/AGNSSplitView/pulls{/number}', + pushed_at: '2013-02-26T00:32:32Z', + teams_url: + 'https://api.github.com/repos/mralexgray/AGNSSplitView/teams', + trees_url: + 'https://api.github.com/repos/mralexgray/AGNSSplitView/git/trees{/sha}', + created_at: '2013-04-17T00:10:13Z', + events_url: + 'https://api.github.com/repos/mralexgray/AGNSSplitView/events', + has_issues: false, + issues_url: + 'https://api.github.com/repos/mralexgray/AGNSSplitView/issues{/number}', + labels_url: + 'https://api.github.com/repos/mralexgray/AGNSSplitView/labels{/name}', + merges_url: + 'https://api.github.com/repos/mralexgray/AGNSSplitView/merges', + mirror_url: null, + updated_at: '2013-04-17T00:10:13Z', + visibility: 'public', + archive_url: + 'https://api.github.com/repos/mralexgray/AGNSSplitView/{archive_format}{/ref}', + commits_url: + 'https://api.github.com/repos/mralexgray/AGNSSplitView/commits{/sha}', + compare_url: + 'https://api.github.com/repos/mralexgray/AGNSSplitView/compare/{base}...{head}', + description: 'Simple NSSplitView additions.', + forks_count: 0, + is_template: false, + open_issues: 0, + branches_url: + 'https://api.github.com/repos/mralexgray/AGNSSplitView/branches{/branch}', + comments_url: + 'https://api.github.com/repos/mralexgray/AGNSSplitView/comments{/number}', + contents_url: + 'https://api.github.com/repos/mralexgray/AGNSSplitView/contents/{+path}', + git_refs_url: + 'https://api.github.com/repos/mralexgray/AGNSSplitView/git/refs{/sha}', + git_tags_url: + 'https://api.github.com/repos/mralexgray/AGNSSplitView/git/tags{/sha}', + has_projects: true, + releases_url: + 'https://api.github.com/repos/mralexgray/AGNSSplitView/releases{/id}', + statuses_url: + 'https://api.github.com/repos/mralexgray/AGNSSplitView/statuses/{sha}', + allow_forking: true, + assignees_url: + 'https://api.github.com/repos/mralexgray/AGNSSplitView/assignees{/user}', + downloads_url: + 'https://api.github.com/repos/mralexgray/AGNSSplitView/downloads', + has_downloads: true, + languages_url: + 'https://api.github.com/repos/mralexgray/AGNSSplitView/languages', + default_branch: 'master', + milestones_url: + 'https://api.github.com/repos/mralexgray/AGNSSplitView/milestones{/number}', + stargazers_url: + 'https://api.github.com/repos/mralexgray/AGNSSplitView/stargazers', + watchers_count: 0, + deployments_url: + 'https://api.github.com/repos/mralexgray/AGNSSplitView/deployments', + git_commits_url: + 'https://api.github.com/repos/mralexgray/AGNSSplitView/git/commits{/sha}', + subscribers_url: + 'https://api.github.com/repos/mralexgray/AGNSSplitView/subscribers', + contributors_url: + 'https://api.github.com/repos/mralexgray/AGNSSplitView/contributors', + issue_events_url: + 'https://api.github.com/repos/mralexgray/AGNSSplitView/issues/events{/number}', + stargazers_count: 0, + subscription_url: + 'https://api.github.com/repos/mralexgray/AGNSSplitView/subscription', + collaborators_url: + 'https://api.github.com/repos/mralexgray/AGNSSplitView/collaborators{/collaborator}', + issue_comment_url: + 'https://api.github.com/repos/mralexgray/AGNSSplitView/issues/comments{/number}', + notifications_url: + 'https://api.github.com/repos/mralexgray/AGNSSplitView/notifications{?since,all,participating}', + open_issues_count: 0, + web_commit_signoff_required: false, + }, + { + id: 12767784, + url: 'https://api.github.com/repos/mralexgray/AGScopeBar', + fork: true, + name: 'AGScopeBar', + size: 64, + forks: 0, + owner: { + id: 262517, + url: 'https://api.github.com/users/mralexgray', + type: 'User', + login: 'mralexgray', + node_id: 'MDQ6VXNlcjI2MjUxNw==', + html_url: 'https://github.com/mralexgray', + gists_url: 'https://api.github.com/users/mralexgray/gists{/gist_id}', + repos_url: 'https://api.github.com/users/mralexgray/repos', + avatar_url: 'https://avatars.githubusercontent.com/u/262517?v=4', + events_url: + 'https://api.github.com/users/mralexgray/events{/privacy}', + site_admin: false, + gravatar_id: '', + starred_url: + 'https://api.github.com/users/mralexgray/starred{/owner}{/repo}', + followers_url: 'https://api.github.com/users/mralexgray/followers', + following_url: + 'https://api.github.com/users/mralexgray/following{/other_user}', + organizations_url: 'https://api.github.com/users/mralexgray/orgs', + subscriptions_url: + 'https://api.github.com/users/mralexgray/subscriptions', + received_events_url: + 'https://api.github.com/users/mralexgray/received_events', + }, + topics: [], + git_url: 'git://github.com/mralexgray/AGScopeBar.git', + license: null, + node_id: 'MDEwOlJlcG9zaXRvcnkxMjc2Nzc4NA==', + private: false, + ssh_url: 'git@github.com:mralexgray/AGScopeBar.git', + svn_url: 'https://github.com/mralexgray/AGScopeBar', + archived: false, + disabled: false, + has_wiki: true, + homepage: null, + html_url: 'https://github.com/mralexgray/AGScopeBar', + keys_url: + 'https://api.github.com/repos/mralexgray/AGScopeBar/keys{/key_id}', + language: 'Objective-C', + tags_url: 'https://api.github.com/repos/mralexgray/AGScopeBar/tags', + watchers: 0, + blobs_url: + 'https://api.github.com/repos/mralexgray/AGScopeBar/git/blobs{/sha}', + clone_url: 'https://github.com/mralexgray/AGScopeBar.git', + forks_url: 'https://api.github.com/repos/mralexgray/AGScopeBar/forks', + full_name: 'mralexgray/AGScopeBar', + has_pages: false, + hooks_url: 'https://api.github.com/repos/mralexgray/AGScopeBar/hooks', + pulls_url: + 'https://api.github.com/repos/mralexgray/AGScopeBar/pulls{/number}', + pushed_at: '2013-05-07T03:35:29Z', + teams_url: 'https://api.github.com/repos/mralexgray/AGScopeBar/teams', + trees_url: + 'https://api.github.com/repos/mralexgray/AGScopeBar/git/trees{/sha}', + created_at: '2013-09-11T21:06:54Z', + events_url: 'https://api.github.com/repos/mralexgray/AGScopeBar/events', + has_issues: false, + issues_url: + 'https://api.github.com/repos/mralexgray/AGScopeBar/issues{/number}', + labels_url: + 'https://api.github.com/repos/mralexgray/AGScopeBar/labels{/name}', + merges_url: 'https://api.github.com/repos/mralexgray/AGScopeBar/merges', + mirror_url: null, + updated_at: '2013-09-11T21:06:54Z', + visibility: 'public', + archive_url: + 'https://api.github.com/repos/mralexgray/AGScopeBar/{archive_format}{/ref}', + commits_url: + 'https://api.github.com/repos/mralexgray/AGScopeBar/commits{/sha}', + compare_url: + 'https://api.github.com/repos/mralexgray/AGScopeBar/compare/{base}...{head}', + description: 'Custom scope bar implementation for Cocoa', + forks_count: 0, + is_template: false, + open_issues: 0, + branches_url: + 'https://api.github.com/repos/mralexgray/AGScopeBar/branches{/branch}', + comments_url: + 'https://api.github.com/repos/mralexgray/AGScopeBar/comments{/number}', + contents_url: + 'https://api.github.com/repos/mralexgray/AGScopeBar/contents/{+path}', + git_refs_url: + 'https://api.github.com/repos/mralexgray/AGScopeBar/git/refs{/sha}', + git_tags_url: + 'https://api.github.com/repos/mralexgray/AGScopeBar/git/tags{/sha}', + has_projects: true, + releases_url: + 'https://api.github.com/repos/mralexgray/AGScopeBar/releases{/id}', + statuses_url: + 'https://api.github.com/repos/mralexgray/AGScopeBar/statuses/{sha}', + allow_forking: true, + assignees_url: + 'https://api.github.com/repos/mralexgray/AGScopeBar/assignees{/user}', + downloads_url: + 'https://api.github.com/repos/mralexgray/AGScopeBar/downloads', + has_downloads: true, + languages_url: + 'https://api.github.com/repos/mralexgray/AGScopeBar/languages', + default_branch: 'master', + milestones_url: + 'https://api.github.com/repos/mralexgray/AGScopeBar/milestones{/number}', + stargazers_url: + 'https://api.github.com/repos/mralexgray/AGScopeBar/stargazers', + watchers_count: 0, + deployments_url: + 'https://api.github.com/repos/mralexgray/AGScopeBar/deployments', + git_commits_url: + 'https://api.github.com/repos/mralexgray/AGScopeBar/git/commits{/sha}', + subscribers_url: + 'https://api.github.com/repos/mralexgray/AGScopeBar/subscribers', + contributors_url: + 'https://api.github.com/repos/mralexgray/AGScopeBar/contributors', + issue_events_url: + 'https://api.github.com/repos/mralexgray/AGScopeBar/issues/events{/number}', + stargazers_count: 0, + subscription_url: + 'https://api.github.com/repos/mralexgray/AGScopeBar/subscription', + collaborators_url: + 'https://api.github.com/repos/mralexgray/AGScopeBar/collaborators{/collaborator}', + issue_comment_url: + 'https://api.github.com/repos/mralexgray/AGScopeBar/issues/comments{/number}', + notifications_url: + 'https://api.github.com/repos/mralexgray/AGScopeBar/notifications{?since,all,participating}', + open_issues_count: 0, + web_commit_signoff_required: false, + }, + { + id: 31829499, + url: 'https://api.github.com/repos/mralexgray/agvtool-xcode-plugin', + fork: true, + name: 'agvtool-xcode-plugin', + size: 102, + forks: 0, + owner: { + id: 262517, + url: 'https://api.github.com/users/mralexgray', + type: 'User', + login: 'mralexgray', + node_id: 'MDQ6VXNlcjI2MjUxNw==', + html_url: 'https://github.com/mralexgray', + gists_url: 'https://api.github.com/users/mralexgray/gists{/gist_id}', + repos_url: 'https://api.github.com/users/mralexgray/repos', + avatar_url: 'https://avatars.githubusercontent.com/u/262517?v=4', + events_url: + 'https://api.github.com/users/mralexgray/events{/privacy}', + site_admin: false, + gravatar_id: '', + starred_url: + 'https://api.github.com/users/mralexgray/starred{/owner}{/repo}', + followers_url: 'https://api.github.com/users/mralexgray/followers', + following_url: + 'https://api.github.com/users/mralexgray/following{/other_user}', + organizations_url: 'https://api.github.com/users/mralexgray/orgs', + subscriptions_url: + 'https://api.github.com/users/mralexgray/subscriptions', + received_events_url: + 'https://api.github.com/users/mralexgray/received_events', + }, + topics: [], + git_url: 'git://github.com/mralexgray/agvtool-xcode-plugin.git', + license: null, + node_id: 'MDEwOlJlcG9zaXRvcnkzMTgyOTQ5OQ==', + private: false, + ssh_url: 'git@github.com:mralexgray/agvtool-xcode-plugin.git', + svn_url: 'https://github.com/mralexgray/agvtool-xcode-plugin', + archived: false, + disabled: false, + has_wiki: true, + homepage: null, + html_url: 'https://github.com/mralexgray/agvtool-xcode-plugin', + keys_url: + 'https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/keys{/key_id}', + language: 'Objective-C', + tags_url: + 'https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/tags', + watchers: 0, + blobs_url: + 'https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/git/blobs{/sha}', + clone_url: 'https://github.com/mralexgray/agvtool-xcode-plugin.git', + forks_url: + 'https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/forks', + full_name: 'mralexgray/agvtool-xcode-plugin', + has_pages: false, + hooks_url: + 'https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/hooks', + pulls_url: + 'https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/pulls{/number}', + pushed_at: '2015-03-08T00:04:31Z', + teams_url: + 'https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/teams', + trees_url: + 'https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/git/trees{/sha}', + created_at: '2015-03-07T22:15:38Z', + events_url: + 'https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/events', + has_issues: false, + issues_url: + 'https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/issues{/number}', + labels_url: + 'https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/labels{/name}', + merges_url: + 'https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/merges', + mirror_url: null, + updated_at: '2015-03-07T22:15:41Z', + visibility: 'public', + archive_url: + 'https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/{archive_format}{/ref}', + commits_url: + 'https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/commits{/sha}', + compare_url: + 'https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/compare/{base}...{head}', + description: 'this is a plugin wrapper for agvtool for xcode.', + forks_count: 0, + is_template: false, + open_issues: 0, + branches_url: + 'https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/branches{/branch}', + comments_url: + 'https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/comments{/number}', + contents_url: + 'https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/contents/{+path}', + git_refs_url: + 'https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/git/refs{/sha}', + git_tags_url: + 'https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/git/tags{/sha}', + has_projects: true, + releases_url: + 'https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/releases{/id}', + statuses_url: + 'https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/statuses/{sha}', + allow_forking: true, + assignees_url: + 'https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/assignees{/user}', + downloads_url: + 'https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/downloads', + has_downloads: true, + languages_url: + 'https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/languages', + default_branch: 'master', + milestones_url: + 'https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/milestones{/number}', + stargazers_url: + 'https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/stargazers', + watchers_count: 0, + deployments_url: + 'https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/deployments', + git_commits_url: + 'https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/git/commits{/sha}', + subscribers_url: + 'https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/subscribers', + contributors_url: + 'https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/contributors', + issue_events_url: + 'https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/issues/events{/number}', + stargazers_count: 0, + subscription_url: + 'https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/subscription', + collaborators_url: + 'https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/collaborators{/collaborator}', + issue_comment_url: + 'https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/issues/comments{/number}', + notifications_url: + 'https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/notifications{?since,all,participating}', + open_issues_count: 0, + web_commit_signoff_required: false, + }, + { + id: 9227846, + url: 'https://api.github.com/repos/mralexgray/AHContentBrowser', + fork: true, + name: 'AHContentBrowser', + size: 223, + forks: 0, + owner: { + id: 262517, + url: 'https://api.github.com/users/mralexgray', + type: 'User', + login: 'mralexgray', + node_id: 'MDQ6VXNlcjI2MjUxNw==', + html_url: 'https://github.com/mralexgray', + gists_url: 'https://api.github.com/users/mralexgray/gists{/gist_id}', + repos_url: 'https://api.github.com/users/mralexgray/repos', + avatar_url: 'https://avatars.githubusercontent.com/u/262517?v=4', + events_url: + 'https://api.github.com/users/mralexgray/events{/privacy}', + site_admin: false, + gravatar_id: '', + starred_url: + 'https://api.github.com/users/mralexgray/starred{/owner}{/repo}', + followers_url: 'https://api.github.com/users/mralexgray/followers', + following_url: + 'https://api.github.com/users/mralexgray/following{/other_user}', + organizations_url: 'https://api.github.com/users/mralexgray/orgs', + subscriptions_url: + 'https://api.github.com/users/mralexgray/subscriptions', + received_events_url: + 'https://api.github.com/users/mralexgray/received_events', + }, + topics: [], + git_url: 'git://github.com/mralexgray/AHContentBrowser.git', + license: null, + node_id: 'MDEwOlJlcG9zaXRvcnk5MjI3ODQ2', + private: false, + ssh_url: 'git@github.com:mralexgray/AHContentBrowser.git', + svn_url: 'https://github.com/mralexgray/AHContentBrowser', + archived: false, + disabled: false, + has_wiki: true, + homepage: '', + html_url: 'https://github.com/mralexgray/AHContentBrowser', + keys_url: + 'https://api.github.com/repos/mralexgray/AHContentBrowser/keys{/key_id}', + language: 'Objective-C', + tags_url: + 'https://api.github.com/repos/mralexgray/AHContentBrowser/tags', + watchers: 0, + blobs_url: + 'https://api.github.com/repos/mralexgray/AHContentBrowser/git/blobs{/sha}', + clone_url: 'https://github.com/mralexgray/AHContentBrowser.git', + forks_url: + 'https://api.github.com/repos/mralexgray/AHContentBrowser/forks', + full_name: 'mralexgray/AHContentBrowser', + has_pages: false, + hooks_url: + 'https://api.github.com/repos/mralexgray/AHContentBrowser/hooks', + pulls_url: + 'https://api.github.com/repos/mralexgray/AHContentBrowser/pulls{/number}', + pushed_at: '2013-03-13T17:38:23Z', + teams_url: + 'https://api.github.com/repos/mralexgray/AHContentBrowser/teams', + trees_url: + 'https://api.github.com/repos/mralexgray/AHContentBrowser/git/trees{/sha}', + created_at: '2013-04-04T20:56:16Z', + events_url: + 'https://api.github.com/repos/mralexgray/AHContentBrowser/events', + has_issues: false, + issues_url: + 'https://api.github.com/repos/mralexgray/AHContentBrowser/issues{/number}', + labels_url: + 'https://api.github.com/repos/mralexgray/AHContentBrowser/labels{/name}', + merges_url: + 'https://api.github.com/repos/mralexgray/AHContentBrowser/merges', + mirror_url: null, + updated_at: '2015-10-22T05:00:24Z', + visibility: 'public', + archive_url: + 'https://api.github.com/repos/mralexgray/AHContentBrowser/{archive_format}{/ref}', + commits_url: + 'https://api.github.com/repos/mralexgray/AHContentBrowser/commits{/sha}', + compare_url: + 'https://api.github.com/repos/mralexgray/AHContentBrowser/compare/{base}...{head}', + description: + 'A Mac only webview that loads a fast readable version of the website if available.', + forks_count: 0, + is_template: false, + open_issues: 0, + branches_url: + 'https://api.github.com/repos/mralexgray/AHContentBrowser/branches{/branch}', + comments_url: + 'https://api.github.com/repos/mralexgray/AHContentBrowser/comments{/number}', + contents_url: + 'https://api.github.com/repos/mralexgray/AHContentBrowser/contents/{+path}', + git_refs_url: + 'https://api.github.com/repos/mralexgray/AHContentBrowser/git/refs{/sha}', + git_tags_url: + 'https://api.github.com/repos/mralexgray/AHContentBrowser/git/tags{/sha}', + has_projects: true, + releases_url: + 'https://api.github.com/repos/mralexgray/AHContentBrowser/releases{/id}', + statuses_url: + 'https://api.github.com/repos/mralexgray/AHContentBrowser/statuses/{sha}', + allow_forking: true, + assignees_url: + 'https://api.github.com/repos/mralexgray/AHContentBrowser/assignees{/user}', + downloads_url: + 'https://api.github.com/repos/mralexgray/AHContentBrowser/downloads', + has_downloads: true, + languages_url: + 'https://api.github.com/repos/mralexgray/AHContentBrowser/languages', + default_branch: 'master', + milestones_url: + 'https://api.github.com/repos/mralexgray/AHContentBrowser/milestones{/number}', + stargazers_url: + 'https://api.github.com/repos/mralexgray/AHContentBrowser/stargazers', + watchers_count: 0, + deployments_url: + 'https://api.github.com/repos/mralexgray/AHContentBrowser/deployments', + git_commits_url: + 'https://api.github.com/repos/mralexgray/AHContentBrowser/git/commits{/sha}', + subscribers_url: + 'https://api.github.com/repos/mralexgray/AHContentBrowser/subscribers', + contributors_url: + 'https://api.github.com/repos/mralexgray/AHContentBrowser/contributors', + issue_events_url: + 'https://api.github.com/repos/mralexgray/AHContentBrowser/issues/events{/number}', + stargazers_count: 0, + subscription_url: + 'https://api.github.com/repos/mralexgray/AHContentBrowser/subscription', + collaborators_url: + 'https://api.github.com/repos/mralexgray/AHContentBrowser/collaborators{/collaborator}', + issue_comment_url: + 'https://api.github.com/repos/mralexgray/AHContentBrowser/issues/comments{/number}', + notifications_url: + 'https://api.github.com/repos/mralexgray/AHContentBrowser/notifications{?since,all,participating}', + open_issues_count: 0, + web_commit_signoff_required: false, + }, + { + id: 37430328, + url: 'https://api.github.com/repos/mralexgray/AHLaunchCtl', + fork: true, + name: 'AHLaunchCtl', + size: 592, + forks: 0, + owner: { + id: 262517, + url: 'https://api.github.com/users/mralexgray', + type: 'User', + login: 'mralexgray', + node_id: 'MDQ6VXNlcjI2MjUxNw==', + html_url: 'https://github.com/mralexgray', + gists_url: 'https://api.github.com/users/mralexgray/gists{/gist_id}', + repos_url: 'https://api.github.com/users/mralexgray/repos', + avatar_url: 'https://avatars.githubusercontent.com/u/262517?v=4', + events_url: + 'https://api.github.com/users/mralexgray/events{/privacy}', + site_admin: false, + gravatar_id: '', + starred_url: + 'https://api.github.com/users/mralexgray/starred{/owner}{/repo}', + followers_url: 'https://api.github.com/users/mralexgray/followers', + following_url: + 'https://api.github.com/users/mralexgray/following{/other_user}', + organizations_url: 'https://api.github.com/users/mralexgray/orgs', + subscriptions_url: + 'https://api.github.com/users/mralexgray/subscriptions', + received_events_url: + 'https://api.github.com/users/mralexgray/received_events', + }, + topics: [], + git_url: 'git://github.com/mralexgray/AHLaunchCtl.git', + license: { + key: 'mit', + url: 'https://api.github.com/licenses/mit', + name: 'MIT License', + node_id: 'MDc6TGljZW5zZTEz', + spdx_id: 'MIT', + }, + node_id: 'MDEwOlJlcG9zaXRvcnkzNzQzMDMyOA==', + private: false, + ssh_url: 'git@github.com:mralexgray/AHLaunchCtl.git', + svn_url: 'https://github.com/mralexgray/AHLaunchCtl', + archived: false, + disabled: false, + has_wiki: true, + homepage: '', + html_url: 'https://github.com/mralexgray/AHLaunchCtl', + keys_url: + 'https://api.github.com/repos/mralexgray/AHLaunchCtl/keys{/key_id}', + language: 'Objective-C', + tags_url: 'https://api.github.com/repos/mralexgray/AHLaunchCtl/tags', + watchers: 0, + blobs_url: + 'https://api.github.com/repos/mralexgray/AHLaunchCtl/git/blobs{/sha}', + clone_url: 'https://github.com/mralexgray/AHLaunchCtl.git', + forks_url: 'https://api.github.com/repos/mralexgray/AHLaunchCtl/forks', + full_name: 'mralexgray/AHLaunchCtl', + has_pages: false, + hooks_url: 'https://api.github.com/repos/mralexgray/AHLaunchCtl/hooks', + pulls_url: + 'https://api.github.com/repos/mralexgray/AHLaunchCtl/pulls{/number}', + pushed_at: '2015-05-26T18:50:48Z', + teams_url: 'https://api.github.com/repos/mralexgray/AHLaunchCtl/teams', + trees_url: + 'https://api.github.com/repos/mralexgray/AHLaunchCtl/git/trees{/sha}', + created_at: '2015-06-14T21:31:03Z', + events_url: + 'https://api.github.com/repos/mralexgray/AHLaunchCtl/events', + has_issues: false, + issues_url: + 'https://api.github.com/repos/mralexgray/AHLaunchCtl/issues{/number}', + labels_url: + 'https://api.github.com/repos/mralexgray/AHLaunchCtl/labels{/name}', + merges_url: + 'https://api.github.com/repos/mralexgray/AHLaunchCtl/merges', + mirror_url: null, + updated_at: '2015-06-14T21:31:04Z', + visibility: 'public', + archive_url: + 'https://api.github.com/repos/mralexgray/AHLaunchCtl/{archive_format}{/ref}', + commits_url: + 'https://api.github.com/repos/mralexgray/AHLaunchCtl/commits{/sha}', + compare_url: + 'https://api.github.com/repos/mralexgray/AHLaunchCtl/compare/{base}...{head}', + description: 'LaunchD Framework for Cocoa Apps', + forks_count: 0, + is_template: false, + open_issues: 0, + branches_url: + 'https://api.github.com/repos/mralexgray/AHLaunchCtl/branches{/branch}', + comments_url: + 'https://api.github.com/repos/mralexgray/AHLaunchCtl/comments{/number}', + contents_url: + 'https://api.github.com/repos/mralexgray/AHLaunchCtl/contents/{+path}', + git_refs_url: + 'https://api.github.com/repos/mralexgray/AHLaunchCtl/git/refs{/sha}', + git_tags_url: + 'https://api.github.com/repos/mralexgray/AHLaunchCtl/git/tags{/sha}', + has_projects: true, + releases_url: + 'https://api.github.com/repos/mralexgray/AHLaunchCtl/releases{/id}', + statuses_url: + 'https://api.github.com/repos/mralexgray/AHLaunchCtl/statuses/{sha}', + allow_forking: true, + assignees_url: + 'https://api.github.com/repos/mralexgray/AHLaunchCtl/assignees{/user}', + downloads_url: + 'https://api.github.com/repos/mralexgray/AHLaunchCtl/downloads', + has_downloads: true, + languages_url: + 'https://api.github.com/repos/mralexgray/AHLaunchCtl/languages', + default_branch: 'master', + milestones_url: + 'https://api.github.com/repos/mralexgray/AHLaunchCtl/milestones{/number}', + stargazers_url: + 'https://api.github.com/repos/mralexgray/AHLaunchCtl/stargazers', + watchers_count: 0, + deployments_url: + 'https://api.github.com/repos/mralexgray/AHLaunchCtl/deployments', + git_commits_url: + 'https://api.github.com/repos/mralexgray/AHLaunchCtl/git/commits{/sha}', + subscribers_url: + 'https://api.github.com/repos/mralexgray/AHLaunchCtl/subscribers', + contributors_url: + 'https://api.github.com/repos/mralexgray/AHLaunchCtl/contributors', + issue_events_url: + 'https://api.github.com/repos/mralexgray/AHLaunchCtl/issues/events{/number}', + stargazers_count: 0, + subscription_url: + 'https://api.github.com/repos/mralexgray/AHLaunchCtl/subscription', + collaborators_url: + 'https://api.github.com/repos/mralexgray/AHLaunchCtl/collaborators{/collaborator}', + issue_comment_url: + 'https://api.github.com/repos/mralexgray/AHLaunchCtl/issues/comments{/number}', + notifications_url: + 'https://api.github.com/repos/mralexgray/AHLaunchCtl/notifications{?since,all,participating}', + open_issues_count: 0, + web_commit_signoff_required: false, + }, + { + id: 9167473, + url: 'https://api.github.com/repos/mralexgray/AHLayout', + fork: true, + name: 'AHLayout', + size: 359, + forks: 0, + owner: { + id: 262517, + url: 'https://api.github.com/users/mralexgray', + type: 'User', + login: 'mralexgray', + node_id: 'MDQ6VXNlcjI2MjUxNw==', + html_url: 'https://github.com/mralexgray', + gists_url: 'https://api.github.com/users/mralexgray/gists{/gist_id}', + repos_url: 'https://api.github.com/users/mralexgray/repos', + avatar_url: 'https://avatars.githubusercontent.com/u/262517?v=4', + events_url: + 'https://api.github.com/users/mralexgray/events{/privacy}', + site_admin: false, + gravatar_id: '', + starred_url: + 'https://api.github.com/users/mralexgray/starred{/owner}{/repo}', + followers_url: 'https://api.github.com/users/mralexgray/followers', + following_url: + 'https://api.github.com/users/mralexgray/following{/other_user}', + organizations_url: 'https://api.github.com/users/mralexgray/orgs', + subscriptions_url: + 'https://api.github.com/users/mralexgray/subscriptions', + received_events_url: + 'https://api.github.com/users/mralexgray/received_events', + }, + topics: [], + git_url: 'git://github.com/mralexgray/AHLayout.git', + license: null, + node_id: 'MDEwOlJlcG9zaXRvcnk5MTY3NDcz', + private: false, + ssh_url: 'git@github.com:mralexgray/AHLayout.git', + svn_url: 'https://github.com/mralexgray/AHLayout', + archived: false, + disabled: false, + has_wiki: true, + homepage: null, + html_url: 'https://github.com/mralexgray/AHLayout', + keys_url: + 'https://api.github.com/repos/mralexgray/AHLayout/keys{/key_id}', + language: 'Objective-C', + tags_url: 'https://api.github.com/repos/mralexgray/AHLayout/tags', + watchers: 0, + blobs_url: + 'https://api.github.com/repos/mralexgray/AHLayout/git/blobs{/sha}', + clone_url: 'https://github.com/mralexgray/AHLayout.git', + forks_url: 'https://api.github.com/repos/mralexgray/AHLayout/forks', + full_name: 'mralexgray/AHLayout', + has_pages: false, + hooks_url: 'https://api.github.com/repos/mralexgray/AHLayout/hooks', + pulls_url: + 'https://api.github.com/repos/mralexgray/AHLayout/pulls{/number}', + pushed_at: '2013-07-08T02:31:14Z', + teams_url: 'https://api.github.com/repos/mralexgray/AHLayout/teams', + trees_url: + 'https://api.github.com/repos/mralexgray/AHLayout/git/trees{/sha}', + created_at: '2013-04-02T10:10:30Z', + events_url: 'https://api.github.com/repos/mralexgray/AHLayout/events', + has_issues: false, + issues_url: + 'https://api.github.com/repos/mralexgray/AHLayout/issues{/number}', + labels_url: + 'https://api.github.com/repos/mralexgray/AHLayout/labels{/name}', + merges_url: 'https://api.github.com/repos/mralexgray/AHLayout/merges', + mirror_url: null, + updated_at: '2013-07-08T02:31:17Z', + visibility: 'public', + archive_url: + 'https://api.github.com/repos/mralexgray/AHLayout/{archive_format}{/ref}', + commits_url: + 'https://api.github.com/repos/mralexgray/AHLayout/commits{/sha}', + compare_url: + 'https://api.github.com/repos/mralexgray/AHLayout/compare/{base}...{head}', + description: 'AHLayout', + forks_count: 0, + is_template: false, + open_issues: 0, + branches_url: + 'https://api.github.com/repos/mralexgray/AHLayout/branches{/branch}', + comments_url: + 'https://api.github.com/repos/mralexgray/AHLayout/comments{/number}', + contents_url: + 'https://api.github.com/repos/mralexgray/AHLayout/contents/{+path}', + git_refs_url: + 'https://api.github.com/repos/mralexgray/AHLayout/git/refs{/sha}', + git_tags_url: + 'https://api.github.com/repos/mralexgray/AHLayout/git/tags{/sha}', + has_projects: true, + releases_url: + 'https://api.github.com/repos/mralexgray/AHLayout/releases{/id}', + statuses_url: + 'https://api.github.com/repos/mralexgray/AHLayout/statuses/{sha}', + allow_forking: true, + assignees_url: + 'https://api.github.com/repos/mralexgray/AHLayout/assignees{/user}', + downloads_url: + 'https://api.github.com/repos/mralexgray/AHLayout/downloads', + has_downloads: true, + languages_url: + 'https://api.github.com/repos/mralexgray/AHLayout/languages', + default_branch: 'master', + milestones_url: + 'https://api.github.com/repos/mralexgray/AHLayout/milestones{/number}', + stargazers_url: + 'https://api.github.com/repos/mralexgray/AHLayout/stargazers', + watchers_count: 0, + deployments_url: + 'https://api.github.com/repos/mralexgray/AHLayout/deployments', + git_commits_url: + 'https://api.github.com/repos/mralexgray/AHLayout/git/commits{/sha}', + subscribers_url: + 'https://api.github.com/repos/mralexgray/AHLayout/subscribers', + contributors_url: + 'https://api.github.com/repos/mralexgray/AHLayout/contributors', + issue_events_url: + 'https://api.github.com/repos/mralexgray/AHLayout/issues/events{/number}', + stargazers_count: 0, + subscription_url: + 'https://api.github.com/repos/mralexgray/AHLayout/subscription', + collaborators_url: + 'https://api.github.com/repos/mralexgray/AHLayout/collaborators{/collaborator}', + issue_comment_url: + 'https://api.github.com/repos/mralexgray/AHLayout/issues/comments{/number}', + notifications_url: + 'https://api.github.com/repos/mralexgray/AHLayout/notifications{?since,all,participating}', + open_issues_count: 0, + web_commit_signoff_required: false, + }, + { + id: 18450201, + url: 'https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework', + fork: true, + name: 'Airmail-Plug-In-Framework', + size: 888, + forks: 0, + owner: { + id: 262517, + url: 'https://api.github.com/users/mralexgray', + type: 'User', + login: 'mralexgray', + node_id: 'MDQ6VXNlcjI2MjUxNw==', + html_url: 'https://github.com/mralexgray', + gists_url: 'https://api.github.com/users/mralexgray/gists{/gist_id}', + repos_url: 'https://api.github.com/users/mralexgray/repos', + avatar_url: 'https://avatars.githubusercontent.com/u/262517?v=4', + events_url: + 'https://api.github.com/users/mralexgray/events{/privacy}', + site_admin: false, + gravatar_id: '', + starred_url: + 'https://api.github.com/users/mralexgray/starred{/owner}{/repo}', + followers_url: 'https://api.github.com/users/mralexgray/followers', + following_url: + 'https://api.github.com/users/mralexgray/following{/other_user}', + organizations_url: 'https://api.github.com/users/mralexgray/orgs', + subscriptions_url: + 'https://api.github.com/users/mralexgray/subscriptions', + received_events_url: + 'https://api.github.com/users/mralexgray/received_events', + }, + topics: [], + git_url: 'git://github.com/mralexgray/Airmail-Plug-In-Framework.git', + license: { + key: 'gpl-2.0', + url: 'https://api.github.com/licenses/gpl-2.0', + name: 'GNU General Public License v2.0', + node_id: 'MDc6TGljZW5zZTg=', + spdx_id: 'GPL-2.0', + }, + node_id: 'MDEwOlJlcG9zaXRvcnkxODQ1MDIwMQ==', + private: false, + ssh_url: 'git@github.com:mralexgray/Airmail-Plug-In-Framework.git', + svn_url: 'https://github.com/mralexgray/Airmail-Plug-In-Framework', + archived: false, + disabled: false, + has_wiki: true, + homepage: null, + html_url: 'https://github.com/mralexgray/Airmail-Plug-In-Framework', + keys_url: + 'https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/keys{/key_id}', + language: null, + tags_url: + 'https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/tags', + watchers: 0, + blobs_url: + 'https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/git/blobs{/sha}', + clone_url: + 'https://github.com/mralexgray/Airmail-Plug-In-Framework.git', + forks_url: + 'https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/forks', + full_name: 'mralexgray/Airmail-Plug-In-Framework', + has_pages: false, + hooks_url: + 'https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/hooks', + pulls_url: + 'https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/pulls{/number}', + pushed_at: '2014-03-27T15:42:19Z', + teams_url: + 'https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/teams', + trees_url: + 'https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/git/trees{/sha}', + created_at: '2014-04-04T19:33:54Z', + events_url: + 'https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/events', + has_issues: false, + issues_url: + 'https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/issues{/number}', + labels_url: + 'https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/labels{/name}', + merges_url: + 'https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/merges', + mirror_url: null, + updated_at: '2014-11-23T19:31:04Z', + visibility: 'public', + archive_url: + 'https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/{archive_format}{/ref}', + commits_url: + 'https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/commits{/sha}', + compare_url: + 'https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/compare/{base}...{head}', + description: null, + forks_count: 0, + is_template: false, + open_issues: 0, + branches_url: + 'https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/branches{/branch}', + comments_url: + 'https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/comments{/number}', + contents_url: + 'https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/contents/{+path}', + git_refs_url: + 'https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/git/refs{/sha}', + git_tags_url: + 'https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/git/tags{/sha}', + has_projects: true, + releases_url: + 'https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/releases{/id}', + statuses_url: + 'https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/statuses/{sha}', + allow_forking: true, + assignees_url: + 'https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/assignees{/user}', + downloads_url: + 'https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/downloads', + has_downloads: true, + languages_url: + 'https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/languages', + default_branch: 'master', + milestones_url: + 'https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/milestones{/number}', + stargazers_url: + 'https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/stargazers', + watchers_count: 0, + deployments_url: + 'https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/deployments', + git_commits_url: + 'https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/git/commits{/sha}', + subscribers_url: + 'https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/subscribers', + contributors_url: + 'https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/contributors', + issue_events_url: + 'https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/issues/events{/number}', + stargazers_count: 0, + subscription_url: + 'https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/subscription', + collaborators_url: + 'https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/collaborators{/collaborator}', + issue_comment_url: + 'https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/issues/comments{/number}', + notifications_url: + 'https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/notifications{?since,all,participating}', + open_issues_count: 0, + web_commit_signoff_required: false, + }, + { + id: 5203219, + url: 'https://api.github.com/repos/mralexgray/AJS-iTunes-API', + fork: true, + name: 'AJS-iTunes-API', + size: 103, + forks: 0, + owner: { + id: 262517, + url: 'https://api.github.com/users/mralexgray', + type: 'User', + login: 'mralexgray', + node_id: 'MDQ6VXNlcjI2MjUxNw==', + html_url: 'https://github.com/mralexgray', + gists_url: 'https://api.github.com/users/mralexgray/gists{/gist_id}', + repos_url: 'https://api.github.com/users/mralexgray/repos', + avatar_url: 'https://avatars.githubusercontent.com/u/262517?v=4', + events_url: + 'https://api.github.com/users/mralexgray/events{/privacy}', + site_admin: false, + gravatar_id: '', + starred_url: + 'https://api.github.com/users/mralexgray/starred{/owner}{/repo}', + followers_url: 'https://api.github.com/users/mralexgray/followers', + following_url: + 'https://api.github.com/users/mralexgray/following{/other_user}', + organizations_url: 'https://api.github.com/users/mralexgray/orgs', + subscriptions_url: + 'https://api.github.com/users/mralexgray/subscriptions', + received_events_url: + 'https://api.github.com/users/mralexgray/received_events', + }, + topics: [], + git_url: 'git://github.com/mralexgray/AJS-iTunes-API.git', + license: null, + node_id: 'MDEwOlJlcG9zaXRvcnk1MjAzMjE5', + private: false, + ssh_url: 'git@github.com:mralexgray/AJS-iTunes-API.git', + svn_url: 'https://github.com/mralexgray/AJS-iTunes-API', + archived: false, + disabled: false, + has_wiki: true, + homepage: '', + html_url: 'https://github.com/mralexgray/AJS-iTunes-API', + keys_url: + 'https://api.github.com/repos/mralexgray/AJS-iTunes-API/keys{/key_id}', + language: 'Objective-C', + tags_url: 'https://api.github.com/repos/mralexgray/AJS-iTunes-API/tags', + watchers: 2, + blobs_url: + 'https://api.github.com/repos/mralexgray/AJS-iTunes-API/git/blobs{/sha}', + clone_url: 'https://github.com/mralexgray/AJS-iTunes-API.git', + forks_url: + 'https://api.github.com/repos/mralexgray/AJS-iTunes-API/forks', + full_name: 'mralexgray/AJS-iTunes-API', + has_pages: false, + hooks_url: + 'https://api.github.com/repos/mralexgray/AJS-iTunes-API/hooks', + pulls_url: + 'https://api.github.com/repos/mralexgray/AJS-iTunes-API/pulls{/number}', + pushed_at: '2011-10-30T22:26:48Z', + teams_url: + 'https://api.github.com/repos/mralexgray/AJS-iTunes-API/teams', + trees_url: + 'https://api.github.com/repos/mralexgray/AJS-iTunes-API/git/trees{/sha}', + created_at: '2012-07-27T10:20:58Z', + events_url: + 'https://api.github.com/repos/mralexgray/AJS-iTunes-API/events', + has_issues: false, + issues_url: + 'https://api.github.com/repos/mralexgray/AJS-iTunes-API/issues{/number}', + labels_url: + 'https://api.github.com/repos/mralexgray/AJS-iTunes-API/labels{/name}', + merges_url: + 'https://api.github.com/repos/mralexgray/AJS-iTunes-API/merges', + mirror_url: null, + updated_at: '2013-01-11T11:00:05Z', + visibility: 'public', + archive_url: + 'https://api.github.com/repos/mralexgray/AJS-iTunes-API/{archive_format}{/ref}', + commits_url: + 'https://api.github.com/repos/mralexgray/AJS-iTunes-API/commits{/sha}', + compare_url: + 'https://api.github.com/repos/mralexgray/AJS-iTunes-API/compare/{base}...{head}', + description: + 'Cocoa wrapper for the iTunes search API - for iOS and Mac OSX projects', + forks_count: 0, + is_template: false, + open_issues: 0, + branches_url: + 'https://api.github.com/repos/mralexgray/AJS-iTunes-API/branches{/branch}', + comments_url: + 'https://api.github.com/repos/mralexgray/AJS-iTunes-API/comments{/number}', + contents_url: + 'https://api.github.com/repos/mralexgray/AJS-iTunes-API/contents/{+path}', + git_refs_url: + 'https://api.github.com/repos/mralexgray/AJS-iTunes-API/git/refs{/sha}', + git_tags_url: + 'https://api.github.com/repos/mralexgray/AJS-iTunes-API/git/tags{/sha}', + has_projects: true, + releases_url: + 'https://api.github.com/repos/mralexgray/AJS-iTunes-API/releases{/id}', + statuses_url: + 'https://api.github.com/repos/mralexgray/AJS-iTunes-API/statuses/{sha}', + allow_forking: true, + assignees_url: + 'https://api.github.com/repos/mralexgray/AJS-iTunes-API/assignees{/user}', + downloads_url: + 'https://api.github.com/repos/mralexgray/AJS-iTunes-API/downloads', + has_downloads: true, + languages_url: + 'https://api.github.com/repos/mralexgray/AJS-iTunes-API/languages', + default_branch: 'master', + milestones_url: + 'https://api.github.com/repos/mralexgray/AJS-iTunes-API/milestones{/number}', + stargazers_url: + 'https://api.github.com/repos/mralexgray/AJS-iTunes-API/stargazers', + watchers_count: 2, + deployments_url: + 'https://api.github.com/repos/mralexgray/AJS-iTunes-API/deployments', + git_commits_url: + 'https://api.github.com/repos/mralexgray/AJS-iTunes-API/git/commits{/sha}', + subscribers_url: + 'https://api.github.com/repos/mralexgray/AJS-iTunes-API/subscribers', + contributors_url: + 'https://api.github.com/repos/mralexgray/AJS-iTunes-API/contributors', + issue_events_url: + 'https://api.github.com/repos/mralexgray/AJS-iTunes-API/issues/events{/number}', + stargazers_count: 2, + subscription_url: + 'https://api.github.com/repos/mralexgray/AJS-iTunes-API/subscription', + collaborators_url: + 'https://api.github.com/repos/mralexgray/AJS-iTunes-API/collaborators{/collaborator}', + issue_comment_url: + 'https://api.github.com/repos/mralexgray/AJS-iTunes-API/issues/comments{/number}', + notifications_url: + 'https://api.github.com/repos/mralexgray/AJS-iTunes-API/notifications{?since,all,participating}', + open_issues_count: 0, + web_commit_signoff_required: false, + }, + { + id: 10093801, + url: 'https://api.github.com/repos/mralexgray/Alcatraz', + fork: true, + name: 'Alcatraz', + size: 3668, + forks: 0, + owner: { + id: 262517, + url: 'https://api.github.com/users/mralexgray', + type: 'User', + login: 'mralexgray', + node_id: 'MDQ6VXNlcjI2MjUxNw==', + html_url: 'https://github.com/mralexgray', + gists_url: 'https://api.github.com/users/mralexgray/gists{/gist_id}', + repos_url: 'https://api.github.com/users/mralexgray/repos', + avatar_url: 'https://avatars.githubusercontent.com/u/262517?v=4', + events_url: + 'https://api.github.com/users/mralexgray/events{/privacy}', + site_admin: false, + gravatar_id: '', + starred_url: + 'https://api.github.com/users/mralexgray/starred{/owner}{/repo}', + followers_url: 'https://api.github.com/users/mralexgray/followers', + following_url: + 'https://api.github.com/users/mralexgray/following{/other_user}', + organizations_url: 'https://api.github.com/users/mralexgray/orgs', + subscriptions_url: + 'https://api.github.com/users/mralexgray/subscriptions', + received_events_url: + 'https://api.github.com/users/mralexgray/received_events', + }, + topics: [], + git_url: 'git://github.com/mralexgray/Alcatraz.git', + license: { + key: 'mit', + url: 'https://api.github.com/licenses/mit', + name: 'MIT License', + node_id: 'MDc6TGljZW5zZTEz', + spdx_id: 'MIT', + }, + node_id: 'MDEwOlJlcG9zaXRvcnkxMDA5MzgwMQ==', + private: false, + ssh_url: 'git@github.com:mralexgray/Alcatraz.git', + svn_url: 'https://github.com/mralexgray/Alcatraz', + archived: false, + disabled: false, + has_wiki: false, + homepage: 'mneorr.github.com/Alcatraz', + html_url: 'https://github.com/mralexgray/Alcatraz', + keys_url: + 'https://api.github.com/repos/mralexgray/Alcatraz/keys{/key_id}', + language: 'Objective-C', + tags_url: 'https://api.github.com/repos/mralexgray/Alcatraz/tags', + watchers: 0, + blobs_url: + 'https://api.github.com/repos/mralexgray/Alcatraz/git/blobs{/sha}', + clone_url: 'https://github.com/mralexgray/Alcatraz.git', + forks_url: 'https://api.github.com/repos/mralexgray/Alcatraz/forks', + full_name: 'mralexgray/Alcatraz', + has_pages: false, + hooks_url: 'https://api.github.com/repos/mralexgray/Alcatraz/hooks', + pulls_url: + 'https://api.github.com/repos/mralexgray/Alcatraz/pulls{/number}', + pushed_at: '2014-03-19T12:50:37Z', + teams_url: 'https://api.github.com/repos/mralexgray/Alcatraz/teams', + trees_url: + 'https://api.github.com/repos/mralexgray/Alcatraz/git/trees{/sha}', + created_at: '2013-05-16T04:41:13Z', + events_url: 'https://api.github.com/repos/mralexgray/Alcatraz/events', + has_issues: false, + issues_url: + 'https://api.github.com/repos/mralexgray/Alcatraz/issues{/number}', + labels_url: + 'https://api.github.com/repos/mralexgray/Alcatraz/labels{/name}', + merges_url: 'https://api.github.com/repos/mralexgray/Alcatraz/merges', + mirror_url: null, + updated_at: '2014-03-19T20:38:35Z', + visibility: 'public', + archive_url: + 'https://api.github.com/repos/mralexgray/Alcatraz/{archive_format}{/ref}', + commits_url: + 'https://api.github.com/repos/mralexgray/Alcatraz/commits{/sha}', + compare_url: + 'https://api.github.com/repos/mralexgray/Alcatraz/compare/{base}...{head}', + description: 'The most awesome (and only) Xcode package manager!', + forks_count: 0, + is_template: false, + open_issues: 0, + branches_url: + 'https://api.github.com/repos/mralexgray/Alcatraz/branches{/branch}', + comments_url: + 'https://api.github.com/repos/mralexgray/Alcatraz/comments{/number}', + contents_url: + 'https://api.github.com/repos/mralexgray/Alcatraz/contents/{+path}', + git_refs_url: + 'https://api.github.com/repos/mralexgray/Alcatraz/git/refs{/sha}', + git_tags_url: + 'https://api.github.com/repos/mralexgray/Alcatraz/git/tags{/sha}', + has_projects: true, + releases_url: + 'https://api.github.com/repos/mralexgray/Alcatraz/releases{/id}', + statuses_url: + 'https://api.github.com/repos/mralexgray/Alcatraz/statuses/{sha}', + allow_forking: true, + assignees_url: + 'https://api.github.com/repos/mralexgray/Alcatraz/assignees{/user}', + downloads_url: + 'https://api.github.com/repos/mralexgray/Alcatraz/downloads', + has_downloads: true, + languages_url: + 'https://api.github.com/repos/mralexgray/Alcatraz/languages', + default_branch: 'master', + milestones_url: + 'https://api.github.com/repos/mralexgray/Alcatraz/milestones{/number}', + stargazers_url: + 'https://api.github.com/repos/mralexgray/Alcatraz/stargazers', + watchers_count: 0, + deployments_url: + 'https://api.github.com/repos/mralexgray/Alcatraz/deployments', + git_commits_url: + 'https://api.github.com/repos/mralexgray/Alcatraz/git/commits{/sha}', + subscribers_url: + 'https://api.github.com/repos/mralexgray/Alcatraz/subscribers', + contributors_url: + 'https://api.github.com/repos/mralexgray/Alcatraz/contributors', + issue_events_url: + 'https://api.github.com/repos/mralexgray/Alcatraz/issues/events{/number}', + stargazers_count: 0, + subscription_url: + 'https://api.github.com/repos/mralexgray/Alcatraz/subscription', + collaborators_url: + 'https://api.github.com/repos/mralexgray/Alcatraz/collaborators{/collaborator}', + issue_comment_url: + 'https://api.github.com/repos/mralexgray/Alcatraz/issues/comments{/number}', + notifications_url: + 'https://api.github.com/repos/mralexgray/Alcatraz/notifications{?since,all,participating}', + open_issues_count: 0, + web_commit_signoff_required: false, + }, + { + id: 12916552, + url: 'https://api.github.com/repos/mralexgray/alcatraz-packages', + fork: true, + name: 'alcatraz-packages', + size: 826, + forks: 0, + owner: { + id: 262517, + url: 'https://api.github.com/users/mralexgray', + type: 'User', + login: 'mralexgray', + node_id: 'MDQ6VXNlcjI2MjUxNw==', + html_url: 'https://github.com/mralexgray', + gists_url: 'https://api.github.com/users/mralexgray/gists{/gist_id}', + repos_url: 'https://api.github.com/users/mralexgray/repos', + avatar_url: 'https://avatars.githubusercontent.com/u/262517?v=4', + events_url: + 'https://api.github.com/users/mralexgray/events{/privacy}', + site_admin: false, + gravatar_id: '', + starred_url: + 'https://api.github.com/users/mralexgray/starred{/owner}{/repo}', + followers_url: 'https://api.github.com/users/mralexgray/followers', + following_url: + 'https://api.github.com/users/mralexgray/following{/other_user}', + organizations_url: 'https://api.github.com/users/mralexgray/orgs', + subscriptions_url: + 'https://api.github.com/users/mralexgray/subscriptions', + received_events_url: + 'https://api.github.com/users/mralexgray/received_events', + }, + topics: [], + git_url: 'git://github.com/mralexgray/alcatraz-packages.git', + license: null, + node_id: 'MDEwOlJlcG9zaXRvcnkxMjkxNjU1Mg==', + private: false, + ssh_url: 'git@github.com:mralexgray/alcatraz-packages.git', + svn_url: 'https://github.com/mralexgray/alcatraz-packages', + archived: false, + disabled: false, + has_wiki: true, + homepage: 'mneorr.github.com/Alcatraz', + html_url: 'https://github.com/mralexgray/alcatraz-packages', + keys_url: + 'https://api.github.com/repos/mralexgray/alcatraz-packages/keys{/key_id}', + language: 'Ruby', + tags_url: + 'https://api.github.com/repos/mralexgray/alcatraz-packages/tags', + watchers: 0, + blobs_url: + 'https://api.github.com/repos/mralexgray/alcatraz-packages/git/blobs{/sha}', + clone_url: 'https://github.com/mralexgray/alcatraz-packages.git', + forks_url: + 'https://api.github.com/repos/mralexgray/alcatraz-packages/forks', + full_name: 'mralexgray/alcatraz-packages', + has_pages: false, + hooks_url: + 'https://api.github.com/repos/mralexgray/alcatraz-packages/hooks', + pulls_url: + 'https://api.github.com/repos/mralexgray/alcatraz-packages/pulls{/number}', + pushed_at: '2015-12-14T16:21:31Z', + teams_url: + 'https://api.github.com/repos/mralexgray/alcatraz-packages/teams', + trees_url: + 'https://api.github.com/repos/mralexgray/alcatraz-packages/git/trees{/sha}', + created_at: '2013-09-18T07:15:24Z', + events_url: + 'https://api.github.com/repos/mralexgray/alcatraz-packages/events', + has_issues: false, + issues_url: + 'https://api.github.com/repos/mralexgray/alcatraz-packages/issues{/number}', + labels_url: + 'https://api.github.com/repos/mralexgray/alcatraz-packages/labels{/name}', + merges_url: + 'https://api.github.com/repos/mralexgray/alcatraz-packages/merges', + mirror_url: null, + updated_at: '2015-11-10T20:52:30Z', + visibility: 'public', + archive_url: + 'https://api.github.com/repos/mralexgray/alcatraz-packages/{archive_format}{/ref}', + commits_url: + 'https://api.github.com/repos/mralexgray/alcatraz-packages/commits{/sha}', + compare_url: + 'https://api.github.com/repos/mralexgray/alcatraz-packages/compare/{base}...{head}', + description: 'Package list repository for Alcatraz', + forks_count: 0, + is_template: false, + open_issues: 0, + branches_url: + 'https://api.github.com/repos/mralexgray/alcatraz-packages/branches{/branch}', + comments_url: + 'https://api.github.com/repos/mralexgray/alcatraz-packages/comments{/number}', + contents_url: + 'https://api.github.com/repos/mralexgray/alcatraz-packages/contents/{+path}', + git_refs_url: + 'https://api.github.com/repos/mralexgray/alcatraz-packages/git/refs{/sha}', + git_tags_url: + 'https://api.github.com/repos/mralexgray/alcatraz-packages/git/tags{/sha}', + has_projects: true, + releases_url: + 'https://api.github.com/repos/mralexgray/alcatraz-packages/releases{/id}', + statuses_url: + 'https://api.github.com/repos/mralexgray/alcatraz-packages/statuses/{sha}', + allow_forking: true, + assignees_url: + 'https://api.github.com/repos/mralexgray/alcatraz-packages/assignees{/user}', + downloads_url: + 'https://api.github.com/repos/mralexgray/alcatraz-packages/downloads', + has_downloads: true, + languages_url: + 'https://api.github.com/repos/mralexgray/alcatraz-packages/languages', + default_branch: 'master', + milestones_url: + 'https://api.github.com/repos/mralexgray/alcatraz-packages/milestones{/number}', + stargazers_url: + 'https://api.github.com/repos/mralexgray/alcatraz-packages/stargazers', + watchers_count: 0, + deployments_url: + 'https://api.github.com/repos/mralexgray/alcatraz-packages/deployments', + git_commits_url: + 'https://api.github.com/repos/mralexgray/alcatraz-packages/git/commits{/sha}', + subscribers_url: + 'https://api.github.com/repos/mralexgray/alcatraz-packages/subscribers', + contributors_url: + 'https://api.github.com/repos/mralexgray/alcatraz-packages/contributors', + issue_events_url: + 'https://api.github.com/repos/mralexgray/alcatraz-packages/issues/events{/number}', + stargazers_count: 0, + subscription_url: + 'https://api.github.com/repos/mralexgray/alcatraz-packages/subscription', + collaborators_url: + 'https://api.github.com/repos/mralexgray/alcatraz-packages/collaborators{/collaborator}', + issue_comment_url: + 'https://api.github.com/repos/mralexgray/alcatraz-packages/issues/comments{/number}', + notifications_url: + 'https://api.github.com/repos/mralexgray/alcatraz-packages/notifications{?since,all,participating}', + open_issues_count: 0, + web_commit_signoff_required: false, + }, + { + id: 44278362, + url: 'https://api.github.com/repos/mralexgray/alexicons', + fork: true, + name: 'alexicons', + size: 257, + forks: 0, + owner: { + id: 262517, + url: 'https://api.github.com/users/mralexgray', + type: 'User', + login: 'mralexgray', + node_id: 'MDQ6VXNlcjI2MjUxNw==', + html_url: 'https://github.com/mralexgray', + gists_url: 'https://api.github.com/users/mralexgray/gists{/gist_id}', + repos_url: 'https://api.github.com/users/mralexgray/repos', + avatar_url: 'https://avatars.githubusercontent.com/u/262517?v=4', + events_url: + 'https://api.github.com/users/mralexgray/events{/privacy}', + site_admin: false, + gravatar_id: '', + starred_url: + 'https://api.github.com/users/mralexgray/starred{/owner}{/repo}', + followers_url: 'https://api.github.com/users/mralexgray/followers', + following_url: + 'https://api.github.com/users/mralexgray/following{/other_user}', + organizations_url: 'https://api.github.com/users/mralexgray/orgs', + subscriptions_url: + 'https://api.github.com/users/mralexgray/subscriptions', + received_events_url: + 'https://api.github.com/users/mralexgray/received_events', + }, + topics: [], + git_url: 'git://github.com/mralexgray/alexicons.git', + license: null, + node_id: 'MDEwOlJlcG9zaXRvcnk0NDI3ODM2Mg==', + private: false, + ssh_url: 'git@github.com:mralexgray/alexicons.git', + svn_url: 'https://github.com/mralexgray/alexicons', + archived: false, + disabled: false, + has_wiki: false, + homepage: null, + html_url: 'https://github.com/mralexgray/alexicons', + keys_url: + 'https://api.github.com/repos/mralexgray/alexicons/keys{/key_id}', + language: 'CoffeeScript', + tags_url: 'https://api.github.com/repos/mralexgray/alexicons/tags', + watchers: 0, + blobs_url: + 'https://api.github.com/repos/mralexgray/alexicons/git/blobs{/sha}', + clone_url: 'https://github.com/mralexgray/alexicons.git', + forks_url: 'https://api.github.com/repos/mralexgray/alexicons/forks', + full_name: 'mralexgray/alexicons', + has_pages: false, + hooks_url: 'https://api.github.com/repos/mralexgray/alexicons/hooks', + pulls_url: + 'https://api.github.com/repos/mralexgray/alexicons/pulls{/number}', + pushed_at: '2015-10-16T03:57:51Z', + teams_url: 'https://api.github.com/repos/mralexgray/alexicons/teams', + trees_url: + 'https://api.github.com/repos/mralexgray/alexicons/git/trees{/sha}', + created_at: '2015-10-14T21:49:39Z', + events_url: 'https://api.github.com/repos/mralexgray/alexicons/events', + has_issues: false, + issues_url: + 'https://api.github.com/repos/mralexgray/alexicons/issues{/number}', + labels_url: + 'https://api.github.com/repos/mralexgray/alexicons/labels{/name}', + merges_url: 'https://api.github.com/repos/mralexgray/alexicons/merges', + mirror_url: null, + updated_at: '2015-10-15T06:20:08Z', + visibility: 'public', + archive_url: + 'https://api.github.com/repos/mralexgray/alexicons/{archive_format}{/ref}', + commits_url: + 'https://api.github.com/repos/mralexgray/alexicons/commits{/sha}', + compare_url: + 'https://api.github.com/repos/mralexgray/alexicons/compare/{base}...{head}', + description: 'Get popular cat names', + forks_count: 0, + is_template: false, + open_issues: 0, + branches_url: + 'https://api.github.com/repos/mralexgray/alexicons/branches{/branch}', + comments_url: + 'https://api.github.com/repos/mralexgray/alexicons/comments{/number}', + contents_url: + 'https://api.github.com/repos/mralexgray/alexicons/contents/{+path}', + git_refs_url: + 'https://api.github.com/repos/mralexgray/alexicons/git/refs{/sha}', + git_tags_url: + 'https://api.github.com/repos/mralexgray/alexicons/git/tags{/sha}', + has_projects: true, + releases_url: + 'https://api.github.com/repos/mralexgray/alexicons/releases{/id}', + statuses_url: + 'https://api.github.com/repos/mralexgray/alexicons/statuses/{sha}', + allow_forking: true, + assignees_url: + 'https://api.github.com/repos/mralexgray/alexicons/assignees{/user}', + downloads_url: + 'https://api.github.com/repos/mralexgray/alexicons/downloads', + has_downloads: true, + languages_url: + 'https://api.github.com/repos/mralexgray/alexicons/languages', + default_branch: 'master', + milestones_url: + 'https://api.github.com/repos/mralexgray/alexicons/milestones{/number}', + stargazers_url: + 'https://api.github.com/repos/mralexgray/alexicons/stargazers', + watchers_count: 0, + deployments_url: + 'https://api.github.com/repos/mralexgray/alexicons/deployments', + git_commits_url: + 'https://api.github.com/repos/mralexgray/alexicons/git/commits{/sha}', + subscribers_url: + 'https://api.github.com/repos/mralexgray/alexicons/subscribers', + contributors_url: + 'https://api.github.com/repos/mralexgray/alexicons/contributors', + issue_events_url: + 'https://api.github.com/repos/mralexgray/alexicons/issues/events{/number}', + stargazers_count: 0, + subscription_url: + 'https://api.github.com/repos/mralexgray/alexicons/subscription', + collaborators_url: + 'https://api.github.com/repos/mralexgray/alexicons/collaborators{/collaborator}', + issue_comment_url: + 'https://api.github.com/repos/mralexgray/alexicons/issues/comments{/number}', + notifications_url: + 'https://api.github.com/repos/mralexgray/alexicons/notifications{?since,all,participating}', + open_issues_count: 0, + web_commit_signoff_required: false, + }, + { + id: 10476467, + url: 'https://api.github.com/repos/mralexgray/Alfred-Google-Translate', + fork: true, + name: 'Alfred-Google-Translate', + size: 103, + forks: 0, + owner: { + id: 262517, + url: 'https://api.github.com/users/mralexgray', + type: 'User', + login: 'mralexgray', + node_id: 'MDQ6VXNlcjI2MjUxNw==', + html_url: 'https://github.com/mralexgray', + gists_url: 'https://api.github.com/users/mralexgray/gists{/gist_id}', + repos_url: 'https://api.github.com/users/mralexgray/repos', + avatar_url: 'https://avatars.githubusercontent.com/u/262517?v=4', + events_url: + 'https://api.github.com/users/mralexgray/events{/privacy}', + site_admin: false, + gravatar_id: '', + starred_url: + 'https://api.github.com/users/mralexgray/starred{/owner}{/repo}', + followers_url: 'https://api.github.com/users/mralexgray/followers', + following_url: + 'https://api.github.com/users/mralexgray/following{/other_user}', + organizations_url: 'https://api.github.com/users/mralexgray/orgs', + subscriptions_url: + 'https://api.github.com/users/mralexgray/subscriptions', + received_events_url: + 'https://api.github.com/users/mralexgray/received_events', + }, + topics: [], + git_url: 'git://github.com/mralexgray/Alfred-Google-Translate.git', + license: null, + node_id: 'MDEwOlJlcG9zaXRvcnkxMDQ3NjQ2Nw==', + private: false, + ssh_url: 'git@github.com:mralexgray/Alfred-Google-Translate.git', + svn_url: 'https://github.com/mralexgray/Alfred-Google-Translate', + archived: false, + disabled: false, + has_wiki: true, + homepage: null, + html_url: 'https://github.com/mralexgray/Alfred-Google-Translate', + keys_url: + 'https://api.github.com/repos/mralexgray/Alfred-Google-Translate/keys{/key_id}', + language: 'Shell', + tags_url: + 'https://api.github.com/repos/mralexgray/Alfred-Google-Translate/tags', + watchers: 0, + blobs_url: + 'https://api.github.com/repos/mralexgray/Alfred-Google-Translate/git/blobs{/sha}', + clone_url: 'https://github.com/mralexgray/Alfred-Google-Translate.git', + forks_url: + 'https://api.github.com/repos/mralexgray/Alfred-Google-Translate/forks', + full_name: 'mralexgray/Alfred-Google-Translate', + has_pages: false, + hooks_url: + 'https://api.github.com/repos/mralexgray/Alfred-Google-Translate/hooks', + pulls_url: + 'https://api.github.com/repos/mralexgray/Alfred-Google-Translate/pulls{/number}', + pushed_at: '2013-01-12T19:39:03Z', + teams_url: + 'https://api.github.com/repos/mralexgray/Alfred-Google-Translate/teams', + trees_url: + 'https://api.github.com/repos/mralexgray/Alfred-Google-Translate/git/trees{/sha}', + created_at: '2013-06-04T10:45:10Z', + events_url: + 'https://api.github.com/repos/mralexgray/Alfred-Google-Translate/events', + has_issues: false, + issues_url: + 'https://api.github.com/repos/mralexgray/Alfred-Google-Translate/issues{/number}', + labels_url: + 'https://api.github.com/repos/mralexgray/Alfred-Google-Translate/labels{/name}', + merges_url: + 'https://api.github.com/repos/mralexgray/Alfred-Google-Translate/merges', + mirror_url: null, + updated_at: '2013-06-04T10:45:10Z', + visibility: 'public', + archive_url: + 'https://api.github.com/repos/mralexgray/Alfred-Google-Translate/{archive_format}{/ref}', + commits_url: + 'https://api.github.com/repos/mralexgray/Alfred-Google-Translate/commits{/sha}', + compare_url: + 'https://api.github.com/repos/mralexgray/Alfred-Google-Translate/compare/{base}...{head}', + description: + 'Extension for Alfred that will do a Google translate for you', + forks_count: 0, + is_template: false, + open_issues: 0, + branches_url: + 'https://api.github.com/repos/mralexgray/Alfred-Google-Translate/branches{/branch}', + comments_url: + 'https://api.github.com/repos/mralexgray/Alfred-Google-Translate/comments{/number}', + contents_url: + 'https://api.github.com/repos/mralexgray/Alfred-Google-Translate/contents/{+path}', + git_refs_url: + 'https://api.github.com/repos/mralexgray/Alfred-Google-Translate/git/refs{/sha}', + git_tags_url: + 'https://api.github.com/repos/mralexgray/Alfred-Google-Translate/git/tags{/sha}', + has_projects: true, + releases_url: + 'https://api.github.com/repos/mralexgray/Alfred-Google-Translate/releases{/id}', + statuses_url: + 'https://api.github.com/repos/mralexgray/Alfred-Google-Translate/statuses/{sha}', + allow_forking: true, + assignees_url: + 'https://api.github.com/repos/mralexgray/Alfred-Google-Translate/assignees{/user}', + downloads_url: + 'https://api.github.com/repos/mralexgray/Alfred-Google-Translate/downloads', + has_downloads: true, + languages_url: + 'https://api.github.com/repos/mralexgray/Alfred-Google-Translate/languages', + default_branch: 'master', + milestones_url: + 'https://api.github.com/repos/mralexgray/Alfred-Google-Translate/milestones{/number}', + stargazers_url: + 'https://api.github.com/repos/mralexgray/Alfred-Google-Translate/stargazers', + watchers_count: 0, + deployments_url: + 'https://api.github.com/repos/mralexgray/Alfred-Google-Translate/deployments', + git_commits_url: + 'https://api.github.com/repos/mralexgray/Alfred-Google-Translate/git/commits{/sha}', + subscribers_url: + 'https://api.github.com/repos/mralexgray/Alfred-Google-Translate/subscribers', + contributors_url: + 'https://api.github.com/repos/mralexgray/Alfred-Google-Translate/contributors', + issue_events_url: + 'https://api.github.com/repos/mralexgray/Alfred-Google-Translate/issues/events{/number}', + stargazers_count: 0, + subscription_url: + 'https://api.github.com/repos/mralexgray/Alfred-Google-Translate/subscription', + collaborators_url: + 'https://api.github.com/repos/mralexgray/Alfred-Google-Translate/collaborators{/collaborator}', + issue_comment_url: + 'https://api.github.com/repos/mralexgray/Alfred-Google-Translate/issues/comments{/number}', + notifications_url: + 'https://api.github.com/repos/mralexgray/Alfred-Google-Translate/notifications{?since,all,participating}', + open_issues_count: 0, + web_commit_signoff_required: false, + }, + { + id: 5524019, + url: 'https://api.github.com/repos/mralexgray/Amber', + fork: false, + name: 'Amber', + size: 48, + forks: 0, + owner: { + id: 262517, + url: 'https://api.github.com/users/mralexgray', + type: 'User', + login: 'mralexgray', + node_id: 'MDQ6VXNlcjI2MjUxNw==', + html_url: 'https://github.com/mralexgray', + gists_url: 'https://api.github.com/users/mralexgray/gists{/gist_id}', + repos_url: 'https://api.github.com/users/mralexgray/repos', + avatar_url: 'https://avatars.githubusercontent.com/u/262517?v=4', + events_url: + 'https://api.github.com/users/mralexgray/events{/privacy}', + site_admin: false, + gravatar_id: '', + starred_url: + 'https://api.github.com/users/mralexgray/starred{/owner}{/repo}', + followers_url: 'https://api.github.com/users/mralexgray/followers', + following_url: + 'https://api.github.com/users/mralexgray/following{/other_user}', + organizations_url: 'https://api.github.com/users/mralexgray/orgs', + subscriptions_url: + 'https://api.github.com/users/mralexgray/subscriptions', + received_events_url: + 'https://api.github.com/users/mralexgray/received_events', + }, + topics: [], + git_url: 'git://github.com/mralexgray/Amber.git', + license: null, + node_id: 'MDEwOlJlcG9zaXRvcnk1NTI0MDE5', + private: false, + ssh_url: 'git@github.com:mralexgray/Amber.git', + svn_url: 'https://github.com/mralexgray/Amber', + archived: false, + disabled: false, + has_wiki: true, + homepage: null, + html_url: 'https://github.com/mralexgray/Amber', + keys_url: 'https://api.github.com/repos/mralexgray/Amber/keys{/key_id}', + language: null, + tags_url: 'https://api.github.com/repos/mralexgray/Amber/tags', + watchers: 0, + blobs_url: + 'https://api.github.com/repos/mralexgray/Amber/git/blobs{/sha}', + clone_url: 'https://github.com/mralexgray/Amber.git', + forks_url: 'https://api.github.com/repos/mralexgray/Amber/forks', + full_name: 'mralexgray/Amber', + has_pages: false, + hooks_url: 'https://api.github.com/repos/mralexgray/Amber/hooks', + pulls_url: + 'https://api.github.com/repos/mralexgray/Amber/pulls{/number}', + pushed_at: '2012-08-23T10:38:25Z', + teams_url: 'https://api.github.com/repos/mralexgray/Amber/teams', + trees_url: + 'https://api.github.com/repos/mralexgray/Amber/git/trees{/sha}', + created_at: '2012-08-23T10:38:24Z', + events_url: 'https://api.github.com/repos/mralexgray/Amber/events', + has_issues: true, + issues_url: + 'https://api.github.com/repos/mralexgray/Amber/issues{/number}', + labels_url: + 'https://api.github.com/repos/mralexgray/Amber/labels{/name}', + merges_url: 'https://api.github.com/repos/mralexgray/Amber/merges', + mirror_url: null, + updated_at: '2013-01-11T22:25:35Z', + visibility: 'public', + archive_url: + 'https://api.github.com/repos/mralexgray/Amber/{archive_format}{/ref}', + commits_url: + 'https://api.github.com/repos/mralexgray/Amber/commits{/sha}', + compare_url: + 'https://api.github.com/repos/mralexgray/Amber/compare/{base}...{head}', + description: 'Fork of the difficult-to-deal-with Amber.framework', + forks_count: 0, + is_template: false, + open_issues: 0, + branches_url: + 'https://api.github.com/repos/mralexgray/Amber/branches{/branch}', + comments_url: + 'https://api.github.com/repos/mralexgray/Amber/comments{/number}', + contents_url: + 'https://api.github.com/repos/mralexgray/Amber/contents/{+path}', + git_refs_url: + 'https://api.github.com/repos/mralexgray/Amber/git/refs{/sha}', + git_tags_url: + 'https://api.github.com/repos/mralexgray/Amber/git/tags{/sha}', + has_projects: true, + releases_url: + 'https://api.github.com/repos/mralexgray/Amber/releases{/id}', + statuses_url: + 'https://api.github.com/repos/mralexgray/Amber/statuses/{sha}', + allow_forking: true, + assignees_url: + 'https://api.github.com/repos/mralexgray/Amber/assignees{/user}', + downloads_url: + 'https://api.github.com/repos/mralexgray/Amber/downloads', + has_downloads: true, + languages_url: + 'https://api.github.com/repos/mralexgray/Amber/languages', + default_branch: 'master', + milestones_url: + 'https://api.github.com/repos/mralexgray/Amber/milestones{/number}', + stargazers_url: + 'https://api.github.com/repos/mralexgray/Amber/stargazers', + watchers_count: 0, + deployments_url: + 'https://api.github.com/repos/mralexgray/Amber/deployments', + git_commits_url: + 'https://api.github.com/repos/mralexgray/Amber/git/commits{/sha}', + subscribers_url: + 'https://api.github.com/repos/mralexgray/Amber/subscribers', + contributors_url: + 'https://api.github.com/repos/mralexgray/Amber/contributors', + issue_events_url: + 'https://api.github.com/repos/mralexgray/Amber/issues/events{/number}', + stargazers_count: 0, + subscription_url: + 'https://api.github.com/repos/mralexgray/Amber/subscription', + collaborators_url: + 'https://api.github.com/repos/mralexgray/Amber/collaborators{/collaborator}', + issue_comment_url: + 'https://api.github.com/repos/mralexgray/Amber/issues/comments{/number}', + notifications_url: + 'https://api.github.com/repos/mralexgray/Amber/notifications{?since,all,participating}', + open_issues_count: 0, + web_commit_signoff_required: false, + }, + { + id: 10809060, + url: 'https://api.github.com/repos/mralexgray/Amethyst', + fork: true, + name: 'Amethyst', + size: 12623, + forks: 0, + owner: { + id: 262517, + url: 'https://api.github.com/users/mralexgray', + type: 'User', + login: 'mralexgray', + node_id: 'MDQ6VXNlcjI2MjUxNw==', + html_url: 'https://github.com/mralexgray', + gists_url: 'https://api.github.com/users/mralexgray/gists{/gist_id}', + repos_url: 'https://api.github.com/users/mralexgray/repos', + avatar_url: 'https://avatars.githubusercontent.com/u/262517?v=4', + events_url: + 'https://api.github.com/users/mralexgray/events{/privacy}', + site_admin: false, + gravatar_id: '', + starred_url: + 'https://api.github.com/users/mralexgray/starred{/owner}{/repo}', + followers_url: 'https://api.github.com/users/mralexgray/followers', + following_url: + 'https://api.github.com/users/mralexgray/following{/other_user}', + organizations_url: 'https://api.github.com/users/mralexgray/orgs', + subscriptions_url: + 'https://api.github.com/users/mralexgray/subscriptions', + received_events_url: + 'https://api.github.com/users/mralexgray/received_events', + }, + topics: [], + git_url: 'git://github.com/mralexgray/Amethyst.git', + license: { + key: 'mit', + url: 'https://api.github.com/licenses/mit', + name: 'MIT License', + node_id: 'MDc6TGljZW5zZTEz', + spdx_id: 'MIT', + }, + node_id: 'MDEwOlJlcG9zaXRvcnkxMDgwOTA2MA==', + private: false, + ssh_url: 'git@github.com:mralexgray/Amethyst.git', + svn_url: 'https://github.com/mralexgray/Amethyst', + archived: false, + disabled: false, + has_wiki: true, + homepage: 'http://ianyh.github.io/Amethyst/', + html_url: 'https://github.com/mralexgray/Amethyst', + keys_url: + 'https://api.github.com/repos/mralexgray/Amethyst/keys{/key_id}', + language: 'Objective-C', + tags_url: 'https://api.github.com/repos/mralexgray/Amethyst/tags', + watchers: 0, + blobs_url: + 'https://api.github.com/repos/mralexgray/Amethyst/git/blobs{/sha}', + clone_url: 'https://github.com/mralexgray/Amethyst.git', + forks_url: 'https://api.github.com/repos/mralexgray/Amethyst/forks', + full_name: 'mralexgray/Amethyst', + has_pages: false, + hooks_url: 'https://api.github.com/repos/mralexgray/Amethyst/hooks', + pulls_url: + 'https://api.github.com/repos/mralexgray/Amethyst/pulls{/number}', + pushed_at: '2013-06-18T02:54:11Z', + teams_url: 'https://api.github.com/repos/mralexgray/Amethyst/teams', + trees_url: + 'https://api.github.com/repos/mralexgray/Amethyst/git/trees{/sha}', + created_at: '2013-06-20T00:34:22Z', + events_url: 'https://api.github.com/repos/mralexgray/Amethyst/events', + has_issues: false, + issues_url: + 'https://api.github.com/repos/mralexgray/Amethyst/issues{/number}', + labels_url: + 'https://api.github.com/repos/mralexgray/Amethyst/labels{/name}', + merges_url: 'https://api.github.com/repos/mralexgray/Amethyst/merges', + mirror_url: null, + updated_at: '2013-06-20T00:34:22Z', + visibility: 'public', + archive_url: + 'https://api.github.com/repos/mralexgray/Amethyst/{archive_format}{/ref}', + commits_url: + 'https://api.github.com/repos/mralexgray/Amethyst/commits{/sha}', + compare_url: + 'https://api.github.com/repos/mralexgray/Amethyst/compare/{base}...{head}', + description: 'Tiling window manager for OS X.', + forks_count: 0, + is_template: false, + open_issues: 0, + branches_url: + 'https://api.github.com/repos/mralexgray/Amethyst/branches{/branch}', + comments_url: + 'https://api.github.com/repos/mralexgray/Amethyst/comments{/number}', + contents_url: + 'https://api.github.com/repos/mralexgray/Amethyst/contents/{+path}', + git_refs_url: + 'https://api.github.com/repos/mralexgray/Amethyst/git/refs{/sha}', + git_tags_url: + 'https://api.github.com/repos/mralexgray/Amethyst/git/tags{/sha}', + has_projects: true, + releases_url: + 'https://api.github.com/repos/mralexgray/Amethyst/releases{/id}', + statuses_url: + 'https://api.github.com/repos/mralexgray/Amethyst/statuses/{sha}', + allow_forking: true, + assignees_url: + 'https://api.github.com/repos/mralexgray/Amethyst/assignees{/user}', + downloads_url: + 'https://api.github.com/repos/mralexgray/Amethyst/downloads', + has_downloads: true, + languages_url: + 'https://api.github.com/repos/mralexgray/Amethyst/languages', + default_branch: 'master', + milestones_url: + 'https://api.github.com/repos/mralexgray/Amethyst/milestones{/number}', + stargazers_url: + 'https://api.github.com/repos/mralexgray/Amethyst/stargazers', + watchers_count: 0, + deployments_url: + 'https://api.github.com/repos/mralexgray/Amethyst/deployments', + git_commits_url: + 'https://api.github.com/repos/mralexgray/Amethyst/git/commits{/sha}', + subscribers_url: + 'https://api.github.com/repos/mralexgray/Amethyst/subscribers', + contributors_url: + 'https://api.github.com/repos/mralexgray/Amethyst/contributors', + issue_events_url: + 'https://api.github.com/repos/mralexgray/Amethyst/issues/events{/number}', + stargazers_count: 0, + subscription_url: + 'https://api.github.com/repos/mralexgray/Amethyst/subscription', + collaborators_url: + 'https://api.github.com/repos/mralexgray/Amethyst/collaborators{/collaborator}', + issue_comment_url: + 'https://api.github.com/repos/mralexgray/Amethyst/issues/comments{/number}', + notifications_url: + 'https://api.github.com/repos/mralexgray/Amethyst/notifications{?since,all,participating}', + open_issues_count: 0, + web_commit_signoff_required: false, + }, + { + id: 3684286, + url: 'https://api.github.com/repos/mralexgray/Animated-Paths', + fork: true, + name: 'Animated-Paths', + size: 411, + forks: 0, + owner: { + id: 262517, + url: 'https://api.github.com/users/mralexgray', + type: 'User', + login: 'mralexgray', + node_id: 'MDQ6VXNlcjI2MjUxNw==', + html_url: 'https://github.com/mralexgray', + gists_url: 'https://api.github.com/users/mralexgray/gists{/gist_id}', + repos_url: 'https://api.github.com/users/mralexgray/repos', + avatar_url: 'https://avatars.githubusercontent.com/u/262517?v=4', + events_url: + 'https://api.github.com/users/mralexgray/events{/privacy}', + site_admin: false, + gravatar_id: '', + starred_url: + 'https://api.github.com/users/mralexgray/starred{/owner}{/repo}', + followers_url: 'https://api.github.com/users/mralexgray/followers', + following_url: + 'https://api.github.com/users/mralexgray/following{/other_user}', + organizations_url: 'https://api.github.com/users/mralexgray/orgs', + subscriptions_url: + 'https://api.github.com/users/mralexgray/subscriptions', + received_events_url: + 'https://api.github.com/users/mralexgray/received_events', + }, + topics: [], + git_url: 'git://github.com/mralexgray/Animated-Paths.git', + license: { + key: 'other', + url: null, + name: 'Other', + node_id: 'MDc6TGljZW5zZTA=', + spdx_id: 'NOASSERTION', + }, + node_id: 'MDEwOlJlcG9zaXRvcnkzNjg0Mjg2', + private: false, + ssh_url: 'git@github.com:mralexgray/Animated-Paths.git', + svn_url: 'https://github.com/mralexgray/Animated-Paths', + archived: false, + disabled: false, + has_wiki: true, + homepage: + 'http://oleb.net/blog/2010/12/animating-drawing-of-cgpath-with-cashapelayer/', + html_url: 'https://github.com/mralexgray/Animated-Paths', + keys_url: + 'https://api.github.com/repos/mralexgray/Animated-Paths/keys{/key_id}', + language: 'Objective-C', + tags_url: 'https://api.github.com/repos/mralexgray/Animated-Paths/tags', + watchers: 2, + blobs_url: + 'https://api.github.com/repos/mralexgray/Animated-Paths/git/blobs{/sha}', + clone_url: 'https://github.com/mralexgray/Animated-Paths.git', + forks_url: + 'https://api.github.com/repos/mralexgray/Animated-Paths/forks', + full_name: 'mralexgray/Animated-Paths', + has_pages: false, + hooks_url: + 'https://api.github.com/repos/mralexgray/Animated-Paths/hooks', + pulls_url: + 'https://api.github.com/repos/mralexgray/Animated-Paths/pulls{/number}', + pushed_at: '2010-12-30T20:56:51Z', + teams_url: + 'https://api.github.com/repos/mralexgray/Animated-Paths/teams', + trees_url: + 'https://api.github.com/repos/mralexgray/Animated-Paths/git/trees{/sha}', + created_at: '2012-03-11T02:56:38Z', + events_url: + 'https://api.github.com/repos/mralexgray/Animated-Paths/events', + has_issues: false, + issues_url: + 'https://api.github.com/repos/mralexgray/Animated-Paths/issues{/number}', + labels_url: + 'https://api.github.com/repos/mralexgray/Animated-Paths/labels{/name}', + merges_url: + 'https://api.github.com/repos/mralexgray/Animated-Paths/merges', + mirror_url: null, + updated_at: '2013-01-08T04:12:21Z', + visibility: 'public', + archive_url: + 'https://api.github.com/repos/mralexgray/Animated-Paths/{archive_format}{/ref}', + commits_url: + 'https://api.github.com/repos/mralexgray/Animated-Paths/commits{/sha}', + compare_url: + 'https://api.github.com/repos/mralexgray/Animated-Paths/compare/{base}...{head}', + description: + 'Demo project: Animating the drawing of a CGPath with CAShapeLayer.strokeEnd', + forks_count: 0, + is_template: false, + open_issues: 0, + branches_url: + 'https://api.github.com/repos/mralexgray/Animated-Paths/branches{/branch}', + comments_url: + 'https://api.github.com/repos/mralexgray/Animated-Paths/comments{/number}', + contents_url: + 'https://api.github.com/repos/mralexgray/Animated-Paths/contents/{+path}', + git_refs_url: + 'https://api.github.com/repos/mralexgray/Animated-Paths/git/refs{/sha}', + git_tags_url: + 'https://api.github.com/repos/mralexgray/Animated-Paths/git/tags{/sha}', + has_projects: true, + releases_url: + 'https://api.github.com/repos/mralexgray/Animated-Paths/releases{/id}', + statuses_url: + 'https://api.github.com/repos/mralexgray/Animated-Paths/statuses/{sha}', + allow_forking: true, + assignees_url: + 'https://api.github.com/repos/mralexgray/Animated-Paths/assignees{/user}', + downloads_url: + 'https://api.github.com/repos/mralexgray/Animated-Paths/downloads', + has_downloads: true, + languages_url: + 'https://api.github.com/repos/mralexgray/Animated-Paths/languages', + default_branch: 'master', + milestones_url: + 'https://api.github.com/repos/mralexgray/Animated-Paths/milestones{/number}', + stargazers_url: + 'https://api.github.com/repos/mralexgray/Animated-Paths/stargazers', + watchers_count: 2, + deployments_url: + 'https://api.github.com/repos/mralexgray/Animated-Paths/deployments', + git_commits_url: + 'https://api.github.com/repos/mralexgray/Animated-Paths/git/commits{/sha}', + subscribers_url: + 'https://api.github.com/repos/mralexgray/Animated-Paths/subscribers', + contributors_url: + 'https://api.github.com/repos/mralexgray/Animated-Paths/contributors', + issue_events_url: + 'https://api.github.com/repos/mralexgray/Animated-Paths/issues/events{/number}', + stargazers_count: 2, + subscription_url: + 'https://api.github.com/repos/mralexgray/Animated-Paths/subscription', + collaborators_url: + 'https://api.github.com/repos/mralexgray/Animated-Paths/collaborators{/collaborator}', + issue_comment_url: + 'https://api.github.com/repos/mralexgray/Animated-Paths/issues/comments{/number}', + notifications_url: + 'https://api.github.com/repos/mralexgray/Animated-Paths/notifications{?since,all,participating}', + open_issues_count: 0, + web_commit_signoff_required: false, + }, + { + id: 16662874, + url: 'https://api.github.com/repos/mralexgray/AnsiLove.framework', + fork: true, + name: 'AnsiLove.framework', + size: 3780, + forks: 0, + owner: { + id: 262517, + url: 'https://api.github.com/users/mralexgray', + type: 'User', + login: 'mralexgray', + node_id: 'MDQ6VXNlcjI2MjUxNw==', + html_url: 'https://github.com/mralexgray', + gists_url: 'https://api.github.com/users/mralexgray/gists{/gist_id}', + repos_url: 'https://api.github.com/users/mralexgray/repos', + avatar_url: 'https://avatars.githubusercontent.com/u/262517?v=4', + events_url: + 'https://api.github.com/users/mralexgray/events{/privacy}', + site_admin: false, + gravatar_id: '', + starred_url: + 'https://api.github.com/users/mralexgray/starred{/owner}{/repo}', + followers_url: 'https://api.github.com/users/mralexgray/followers', + following_url: + 'https://api.github.com/users/mralexgray/following{/other_user}', + organizations_url: 'https://api.github.com/users/mralexgray/orgs', + subscriptions_url: + 'https://api.github.com/users/mralexgray/subscriptions', + received_events_url: + 'https://api.github.com/users/mralexgray/received_events', + }, + topics: [], + git_url: 'git://github.com/mralexgray/AnsiLove.framework.git', + license: { + key: 'other', + url: null, + name: 'Other', + node_id: 'MDc6TGljZW5zZTA=', + spdx_id: 'NOASSERTION', + }, + node_id: 'MDEwOlJlcG9zaXRvcnkxNjY2Mjg3NA==', + private: false, + ssh_url: 'git@github.com:mralexgray/AnsiLove.framework.git', + svn_url: 'https://github.com/mralexgray/AnsiLove.framework', + archived: false, + disabled: false, + has_wiki: false, + homepage: 'http://byteproject.net', + html_url: 'https://github.com/mralexgray/AnsiLove.framework', + keys_url: + 'https://api.github.com/repos/mralexgray/AnsiLove.framework/keys{/key_id}', + language: 'M', + tags_url: + 'https://api.github.com/repos/mralexgray/AnsiLove.framework/tags', + watchers: 0, + blobs_url: + 'https://api.github.com/repos/mralexgray/AnsiLove.framework/git/blobs{/sha}', + clone_url: 'https://github.com/mralexgray/AnsiLove.framework.git', + forks_url: + 'https://api.github.com/repos/mralexgray/AnsiLove.framework/forks', + full_name: 'mralexgray/AnsiLove.framework', + has_pages: false, + hooks_url: + 'https://api.github.com/repos/mralexgray/AnsiLove.framework/hooks', + pulls_url: + 'https://api.github.com/repos/mralexgray/AnsiLove.framework/pulls{/number}', + pushed_at: '2013-10-04T14:08:38Z', + teams_url: + 'https://api.github.com/repos/mralexgray/AnsiLove.framework/teams', + trees_url: + 'https://api.github.com/repos/mralexgray/AnsiLove.framework/git/trees{/sha}', + created_at: '2014-02-09T08:30:27Z', + events_url: + 'https://api.github.com/repos/mralexgray/AnsiLove.framework/events', + has_issues: false, + issues_url: + 'https://api.github.com/repos/mralexgray/AnsiLove.framework/issues{/number}', + labels_url: + 'https://api.github.com/repos/mralexgray/AnsiLove.framework/labels{/name}', + merges_url: + 'https://api.github.com/repos/mralexgray/AnsiLove.framework/merges', + mirror_url: null, + updated_at: '2015-01-13T20:41:46Z', + visibility: 'public', + archive_url: + 'https://api.github.com/repos/mralexgray/AnsiLove.framework/{archive_format}{/ref}', + commits_url: + 'https://api.github.com/repos/mralexgray/AnsiLove.framework/commits{/sha}', + compare_url: + 'https://api.github.com/repos/mralexgray/AnsiLove.framework/compare/{base}...{head}', + description: 'Cocoa Framework for rendering ANSi / ASCII art', + forks_count: 0, + is_template: false, + open_issues: 0, + branches_url: + 'https://api.github.com/repos/mralexgray/AnsiLove.framework/branches{/branch}', + comments_url: + 'https://api.github.com/repos/mralexgray/AnsiLove.framework/comments{/number}', + contents_url: + 'https://api.github.com/repos/mralexgray/AnsiLove.framework/contents/{+path}', + git_refs_url: + 'https://api.github.com/repos/mralexgray/AnsiLove.framework/git/refs{/sha}', + git_tags_url: + 'https://api.github.com/repos/mralexgray/AnsiLove.framework/git/tags{/sha}', + has_projects: true, + releases_url: + 'https://api.github.com/repos/mralexgray/AnsiLove.framework/releases{/id}', + statuses_url: + 'https://api.github.com/repos/mralexgray/AnsiLove.framework/statuses/{sha}', + allow_forking: true, + assignees_url: + 'https://api.github.com/repos/mralexgray/AnsiLove.framework/assignees{/user}', + downloads_url: + 'https://api.github.com/repos/mralexgray/AnsiLove.framework/downloads', + has_downloads: true, + languages_url: + 'https://api.github.com/repos/mralexgray/AnsiLove.framework/languages', + default_branch: 'master', + milestones_url: + 'https://api.github.com/repos/mralexgray/AnsiLove.framework/milestones{/number}', + stargazers_url: + 'https://api.github.com/repos/mralexgray/AnsiLove.framework/stargazers', + watchers_count: 0, + deployments_url: + 'https://api.github.com/repos/mralexgray/AnsiLove.framework/deployments', + git_commits_url: + 'https://api.github.com/repos/mralexgray/AnsiLove.framework/git/commits{/sha}', + subscribers_url: + 'https://api.github.com/repos/mralexgray/AnsiLove.framework/subscribers', + contributors_url: + 'https://api.github.com/repos/mralexgray/AnsiLove.framework/contributors', + issue_events_url: + 'https://api.github.com/repos/mralexgray/AnsiLove.framework/issues/events{/number}', + stargazers_count: 0, + subscription_url: + 'https://api.github.com/repos/mralexgray/AnsiLove.framework/subscription', + collaborators_url: + 'https://api.github.com/repos/mralexgray/AnsiLove.framework/collaborators{/collaborator}', + issue_comment_url: + 'https://api.github.com/repos/mralexgray/AnsiLove.framework/issues/comments{/number}', + notifications_url: + 'https://api.github.com/repos/mralexgray/AnsiLove.framework/notifications{?since,all,participating}', + open_issues_count: 0, + web_commit_signoff_required: false, + }, + { + id: 5189563, + url: 'https://api.github.com/repos/mralexgray/ANTrackBar', + fork: true, + name: 'ANTrackBar', + size: 94, + forks: 0, + owner: { + id: 262517, + url: 'https://api.github.com/users/mralexgray', + type: 'User', + login: 'mralexgray', + node_id: 'MDQ6VXNlcjI2MjUxNw==', + html_url: 'https://github.com/mralexgray', + gists_url: 'https://api.github.com/users/mralexgray/gists{/gist_id}', + repos_url: 'https://api.github.com/users/mralexgray/repos', + avatar_url: 'https://avatars.githubusercontent.com/u/262517?v=4', + events_url: + 'https://api.github.com/users/mralexgray/events{/privacy}', + site_admin: false, + gravatar_id: '', + starred_url: + 'https://api.github.com/users/mralexgray/starred{/owner}{/repo}', + followers_url: 'https://api.github.com/users/mralexgray/followers', + following_url: + 'https://api.github.com/users/mralexgray/following{/other_user}', + organizations_url: 'https://api.github.com/users/mralexgray/orgs', + subscriptions_url: + 'https://api.github.com/users/mralexgray/subscriptions', + received_events_url: + 'https://api.github.com/users/mralexgray/received_events', + }, + topics: [], + git_url: 'git://github.com/mralexgray/ANTrackBar.git', + license: null, + node_id: 'MDEwOlJlcG9zaXRvcnk1MTg5NTYz', + private: false, + ssh_url: 'git@github.com:mralexgray/ANTrackBar.git', + svn_url: 'https://github.com/mralexgray/ANTrackBar', + archived: false, + disabled: false, + has_wiki: true, + homepage: '', + html_url: 'https://github.com/mralexgray/ANTrackBar', + keys_url: + 'https://api.github.com/repos/mralexgray/ANTrackBar/keys{/key_id}', + language: 'Objective-C', + tags_url: 'https://api.github.com/repos/mralexgray/ANTrackBar/tags', + watchers: 2, + blobs_url: + 'https://api.github.com/repos/mralexgray/ANTrackBar/git/blobs{/sha}', + clone_url: 'https://github.com/mralexgray/ANTrackBar.git', + forks_url: 'https://api.github.com/repos/mralexgray/ANTrackBar/forks', + full_name: 'mralexgray/ANTrackBar', + has_pages: false, + hooks_url: 'https://api.github.com/repos/mralexgray/ANTrackBar/hooks', + pulls_url: + 'https://api.github.com/repos/mralexgray/ANTrackBar/pulls{/number}', + pushed_at: '2012-03-09T01:40:02Z', + teams_url: 'https://api.github.com/repos/mralexgray/ANTrackBar/teams', + trees_url: + 'https://api.github.com/repos/mralexgray/ANTrackBar/git/trees{/sha}', + created_at: '2012-07-26T08:17:22Z', + events_url: 'https://api.github.com/repos/mralexgray/ANTrackBar/events', + has_issues: false, + issues_url: + 'https://api.github.com/repos/mralexgray/ANTrackBar/issues{/number}', + labels_url: + 'https://api.github.com/repos/mralexgray/ANTrackBar/labels{/name}', + merges_url: 'https://api.github.com/repos/mralexgray/ANTrackBar/merges', + mirror_url: null, + updated_at: '2013-01-11T10:29:56Z', + visibility: 'public', + archive_url: + 'https://api.github.com/repos/mralexgray/ANTrackBar/{archive_format}{/ref}', + commits_url: + 'https://api.github.com/repos/mralexgray/ANTrackBar/commits{/sha}', + compare_url: + 'https://api.github.com/repos/mralexgray/ANTrackBar/compare/{base}...{head}', + description: 'An easy-to-use Cocoa seek bar with a pleasing appearance', + forks_count: 0, + is_template: false, + open_issues: 0, + branches_url: + 'https://api.github.com/repos/mralexgray/ANTrackBar/branches{/branch}', + comments_url: + 'https://api.github.com/repos/mralexgray/ANTrackBar/comments{/number}', + contents_url: + 'https://api.github.com/repos/mralexgray/ANTrackBar/contents/{+path}', + git_refs_url: + 'https://api.github.com/repos/mralexgray/ANTrackBar/git/refs{/sha}', + git_tags_url: + 'https://api.github.com/repos/mralexgray/ANTrackBar/git/tags{/sha}', + has_projects: true, + releases_url: + 'https://api.github.com/repos/mralexgray/ANTrackBar/releases{/id}', + statuses_url: + 'https://api.github.com/repos/mralexgray/ANTrackBar/statuses/{sha}', + allow_forking: true, + assignees_url: + 'https://api.github.com/repos/mralexgray/ANTrackBar/assignees{/user}', + downloads_url: + 'https://api.github.com/repos/mralexgray/ANTrackBar/downloads', + has_downloads: true, + languages_url: + 'https://api.github.com/repos/mralexgray/ANTrackBar/languages', + default_branch: 'master', + milestones_url: + 'https://api.github.com/repos/mralexgray/ANTrackBar/milestones{/number}', + stargazers_url: + 'https://api.github.com/repos/mralexgray/ANTrackBar/stargazers', + watchers_count: 2, + deployments_url: + 'https://api.github.com/repos/mralexgray/ANTrackBar/deployments', + git_commits_url: + 'https://api.github.com/repos/mralexgray/ANTrackBar/git/commits{/sha}', + subscribers_url: + 'https://api.github.com/repos/mralexgray/ANTrackBar/subscribers', + contributors_url: + 'https://api.github.com/repos/mralexgray/ANTrackBar/contributors', + issue_events_url: + 'https://api.github.com/repos/mralexgray/ANTrackBar/issues/events{/number}', + stargazers_count: 2, + subscription_url: + 'https://api.github.com/repos/mralexgray/ANTrackBar/subscription', + collaborators_url: + 'https://api.github.com/repos/mralexgray/ANTrackBar/collaborators{/collaborator}', + issue_comment_url: + 'https://api.github.com/repos/mralexgray/ANTrackBar/issues/comments{/number}', + notifications_url: + 'https://api.github.com/repos/mralexgray/ANTrackBar/notifications{?since,all,participating}', + open_issues_count: 0, + web_commit_signoff_required: false, + }, + { + id: 16240152, + url: 'https://api.github.com/repos/mralexgray/AOP-in-Objective-C', + fork: true, + name: 'AOP-in-Objective-C', + size: 340, + forks: 1, + owner: { + id: 262517, + url: 'https://api.github.com/users/mralexgray', + type: 'User', + login: 'mralexgray', + node_id: 'MDQ6VXNlcjI2MjUxNw==', + html_url: 'https://github.com/mralexgray', + gists_url: 'https://api.github.com/users/mralexgray/gists{/gist_id}', + repos_url: 'https://api.github.com/users/mralexgray/repos', + avatar_url: 'https://avatars.githubusercontent.com/u/262517?v=4', + events_url: + 'https://api.github.com/users/mralexgray/events{/privacy}', + site_admin: false, + gravatar_id: '', + starred_url: + 'https://api.github.com/users/mralexgray/starred{/owner}{/repo}', + followers_url: 'https://api.github.com/users/mralexgray/followers', + following_url: + 'https://api.github.com/users/mralexgray/following{/other_user}', + organizations_url: 'https://api.github.com/users/mralexgray/orgs', + subscriptions_url: + 'https://api.github.com/users/mralexgray/subscriptions', + received_events_url: + 'https://api.github.com/users/mralexgray/received_events', + }, + topics: [], + git_url: 'git://github.com/mralexgray/AOP-in-Objective-C.git', + license: null, + node_id: 'MDEwOlJlcG9zaXRvcnkxNjI0MDE1Mg==', + private: false, + ssh_url: 'git@github.com:mralexgray/AOP-in-Objective-C.git', + svn_url: 'https://github.com/mralexgray/AOP-in-Objective-C', + archived: false, + disabled: false, + has_wiki: true, + homepage: 'http://innoli.hu/en/opensource/', + html_url: 'https://github.com/mralexgray/AOP-in-Objective-C', + keys_url: + 'https://api.github.com/repos/mralexgray/AOP-in-Objective-C/keys{/key_id}', + language: 'Objective-C', + tags_url: + 'https://api.github.com/repos/mralexgray/AOP-in-Objective-C/tags', + watchers: 0, + blobs_url: + 'https://api.github.com/repos/mralexgray/AOP-in-Objective-C/git/blobs{/sha}', + clone_url: 'https://github.com/mralexgray/AOP-in-Objective-C.git', + forks_url: + 'https://api.github.com/repos/mralexgray/AOP-in-Objective-C/forks', + full_name: 'mralexgray/AOP-in-Objective-C', + has_pages: false, + hooks_url: + 'https://api.github.com/repos/mralexgray/AOP-in-Objective-C/hooks', + pulls_url: + 'https://api.github.com/repos/mralexgray/AOP-in-Objective-C/pulls{/number}', + pushed_at: '2014-02-12T16:23:20Z', + teams_url: + 'https://api.github.com/repos/mralexgray/AOP-in-Objective-C/teams', + trees_url: + 'https://api.github.com/repos/mralexgray/AOP-in-Objective-C/git/trees{/sha}', + created_at: '2014-01-25T21:18:04Z', + events_url: + 'https://api.github.com/repos/mralexgray/AOP-in-Objective-C/events', + has_issues: false, + issues_url: + 'https://api.github.com/repos/mralexgray/AOP-in-Objective-C/issues{/number}', + labels_url: + 'https://api.github.com/repos/mralexgray/AOP-in-Objective-C/labels{/name}', + merges_url: + 'https://api.github.com/repos/mralexgray/AOP-in-Objective-C/merges', + mirror_url: null, + updated_at: '2014-06-19T19:38:12Z', + visibility: 'public', + archive_url: + 'https://api.github.com/repos/mralexgray/AOP-in-Objective-C/{archive_format}{/ref}', + commits_url: + 'https://api.github.com/repos/mralexgray/AOP-in-Objective-C/commits{/sha}', + compare_url: + 'https://api.github.com/repos/mralexgray/AOP-in-Objective-C/compare/{base}...{head}', + description: + 'An NSProxy based library for easily enabling AOP like functionality in Objective-C.', + forks_count: 1, + is_template: false, + open_issues: 0, + branches_url: + 'https://api.github.com/repos/mralexgray/AOP-in-Objective-C/branches{/branch}', + comments_url: + 'https://api.github.com/repos/mralexgray/AOP-in-Objective-C/comments{/number}', + contents_url: + 'https://api.github.com/repos/mralexgray/AOP-in-Objective-C/contents/{+path}', + git_refs_url: + 'https://api.github.com/repos/mralexgray/AOP-in-Objective-C/git/refs{/sha}', + git_tags_url: + 'https://api.github.com/repos/mralexgray/AOP-in-Objective-C/git/tags{/sha}', + has_projects: true, + releases_url: + 'https://api.github.com/repos/mralexgray/AOP-in-Objective-C/releases{/id}', + statuses_url: + 'https://api.github.com/repos/mralexgray/AOP-in-Objective-C/statuses/{sha}', + allow_forking: true, + assignees_url: + 'https://api.github.com/repos/mralexgray/AOP-in-Objective-C/assignees{/user}', + downloads_url: + 'https://api.github.com/repos/mralexgray/AOP-in-Objective-C/downloads', + has_downloads: true, + languages_url: + 'https://api.github.com/repos/mralexgray/AOP-in-Objective-C/languages', + default_branch: 'travis-coveralls', + milestones_url: + 'https://api.github.com/repos/mralexgray/AOP-in-Objective-C/milestones{/number}', + stargazers_url: + 'https://api.github.com/repos/mralexgray/AOP-in-Objective-C/stargazers', + watchers_count: 0, + deployments_url: + 'https://api.github.com/repos/mralexgray/AOP-in-Objective-C/deployments', + git_commits_url: + 'https://api.github.com/repos/mralexgray/AOP-in-Objective-C/git/commits{/sha}', + subscribers_url: + 'https://api.github.com/repos/mralexgray/AOP-in-Objective-C/subscribers', + contributors_url: + 'https://api.github.com/repos/mralexgray/AOP-in-Objective-C/contributors', + issue_events_url: + 'https://api.github.com/repos/mralexgray/AOP-in-Objective-C/issues/events{/number}', + stargazers_count: 0, + subscription_url: + 'https://api.github.com/repos/mralexgray/AOP-in-Objective-C/subscription', + collaborators_url: + 'https://api.github.com/repos/mralexgray/AOP-in-Objective-C/collaborators{/collaborator}', + issue_comment_url: + 'https://api.github.com/repos/mralexgray/AOP-in-Objective-C/issues/comments{/number}', + notifications_url: + 'https://api.github.com/repos/mralexgray/AOP-in-Objective-C/notifications{?since,all,participating}', + open_issues_count: 0, + web_commit_signoff_required: false, + }, + { + id: 13141936, + url: 'https://api.github.com/repos/mralexgray/Apaxy', + fork: true, + name: 'Apaxy', + size: 113, + forks: 0, + owner: { + id: 262517, + url: 'https://api.github.com/users/mralexgray', + type: 'User', + login: 'mralexgray', + node_id: 'MDQ6VXNlcjI2MjUxNw==', + html_url: 'https://github.com/mralexgray', + gists_url: 'https://api.github.com/users/mralexgray/gists{/gist_id}', + repos_url: 'https://api.github.com/users/mralexgray/repos', + avatar_url: 'https://avatars.githubusercontent.com/u/262517?v=4', + events_url: + 'https://api.github.com/users/mralexgray/events{/privacy}', + site_admin: false, + gravatar_id: '', + starred_url: + 'https://api.github.com/users/mralexgray/starred{/owner}{/repo}', + followers_url: 'https://api.github.com/users/mralexgray/followers', + following_url: + 'https://api.github.com/users/mralexgray/following{/other_user}', + organizations_url: 'https://api.github.com/users/mralexgray/orgs', + subscriptions_url: + 'https://api.github.com/users/mralexgray/subscriptions', + received_events_url: + 'https://api.github.com/users/mralexgray/received_events', + }, + topics: [], + git_url: 'git://github.com/mralexgray/Apaxy.git', + license: { + key: 'unlicense', + url: 'https://api.github.com/licenses/unlicense', + name: 'The Unlicense', + node_id: 'MDc6TGljZW5zZTE1', + spdx_id: 'Unlicense', + }, + node_id: 'MDEwOlJlcG9zaXRvcnkxMzE0MTkzNg==', + private: false, + ssh_url: 'git@github.com:mralexgray/Apaxy.git', + svn_url: 'https://github.com/mralexgray/Apaxy', + archived: false, + disabled: false, + has_wiki: true, + homepage: null, + html_url: 'https://github.com/mralexgray/Apaxy', + keys_url: 'https://api.github.com/repos/mralexgray/Apaxy/keys{/key_id}', + language: 'CSS', + tags_url: 'https://api.github.com/repos/mralexgray/Apaxy/tags', + watchers: 0, + blobs_url: + 'https://api.github.com/repos/mralexgray/Apaxy/git/blobs{/sha}', + clone_url: 'https://github.com/mralexgray/Apaxy.git', + forks_url: 'https://api.github.com/repos/mralexgray/Apaxy/forks', + full_name: 'mralexgray/Apaxy', + has_pages: false, + hooks_url: 'https://api.github.com/repos/mralexgray/Apaxy/hooks', + pulls_url: + 'https://api.github.com/repos/mralexgray/Apaxy/pulls{/number}', + pushed_at: '2013-08-02T16:01:32Z', + teams_url: 'https://api.github.com/repos/mralexgray/Apaxy/teams', + trees_url: + 'https://api.github.com/repos/mralexgray/Apaxy/git/trees{/sha}', + created_at: '2013-09-27T05:05:35Z', + events_url: 'https://api.github.com/repos/mralexgray/Apaxy/events', + has_issues: false, + issues_url: + 'https://api.github.com/repos/mralexgray/Apaxy/issues{/number}', + labels_url: + 'https://api.github.com/repos/mralexgray/Apaxy/labels{/name}', + merges_url: 'https://api.github.com/repos/mralexgray/Apaxy/merges', + mirror_url: null, + updated_at: '2018-02-16T21:40:24Z', + visibility: 'public', + archive_url: + 'https://api.github.com/repos/mralexgray/Apaxy/{archive_format}{/ref}', + commits_url: + 'https://api.github.com/repos/mralexgray/Apaxy/commits{/sha}', + compare_url: + 'https://api.github.com/repos/mralexgray/Apaxy/compare/{base}...{head}', + description: + 'A simple, customisable theme for your Apache directory listing.', + forks_count: 0, + is_template: false, + open_issues: 0, + branches_url: + 'https://api.github.com/repos/mralexgray/Apaxy/branches{/branch}', + comments_url: + 'https://api.github.com/repos/mralexgray/Apaxy/comments{/number}', + contents_url: + 'https://api.github.com/repos/mralexgray/Apaxy/contents/{+path}', + git_refs_url: + 'https://api.github.com/repos/mralexgray/Apaxy/git/refs{/sha}', + git_tags_url: + 'https://api.github.com/repos/mralexgray/Apaxy/git/tags{/sha}', + has_projects: true, + releases_url: + 'https://api.github.com/repos/mralexgray/Apaxy/releases{/id}', + statuses_url: + 'https://api.github.com/repos/mralexgray/Apaxy/statuses/{sha}', + allow_forking: true, + assignees_url: + 'https://api.github.com/repos/mralexgray/Apaxy/assignees{/user}', + downloads_url: + 'https://api.github.com/repos/mralexgray/Apaxy/downloads', + has_downloads: true, + languages_url: + 'https://api.github.com/repos/mralexgray/Apaxy/languages', + default_branch: 'master', + milestones_url: + 'https://api.github.com/repos/mralexgray/Apaxy/milestones{/number}', + stargazers_url: + 'https://api.github.com/repos/mralexgray/Apaxy/stargazers', + watchers_count: 0, + deployments_url: + 'https://api.github.com/repos/mralexgray/Apaxy/deployments', + git_commits_url: + 'https://api.github.com/repos/mralexgray/Apaxy/git/commits{/sha}', + subscribers_url: + 'https://api.github.com/repos/mralexgray/Apaxy/subscribers', + contributors_url: + 'https://api.github.com/repos/mralexgray/Apaxy/contributors', + issue_events_url: + 'https://api.github.com/repos/mralexgray/Apaxy/issues/events{/number}', + stargazers_count: 0, + subscription_url: + 'https://api.github.com/repos/mralexgray/Apaxy/subscription', + collaborators_url: + 'https://api.github.com/repos/mralexgray/Apaxy/collaborators{/collaborator}', + issue_comment_url: + 'https://api.github.com/repos/mralexgray/Apaxy/issues/comments{/number}', + notifications_url: + 'https://api.github.com/repos/mralexgray/Apaxy/notifications{?since,all,participating}', + open_issues_count: 0, + web_commit_signoff_required: false, + }, + { + id: 20027360, + url: 'https://api.github.com/repos/mralexgray/app', + fork: true, + name: 'app', + size: 1890, + forks: 0, + owner: { + id: 262517, + url: 'https://api.github.com/users/mralexgray', + type: 'User', + login: 'mralexgray', + node_id: 'MDQ6VXNlcjI2MjUxNw==', + html_url: 'https://github.com/mralexgray', + gists_url: 'https://api.github.com/users/mralexgray/gists{/gist_id}', + repos_url: 'https://api.github.com/users/mralexgray/repos', + avatar_url: 'https://avatars.githubusercontent.com/u/262517?v=4', + events_url: + 'https://api.github.com/users/mralexgray/events{/privacy}', + site_admin: false, + gravatar_id: '', + starred_url: + 'https://api.github.com/users/mralexgray/starred{/owner}{/repo}', + followers_url: 'https://api.github.com/users/mralexgray/followers', + following_url: + 'https://api.github.com/users/mralexgray/following{/other_user}', + organizations_url: 'https://api.github.com/users/mralexgray/orgs', + subscriptions_url: + 'https://api.github.com/users/mralexgray/subscriptions', + received_events_url: + 'https://api.github.com/users/mralexgray/received_events', + }, + topics: [], + git_url: 'git://github.com/mralexgray/app.git', + license: { + key: 'other', + url: null, + name: 'Other', + node_id: 'MDc6TGljZW5zZTA=', + spdx_id: 'NOASSERTION', + }, + node_id: 'MDEwOlJlcG9zaXRvcnkyMDAyNzM2MA==', + private: false, + ssh_url: 'git@github.com:mralexgray/app.git', + svn_url: 'https://github.com/mralexgray/app', + archived: false, + disabled: false, + has_wiki: true, + homepage: null, + html_url: 'https://github.com/mralexgray/app', + keys_url: 'https://api.github.com/repos/mralexgray/app/keys{/key_id}', + language: 'JavaScript', + tags_url: 'https://api.github.com/repos/mralexgray/app/tags', + watchers: 0, + blobs_url: + 'https://api.github.com/repos/mralexgray/app/git/blobs{/sha}', + clone_url: 'https://github.com/mralexgray/app.git', + forks_url: 'https://api.github.com/repos/mralexgray/app/forks', + full_name: 'mralexgray/app', + has_pages: false, + hooks_url: 'https://api.github.com/repos/mralexgray/app/hooks', + pulls_url: 'https://api.github.com/repos/mralexgray/app/pulls{/number}', + pushed_at: '2014-05-20T19:51:38Z', + teams_url: 'https://api.github.com/repos/mralexgray/app/teams', + trees_url: + 'https://api.github.com/repos/mralexgray/app/git/trees{/sha}', + created_at: '2014-05-21T15:54:20Z', + events_url: 'https://api.github.com/repos/mralexgray/app/events', + has_issues: false, + issues_url: + 'https://api.github.com/repos/mralexgray/app/issues{/number}', + labels_url: 'https://api.github.com/repos/mralexgray/app/labels{/name}', + merges_url: 'https://api.github.com/repos/mralexgray/app/merges', + mirror_url: null, + updated_at: '2014-05-21T15:54:22Z', + visibility: 'public', + archive_url: + 'https://api.github.com/repos/mralexgray/app/{archive_format}{/ref}', + commits_url: + 'https://api.github.com/repos/mralexgray/app/commits{/sha}', + compare_url: + 'https://api.github.com/repos/mralexgray/app/compare/{base}...{head}', + description: 'Instant mobile web app creation', + forks_count: 0, + is_template: false, + open_issues: 0, + branches_url: + 'https://api.github.com/repos/mralexgray/app/branches{/branch}', + comments_url: + 'https://api.github.com/repos/mralexgray/app/comments{/number}', + contents_url: + 'https://api.github.com/repos/mralexgray/app/contents/{+path}', + git_refs_url: + 'https://api.github.com/repos/mralexgray/app/git/refs{/sha}', + git_tags_url: + 'https://api.github.com/repos/mralexgray/app/git/tags{/sha}', + has_projects: true, + releases_url: + 'https://api.github.com/repos/mralexgray/app/releases{/id}', + statuses_url: + 'https://api.github.com/repos/mralexgray/app/statuses/{sha}', + allow_forking: true, + assignees_url: + 'https://api.github.com/repos/mralexgray/app/assignees{/user}', + downloads_url: 'https://api.github.com/repos/mralexgray/app/downloads', + has_downloads: true, + languages_url: 'https://api.github.com/repos/mralexgray/app/languages', + default_branch: 'master', + milestones_url: + 'https://api.github.com/repos/mralexgray/app/milestones{/number}', + stargazers_url: + 'https://api.github.com/repos/mralexgray/app/stargazers', + watchers_count: 0, + deployments_url: + 'https://api.github.com/repos/mralexgray/app/deployments', + git_commits_url: + 'https://api.github.com/repos/mralexgray/app/git/commits{/sha}', + subscribers_url: + 'https://api.github.com/repos/mralexgray/app/subscribers', + contributors_url: + 'https://api.github.com/repos/mralexgray/app/contributors', + issue_events_url: + 'https://api.github.com/repos/mralexgray/app/issues/events{/number}', + stargazers_count: 0, + subscription_url: + 'https://api.github.com/repos/mralexgray/app/subscription', + collaborators_url: + 'https://api.github.com/repos/mralexgray/app/collaborators{/collaborator}', + issue_comment_url: + 'https://api.github.com/repos/mralexgray/app/issues/comments{/number}', + notifications_url: + 'https://api.github.com/repos/mralexgray/app/notifications{?since,all,participating}', + open_issues_count: 0, + web_commit_signoff_required: false, + }, + ], + name: 'Shirt', + revenue: 4.99, + }, + receivedAt: '2022-08-18T08:43:13.521+05:30', + request_ip: '[::1]', + anonymousId: 'anon-id-new', + originalTimestamp: '2022-08-18T08:43:15.539+05:30', + }, + PayloadSize: 48375, + LastJobStatus: { + JobID: 0, + JobState: '', + AttemptNum: 0, + ExecTime: '0001-01-01T00:00:00Z', + RetryTime: '0001-01-01T00:00:00Z', + ErrorCode: '', + ErrorResponse: null, + Parameters: null, + WorkspaceId: '', + }, + Parameters: { + record_id: null, + source_id: '2DTlLPQxignYp4ag9sISgGN2uY7', + event_name: 'Product Purchased new', + event_type: 'track', + message_id: '9f8fb785-c720-4381-a009-bf22a13f4ced', + received_at: '2022-08-18T08:43:13.521+05:30', + workspaceId: '2DTlBMipxWfJZzZ1SsjELQWvkwd', + transform_at: 'router', + source_job_id: '', + destination_id: '2DTozIMGtBwTGNJtuvdPByFSL2Z', + gateway_job_id: 6, + source_task_id: '', + source_batch_id: '', + source_category: '', + source_job_run_id: '', + source_task_run_id: '', + source_definition_id: '2DTlJaW1jHhM8B27Et2CMTZoxZF', + destination_definition_id: '', + }, + WorkspaceId: '2DTlBMipxWfJZzZ1SsjELQWvkwd', + }, + workerAssignedTime: '2022-08-18T08:43:16.586825+05:30', + }, + { + userId: 'anon-id-new<<>>identified user id', + jobId: 33, + sourceId: '2DTlLPQxignYp4ag9sISgGN2uY7', + destinationId: '2DTozIMGtBwTGNJtuvdPByFSL2Z', + attemptNum: 0, + receivedAt: '2022-08-18T08:43:13.521+05:30', + createdAt: '2022-08-18T03:13:15.549Z', + firstAttemptedAt: '', + transformAt: 'router', + workspaceId: '2DTlBMipxWfJZzZ1SsjELQWvkwd', + secret: null, + jobsT: { + UUID: 'bf616af4-2c6b-495f-8b2d-b522c93bdca2', + JobID: 33, + UserID: 'anon-id-new<<>>identified user id', + CreatedAt: '2022-08-18T03:13:15.549078Z', + ExpireAt: '2022-08-18T03:13:15.549078Z', + CustomVal: 'LAMBDA', + EventCount: 1, + EventPayload: { + name: 'Page View', + type: 'page', + sentAt: '2022-08-18T08:43:15.539+05:30', + userId: 'identified user id', + context: { + ip: '14.5.67.21', + library: { + name: 'http', + }, + }, + rudderId: 'daf823fb-e8d3-413a-8313-d34cd756f968', + messageId: '5f58d1f7-cbd6-4bff-8571-9933be7210b1', + timestamp: '2020-02-02T00:23:09.544Z', + properties: { + path: '/', + title: 'Home', + }, + receivedAt: '2022-08-18T08:43:13.521+05:30', + request_ip: '[::1]', + anonymousId: 'anon-id-new', + originalTimestamp: '2022-08-18T08:43:15.539+05:30', + }, + PayloadSize: 548, + LastJobStatus: { + JobID: 0, + JobState: '', + AttemptNum: 0, + ExecTime: '0001-01-01T00:00:00Z', + RetryTime: '0001-01-01T00:00:00Z', + ErrorCode: '', + ErrorResponse: null, + Parameters: null, + WorkspaceId: '', + }, + Parameters: { + record_id: null, + source_id: '2DTlLPQxignYp4ag9sISgGN2uY7', + event_name: '', + event_type: 'page', + message_id: '5f58d1f7-cbd6-4bff-8571-9933be7210b1', + received_at: '2022-08-18T08:43:13.521+05:30', + workspaceId: '2DTlBMipxWfJZzZ1SsjELQWvkwd', + transform_at: 'router', + source_job_id: '', + destination_id: '2DTozIMGtBwTGNJtuvdPByFSL2Z', + gateway_job_id: 6, + source_task_id: '', + source_batch_id: '', + source_category: '', + source_job_run_id: '', + source_task_run_id: '', + source_definition_id: '2DTlJaW1jHhM8B27Et2CMTZoxZF', + destination_definition_id: '', + }, + WorkspaceId: '2DTlBMipxWfJZzZ1SsjELQWvkwd', + }, + workerAssignedTime: '2022-08-18T08:43:16.586825+05:30', + }, + ], + batched: false, + statusCode: 200, + }, + { + batchedRequest: { + payload: + '[{"name":"Screen View","type":"screen","sentAt":"2022-08-18T08:43:15.539+05:30","userId":"identified user id","context":{"ip":"14.5.67.21","library":{"name":"http"}},"rudderId":"daf823fb-e8d3-413a-8313-d34cd756f968","messageId":"1b8ee4c3-ffad-4457-b453-31b32da1dfea","timestamp":"2020-02-02T00:23:09.544Z","properties":{"prop1":"5"},"receivedAt":"2022-08-18T08:43:13.521+05:30","request_ip":"[::1]","anonymousId":"anon-id-new","originalTimestamp":"2022-08-18T08:43:15.539+05:30"},{"type":"group","sentAt":"2022-08-18T08:43:15.539+05:30","traits":{"name":"Company","industry":"Industry","employees":123},"userId":"user123","context":{"ip":"14.5.67.21","traits":{"trait1":"new-val"},"library":{"name":"http"}},"groupId":"group1","rudderId":"bda76e3e-87eb-4153-9d1e-e9c2ed48b7a5","messageId":"2c59b527-3235-4fc2-9680-f41ec52ebb51","timestamp":"2020-01-21T00:21:34.208Z","receivedAt":"2022-08-18T08:43:13.521+05:30","request_ip":"[::1]","originalTimestamp":"2022-08-18T08:43:15.539+05:30"}]', + destConfig: { + clientContext: '', + lambda: 'testFunction', + invocationType: 'Event', + }, + }, + metadata: [ + { + userId: 'anon-id-new<<>>identified user id', + jobId: 34, + sourceId: '2DTlLPQxignYp4ag9sISgGN2uY7', + destinationId: '2DTozIMGtBwTGNJtuvdPByFSL2Z', + attemptNum: 0, + receivedAt: '2022-08-18T08:43:13.521+05:30', + createdAt: '2022-08-18T03:13:15.549Z', + firstAttemptedAt: '', + transformAt: 'router', + workspaceId: '2DTlBMipxWfJZzZ1SsjELQWvkwd', + secret: null, + jobsT: { + UUID: '8faa9d6d-d8a8-468c-bef4-c2db52f6101b', + JobID: 34, + UserID: 'anon-id-new<<>>identified user id', + CreatedAt: '2022-08-18T03:13:15.549078Z', + ExpireAt: '2022-08-18T03:13:15.549078Z', + CustomVal: 'LAMBDA', + EventCount: 1, + EventPayload: { + name: 'Screen View', + type: 'screen', + sentAt: '2022-08-18T08:43:15.539+05:30', + userId: 'identified user id', + context: { + ip: '14.5.67.21', + library: { + name: 'http', + }, + }, + rudderId: 'daf823fb-e8d3-413a-8313-d34cd756f968', + messageId: '1b8ee4c3-ffad-4457-b453-31b32da1dfea', + timestamp: '2020-02-02T00:23:09.544Z', + properties: { + prop1: '5', + }, + receivedAt: '2022-08-18T08:43:13.521+05:30', + request_ip: '[::1]', + anonymousId: 'anon-id-new', + originalTimestamp: '2022-08-18T08:43:15.539+05:30', + }, + PayloadSize: 536, + LastJobStatus: { + JobID: 0, + JobState: '', + AttemptNum: 0, + ExecTime: '0001-01-01T00:00:00Z', + RetryTime: '0001-01-01T00:00:00Z', + ErrorCode: '', + ErrorResponse: null, + Parameters: null, + WorkspaceId: '', + }, + Parameters: { + record_id: null, + source_id: '2DTlLPQxignYp4ag9sISgGN2uY7', + event_name: '', + event_type: 'screen', + message_id: '1b8ee4c3-ffad-4457-b453-31b32da1dfea', + received_at: '2022-08-18T08:43:13.521+05:30', + workspaceId: '2DTlBMipxWfJZzZ1SsjELQWvkwd', + transform_at: 'router', + source_job_id: '', + destination_id: '2DTozIMGtBwTGNJtuvdPByFSL2Z', + gateway_job_id: 6, + source_task_id: '', + source_batch_id: '', + source_category: '', + source_job_run_id: '', + source_task_run_id: '', + source_definition_id: '2DTlJaW1jHhM8B27Et2CMTZoxZF', + destination_definition_id: '', + }, + WorkspaceId: '2DTlBMipxWfJZzZ1SsjELQWvkwd', + }, + workerAssignedTime: '2022-08-18T08:43:16.586825+05:30', + }, + { + userId: 'anon-id-new<<>>identified user id', + jobId: 35, + sourceId: '2DTlLPQxignYp4ag9sISgGN2uY7', + destinationId: '2DTozIMGtBwTGNJtuvdPByFSL2Z', + attemptNum: 0, + receivedAt: '2022-08-18T08:43:13.521+05:30', + createdAt: '2022-08-18T03:13:15.549Z', + firstAttemptedAt: '', + transformAt: 'router', + workspaceId: '2DTlBMipxWfJZzZ1SsjELQWvkwd', + secret: null, + jobsT: { + UUID: '73cea314-998a-4b72-8004-34b0618093a3', + JobID: 35, + UserID: 'anon-id-new<<>>identified user id', + CreatedAt: '2022-08-18T03:13:15.549078Z', + ExpireAt: '2022-08-18T03:13:15.549078Z', + CustomVal: 'LAMBDA', + EventCount: 1, + EventPayload: { + type: 'group', + sentAt: '2022-08-18T08:43:15.539+05:30', + traits: { + name: 'Company', + industry: 'Industry', + employees: 123, + }, + userId: 'user123', + context: { + ip: '14.5.67.21', + traits: { + trait1: 'new-val', + }, + library: { + name: 'http', + }, + }, + groupId: 'group1', + rudderId: 'bda76e3e-87eb-4153-9d1e-e9c2ed48b7a5', + messageId: '2c59b527-3235-4fc2-9680-f41ec52ebb51', + timestamp: '2020-01-21T00:21:34.208Z', + receivedAt: '2022-08-18T08:43:13.521+05:30', + request_ip: '[::1]', + originalTimestamp: '2022-08-18T08:43:15.539+05:30', + }, + PayloadSize: 589, + LastJobStatus: { + JobID: 0, + JobState: '', + AttemptNum: 0, + ExecTime: '0001-01-01T00:00:00Z', + RetryTime: '0001-01-01T00:00:00Z', + ErrorCode: '', + ErrorResponse: null, + Parameters: null, + WorkspaceId: '', + }, + Parameters: { + record_id: null, + source_id: '2DTlLPQxignYp4ag9sISgGN2uY7', + event_name: '', + event_type: 'group', + message_id: '2c59b527-3235-4fc2-9680-f41ec52ebb51', + received_at: '2022-08-18T08:43:13.521+05:30', + workspaceId: '2DTlBMipxWfJZzZ1SsjELQWvkwd', + transform_at: 'router', + source_job_id: '', + destination_id: '2DTozIMGtBwTGNJtuvdPByFSL2Z', + gateway_job_id: 6, + source_task_id: '', + source_batch_id: '', + source_category: '', + source_job_run_id: '', + source_task_run_id: '', + source_definition_id: '2DTlJaW1jHhM8B27Et2CMTZoxZF', + destination_definition_id: '', + }, + WorkspaceId: '2DTlBMipxWfJZzZ1SsjELQWvkwd', + }, + workerAssignedTime: '2022-08-18T08:43:16.586825+05:30', + }, + ], + batched: false, + statusCode: 200, + }, + { + batchedRequest: { + payload: + '[{"type":"alias","sentAt":"2022-08-18T08:43:15.539+05:30","userId":"user123","context":{"ip":"14.5.67.21","traits":{"trait1":"new-val"},"library":{"name":"http"}},"rudderId":"bda76e3e-87eb-4153-9d1e-e9c2ed48b7a5","messageId":"3ff8d400-b6d4-43a4-a0ff-1bc7ae8b5f7d","timestamp":"2020-01-21T00:21:34.208Z","previousId":"previd1","receivedAt":"2022-08-18T08:43:13.521+05:30","request_ip":"[::1]","originalTimestamp":"2022-08-18T08:43:15.539+05:30"}]', + destConfig: { + clientContext: '', + lambda: 'testFunction', + invocationType: 'Event', + }, + }, + metadata: [ + { + userId: 'anon-id-new<<>>identified user id', + jobId: 36, + sourceId: '2DTlLPQxignYp4ag9sISgGN2uY7', + destinationId: '2DTozIMGtBwTGNJtuvdPByFSL2Z', + attemptNum: 0, + receivedAt: '2022-08-18T08:43:13.521+05:30', + createdAt: '2022-08-18T03:13:15.549Z', + firstAttemptedAt: '', + transformAt: 'router', + workspaceId: '2DTlBMipxWfJZzZ1SsjELQWvkwd', + secret: null, + jobsT: { + UUID: 'ac80629c-9eb6-4e92-bee8-4647e88f7fc0', + JobID: 36, + UserID: 'anon-id-new<<>>identified user id', + CreatedAt: '2022-08-18T03:13:15.549078Z', + ExpireAt: '2022-08-18T03:13:15.549078Z', + CustomVal: 'LAMBDA', + EventCount: 1, + EventPayload: { + type: 'alias', + sentAt: '2022-08-18T08:43:15.539+05:30', + userId: 'user123', + context: { + ip: '14.5.67.21', + traits: { + trait1: 'new-val', + }, + library: { + name: 'http', + }, + }, + rudderId: 'bda76e3e-87eb-4153-9d1e-e9c2ed48b7a5', + messageId: '3ff8d400-b6d4-43a4-a0ff-1bc7ae8b5f7d', + timestamp: '2020-01-21T00:21:34.208Z', + previousId: 'previd1', + receivedAt: '2022-08-18T08:43:13.521+05:30', + request_ip: '[::1]', + originalTimestamp: '2022-08-18T08:43:15.539+05:30', + }, + PayloadSize: 506, + LastJobStatus: { + JobID: 0, + JobState: '', + AttemptNum: 0, + ExecTime: '0001-01-01T00:00:00Z', + RetryTime: '0001-01-01T00:00:00Z', + ErrorCode: '', + ErrorResponse: null, + Parameters: null, + WorkspaceId: '', + }, + Parameters: { + record_id: null, + source_id: '2DTlLPQxignYp4ag9sISgGN2uY7', + event_name: '', + event_type: 'alias', + message_id: '3ff8d400-b6d4-43a4-a0ff-1bc7ae8b5f7d', + received_at: '2022-08-18T08:43:13.521+05:30', + workspaceId: '2DTlBMipxWfJZzZ1SsjELQWvkwd', + transform_at: 'router', + source_job_id: '', + destination_id: '2DTozIMGtBwTGNJtuvdPByFSL2Z', + gateway_job_id: 6, + source_task_id: '', + source_batch_id: '', + source_category: '', + source_job_run_id: '', + source_task_run_id: '', + source_definition_id: '2DTlJaW1jHhM8B27Et2CMTZoxZF', + destination_definition_id: '', + }, + WorkspaceId: '2DTlBMipxWfJZzZ1SsjELQWvkwd', + }, + workerAssignedTime: '2022-08-18T08:43:16.586825+05:30', + }, + ], + batched: false, + statusCode: 200, + }, + { + metadata: [ + { + userId: 'anon-id-new<<>>identified user id', + jobId: 31, + sourceId: '2DTlLPQxignYp4ag9sISgGN2uY7', + destinationId: '2DTozIMGtBwTGNJtuvdPByFSL2Z', + attemptNum: 0, + receivedAt: '2022-08-18T08:43:13.521+05:30', + createdAt: '2022-08-18T03:13:15.549Z', + firstAttemptedAt: '', + transformAt: 'router', + workspaceId: '2DTlBMipxWfJZzZ1SsjELQWvkwd', + secret: null, + jobsT: { + UUID: '47b3937a-1fef-49fa-85c8-649673bd7170', + JobID: 31, + UserID: 'anon-id-new<<>>identified user id', + CreatedAt: '2022-08-18T03:13:15.549078Z', + ExpireAt: '2022-08-18T03:13:15.549078Z', + CustomVal: 'LAMBDA', + EventCount: 1, + EventPayload: { + type: 'identify', + sentAt: '2022-08-18T08:43:15.539+05:30', + userId: 'identified user id', + context: { + ip: '14.5.67.21', + traits: { + data: [ + { + id: 6104546, + url: 'https://api.github.com/repos/mralexgray/-REPONAME', + fork: false, + name: '-REPONAME', + size: 48, + forks: 0, + owner: { + id: 262517, + url: 'https://api.github.com/users/mralexgray', + type: 'User', + login: 'mralexgray', + node_id: 'MDQ6VXNlcjI2MjUxNw==', + html_url: 'https://github.com/mralexgray', + gists_url: + 'https://api.github.com/users/mralexgray/gists{/gist_id}', + repos_url: 'https://api.github.com/users/mralexgray/repos', + avatar_url: 'https://avatars.githubusercontent.com/u/262517?v=4', + events_url: + 'https://api.github.com/users/mralexgray/events{/privacy}', + site_admin: false, + gravatar_id: '', + starred_url: + 'https://api.github.com/users/mralexgray/starred{/owner}{/repo}', + followers_url: 'https://api.github.com/users/mralexgray/followers', + following_url: + 'https://api.github.com/users/mralexgray/following{/other_user}', + organizations_url: 'https://api.github.com/users/mralexgray/orgs', + subscriptions_url: + 'https://api.github.com/users/mralexgray/subscriptions', + received_events_url: + 'https://api.github.com/users/mralexgray/received_events', + }, + topics: [], + git_url: 'git://github.com/mralexgray/-REPONAME.git', + license: null, + node_id: 'MDEwOlJlcG9zaXRvcnk2MTA0NTQ2', + private: false, + ssh_url: 'git@github.com:mralexgray/-REPONAME.git', + svn_url: 'https://github.com/mralexgray/-REPONAME', + archived: false, + disabled: false, + has_wiki: true, + homepage: null, + html_url: 'https://github.com/mralexgray/-REPONAME', + keys_url: + 'https://api.github.com/repos/mralexgray/-REPONAME/keys{/key_id}', + language: null, + tags_url: 'https://api.github.com/repos/mralexgray/-REPONAME/tags', + watchers: 0, + blobs_url: + 'https://api.github.com/repos/mralexgray/-REPONAME/git/blobs{/sha}', + clone_url: 'https://github.com/mralexgray/-REPONAME.git', + forks_url: 'https://api.github.com/repos/mralexgray/-REPONAME/forks', + full_name: 'mralexgray/-REPONAME', + has_pages: false, + hooks_url: 'https://api.github.com/repos/mralexgray/-REPONAME/hooks', + pulls_url: + 'https://api.github.com/repos/mralexgray/-REPONAME/pulls{/number}', + pushed_at: '2012-10-06T16:37:39Z', + teams_url: 'https://api.github.com/repos/mralexgray/-REPONAME/teams', + trees_url: + 'https://api.github.com/repos/mralexgray/-REPONAME/git/trees{/sha}', + created_at: '2012-10-06T16:37:39Z', + events_url: + 'https://api.github.com/repos/mralexgray/-REPONAME/events', + has_issues: true, + issues_url: + 'https://api.github.com/repos/mralexgray/-REPONAME/issues{/number}', + labels_url: + 'https://api.github.com/repos/mralexgray/-REPONAME/labels{/name}', + merges_url: + 'https://api.github.com/repos/mralexgray/-REPONAME/merges', + mirror_url: null, + updated_at: '2013-01-12T13:39:30Z', + visibility: 'public', + archive_url: + 'https://api.github.com/repos/mralexgray/-REPONAME/{archive_format}{/ref}', + commits_url: + 'https://api.github.com/repos/mralexgray/-REPONAME/commits{/sha}', + compare_url: + 'https://api.github.com/repos/mralexgray/-REPONAME/compare/{base}...{head}', + description: null, + forks_count: 0, + is_template: false, + open_issues: 0, + branches_url: + 'https://api.github.com/repos/mralexgray/-REPONAME/branches{/branch}', + comments_url: + 'https://api.github.com/repos/mralexgray/-REPONAME/comments{/number}', + contents_url: + 'https://api.github.com/repos/mralexgray/-REPONAME/contents/{+path}', + git_refs_url: + 'https://api.github.com/repos/mralexgray/-REPONAME/git/refs{/sha}', + git_tags_url: + 'https://api.github.com/repos/mralexgray/-REPONAME/git/tags{/sha}', + has_projects: true, + releases_url: + 'https://api.github.com/repos/mralexgray/-REPONAME/releases{/id}', + statuses_url: + 'https://api.github.com/repos/mralexgray/-REPONAME/statuses/{sha}', + allow_forking: true, + assignees_url: + 'https://api.github.com/repos/mralexgray/-REPONAME/assignees{/user}', + downloads_url: + 'https://api.github.com/repos/mralexgray/-REPONAME/downloads', + has_downloads: true, + languages_url: + 'https://api.github.com/repos/mralexgray/-REPONAME/languages', + default_branch: 'master', + milestones_url: + 'https://api.github.com/repos/mralexgray/-REPONAME/milestones{/number}', + stargazers_url: + 'https://api.github.com/repos/mralexgray/-REPONAME/stargazers', + watchers_count: 0, + deployments_url: + 'https://api.github.com/repos/mralexgray/-REPONAME/deployments', + git_commits_url: + 'https://api.github.com/repos/mralexgray/-REPONAME/git/commits{/sha}', + subscribers_url: + 'https://api.github.com/repos/mralexgray/-REPONAME/subscribers', + contributors_url: + 'https://api.github.com/repos/mralexgray/-REPONAME/contributors', + issue_events_url: + 'https://api.github.com/repos/mralexgray/-REPONAME/issues/events{/number}', + stargazers_count: 0, + subscription_url: + 'https://api.github.com/repos/mralexgray/-REPONAME/subscription', + collaborators_url: + 'https://api.github.com/repos/mralexgray/-REPONAME/collaborators{/collaborator}', + issue_comment_url: + 'https://api.github.com/repos/mralexgray/-REPONAME/issues/comments{/number}', + notifications_url: + 'https://api.github.com/repos/mralexgray/-REPONAME/notifications{?since,all,participating}', + open_issues_count: 0, + web_commit_signoff_required: false, + }, + { + id: 104510411, + url: 'https://api.github.com/repos/mralexgray/...', + fork: true, + name: '...', + size: 113, + forks: 0, + owner: { + id: 262517, + url: 'https://api.github.com/users/mralexgray', + type: 'User', + login: 'mralexgray', + node_id: 'MDQ6VXNlcjI2MjUxNw==', + html_url: 'https://github.com/mralexgray', + gists_url: + 'https://api.github.com/users/mralexgray/gists{/gist_id}', + repos_url: 'https://api.github.com/users/mralexgray/repos', + avatar_url: 'https://avatars.githubusercontent.com/u/262517?v=4', + events_url: + 'https://api.github.com/users/mralexgray/events{/privacy}', + site_admin: false, + gravatar_id: '', + starred_url: + 'https://api.github.com/users/mralexgray/starred{/owner}{/repo}', + followers_url: 'https://api.github.com/users/mralexgray/followers', + following_url: + 'https://api.github.com/users/mralexgray/following{/other_user}', + organizations_url: 'https://api.github.com/users/mralexgray/orgs', + subscriptions_url: + 'https://api.github.com/users/mralexgray/subscriptions', + received_events_url: + 'https://api.github.com/users/mralexgray/received_events', + }, + topics: [], + git_url: 'git://github.com/mralexgray/....git', + license: { + key: 'mit', + url: 'https://api.github.com/licenses/mit', + name: 'MIT License', + node_id: 'MDc6TGljZW5zZTEz', + spdx_id: 'MIT', + }, + node_id: 'MDEwOlJlcG9zaXRvcnkxMDQ1MTA0MTE=', + private: false, + ssh_url: 'git@github.com:mralexgray/....git', + svn_url: 'https://github.com/mralexgray/...', + archived: false, + disabled: false, + has_wiki: false, + homepage: 'https://driesvints.com/blog/getting-started-with-dotfiles', + html_url: 'https://github.com/mralexgray/...', + keys_url: 'https://api.github.com/repos/mralexgray/.../keys{/key_id}', + language: 'Shell', + tags_url: 'https://api.github.com/repos/mralexgray/.../tags', + watchers: 0, + blobs_url: + 'https://api.github.com/repos/mralexgray/.../git/blobs{/sha}', + clone_url: 'https://github.com/mralexgray/....git', + forks_url: 'https://api.github.com/repos/mralexgray/.../forks', + full_name: 'mralexgray/...', + has_pages: false, + hooks_url: 'https://api.github.com/repos/mralexgray/.../hooks', + pulls_url: + 'https://api.github.com/repos/mralexgray/.../pulls{/number}', + pushed_at: '2017-09-15T08:27:32Z', + teams_url: 'https://api.github.com/repos/mralexgray/.../teams', + trees_url: + 'https://api.github.com/repos/mralexgray/.../git/trees{/sha}', + created_at: '2017-09-22T19:19:42Z', + events_url: 'https://api.github.com/repos/mralexgray/.../events', + has_issues: false, + issues_url: + 'https://api.github.com/repos/mralexgray/.../issues{/number}', + labels_url: + 'https://api.github.com/repos/mralexgray/.../labels{/name}', + merges_url: 'https://api.github.com/repos/mralexgray/.../merges', + mirror_url: null, + updated_at: '2017-09-22T19:20:22Z', + visibility: 'public', + archive_url: + 'https://api.github.com/repos/mralexgray/.../{archive_format}{/ref}', + commits_url: + 'https://api.github.com/repos/mralexgray/.../commits{/sha}', + compare_url: + 'https://api.github.com/repos/mralexgray/.../compare/{base}...{head}', + description: ':computer: Public repo for my personal dotfiles.', + forks_count: 0, + is_template: false, + open_issues: 0, + branches_url: + 'https://api.github.com/repos/mralexgray/.../branches{/branch}', + comments_url: + 'https://api.github.com/repos/mralexgray/.../comments{/number}', + contents_url: + 'https://api.github.com/repos/mralexgray/.../contents/{+path}', + git_refs_url: + 'https://api.github.com/repos/mralexgray/.../git/refs{/sha}', + git_tags_url: + 'https://api.github.com/repos/mralexgray/.../git/tags{/sha}', + has_projects: true, + releases_url: + 'https://api.github.com/repos/mralexgray/.../releases{/id}', + statuses_url: + 'https://api.github.com/repos/mralexgray/.../statuses/{sha}', + allow_forking: true, + assignees_url: + 'https://api.github.com/repos/mralexgray/.../assignees{/user}', + downloads_url: + 'https://api.github.com/repos/mralexgray/.../downloads', + has_downloads: true, + languages_url: + 'https://api.github.com/repos/mralexgray/.../languages', + default_branch: 'master', + milestones_url: + 'https://api.github.com/repos/mralexgray/.../milestones{/number}', + stargazers_url: + 'https://api.github.com/repos/mralexgray/.../stargazers', + watchers_count: 0, + deployments_url: + 'https://api.github.com/repos/mralexgray/.../deployments', + git_commits_url: + 'https://api.github.com/repos/mralexgray/.../git/commits{/sha}', + subscribers_url: + 'https://api.github.com/repos/mralexgray/.../subscribers', + contributors_url: + 'https://api.github.com/repos/mralexgray/.../contributors', + issue_events_url: + 'https://api.github.com/repos/mralexgray/.../issues/events{/number}', + stargazers_count: 0, + subscription_url: + 'https://api.github.com/repos/mralexgray/.../subscription', + collaborators_url: + 'https://api.github.com/repos/mralexgray/.../collaborators{/collaborator}', + issue_comment_url: + 'https://api.github.com/repos/mralexgray/.../issues/comments{/number}', + notifications_url: + 'https://api.github.com/repos/mralexgray/.../notifications{?since,all,participating}', + open_issues_count: 0, + web_commit_signoff_required: false, + }, + { + id: 58656723, + url: 'https://api.github.com/repos/mralexgray/2200087-Serial-Protocol', + fork: true, + name: '2200087-Serial-Protocol', + size: 41, + forks: 1, + owner: { + id: 262517, + url: 'https://api.github.com/users/mralexgray', + type: 'User', + login: 'mralexgray', + node_id: 'MDQ6VXNlcjI2MjUxNw==', + html_url: 'https://github.com/mralexgray', + gists_url: + 'https://api.github.com/users/mralexgray/gists{/gist_id}', + repos_url: 'https://api.github.com/users/mralexgray/repos', + avatar_url: 'https://avatars.githubusercontent.com/u/262517?v=4', + events_url: + 'https://api.github.com/users/mralexgray/events{/privacy}', + site_admin: false, + gravatar_id: '', + starred_url: + 'https://api.github.com/users/mralexgray/starred{/owner}{/repo}', + followers_url: 'https://api.github.com/users/mralexgray/followers', + following_url: + 'https://api.github.com/users/mralexgray/following{/other_user}', + organizations_url: 'https://api.github.com/users/mralexgray/orgs', + subscriptions_url: + 'https://api.github.com/users/mralexgray/subscriptions', + received_events_url: + 'https://api.github.com/users/mralexgray/received_events', + }, + topics: [], + git_url: 'git://github.com/mralexgray/2200087-Serial-Protocol.git', + license: { + key: 'gpl-2.0', + url: 'https://api.github.com/licenses/gpl-2.0', + name: 'GNU General Public License v2.0', + node_id: 'MDc6TGljZW5zZTg=', + spdx_id: 'GPL-2.0', + }, + node_id: 'MDEwOlJlcG9zaXRvcnk1ODY1NjcyMw==', + private: false, + ssh_url: 'git@github.com:mralexgray/2200087-Serial-Protocol.git', + svn_url: 'https://github.com/mralexgray/2200087-Serial-Protocol', + archived: false, + disabled: false, + has_wiki: true, + homepage: 'http://daviddworken.com', + html_url: 'https://github.com/mralexgray/2200087-Serial-Protocol', + keys_url: + 'https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/keys{/key_id}', + language: 'Python', + tags_url: + 'https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/tags', + watchers: 0, + blobs_url: + 'https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/git/blobs{/sha}', + clone_url: + 'https://github.com/mralexgray/2200087-Serial-Protocol.git', + forks_url: + 'https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/forks', + full_name: 'mralexgray/2200087-Serial-Protocol', + has_pages: false, + hooks_url: + 'https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/hooks', + pulls_url: + 'https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/pulls{/number}', + pushed_at: '2016-05-12T16:07:24Z', + teams_url: + 'https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/teams', + trees_url: + 'https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/git/trees{/sha}', + created_at: '2016-05-12T16:05:28Z', + events_url: + 'https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/events', + has_issues: false, + issues_url: + 'https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/issues{/number}', + labels_url: + 'https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/labels{/name}', + merges_url: + 'https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/merges', + mirror_url: null, + updated_at: '2016-05-12T16:05:30Z', + visibility: 'public', + archive_url: + 'https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/{archive_format}{/ref}', + commits_url: + 'https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/commits{/sha}', + compare_url: + 'https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/compare/{base}...{head}', + description: + "A reverse engineered protocol description and accompanying code for Radioshack's 2200087 multimeter", + forks_count: 1, + is_template: false, + open_issues: 0, + branches_url: + 'https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/branches{/branch}', + comments_url: + 'https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/comments{/number}', + contents_url: + 'https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/contents/{+path}', + git_refs_url: + 'https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/git/refs{/sha}', + git_tags_url: + 'https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/git/tags{/sha}', + has_projects: true, + releases_url: + 'https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/releases{/id}', + statuses_url: + 'https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/statuses/{sha}', + allow_forking: true, + assignees_url: + 'https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/assignees{/user}', + downloads_url: + 'https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/downloads', + has_downloads: true, + languages_url: + 'https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/languages', + default_branch: 'master', + milestones_url: + 'https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/milestones{/number}', + stargazers_url: + 'https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/stargazers', + watchers_count: 0, + deployments_url: + 'https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/deployments', + git_commits_url: + 'https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/git/commits{/sha}', + subscribers_url: + 'https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/subscribers', + contributors_url: + 'https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/contributors', + issue_events_url: + 'https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/issues/events{/number}', + stargazers_count: 0, + subscription_url: + 'https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/subscription', + collaborators_url: + 'https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/collaborators{/collaborator}', + issue_comment_url: + 'https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/issues/comments{/number}', + notifications_url: + 'https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/notifications{?since,all,participating}', + open_issues_count: 0, + web_commit_signoff_required: false, + }, + { + id: 13121042, + url: 'https://api.github.com/repos/mralexgray/ace', + fork: true, + name: 'ace', + size: 21080, + forks: 1, + owner: { + id: 262517, + url: 'https://api.github.com/users/mralexgray', + type: 'User', + login: 'mralexgray', + node_id: 'MDQ6VXNlcjI2MjUxNw==', + html_url: 'https://github.com/mralexgray', + gists_url: + 'https://api.github.com/users/mralexgray/gists{/gist_id}', + repos_url: 'https://api.github.com/users/mralexgray/repos', + avatar_url: 'https://avatars.githubusercontent.com/u/262517?v=4', + events_url: + 'https://api.github.com/users/mralexgray/events{/privacy}', + site_admin: false, + gravatar_id: '', + starred_url: + 'https://api.github.com/users/mralexgray/starred{/owner}{/repo}', + followers_url: 'https://api.github.com/users/mralexgray/followers', + following_url: + 'https://api.github.com/users/mralexgray/following{/other_user}', + organizations_url: 'https://api.github.com/users/mralexgray/orgs', + subscriptions_url: + 'https://api.github.com/users/mralexgray/subscriptions', + received_events_url: + 'https://api.github.com/users/mralexgray/received_events', + }, + topics: [], + git_url: 'git://github.com/mralexgray/ace.git', + license: { + key: 'other', + url: null, + name: 'Other', + node_id: 'MDc6TGljZW5zZTA=', + spdx_id: 'NOASSERTION', + }, + node_id: 'MDEwOlJlcG9zaXRvcnkxMzEyMTA0Mg==', + private: false, + ssh_url: 'git@github.com:mralexgray/ace.git', + svn_url: 'https://github.com/mralexgray/ace', + archived: false, + disabled: false, + has_wiki: true, + homepage: 'http://ace.c9.io', + html_url: 'https://github.com/mralexgray/ace', + keys_url: 'https://api.github.com/repos/mralexgray/ace/keys{/key_id}', + language: 'JavaScript', + tags_url: 'https://api.github.com/repos/mralexgray/ace/tags', + watchers: 0, + blobs_url: + 'https://api.github.com/repos/mralexgray/ace/git/blobs{/sha}', + clone_url: 'https://github.com/mralexgray/ace.git', + forks_url: 'https://api.github.com/repos/mralexgray/ace/forks', + full_name: 'mralexgray/ace', + has_pages: false, + hooks_url: 'https://api.github.com/repos/mralexgray/ace/hooks', + pulls_url: + 'https://api.github.com/repos/mralexgray/ace/pulls{/number}', + pushed_at: '2013-10-26T12:34:48Z', + teams_url: 'https://api.github.com/repos/mralexgray/ace/teams', + trees_url: + 'https://api.github.com/repos/mralexgray/ace/git/trees{/sha}', + created_at: '2013-09-26T11:58:10Z', + events_url: 'https://api.github.com/repos/mralexgray/ace/events', + has_issues: false, + issues_url: + 'https://api.github.com/repos/mralexgray/ace/issues{/number}', + labels_url: + 'https://api.github.com/repos/mralexgray/ace/labels{/name}', + merges_url: 'https://api.github.com/repos/mralexgray/ace/merges', + mirror_url: null, + updated_at: '2013-10-26T12:34:49Z', + visibility: 'public', + archive_url: + 'https://api.github.com/repos/mralexgray/ace/{archive_format}{/ref}', + commits_url: + 'https://api.github.com/repos/mralexgray/ace/commits{/sha}', + compare_url: + 'https://api.github.com/repos/mralexgray/ace/compare/{base}...{head}', + description: 'Ace (Ajax.org Cloud9 Editor)', + forks_count: 1, + is_template: false, + open_issues: 0, + branches_url: + 'https://api.github.com/repos/mralexgray/ace/branches{/branch}', + comments_url: + 'https://api.github.com/repos/mralexgray/ace/comments{/number}', + contents_url: + 'https://api.github.com/repos/mralexgray/ace/contents/{+path}', + git_refs_url: + 'https://api.github.com/repos/mralexgray/ace/git/refs{/sha}', + git_tags_url: + 'https://api.github.com/repos/mralexgray/ace/git/tags{/sha}', + has_projects: true, + releases_url: + 'https://api.github.com/repos/mralexgray/ace/releases{/id}', + statuses_url: + 'https://api.github.com/repos/mralexgray/ace/statuses/{sha}', + allow_forking: true, + assignees_url: + 'https://api.github.com/repos/mralexgray/ace/assignees{/user}', + downloads_url: + 'https://api.github.com/repos/mralexgray/ace/downloads', + has_downloads: true, + languages_url: + 'https://api.github.com/repos/mralexgray/ace/languages', + default_branch: 'master', + milestones_url: + 'https://api.github.com/repos/mralexgray/ace/milestones{/number}', + stargazers_url: + 'https://api.github.com/repos/mralexgray/ace/stargazers', + watchers_count: 0, + deployments_url: + 'https://api.github.com/repos/mralexgray/ace/deployments', + git_commits_url: + 'https://api.github.com/repos/mralexgray/ace/git/commits{/sha}', + subscribers_url: + 'https://api.github.com/repos/mralexgray/ace/subscribers', + contributors_url: + 'https://api.github.com/repos/mralexgray/ace/contributors', + issue_events_url: + 'https://api.github.com/repos/mralexgray/ace/issues/events{/number}', + stargazers_count: 0, + subscription_url: + 'https://api.github.com/repos/mralexgray/ace/subscription', + collaborators_url: + 'https://api.github.com/repos/mralexgray/ace/collaborators{/collaborator}', + issue_comment_url: + 'https://api.github.com/repos/mralexgray/ace/issues/comments{/number}', + notifications_url: + 'https://api.github.com/repos/mralexgray/ace/notifications{?since,all,participating}', + open_issues_count: 0, + web_commit_signoff_required: false, + }, + { + id: 10791045, + url: 'https://api.github.com/repos/mralexgray/ACEView', + fork: true, + name: 'ACEView', + size: 1733, + forks: 1, + owner: { + id: 262517, + url: 'https://api.github.com/users/mralexgray', + type: 'User', + login: 'mralexgray', + node_id: 'MDQ6VXNlcjI2MjUxNw==', + html_url: 'https://github.com/mralexgray', + gists_url: + 'https://api.github.com/users/mralexgray/gists{/gist_id}', + repos_url: 'https://api.github.com/users/mralexgray/repos', + avatar_url: 'https://avatars.githubusercontent.com/u/262517?v=4', + events_url: + 'https://api.github.com/users/mralexgray/events{/privacy}', + site_admin: false, + gravatar_id: '', + starred_url: + 'https://api.github.com/users/mralexgray/starred{/owner}{/repo}', + followers_url: 'https://api.github.com/users/mralexgray/followers', + following_url: + 'https://api.github.com/users/mralexgray/following{/other_user}', + organizations_url: 'https://api.github.com/users/mralexgray/orgs', + subscriptions_url: + 'https://api.github.com/users/mralexgray/subscriptions', + received_events_url: + 'https://api.github.com/users/mralexgray/received_events', + }, + topics: [], + git_url: 'git://github.com/mralexgray/ACEView.git', + license: { + key: 'other', + url: null, + name: 'Other', + node_id: 'MDc6TGljZW5zZTA=', + spdx_id: 'NOASSERTION', + }, + node_id: 'MDEwOlJlcG9zaXRvcnkxMDc5MTA0NQ==', + private: false, + ssh_url: 'git@github.com:mralexgray/ACEView.git', + svn_url: 'https://github.com/mralexgray/ACEView', + archived: false, + disabled: false, + has_wiki: true, + homepage: null, + html_url: 'https://github.com/mralexgray/ACEView', + keys_url: + 'https://api.github.com/repos/mralexgray/ACEView/keys{/key_id}', + language: 'Objective-C', + tags_url: 'https://api.github.com/repos/mralexgray/ACEView/tags', + watchers: 0, + blobs_url: + 'https://api.github.com/repos/mralexgray/ACEView/git/blobs{/sha}', + clone_url: 'https://github.com/mralexgray/ACEView.git', + forks_url: 'https://api.github.com/repos/mralexgray/ACEView/forks', + full_name: 'mralexgray/ACEView', + has_pages: false, + hooks_url: 'https://api.github.com/repos/mralexgray/ACEView/hooks', + pulls_url: + 'https://api.github.com/repos/mralexgray/ACEView/pulls{/number}', + pushed_at: '2014-05-09T01:36:23Z', + teams_url: 'https://api.github.com/repos/mralexgray/ACEView/teams', + trees_url: + 'https://api.github.com/repos/mralexgray/ACEView/git/trees{/sha}', + created_at: '2013-06-19T12:15:04Z', + events_url: 'https://api.github.com/repos/mralexgray/ACEView/events', + has_issues: false, + issues_url: + 'https://api.github.com/repos/mralexgray/ACEView/issues{/number}', + labels_url: + 'https://api.github.com/repos/mralexgray/ACEView/labels{/name}', + merges_url: 'https://api.github.com/repos/mralexgray/ACEView/merges', + mirror_url: null, + updated_at: '2015-11-24T01:14:10Z', + visibility: 'public', + archive_url: + 'https://api.github.com/repos/mralexgray/ACEView/{archive_format}{/ref}', + commits_url: + 'https://api.github.com/repos/mralexgray/ACEView/commits{/sha}', + compare_url: + 'https://api.github.com/repos/mralexgray/ACEView/compare/{base}...{head}', + description: + 'Use the wonderful ACE editor in your Cocoa applications', + forks_count: 1, + is_template: false, + open_issues: 0, + branches_url: + 'https://api.github.com/repos/mralexgray/ACEView/branches{/branch}', + comments_url: + 'https://api.github.com/repos/mralexgray/ACEView/comments{/number}', + contents_url: + 'https://api.github.com/repos/mralexgray/ACEView/contents/{+path}', + git_refs_url: + 'https://api.github.com/repos/mralexgray/ACEView/git/refs{/sha}', + git_tags_url: + 'https://api.github.com/repos/mralexgray/ACEView/git/tags{/sha}', + has_projects: true, + releases_url: + 'https://api.github.com/repos/mralexgray/ACEView/releases{/id}', + statuses_url: + 'https://api.github.com/repos/mralexgray/ACEView/statuses/{sha}', + allow_forking: true, + assignees_url: + 'https://api.github.com/repos/mralexgray/ACEView/assignees{/user}', + downloads_url: + 'https://api.github.com/repos/mralexgray/ACEView/downloads', + has_downloads: true, + languages_url: + 'https://api.github.com/repos/mralexgray/ACEView/languages', + default_branch: 'master', + milestones_url: + 'https://api.github.com/repos/mralexgray/ACEView/milestones{/number}', + stargazers_url: + 'https://api.github.com/repos/mralexgray/ACEView/stargazers', + watchers_count: 0, + deployments_url: + 'https://api.github.com/repos/mralexgray/ACEView/deployments', + git_commits_url: + 'https://api.github.com/repos/mralexgray/ACEView/git/commits{/sha}', + subscribers_url: + 'https://api.github.com/repos/mralexgray/ACEView/subscribers', + contributors_url: + 'https://api.github.com/repos/mralexgray/ACEView/contributors', + issue_events_url: + 'https://api.github.com/repos/mralexgray/ACEView/issues/events{/number}', + stargazers_count: 0, + subscription_url: + 'https://api.github.com/repos/mralexgray/ACEView/subscription', + collaborators_url: + 'https://api.github.com/repos/mralexgray/ACEView/collaborators{/collaborator}', + issue_comment_url: + 'https://api.github.com/repos/mralexgray/ACEView/issues/comments{/number}', + notifications_url: + 'https://api.github.com/repos/mralexgray/ACEView/notifications{?since,all,participating}', + open_issues_count: 0, + web_commit_signoff_required: false, + }, + { + id: 13623648, + url: 'https://api.github.com/repos/mralexgray/ActiveLog', + fork: true, + name: 'ActiveLog', + size: 60, + forks: 0, + owner: { + id: 262517, + url: 'https://api.github.com/users/mralexgray', + type: 'User', + login: 'mralexgray', + node_id: 'MDQ6VXNlcjI2MjUxNw==', + html_url: 'https://github.com/mralexgray', + gists_url: + 'https://api.github.com/users/mralexgray/gists{/gist_id}', + repos_url: 'https://api.github.com/users/mralexgray/repos', + avatar_url: 'https://avatars.githubusercontent.com/u/262517?v=4', + events_url: + 'https://api.github.com/users/mralexgray/events{/privacy}', + site_admin: false, + gravatar_id: '', + starred_url: + 'https://api.github.com/users/mralexgray/starred{/owner}{/repo}', + followers_url: 'https://api.github.com/users/mralexgray/followers', + following_url: + 'https://api.github.com/users/mralexgray/following{/other_user}', + organizations_url: 'https://api.github.com/users/mralexgray/orgs', + subscriptions_url: + 'https://api.github.com/users/mralexgray/subscriptions', + received_events_url: + 'https://api.github.com/users/mralexgray/received_events', + }, + topics: [], + git_url: 'git://github.com/mralexgray/ActiveLog.git', + license: null, + node_id: 'MDEwOlJlcG9zaXRvcnkxMzYyMzY0OA==', + private: false, + ssh_url: 'git@github.com:mralexgray/ActiveLog.git', + svn_url: 'https://github.com/mralexgray/ActiveLog', + archived: false, + disabled: false, + has_wiki: true, + homepage: 'http://deepitpro.com/en/articles/ActiveLog/info/', + html_url: 'https://github.com/mralexgray/ActiveLog', + keys_url: + 'https://api.github.com/repos/mralexgray/ActiveLog/keys{/key_id}', + language: 'Objective-C', + tags_url: 'https://api.github.com/repos/mralexgray/ActiveLog/tags', + watchers: 0, + blobs_url: + 'https://api.github.com/repos/mralexgray/ActiveLog/git/blobs{/sha}', + clone_url: 'https://github.com/mralexgray/ActiveLog.git', + forks_url: 'https://api.github.com/repos/mralexgray/ActiveLog/forks', + full_name: 'mralexgray/ActiveLog', + has_pages: false, + hooks_url: 'https://api.github.com/repos/mralexgray/ActiveLog/hooks', + pulls_url: + 'https://api.github.com/repos/mralexgray/ActiveLog/pulls{/number}', + pushed_at: '2011-07-03T06:28:59Z', + teams_url: 'https://api.github.com/repos/mralexgray/ActiveLog/teams', + trees_url: + 'https://api.github.com/repos/mralexgray/ActiveLog/git/trees{/sha}', + created_at: '2013-10-16T15:52:37Z', + events_url: + 'https://api.github.com/repos/mralexgray/ActiveLog/events', + has_issues: false, + issues_url: + 'https://api.github.com/repos/mralexgray/ActiveLog/issues{/number}', + labels_url: + 'https://api.github.com/repos/mralexgray/ActiveLog/labels{/name}', + merges_url: + 'https://api.github.com/repos/mralexgray/ActiveLog/merges', + mirror_url: null, + updated_at: '2013-10-16T15:52:37Z', + visibility: 'public', + archive_url: + 'https://api.github.com/repos/mralexgray/ActiveLog/{archive_format}{/ref}', + commits_url: + 'https://api.github.com/repos/mralexgray/ActiveLog/commits{/sha}', + compare_url: + 'https://api.github.com/repos/mralexgray/ActiveLog/compare/{base}...{head}', + description: 'Shut up all logs with active filter.', + forks_count: 0, + is_template: false, + open_issues: 0, + branches_url: + 'https://api.github.com/repos/mralexgray/ActiveLog/branches{/branch}', + comments_url: + 'https://api.github.com/repos/mralexgray/ActiveLog/comments{/number}', + contents_url: + 'https://api.github.com/repos/mralexgray/ActiveLog/contents/{+path}', + git_refs_url: + 'https://api.github.com/repos/mralexgray/ActiveLog/git/refs{/sha}', + git_tags_url: + 'https://api.github.com/repos/mralexgray/ActiveLog/git/tags{/sha}', + has_projects: true, + releases_url: + 'https://api.github.com/repos/mralexgray/ActiveLog/releases{/id}', + statuses_url: + 'https://api.github.com/repos/mralexgray/ActiveLog/statuses/{sha}', + allow_forking: true, + assignees_url: + 'https://api.github.com/repos/mralexgray/ActiveLog/assignees{/user}', + downloads_url: + 'https://api.github.com/repos/mralexgray/ActiveLog/downloads', + has_downloads: true, + languages_url: + 'https://api.github.com/repos/mralexgray/ActiveLog/languages', + default_branch: 'master', + milestones_url: + 'https://api.github.com/repos/mralexgray/ActiveLog/milestones{/number}', + stargazers_url: + 'https://api.github.com/repos/mralexgray/ActiveLog/stargazers', + watchers_count: 0, + deployments_url: + 'https://api.github.com/repos/mralexgray/ActiveLog/deployments', + git_commits_url: + 'https://api.github.com/repos/mralexgray/ActiveLog/git/commits{/sha}', + subscribers_url: + 'https://api.github.com/repos/mralexgray/ActiveLog/subscribers', + contributors_url: + 'https://api.github.com/repos/mralexgray/ActiveLog/contributors', + issue_events_url: + 'https://api.github.com/repos/mralexgray/ActiveLog/issues/events{/number}', + stargazers_count: 0, + subscription_url: + 'https://api.github.com/repos/mralexgray/ActiveLog/subscription', + collaborators_url: + 'https://api.github.com/repos/mralexgray/ActiveLog/collaborators{/collaborator}', + issue_comment_url: + 'https://api.github.com/repos/mralexgray/ActiveLog/issues/comments{/number}', + notifications_url: + 'https://api.github.com/repos/mralexgray/ActiveLog/notifications{?since,all,participating}', + open_issues_count: 0, + web_commit_signoff_required: false, + }, + { + id: 9716210, + url: 'https://api.github.com/repos/mralexgray/adium', + fork: false, + name: 'adium', + size: 277719, + forks: 37, + owner: { + id: 262517, + url: 'https://api.github.com/users/mralexgray', + type: 'User', + login: 'mralexgray', + node_id: 'MDQ6VXNlcjI2MjUxNw==', + html_url: 'https://github.com/mralexgray', + gists_url: + 'https://api.github.com/users/mralexgray/gists{/gist_id}', + repos_url: 'https://api.github.com/users/mralexgray/repos', + avatar_url: 'https://avatars.githubusercontent.com/u/262517?v=4', + events_url: + 'https://api.github.com/users/mralexgray/events{/privacy}', + site_admin: false, + gravatar_id: '', + starred_url: + 'https://api.github.com/users/mralexgray/starred{/owner}{/repo}', + followers_url: 'https://api.github.com/users/mralexgray/followers', + following_url: + 'https://api.github.com/users/mralexgray/following{/other_user}', + organizations_url: 'https://api.github.com/users/mralexgray/orgs', + subscriptions_url: + 'https://api.github.com/users/mralexgray/subscriptions', + received_events_url: + 'https://api.github.com/users/mralexgray/received_events', + }, + topics: [], + git_url: 'git://github.com/mralexgray/adium.git', + license: { + key: 'other', + url: null, + name: 'Other', + node_id: 'MDc6TGljZW5zZTA=', + spdx_id: 'NOASSERTION', + }, + node_id: 'MDEwOlJlcG9zaXRvcnk5NzE2MjEw', + private: false, + ssh_url: 'git@github.com:mralexgray/adium.git', + svn_url: 'https://github.com/mralexgray/adium', + archived: false, + disabled: false, + has_wiki: false, + homepage: null, + html_url: 'https://github.com/mralexgray/adium', + keys_url: + 'https://api.github.com/repos/mralexgray/adium/keys{/key_id}', + language: 'Objective-C', + tags_url: 'https://api.github.com/repos/mralexgray/adium/tags', + watchers: 0, + blobs_url: + 'https://api.github.com/repos/mralexgray/adium/git/blobs{/sha}', + clone_url: 'https://github.com/mralexgray/adium.git', + forks_url: 'https://api.github.com/repos/mralexgray/adium/forks', + full_name: 'mralexgray/adium', + has_pages: false, + hooks_url: 'https://api.github.com/repos/mralexgray/adium/hooks', + pulls_url: + 'https://api.github.com/repos/mralexgray/adium/pulls{/number}', + pushed_at: '2013-04-26T16:43:53Z', + teams_url: 'https://api.github.com/repos/mralexgray/adium/teams', + trees_url: + 'https://api.github.com/repos/mralexgray/adium/git/trees{/sha}', + created_at: '2013-04-27T14:59:33Z', + events_url: 'https://api.github.com/repos/mralexgray/adium/events', + has_issues: false, + issues_url: + 'https://api.github.com/repos/mralexgray/adium/issues{/number}', + labels_url: + 'https://api.github.com/repos/mralexgray/adium/labels{/name}', + merges_url: 'https://api.github.com/repos/mralexgray/adium/merges', + mirror_url: null, + updated_at: '2019-12-11T06:51:45Z', + visibility: 'public', + archive_url: + 'https://api.github.com/repos/mralexgray/adium/{archive_format}{/ref}', + commits_url: + 'https://api.github.com/repos/mralexgray/adium/commits{/sha}', + compare_url: + 'https://api.github.com/repos/mralexgray/adium/compare/{base}...{head}', + description: 'Official mirror of hg.adium.im', + forks_count: 37, + is_template: false, + open_issues: 0, + branches_url: + 'https://api.github.com/repos/mralexgray/adium/branches{/branch}', + comments_url: + 'https://api.github.com/repos/mralexgray/adium/comments{/number}', + contents_url: + 'https://api.github.com/repos/mralexgray/adium/contents/{+path}', + git_refs_url: + 'https://api.github.com/repos/mralexgray/adium/git/refs{/sha}', + git_tags_url: + 'https://api.github.com/repos/mralexgray/adium/git/tags{/sha}', + has_projects: true, + releases_url: + 'https://api.github.com/repos/mralexgray/adium/releases{/id}', + statuses_url: + 'https://api.github.com/repos/mralexgray/adium/statuses/{sha}', + allow_forking: true, + assignees_url: + 'https://api.github.com/repos/mralexgray/adium/assignees{/user}', + downloads_url: + 'https://api.github.com/repos/mralexgray/adium/downloads', + has_downloads: true, + languages_url: + 'https://api.github.com/repos/mralexgray/adium/languages', + default_branch: 'master', + milestones_url: + 'https://api.github.com/repos/mralexgray/adium/milestones{/number}', + stargazers_url: + 'https://api.github.com/repos/mralexgray/adium/stargazers', + watchers_count: 0, + deployments_url: + 'https://api.github.com/repos/mralexgray/adium/deployments', + git_commits_url: + 'https://api.github.com/repos/mralexgray/adium/git/commits{/sha}', + subscribers_url: + 'https://api.github.com/repos/mralexgray/adium/subscribers', + contributors_url: + 'https://api.github.com/repos/mralexgray/adium/contributors', + issue_events_url: + 'https://api.github.com/repos/mralexgray/adium/issues/events{/number}', + stargazers_count: 0, + subscription_url: + 'https://api.github.com/repos/mralexgray/adium/subscription', + collaborators_url: + 'https://api.github.com/repos/mralexgray/adium/collaborators{/collaborator}', + issue_comment_url: + 'https://api.github.com/repos/mralexgray/adium/issues/comments{/number}', + notifications_url: + 'https://api.github.com/repos/mralexgray/adium/notifications{?since,all,participating}', + open_issues_count: 0, + web_commit_signoff_required: false, + }, + { + id: 12752329, + url: 'https://api.github.com/repos/mralexgray/ADLivelyTableView', + fork: true, + name: 'ADLivelyTableView', + size: 73, + forks: 0, + owner: { + id: 262517, + url: 'https://api.github.com/users/mralexgray', + type: 'User', + login: 'mralexgray', + node_id: 'MDQ6VXNlcjI2MjUxNw==', + html_url: 'https://github.com/mralexgray', + gists_url: + 'https://api.github.com/users/mralexgray/gists{/gist_id}', + repos_url: 'https://api.github.com/users/mralexgray/repos', + avatar_url: 'https://avatars.githubusercontent.com/u/262517?v=4', + events_url: + 'https://api.github.com/users/mralexgray/events{/privacy}', + site_admin: false, + gravatar_id: '', + starred_url: + 'https://api.github.com/users/mralexgray/starred{/owner}{/repo}', + followers_url: 'https://api.github.com/users/mralexgray/followers', + following_url: + 'https://api.github.com/users/mralexgray/following{/other_user}', + organizations_url: 'https://api.github.com/users/mralexgray/orgs', + subscriptions_url: + 'https://api.github.com/users/mralexgray/subscriptions', + received_events_url: + 'https://api.github.com/users/mralexgray/received_events', + }, + topics: [], + git_url: 'git://github.com/mralexgray/ADLivelyTableView.git', + license: { + key: 'other', + url: null, + name: 'Other', + node_id: 'MDc6TGljZW5zZTA=', + spdx_id: 'NOASSERTION', + }, + node_id: 'MDEwOlJlcG9zaXRvcnkxMjc1MjMyOQ==', + private: false, + ssh_url: 'git@github.com:mralexgray/ADLivelyTableView.git', + svn_url: 'https://github.com/mralexgray/ADLivelyTableView', + archived: false, + disabled: false, + has_wiki: true, + homepage: 'http://applidium.com/en/news/lively_uitableview/', + html_url: 'https://github.com/mralexgray/ADLivelyTableView', + keys_url: + 'https://api.github.com/repos/mralexgray/ADLivelyTableView/keys{/key_id}', + language: 'Objective-C', + tags_url: + 'https://api.github.com/repos/mralexgray/ADLivelyTableView/tags', + watchers: 0, + blobs_url: + 'https://api.github.com/repos/mralexgray/ADLivelyTableView/git/blobs{/sha}', + clone_url: 'https://github.com/mralexgray/ADLivelyTableView.git', + forks_url: + 'https://api.github.com/repos/mralexgray/ADLivelyTableView/forks', + full_name: 'mralexgray/ADLivelyTableView', + has_pages: false, + hooks_url: + 'https://api.github.com/repos/mralexgray/ADLivelyTableView/hooks', + pulls_url: + 'https://api.github.com/repos/mralexgray/ADLivelyTableView/pulls{/number}', + pushed_at: '2012-05-10T10:40:15Z', + teams_url: + 'https://api.github.com/repos/mralexgray/ADLivelyTableView/teams', + trees_url: + 'https://api.github.com/repos/mralexgray/ADLivelyTableView/git/trees{/sha}', + created_at: '2013-09-11T09:18:01Z', + events_url: + 'https://api.github.com/repos/mralexgray/ADLivelyTableView/events', + has_issues: false, + issues_url: + 'https://api.github.com/repos/mralexgray/ADLivelyTableView/issues{/number}', + labels_url: + 'https://api.github.com/repos/mralexgray/ADLivelyTableView/labels{/name}', + merges_url: + 'https://api.github.com/repos/mralexgray/ADLivelyTableView/merges', + mirror_url: null, + updated_at: '2013-09-11T09:18:03Z', + visibility: 'public', + archive_url: + 'https://api.github.com/repos/mralexgray/ADLivelyTableView/{archive_format}{/ref}', + commits_url: + 'https://api.github.com/repos/mralexgray/ADLivelyTableView/commits{/sha}', + compare_url: + 'https://api.github.com/repos/mralexgray/ADLivelyTableView/compare/{base}...{head}', + description: 'Lively UITableView', + forks_count: 0, + is_template: false, + open_issues: 0, + branches_url: + 'https://api.github.com/repos/mralexgray/ADLivelyTableView/branches{/branch}', + comments_url: + 'https://api.github.com/repos/mralexgray/ADLivelyTableView/comments{/number}', + contents_url: + 'https://api.github.com/repos/mralexgray/ADLivelyTableView/contents/{+path}', + git_refs_url: + 'https://api.github.com/repos/mralexgray/ADLivelyTableView/git/refs{/sha}', + git_tags_url: + 'https://api.github.com/repos/mralexgray/ADLivelyTableView/git/tags{/sha}', + has_projects: true, + releases_url: + 'https://api.github.com/repos/mralexgray/ADLivelyTableView/releases{/id}', + statuses_url: + 'https://api.github.com/repos/mralexgray/ADLivelyTableView/statuses/{sha}', + allow_forking: true, + assignees_url: + 'https://api.github.com/repos/mralexgray/ADLivelyTableView/assignees{/user}', + downloads_url: + 'https://api.github.com/repos/mralexgray/ADLivelyTableView/downloads', + has_downloads: true, + languages_url: + 'https://api.github.com/repos/mralexgray/ADLivelyTableView/languages', + default_branch: 'master', + milestones_url: + 'https://api.github.com/repos/mralexgray/ADLivelyTableView/milestones{/number}', + stargazers_url: + 'https://api.github.com/repos/mralexgray/ADLivelyTableView/stargazers', + watchers_count: 0, + deployments_url: + 'https://api.github.com/repos/mralexgray/ADLivelyTableView/deployments', + git_commits_url: + 'https://api.github.com/repos/mralexgray/ADLivelyTableView/git/commits{/sha}', + subscribers_url: + 'https://api.github.com/repos/mralexgray/ADLivelyTableView/subscribers', + contributors_url: + 'https://api.github.com/repos/mralexgray/ADLivelyTableView/contributors', + issue_events_url: + 'https://api.github.com/repos/mralexgray/ADLivelyTableView/issues/events{/number}', + stargazers_count: 0, + subscription_url: + 'https://api.github.com/repos/mralexgray/ADLivelyTableView/subscription', + collaborators_url: + 'https://api.github.com/repos/mralexgray/ADLivelyTableView/collaborators{/collaborator}', + issue_comment_url: + 'https://api.github.com/repos/mralexgray/ADLivelyTableView/issues/comments{/number}', + notifications_url: + 'https://api.github.com/repos/mralexgray/ADLivelyTableView/notifications{?since,all,participating}', + open_issues_count: 0, + web_commit_signoff_required: false, + }, + { + id: 5697379, + url: 'https://api.github.com/repos/mralexgray/AFIncrementalStore', + fork: true, + name: 'AFIncrementalStore', + size: 139, + forks: 0, + owner: { + id: 262517, + url: 'https://api.github.com/users/mralexgray', + type: 'User', + login: 'mralexgray', + node_id: 'MDQ6VXNlcjI2MjUxNw==', + html_url: 'https://github.com/mralexgray', + gists_url: + 'https://api.github.com/users/mralexgray/gists{/gist_id}', + repos_url: 'https://api.github.com/users/mralexgray/repos', + avatar_url: 'https://avatars.githubusercontent.com/u/262517?v=4', + events_url: + 'https://api.github.com/users/mralexgray/events{/privacy}', + site_admin: false, + gravatar_id: '', + starred_url: + 'https://api.github.com/users/mralexgray/starred{/owner}{/repo}', + followers_url: 'https://api.github.com/users/mralexgray/followers', + following_url: + 'https://api.github.com/users/mralexgray/following{/other_user}', + organizations_url: 'https://api.github.com/users/mralexgray/orgs', + subscriptions_url: + 'https://api.github.com/users/mralexgray/subscriptions', + received_events_url: + 'https://api.github.com/users/mralexgray/received_events', + }, + topics: [], + git_url: 'git://github.com/mralexgray/AFIncrementalStore.git', + license: { + key: 'mit', + url: 'https://api.github.com/licenses/mit', + name: 'MIT License', + node_id: 'MDc6TGljZW5zZTEz', + spdx_id: 'MIT', + }, + node_id: 'MDEwOlJlcG9zaXRvcnk1Njk3Mzc5', + private: false, + ssh_url: 'git@github.com:mralexgray/AFIncrementalStore.git', + svn_url: 'https://github.com/mralexgray/AFIncrementalStore', + archived: false, + disabled: false, + has_wiki: true, + homepage: null, + html_url: 'https://github.com/mralexgray/AFIncrementalStore', + keys_url: + 'https://api.github.com/repos/mralexgray/AFIncrementalStore/keys{/key_id}', + language: 'Objective-C', + tags_url: + 'https://api.github.com/repos/mralexgray/AFIncrementalStore/tags', + watchers: 0, + blobs_url: + 'https://api.github.com/repos/mralexgray/AFIncrementalStore/git/blobs{/sha}', + clone_url: 'https://github.com/mralexgray/AFIncrementalStore.git', + forks_url: + 'https://api.github.com/repos/mralexgray/AFIncrementalStore/forks', + full_name: 'mralexgray/AFIncrementalStore', + has_pages: false, + hooks_url: + 'https://api.github.com/repos/mralexgray/AFIncrementalStore/hooks', + pulls_url: + 'https://api.github.com/repos/mralexgray/AFIncrementalStore/pulls{/number}', + pushed_at: '2012-09-01T22:46:25Z', + teams_url: + 'https://api.github.com/repos/mralexgray/AFIncrementalStore/teams', + trees_url: + 'https://api.github.com/repos/mralexgray/AFIncrementalStore/git/trees{/sha}', + created_at: '2012-09-06T04:20:33Z', + events_url: + 'https://api.github.com/repos/mralexgray/AFIncrementalStore/events', + has_issues: false, + issues_url: + 'https://api.github.com/repos/mralexgray/AFIncrementalStore/issues{/number}', + labels_url: + 'https://api.github.com/repos/mralexgray/AFIncrementalStore/labels{/name}', + merges_url: + 'https://api.github.com/repos/mralexgray/AFIncrementalStore/merges', + mirror_url: null, + updated_at: '2013-01-12T03:15:29Z', + visibility: 'public', + archive_url: + 'https://api.github.com/repos/mralexgray/AFIncrementalStore/{archive_format}{/ref}', + commits_url: + 'https://api.github.com/repos/mralexgray/AFIncrementalStore/commits{/sha}', + compare_url: + 'https://api.github.com/repos/mralexgray/AFIncrementalStore/compare/{base}...{head}', + description: 'Core Data Persistence with AFNetworking, Done Right', + forks_count: 0, + is_template: false, + open_issues: 0, + branches_url: + 'https://api.github.com/repos/mralexgray/AFIncrementalStore/branches{/branch}', + comments_url: + 'https://api.github.com/repos/mralexgray/AFIncrementalStore/comments{/number}', + contents_url: + 'https://api.github.com/repos/mralexgray/AFIncrementalStore/contents/{+path}', + git_refs_url: + 'https://api.github.com/repos/mralexgray/AFIncrementalStore/git/refs{/sha}', + git_tags_url: + 'https://api.github.com/repos/mralexgray/AFIncrementalStore/git/tags{/sha}', + has_projects: true, + releases_url: + 'https://api.github.com/repos/mralexgray/AFIncrementalStore/releases{/id}', + statuses_url: + 'https://api.github.com/repos/mralexgray/AFIncrementalStore/statuses/{sha}', + allow_forking: true, + assignees_url: + 'https://api.github.com/repos/mralexgray/AFIncrementalStore/assignees{/user}', + downloads_url: + 'https://api.github.com/repos/mralexgray/AFIncrementalStore/downloads', + has_downloads: true, + languages_url: + 'https://api.github.com/repos/mralexgray/AFIncrementalStore/languages', + default_branch: 'master', + milestones_url: + 'https://api.github.com/repos/mralexgray/AFIncrementalStore/milestones{/number}', + stargazers_url: + 'https://api.github.com/repos/mralexgray/AFIncrementalStore/stargazers', + watchers_count: 0, + deployments_url: + 'https://api.github.com/repos/mralexgray/AFIncrementalStore/deployments', + git_commits_url: + 'https://api.github.com/repos/mralexgray/AFIncrementalStore/git/commits{/sha}', + subscribers_url: + 'https://api.github.com/repos/mralexgray/AFIncrementalStore/subscribers', + contributors_url: + 'https://api.github.com/repos/mralexgray/AFIncrementalStore/contributors', + issue_events_url: + 'https://api.github.com/repos/mralexgray/AFIncrementalStore/issues/events{/number}', + stargazers_count: 0, + subscription_url: + 'https://api.github.com/repos/mralexgray/AFIncrementalStore/subscription', + collaborators_url: + 'https://api.github.com/repos/mralexgray/AFIncrementalStore/collaborators{/collaborator}', + issue_comment_url: + 'https://api.github.com/repos/mralexgray/AFIncrementalStore/issues/comments{/number}', + notifications_url: + 'https://api.github.com/repos/mralexgray/AFIncrementalStore/notifications{?since,all,participating}', + open_issues_count: 0, + web_commit_signoff_required: false, + }, + { + id: 6969621, + url: 'https://api.github.com/repos/mralexgray/AFNetworking', + fork: true, + name: 'AFNetworking', + size: 4341, + forks: 0, + owner: { + id: 262517, + url: 'https://api.github.com/users/mralexgray', + type: 'User', + login: 'mralexgray', + node_id: 'MDQ6VXNlcjI2MjUxNw==', + html_url: 'https://github.com/mralexgray', + gists_url: + 'https://api.github.com/users/mralexgray/gists{/gist_id}', + repos_url: 'https://api.github.com/users/mralexgray/repos', + avatar_url: 'https://avatars.githubusercontent.com/u/262517?v=4', + events_url: + 'https://api.github.com/users/mralexgray/events{/privacy}', + site_admin: false, + gravatar_id: '', + starred_url: + 'https://api.github.com/users/mralexgray/starred{/owner}{/repo}', + followers_url: 'https://api.github.com/users/mralexgray/followers', + following_url: + 'https://api.github.com/users/mralexgray/following{/other_user}', + organizations_url: 'https://api.github.com/users/mralexgray/orgs', + subscriptions_url: + 'https://api.github.com/users/mralexgray/subscriptions', + received_events_url: + 'https://api.github.com/users/mralexgray/received_events', + }, + topics: [], + git_url: 'git://github.com/mralexgray/AFNetworking.git', + license: { + key: 'mit', + url: 'https://api.github.com/licenses/mit', + name: 'MIT License', + node_id: 'MDc6TGljZW5zZTEz', + spdx_id: 'MIT', + }, + node_id: 'MDEwOlJlcG9zaXRvcnk2OTY5NjIx', + private: false, + ssh_url: 'git@github.com:mralexgray/AFNetworking.git', + svn_url: 'https://github.com/mralexgray/AFNetworking', + archived: false, + disabled: false, + has_wiki: true, + homepage: 'http://afnetworking.com', + html_url: 'https://github.com/mralexgray/AFNetworking', + keys_url: + 'https://api.github.com/repos/mralexgray/AFNetworking/keys{/key_id}', + language: 'Objective-C', + tags_url: 'https://api.github.com/repos/mralexgray/AFNetworking/tags', + watchers: 2, + blobs_url: + 'https://api.github.com/repos/mralexgray/AFNetworking/git/blobs{/sha}', + clone_url: 'https://github.com/mralexgray/AFNetworking.git', + forks_url: + 'https://api.github.com/repos/mralexgray/AFNetworking/forks', + full_name: 'mralexgray/AFNetworking', + has_pages: false, + hooks_url: + 'https://api.github.com/repos/mralexgray/AFNetworking/hooks', + pulls_url: + 'https://api.github.com/repos/mralexgray/AFNetworking/pulls{/number}', + pushed_at: '2014-01-24T07:14:32Z', + teams_url: + 'https://api.github.com/repos/mralexgray/AFNetworking/teams', + trees_url: + 'https://api.github.com/repos/mralexgray/AFNetworking/git/trees{/sha}', + created_at: '2012-12-02T17:00:04Z', + events_url: + 'https://api.github.com/repos/mralexgray/AFNetworking/events', + has_issues: false, + issues_url: + 'https://api.github.com/repos/mralexgray/AFNetworking/issues{/number}', + labels_url: + 'https://api.github.com/repos/mralexgray/AFNetworking/labels{/name}', + merges_url: + 'https://api.github.com/repos/mralexgray/AFNetworking/merges', + mirror_url: null, + updated_at: '2014-01-24T07:14:33Z', + visibility: 'public', + archive_url: + 'https://api.github.com/repos/mralexgray/AFNetworking/{archive_format}{/ref}', + commits_url: + 'https://api.github.com/repos/mralexgray/AFNetworking/commits{/sha}', + compare_url: + 'https://api.github.com/repos/mralexgray/AFNetworking/compare/{base}...{head}', + description: 'A delightful iOS and OS X networking framework', + forks_count: 0, + is_template: false, + open_issues: 0, + branches_url: + 'https://api.github.com/repos/mralexgray/AFNetworking/branches{/branch}', + comments_url: + 'https://api.github.com/repos/mralexgray/AFNetworking/comments{/number}', + contents_url: + 'https://api.github.com/repos/mralexgray/AFNetworking/contents/{+path}', + git_refs_url: + 'https://api.github.com/repos/mralexgray/AFNetworking/git/refs{/sha}', + git_tags_url: + 'https://api.github.com/repos/mralexgray/AFNetworking/git/tags{/sha}', + has_projects: true, + releases_url: + 'https://api.github.com/repos/mralexgray/AFNetworking/releases{/id}', + statuses_url: + 'https://api.github.com/repos/mralexgray/AFNetworking/statuses/{sha}', + allow_forking: true, + assignees_url: + 'https://api.github.com/repos/mralexgray/AFNetworking/assignees{/user}', + downloads_url: + 'https://api.github.com/repos/mralexgray/AFNetworking/downloads', + has_downloads: true, + languages_url: + 'https://api.github.com/repos/mralexgray/AFNetworking/languages', + default_branch: 'master', + milestones_url: + 'https://api.github.com/repos/mralexgray/AFNetworking/milestones{/number}', + stargazers_url: + 'https://api.github.com/repos/mralexgray/AFNetworking/stargazers', + watchers_count: 2, + deployments_url: + 'https://api.github.com/repos/mralexgray/AFNetworking/deployments', + git_commits_url: + 'https://api.github.com/repos/mralexgray/AFNetworking/git/commits{/sha}', + subscribers_url: + 'https://api.github.com/repos/mralexgray/AFNetworking/subscribers', + contributors_url: + 'https://api.github.com/repos/mralexgray/AFNetworking/contributors', + issue_events_url: + 'https://api.github.com/repos/mralexgray/AFNetworking/issues/events{/number}', + stargazers_count: 2, + subscription_url: + 'https://api.github.com/repos/mralexgray/AFNetworking/subscription', + collaborators_url: + 'https://api.github.com/repos/mralexgray/AFNetworking/collaborators{/collaborator}', + issue_comment_url: + 'https://api.github.com/repos/mralexgray/AFNetworking/issues/comments{/number}', + notifications_url: + 'https://api.github.com/repos/mralexgray/AFNetworking/notifications{?since,all,participating}', + open_issues_count: 0, + web_commit_signoff_required: false, + }, + { + id: 9485541, + url: 'https://api.github.com/repos/mralexgray/AGNSSplitView', + fork: true, + name: 'AGNSSplitView', + size: 68, + forks: 0, + owner: { + id: 262517, + url: 'https://api.github.com/users/mralexgray', + type: 'User', + login: 'mralexgray', + node_id: 'MDQ6VXNlcjI2MjUxNw==', + html_url: 'https://github.com/mralexgray', + gists_url: + 'https://api.github.com/users/mralexgray/gists{/gist_id}', + repos_url: 'https://api.github.com/users/mralexgray/repos', + avatar_url: 'https://avatars.githubusercontent.com/u/262517?v=4', + events_url: + 'https://api.github.com/users/mralexgray/events{/privacy}', + site_admin: false, + gravatar_id: '', + starred_url: + 'https://api.github.com/users/mralexgray/starred{/owner}{/repo}', + followers_url: 'https://api.github.com/users/mralexgray/followers', + following_url: + 'https://api.github.com/users/mralexgray/following{/other_user}', + organizations_url: 'https://api.github.com/users/mralexgray/orgs', + subscriptions_url: + 'https://api.github.com/users/mralexgray/subscriptions', + received_events_url: + 'https://api.github.com/users/mralexgray/received_events', + }, + topics: [], + git_url: 'git://github.com/mralexgray/AGNSSplitView.git', + license: null, + node_id: 'MDEwOlJlcG9zaXRvcnk5NDg1NTQx', + private: false, + ssh_url: 'git@github.com:mralexgray/AGNSSplitView.git', + svn_url: 'https://github.com/mralexgray/AGNSSplitView', + archived: false, + disabled: false, + has_wiki: true, + homepage: null, + html_url: 'https://github.com/mralexgray/AGNSSplitView', + keys_url: + 'https://api.github.com/repos/mralexgray/AGNSSplitView/keys{/key_id}', + language: 'Objective-C', + tags_url: + 'https://api.github.com/repos/mralexgray/AGNSSplitView/tags', + watchers: 0, + blobs_url: + 'https://api.github.com/repos/mralexgray/AGNSSplitView/git/blobs{/sha}', + clone_url: 'https://github.com/mralexgray/AGNSSplitView.git', + forks_url: + 'https://api.github.com/repos/mralexgray/AGNSSplitView/forks', + full_name: 'mralexgray/AGNSSplitView', + has_pages: false, + hooks_url: + 'https://api.github.com/repos/mralexgray/AGNSSplitView/hooks', + pulls_url: + 'https://api.github.com/repos/mralexgray/AGNSSplitView/pulls{/number}', + pushed_at: '2013-02-26T00:32:32Z', + teams_url: + 'https://api.github.com/repos/mralexgray/AGNSSplitView/teams', + trees_url: + 'https://api.github.com/repos/mralexgray/AGNSSplitView/git/trees{/sha}', + created_at: '2013-04-17T00:10:13Z', + events_url: + 'https://api.github.com/repos/mralexgray/AGNSSplitView/events', + has_issues: false, + issues_url: + 'https://api.github.com/repos/mralexgray/AGNSSplitView/issues{/number}', + labels_url: + 'https://api.github.com/repos/mralexgray/AGNSSplitView/labels{/name}', + merges_url: + 'https://api.github.com/repos/mralexgray/AGNSSplitView/merges', + mirror_url: null, + updated_at: '2013-04-17T00:10:13Z', + visibility: 'public', + archive_url: + 'https://api.github.com/repos/mralexgray/AGNSSplitView/{archive_format}{/ref}', + commits_url: + 'https://api.github.com/repos/mralexgray/AGNSSplitView/commits{/sha}', + compare_url: + 'https://api.github.com/repos/mralexgray/AGNSSplitView/compare/{base}...{head}', + description: 'Simple NSSplitView additions.', + forks_count: 0, + is_template: false, + open_issues: 0, + branches_url: + 'https://api.github.com/repos/mralexgray/AGNSSplitView/branches{/branch}', + comments_url: + 'https://api.github.com/repos/mralexgray/AGNSSplitView/comments{/number}', + contents_url: + 'https://api.github.com/repos/mralexgray/AGNSSplitView/contents/{+path}', + git_refs_url: + 'https://api.github.com/repos/mralexgray/AGNSSplitView/git/refs{/sha}', + git_tags_url: + 'https://api.github.com/repos/mralexgray/AGNSSplitView/git/tags{/sha}', + has_projects: true, + releases_url: + 'https://api.github.com/repos/mralexgray/AGNSSplitView/releases{/id}', + statuses_url: + 'https://api.github.com/repos/mralexgray/AGNSSplitView/statuses/{sha}', + allow_forking: true, + assignees_url: + 'https://api.github.com/repos/mralexgray/AGNSSplitView/assignees{/user}', + downloads_url: + 'https://api.github.com/repos/mralexgray/AGNSSplitView/downloads', + has_downloads: true, + languages_url: + 'https://api.github.com/repos/mralexgray/AGNSSplitView/languages', + default_branch: 'master', + milestones_url: + 'https://api.github.com/repos/mralexgray/AGNSSplitView/milestones{/number}', + stargazers_url: + 'https://api.github.com/repos/mralexgray/AGNSSplitView/stargazers', + watchers_count: 0, + deployments_url: + 'https://api.github.com/repos/mralexgray/AGNSSplitView/deployments', + git_commits_url: + 'https://api.github.com/repos/mralexgray/AGNSSplitView/git/commits{/sha}', + subscribers_url: + 'https://api.github.com/repos/mralexgray/AGNSSplitView/subscribers', + contributors_url: + 'https://api.github.com/repos/mralexgray/AGNSSplitView/contributors', + issue_events_url: + 'https://api.github.com/repos/mralexgray/AGNSSplitView/issues/events{/number}', + stargazers_count: 0, + subscription_url: + 'https://api.github.com/repos/mralexgray/AGNSSplitView/subscription', + collaborators_url: + 'https://api.github.com/repos/mralexgray/AGNSSplitView/collaborators{/collaborator}', + issue_comment_url: + 'https://api.github.com/repos/mralexgray/AGNSSplitView/issues/comments{/number}', + notifications_url: + 'https://api.github.com/repos/mralexgray/AGNSSplitView/notifications{?since,all,participating}', + open_issues_count: 0, + web_commit_signoff_required: false, + }, + { + id: 12767784, + url: 'https://api.github.com/repos/mralexgray/AGScopeBar', + fork: true, + name: 'AGScopeBar', + size: 64, + forks: 0, + owner: { + id: 262517, + url: 'https://api.github.com/users/mralexgray', + type: 'User', + login: 'mralexgray', + node_id: 'MDQ6VXNlcjI2MjUxNw==', + html_url: 'https://github.com/mralexgray', + gists_url: + 'https://api.github.com/users/mralexgray/gists{/gist_id}', + repos_url: 'https://api.github.com/users/mralexgray/repos', + avatar_url: 'https://avatars.githubusercontent.com/u/262517?v=4', + events_url: + 'https://api.github.com/users/mralexgray/events{/privacy}', + site_admin: false, + gravatar_id: '', + starred_url: + 'https://api.github.com/users/mralexgray/starred{/owner}{/repo}', + followers_url: 'https://api.github.com/users/mralexgray/followers', + following_url: + 'https://api.github.com/users/mralexgray/following{/other_user}', + organizations_url: 'https://api.github.com/users/mralexgray/orgs', + subscriptions_url: + 'https://api.github.com/users/mralexgray/subscriptions', + received_events_url: + 'https://api.github.com/users/mralexgray/received_events', + }, + topics: [], + git_url: 'git://github.com/mralexgray/AGScopeBar.git', + license: null, + node_id: 'MDEwOlJlcG9zaXRvcnkxMjc2Nzc4NA==', + private: false, + ssh_url: 'git@github.com:mralexgray/AGScopeBar.git', + svn_url: 'https://github.com/mralexgray/AGScopeBar', + archived: false, + disabled: false, + has_wiki: true, + homepage: null, + html_url: 'https://github.com/mralexgray/AGScopeBar', + keys_url: + 'https://api.github.com/repos/mralexgray/AGScopeBar/keys{/key_id}', + language: 'Objective-C', + tags_url: 'https://api.github.com/repos/mralexgray/AGScopeBar/tags', + watchers: 0, + blobs_url: + 'https://api.github.com/repos/mralexgray/AGScopeBar/git/blobs{/sha}', + clone_url: 'https://github.com/mralexgray/AGScopeBar.git', + forks_url: 'https://api.github.com/repos/mralexgray/AGScopeBar/forks', + full_name: 'mralexgray/AGScopeBar', + has_pages: false, + hooks_url: 'https://api.github.com/repos/mralexgray/AGScopeBar/hooks', + pulls_url: + 'https://api.github.com/repos/mralexgray/AGScopeBar/pulls{/number}', + pushed_at: '2013-05-07T03:35:29Z', + teams_url: 'https://api.github.com/repos/mralexgray/AGScopeBar/teams', + trees_url: + 'https://api.github.com/repos/mralexgray/AGScopeBar/git/trees{/sha}', + created_at: '2013-09-11T21:06:54Z', + events_url: + 'https://api.github.com/repos/mralexgray/AGScopeBar/events', + has_issues: false, + issues_url: + 'https://api.github.com/repos/mralexgray/AGScopeBar/issues{/number}', + labels_url: + 'https://api.github.com/repos/mralexgray/AGScopeBar/labels{/name}', + merges_url: + 'https://api.github.com/repos/mralexgray/AGScopeBar/merges', + mirror_url: null, + updated_at: '2013-09-11T21:06:54Z', + visibility: 'public', + archive_url: + 'https://api.github.com/repos/mralexgray/AGScopeBar/{archive_format}{/ref}', + commits_url: + 'https://api.github.com/repos/mralexgray/AGScopeBar/commits{/sha}', + compare_url: + 'https://api.github.com/repos/mralexgray/AGScopeBar/compare/{base}...{head}', + description: 'Custom scope bar implementation for Cocoa', + forks_count: 0, + is_template: false, + open_issues: 0, + branches_url: + 'https://api.github.com/repos/mralexgray/AGScopeBar/branches{/branch}', + comments_url: + 'https://api.github.com/repos/mralexgray/AGScopeBar/comments{/number}', + contents_url: + 'https://api.github.com/repos/mralexgray/AGScopeBar/contents/{+path}', + git_refs_url: + 'https://api.github.com/repos/mralexgray/AGScopeBar/git/refs{/sha}', + git_tags_url: + 'https://api.github.com/repos/mralexgray/AGScopeBar/git/tags{/sha}', + has_projects: true, + releases_url: + 'https://api.github.com/repos/mralexgray/AGScopeBar/releases{/id}', + statuses_url: + 'https://api.github.com/repos/mralexgray/AGScopeBar/statuses/{sha}', + allow_forking: true, + assignees_url: + 'https://api.github.com/repos/mralexgray/AGScopeBar/assignees{/user}', + downloads_url: + 'https://api.github.com/repos/mralexgray/AGScopeBar/downloads', + has_downloads: true, + languages_url: + 'https://api.github.com/repos/mralexgray/AGScopeBar/languages', + default_branch: 'master', + milestones_url: + 'https://api.github.com/repos/mralexgray/AGScopeBar/milestones{/number}', + stargazers_url: + 'https://api.github.com/repos/mralexgray/AGScopeBar/stargazers', + watchers_count: 0, + deployments_url: + 'https://api.github.com/repos/mralexgray/AGScopeBar/deployments', + git_commits_url: + 'https://api.github.com/repos/mralexgray/AGScopeBar/git/commits{/sha}', + subscribers_url: + 'https://api.github.com/repos/mralexgray/AGScopeBar/subscribers', + contributors_url: + 'https://api.github.com/repos/mralexgray/AGScopeBar/contributors', + issue_events_url: + 'https://api.github.com/repos/mralexgray/AGScopeBar/issues/events{/number}', + stargazers_count: 0, + subscription_url: + 'https://api.github.com/repos/mralexgray/AGScopeBar/subscription', + collaborators_url: + 'https://api.github.com/repos/mralexgray/AGScopeBar/collaborators{/collaborator}', + issue_comment_url: + 'https://api.github.com/repos/mralexgray/AGScopeBar/issues/comments{/number}', + notifications_url: + 'https://api.github.com/repos/mralexgray/AGScopeBar/notifications{?since,all,participating}', + open_issues_count: 0, + web_commit_signoff_required: false, + }, + { + id: 31829499, + url: 'https://api.github.com/repos/mralexgray/agvtool-xcode-plugin', + fork: true, + name: 'agvtool-xcode-plugin', + size: 102, + forks: 0, + owner: { + id: 262517, + url: 'https://api.github.com/users/mralexgray', + type: 'User', + login: 'mralexgray', + node_id: 'MDQ6VXNlcjI2MjUxNw==', + html_url: 'https://github.com/mralexgray', + gists_url: + 'https://api.github.com/users/mralexgray/gists{/gist_id}', + repos_url: 'https://api.github.com/users/mralexgray/repos', + avatar_url: 'https://avatars.githubusercontent.com/u/262517?v=4', + events_url: + 'https://api.github.com/users/mralexgray/events{/privacy}', + site_admin: false, + gravatar_id: '', + starred_url: + 'https://api.github.com/users/mralexgray/starred{/owner}{/repo}', + followers_url: 'https://api.github.com/users/mralexgray/followers', + following_url: + 'https://api.github.com/users/mralexgray/following{/other_user}', + organizations_url: 'https://api.github.com/users/mralexgray/orgs', + subscriptions_url: + 'https://api.github.com/users/mralexgray/subscriptions', + received_events_url: + 'https://api.github.com/users/mralexgray/received_events', + }, + topics: [], + git_url: 'git://github.com/mralexgray/agvtool-xcode-plugin.git', + license: null, + node_id: 'MDEwOlJlcG9zaXRvcnkzMTgyOTQ5OQ==', + private: false, + ssh_url: 'git@github.com:mralexgray/agvtool-xcode-plugin.git', + svn_url: 'https://github.com/mralexgray/agvtool-xcode-plugin', + archived: false, + disabled: false, + has_wiki: true, + homepage: null, + html_url: 'https://github.com/mralexgray/agvtool-xcode-plugin', + keys_url: + 'https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/keys{/key_id}', + language: 'Objective-C', + tags_url: + 'https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/tags', + watchers: 0, + blobs_url: + 'https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/git/blobs{/sha}', + clone_url: 'https://github.com/mralexgray/agvtool-xcode-plugin.git', + forks_url: + 'https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/forks', + full_name: 'mralexgray/agvtool-xcode-plugin', + has_pages: false, + hooks_url: + 'https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/hooks', + pulls_url: + 'https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/pulls{/number}', + pushed_at: '2015-03-08T00:04:31Z', + teams_url: + 'https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/teams', + trees_url: + 'https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/git/trees{/sha}', + created_at: '2015-03-07T22:15:38Z', + events_url: + 'https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/events', + has_issues: false, + issues_url: + 'https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/issues{/number}', + labels_url: + 'https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/labels{/name}', + merges_url: + 'https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/merges', + mirror_url: null, + updated_at: '2015-03-07T22:15:41Z', + visibility: 'public', + archive_url: + 'https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/{archive_format}{/ref}', + commits_url: + 'https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/commits{/sha}', + compare_url: + 'https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/compare/{base}...{head}', + description: 'this is a plugin wrapper for agvtool for xcode.', + forks_count: 0, + is_template: false, + open_issues: 0, + branches_url: + 'https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/branches{/branch}', + comments_url: + 'https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/comments{/number}', + contents_url: + 'https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/contents/{+path}', + git_refs_url: + 'https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/git/refs{/sha}', + git_tags_url: + 'https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/git/tags{/sha}', + has_projects: true, + releases_url: + 'https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/releases{/id}', + statuses_url: + 'https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/statuses/{sha}', + allow_forking: true, + assignees_url: + 'https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/assignees{/user}', + downloads_url: + 'https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/downloads', + has_downloads: true, + languages_url: + 'https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/languages', + default_branch: 'master', + milestones_url: + 'https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/milestones{/number}', + stargazers_url: + 'https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/stargazers', + watchers_count: 0, + deployments_url: + 'https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/deployments', + git_commits_url: + 'https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/git/commits{/sha}', + subscribers_url: + 'https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/subscribers', + contributors_url: + 'https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/contributors', + issue_events_url: + 'https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/issues/events{/number}', + stargazers_count: 0, + subscription_url: + 'https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/subscription', + collaborators_url: + 'https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/collaborators{/collaborator}', + issue_comment_url: + 'https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/issues/comments{/number}', + notifications_url: + 'https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/notifications{?since,all,participating}', + open_issues_count: 0, + web_commit_signoff_required: false, + }, + { + id: 9227846, + url: 'https://api.github.com/repos/mralexgray/AHContentBrowser', + fork: true, + name: 'AHContentBrowser', + size: 223, + forks: 0, + owner: { + id: 262517, + url: 'https://api.github.com/users/mralexgray', + type: 'User', + login: 'mralexgray', + node_id: 'MDQ6VXNlcjI2MjUxNw==', + html_url: 'https://github.com/mralexgray', + gists_url: + 'https://api.github.com/users/mralexgray/gists{/gist_id}', + repos_url: 'https://api.github.com/users/mralexgray/repos', + avatar_url: 'https://avatars.githubusercontent.com/u/262517?v=4', + events_url: + 'https://api.github.com/users/mralexgray/events{/privacy}', + site_admin: false, + gravatar_id: '', + starred_url: + 'https://api.github.com/users/mralexgray/starred{/owner}{/repo}', + followers_url: 'https://api.github.com/users/mralexgray/followers', + following_url: + 'https://api.github.com/users/mralexgray/following{/other_user}', + organizations_url: 'https://api.github.com/users/mralexgray/orgs', + subscriptions_url: + 'https://api.github.com/users/mralexgray/subscriptions', + received_events_url: + 'https://api.github.com/users/mralexgray/received_events', + }, + topics: [], + git_url: 'git://github.com/mralexgray/AHContentBrowser.git', + license: null, + node_id: 'MDEwOlJlcG9zaXRvcnk5MjI3ODQ2', + private: false, + ssh_url: 'git@github.com:mralexgray/AHContentBrowser.git', + svn_url: 'https://github.com/mralexgray/AHContentBrowser', + archived: false, + disabled: false, + has_wiki: true, + homepage: '', + html_url: 'https://github.com/mralexgray/AHContentBrowser', + keys_url: + 'https://api.github.com/repos/mralexgray/AHContentBrowser/keys{/key_id}', + language: 'Objective-C', + tags_url: + 'https://api.github.com/repos/mralexgray/AHContentBrowser/tags', + watchers: 0, + blobs_url: + 'https://api.github.com/repos/mralexgray/AHContentBrowser/git/blobs{/sha}', + clone_url: 'https://github.com/mralexgray/AHContentBrowser.git', + forks_url: + 'https://api.github.com/repos/mralexgray/AHContentBrowser/forks', + full_name: 'mralexgray/AHContentBrowser', + has_pages: false, + hooks_url: + 'https://api.github.com/repos/mralexgray/AHContentBrowser/hooks', + pulls_url: + 'https://api.github.com/repos/mralexgray/AHContentBrowser/pulls{/number}', + pushed_at: '2013-03-13T17:38:23Z', + teams_url: + 'https://api.github.com/repos/mralexgray/AHContentBrowser/teams', + trees_url: + 'https://api.github.com/repos/mralexgray/AHContentBrowser/git/trees{/sha}', + created_at: '2013-04-04T20:56:16Z', + events_url: + 'https://api.github.com/repos/mralexgray/AHContentBrowser/events', + has_issues: false, + issues_url: + 'https://api.github.com/repos/mralexgray/AHContentBrowser/issues{/number}', + labels_url: + 'https://api.github.com/repos/mralexgray/AHContentBrowser/labels{/name}', + merges_url: + 'https://api.github.com/repos/mralexgray/AHContentBrowser/merges', + mirror_url: null, + updated_at: '2015-10-22T05:00:24Z', + visibility: 'public', + archive_url: + 'https://api.github.com/repos/mralexgray/AHContentBrowser/{archive_format}{/ref}', + commits_url: + 'https://api.github.com/repos/mralexgray/AHContentBrowser/commits{/sha}', + compare_url: + 'https://api.github.com/repos/mralexgray/AHContentBrowser/compare/{base}...{head}', + description: + 'A Mac only webview that loads a fast readable version of the website if available.', + forks_count: 0, + is_template: false, + open_issues: 0, + branches_url: + 'https://api.github.com/repos/mralexgray/AHContentBrowser/branches{/branch}', + comments_url: + 'https://api.github.com/repos/mralexgray/AHContentBrowser/comments{/number}', + contents_url: + 'https://api.github.com/repos/mralexgray/AHContentBrowser/contents/{+path}', + git_refs_url: + 'https://api.github.com/repos/mralexgray/AHContentBrowser/git/refs{/sha}', + git_tags_url: + 'https://api.github.com/repos/mralexgray/AHContentBrowser/git/tags{/sha}', + has_projects: true, + releases_url: + 'https://api.github.com/repos/mralexgray/AHContentBrowser/releases{/id}', + statuses_url: + 'https://api.github.com/repos/mralexgray/AHContentBrowser/statuses/{sha}', + allow_forking: true, + assignees_url: + 'https://api.github.com/repos/mralexgray/AHContentBrowser/assignees{/user}', + downloads_url: + 'https://api.github.com/repos/mralexgray/AHContentBrowser/downloads', + has_downloads: true, + languages_url: + 'https://api.github.com/repos/mralexgray/AHContentBrowser/languages', + default_branch: 'master', + milestones_url: + 'https://api.github.com/repos/mralexgray/AHContentBrowser/milestones{/number}', + stargazers_url: + 'https://api.github.com/repos/mralexgray/AHContentBrowser/stargazers', + watchers_count: 0, + deployments_url: + 'https://api.github.com/repos/mralexgray/AHContentBrowser/deployments', + git_commits_url: + 'https://api.github.com/repos/mralexgray/AHContentBrowser/git/commits{/sha}', + subscribers_url: + 'https://api.github.com/repos/mralexgray/AHContentBrowser/subscribers', + contributors_url: + 'https://api.github.com/repos/mralexgray/AHContentBrowser/contributors', + issue_events_url: + 'https://api.github.com/repos/mralexgray/AHContentBrowser/issues/events{/number}', + stargazers_count: 0, + subscription_url: + 'https://api.github.com/repos/mralexgray/AHContentBrowser/subscription', + collaborators_url: + 'https://api.github.com/repos/mralexgray/AHContentBrowser/collaborators{/collaborator}', + issue_comment_url: + 'https://api.github.com/repos/mralexgray/AHContentBrowser/issues/comments{/number}', + notifications_url: + 'https://api.github.com/repos/mralexgray/AHContentBrowser/notifications{?since,all,participating}', + open_issues_count: 0, + web_commit_signoff_required: false, + }, + { + id: 37430328, + url: 'https://api.github.com/repos/mralexgray/AHLaunchCtl', + fork: true, + name: 'AHLaunchCtl', + size: 592, + forks: 0, + owner: { + id: 262517, + url: 'https://api.github.com/users/mralexgray', + type: 'User', + login: 'mralexgray', + node_id: 'MDQ6VXNlcjI2MjUxNw==', + html_url: 'https://github.com/mralexgray', + gists_url: + 'https://api.github.com/users/mralexgray/gists{/gist_id}', + repos_url: 'https://api.github.com/users/mralexgray/repos', + avatar_url: 'https://avatars.githubusercontent.com/u/262517?v=4', + events_url: + 'https://api.github.com/users/mralexgray/events{/privacy}', + site_admin: false, + gravatar_id: '', + starred_url: + 'https://api.github.com/users/mralexgray/starred{/owner}{/repo}', + followers_url: 'https://api.github.com/users/mralexgray/followers', + following_url: + 'https://api.github.com/users/mralexgray/following{/other_user}', + organizations_url: 'https://api.github.com/users/mralexgray/orgs', + subscriptions_url: + 'https://api.github.com/users/mralexgray/subscriptions', + received_events_url: + 'https://api.github.com/users/mralexgray/received_events', + }, + topics: [], + git_url: 'git://github.com/mralexgray/AHLaunchCtl.git', + license: { + key: 'mit', + url: 'https://api.github.com/licenses/mit', + name: 'MIT License', + node_id: 'MDc6TGljZW5zZTEz', + spdx_id: 'MIT', + }, + node_id: 'MDEwOlJlcG9zaXRvcnkzNzQzMDMyOA==', + private: false, + ssh_url: 'git@github.com:mralexgray/AHLaunchCtl.git', + svn_url: 'https://github.com/mralexgray/AHLaunchCtl', + archived: false, + disabled: false, + has_wiki: true, + homepage: '', + html_url: 'https://github.com/mralexgray/AHLaunchCtl', + keys_url: + 'https://api.github.com/repos/mralexgray/AHLaunchCtl/keys{/key_id}', + language: 'Objective-C', + tags_url: 'https://api.github.com/repos/mralexgray/AHLaunchCtl/tags', + watchers: 0, + blobs_url: + 'https://api.github.com/repos/mralexgray/AHLaunchCtl/git/blobs{/sha}', + clone_url: 'https://github.com/mralexgray/AHLaunchCtl.git', + forks_url: + 'https://api.github.com/repos/mralexgray/AHLaunchCtl/forks', + full_name: 'mralexgray/AHLaunchCtl', + has_pages: false, + hooks_url: + 'https://api.github.com/repos/mralexgray/AHLaunchCtl/hooks', + pulls_url: + 'https://api.github.com/repos/mralexgray/AHLaunchCtl/pulls{/number}', + pushed_at: '2015-05-26T18:50:48Z', + teams_url: + 'https://api.github.com/repos/mralexgray/AHLaunchCtl/teams', + trees_url: + 'https://api.github.com/repos/mralexgray/AHLaunchCtl/git/trees{/sha}', + created_at: '2015-06-14T21:31:03Z', + events_url: + 'https://api.github.com/repos/mralexgray/AHLaunchCtl/events', + has_issues: false, + issues_url: + 'https://api.github.com/repos/mralexgray/AHLaunchCtl/issues{/number}', + labels_url: + 'https://api.github.com/repos/mralexgray/AHLaunchCtl/labels{/name}', + merges_url: + 'https://api.github.com/repos/mralexgray/AHLaunchCtl/merges', + mirror_url: null, + updated_at: '2015-06-14T21:31:04Z', + visibility: 'public', + archive_url: + 'https://api.github.com/repos/mralexgray/AHLaunchCtl/{archive_format}{/ref}', + commits_url: + 'https://api.github.com/repos/mralexgray/AHLaunchCtl/commits{/sha}', + compare_url: + 'https://api.github.com/repos/mralexgray/AHLaunchCtl/compare/{base}...{head}', + description: 'LaunchD Framework for Cocoa Apps', + forks_count: 0, + is_template: false, + open_issues: 0, + branches_url: + 'https://api.github.com/repos/mralexgray/AHLaunchCtl/branches{/branch}', + comments_url: + 'https://api.github.com/repos/mralexgray/AHLaunchCtl/comments{/number}', + contents_url: + 'https://api.github.com/repos/mralexgray/AHLaunchCtl/contents/{+path}', + git_refs_url: + 'https://api.github.com/repos/mralexgray/AHLaunchCtl/git/refs{/sha}', + git_tags_url: + 'https://api.github.com/repos/mralexgray/AHLaunchCtl/git/tags{/sha}', + has_projects: true, + releases_url: + 'https://api.github.com/repos/mralexgray/AHLaunchCtl/releases{/id}', + statuses_url: + 'https://api.github.com/repos/mralexgray/AHLaunchCtl/statuses/{sha}', + allow_forking: true, + assignees_url: + 'https://api.github.com/repos/mralexgray/AHLaunchCtl/assignees{/user}', + downloads_url: + 'https://api.github.com/repos/mralexgray/AHLaunchCtl/downloads', + has_downloads: true, + languages_url: + 'https://api.github.com/repos/mralexgray/AHLaunchCtl/languages', + default_branch: 'master', + milestones_url: + 'https://api.github.com/repos/mralexgray/AHLaunchCtl/milestones{/number}', + stargazers_url: + 'https://api.github.com/repos/mralexgray/AHLaunchCtl/stargazers', + watchers_count: 0, + deployments_url: + 'https://api.github.com/repos/mralexgray/AHLaunchCtl/deployments', + git_commits_url: + 'https://api.github.com/repos/mralexgray/AHLaunchCtl/git/commits{/sha}', + subscribers_url: + 'https://api.github.com/repos/mralexgray/AHLaunchCtl/subscribers', + contributors_url: + 'https://api.github.com/repos/mralexgray/AHLaunchCtl/contributors', + issue_events_url: + 'https://api.github.com/repos/mralexgray/AHLaunchCtl/issues/events{/number}', + stargazers_count: 0, + subscription_url: + 'https://api.github.com/repos/mralexgray/AHLaunchCtl/subscription', + collaborators_url: + 'https://api.github.com/repos/mralexgray/AHLaunchCtl/collaborators{/collaborator}', + issue_comment_url: + 'https://api.github.com/repos/mralexgray/AHLaunchCtl/issues/comments{/number}', + notifications_url: + 'https://api.github.com/repos/mralexgray/AHLaunchCtl/notifications{?since,all,participating}', + open_issues_count: 0, + web_commit_signoff_required: false, + }, + { + id: 9167473, + url: 'https://api.github.com/repos/mralexgray/AHLayout', + fork: true, + name: 'AHLayout', + size: 359, + forks: 0, + owner: { + id: 262517, + url: 'https://api.github.com/users/mralexgray', + type: 'User', + login: 'mralexgray', + node_id: 'MDQ6VXNlcjI2MjUxNw==', + html_url: 'https://github.com/mralexgray', + gists_url: + 'https://api.github.com/users/mralexgray/gists{/gist_id}', + repos_url: 'https://api.github.com/users/mralexgray/repos', + avatar_url: 'https://avatars.githubusercontent.com/u/262517?v=4', + events_url: + 'https://api.github.com/users/mralexgray/events{/privacy}', + site_admin: false, + gravatar_id: '', + starred_url: + 'https://api.github.com/users/mralexgray/starred{/owner}{/repo}', + followers_url: 'https://api.github.com/users/mralexgray/followers', + following_url: + 'https://api.github.com/users/mralexgray/following{/other_user}', + organizations_url: 'https://api.github.com/users/mralexgray/orgs', + subscriptions_url: + 'https://api.github.com/users/mralexgray/subscriptions', + received_events_url: + 'https://api.github.com/users/mralexgray/received_events', + }, + topics: [], + git_url: 'git://github.com/mralexgray/AHLayout.git', + license: null, + node_id: 'MDEwOlJlcG9zaXRvcnk5MTY3NDcz', + private: false, + ssh_url: 'git@github.com:mralexgray/AHLayout.git', + svn_url: 'https://github.com/mralexgray/AHLayout', + archived: false, + disabled: false, + has_wiki: true, + homepage: null, + html_url: 'https://github.com/mralexgray/AHLayout', + keys_url: + 'https://api.github.com/repos/mralexgray/AHLayout/keys{/key_id}', + language: 'Objective-C', + tags_url: 'https://api.github.com/repos/mralexgray/AHLayout/tags', + watchers: 0, + blobs_url: + 'https://api.github.com/repos/mralexgray/AHLayout/git/blobs{/sha}', + clone_url: 'https://github.com/mralexgray/AHLayout.git', + forks_url: 'https://api.github.com/repos/mralexgray/AHLayout/forks', + full_name: 'mralexgray/AHLayout', + has_pages: false, + hooks_url: 'https://api.github.com/repos/mralexgray/AHLayout/hooks', + pulls_url: + 'https://api.github.com/repos/mralexgray/AHLayout/pulls{/number}', + pushed_at: '2013-07-08T02:31:14Z', + teams_url: 'https://api.github.com/repos/mralexgray/AHLayout/teams', + trees_url: + 'https://api.github.com/repos/mralexgray/AHLayout/git/trees{/sha}', + created_at: '2013-04-02T10:10:30Z', + events_url: 'https://api.github.com/repos/mralexgray/AHLayout/events', + has_issues: false, + issues_url: + 'https://api.github.com/repos/mralexgray/AHLayout/issues{/number}', + labels_url: + 'https://api.github.com/repos/mralexgray/AHLayout/labels{/name}', + merges_url: 'https://api.github.com/repos/mralexgray/AHLayout/merges', + mirror_url: null, + updated_at: '2013-07-08T02:31:17Z', + visibility: 'public', + archive_url: + 'https://api.github.com/repos/mralexgray/AHLayout/{archive_format}{/ref}', + commits_url: + 'https://api.github.com/repos/mralexgray/AHLayout/commits{/sha}', + compare_url: + 'https://api.github.com/repos/mralexgray/AHLayout/compare/{base}...{head}', + description: 'AHLayout', + forks_count: 0, + is_template: false, + open_issues: 0, + branches_url: + 'https://api.github.com/repos/mralexgray/AHLayout/branches{/branch}', + comments_url: + 'https://api.github.com/repos/mralexgray/AHLayout/comments{/number}', + contents_url: + 'https://api.github.com/repos/mralexgray/AHLayout/contents/{+path}', + git_refs_url: + 'https://api.github.com/repos/mralexgray/AHLayout/git/refs{/sha}', + git_tags_url: + 'https://api.github.com/repos/mralexgray/AHLayout/git/tags{/sha}', + has_projects: true, + releases_url: + 'https://api.github.com/repos/mralexgray/AHLayout/releases{/id}', + statuses_url: + 'https://api.github.com/repos/mralexgray/AHLayout/statuses/{sha}', + allow_forking: true, + assignees_url: + 'https://api.github.com/repos/mralexgray/AHLayout/assignees{/user}', + downloads_url: + 'https://api.github.com/repos/mralexgray/AHLayout/downloads', + has_downloads: true, + languages_url: + 'https://api.github.com/repos/mralexgray/AHLayout/languages', + default_branch: 'master', + milestones_url: + 'https://api.github.com/repos/mralexgray/AHLayout/milestones{/number}', + stargazers_url: + 'https://api.github.com/repos/mralexgray/AHLayout/stargazers', + watchers_count: 0, + deployments_url: + 'https://api.github.com/repos/mralexgray/AHLayout/deployments', + git_commits_url: + 'https://api.github.com/repos/mralexgray/AHLayout/git/commits{/sha}', + subscribers_url: + 'https://api.github.com/repos/mralexgray/AHLayout/subscribers', + contributors_url: + 'https://api.github.com/repos/mralexgray/AHLayout/contributors', + issue_events_url: + 'https://api.github.com/repos/mralexgray/AHLayout/issues/events{/number}', + stargazers_count: 0, + subscription_url: + 'https://api.github.com/repos/mralexgray/AHLayout/subscription', + collaborators_url: + 'https://api.github.com/repos/mralexgray/AHLayout/collaborators{/collaborator}', + issue_comment_url: + 'https://api.github.com/repos/mralexgray/AHLayout/issues/comments{/number}', + notifications_url: + 'https://api.github.com/repos/mralexgray/AHLayout/notifications{?since,all,participating}', + open_issues_count: 0, + web_commit_signoff_required: false, + }, + { + id: 18450201, + url: 'https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework', + fork: true, + name: 'Airmail-Plug-In-Framework', + size: 888, + forks: 0, + owner: { + id: 262517, + url: 'https://api.github.com/users/mralexgray', + type: 'User', + login: 'mralexgray', + node_id: 'MDQ6VXNlcjI2MjUxNw==', + html_url: 'https://github.com/mralexgray', + gists_url: + 'https://api.github.com/users/mralexgray/gists{/gist_id}', + repos_url: 'https://api.github.com/users/mralexgray/repos', + avatar_url: 'https://avatars.githubusercontent.com/u/262517?v=4', + events_url: + 'https://api.github.com/users/mralexgray/events{/privacy}', + site_admin: false, + gravatar_id: '', + starred_url: + 'https://api.github.com/users/mralexgray/starred{/owner}{/repo}', + followers_url: 'https://api.github.com/users/mralexgray/followers', + following_url: + 'https://api.github.com/users/mralexgray/following{/other_user}', + organizations_url: 'https://api.github.com/users/mralexgray/orgs', + subscriptions_url: + 'https://api.github.com/users/mralexgray/subscriptions', + received_events_url: + 'https://api.github.com/users/mralexgray/received_events', + }, + topics: [], + git_url: 'git://github.com/mralexgray/Airmail-Plug-In-Framework.git', + license: { + key: 'gpl-2.0', + url: 'https://api.github.com/licenses/gpl-2.0', + name: 'GNU General Public License v2.0', + node_id: 'MDc6TGljZW5zZTg=', + spdx_id: 'GPL-2.0', + }, + node_id: 'MDEwOlJlcG9zaXRvcnkxODQ1MDIwMQ==', + private: false, + ssh_url: 'git@github.com:mralexgray/Airmail-Plug-In-Framework.git', + svn_url: 'https://github.com/mralexgray/Airmail-Plug-In-Framework', + archived: false, + disabled: false, + has_wiki: true, + homepage: null, + html_url: 'https://github.com/mralexgray/Airmail-Plug-In-Framework', + keys_url: + 'https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/keys{/key_id}', + language: null, + tags_url: + 'https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/tags', + watchers: 0, + blobs_url: + 'https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/git/blobs{/sha}', + clone_url: + 'https://github.com/mralexgray/Airmail-Plug-In-Framework.git', + forks_url: + 'https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/forks', + full_name: 'mralexgray/Airmail-Plug-In-Framework', + has_pages: false, + hooks_url: + 'https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/hooks', + pulls_url: + 'https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/pulls{/number}', + pushed_at: '2014-03-27T15:42:19Z', + teams_url: + 'https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/teams', + trees_url: + 'https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/git/trees{/sha}', + created_at: '2014-04-04T19:33:54Z', + events_url: + 'https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/events', + has_issues: false, + issues_url: + 'https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/issues{/number}', + labels_url: + 'https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/labels{/name}', + merges_url: + 'https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/merges', + mirror_url: null, + updated_at: '2014-11-23T19:31:04Z', + visibility: 'public', + archive_url: + 'https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/{archive_format}{/ref}', + commits_url: + 'https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/commits{/sha}', + compare_url: + 'https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/compare/{base}...{head}', + description: null, + forks_count: 0, + is_template: false, + open_issues: 0, + branches_url: + 'https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/branches{/branch}', + comments_url: + 'https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/comments{/number}', + contents_url: + 'https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/contents/{+path}', + git_refs_url: + 'https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/git/refs{/sha}', + git_tags_url: + 'https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/git/tags{/sha}', + has_projects: true, + releases_url: + 'https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/releases{/id}', + statuses_url: + 'https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/statuses/{sha}', + allow_forking: true, + assignees_url: + 'https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/assignees{/user}', + downloads_url: + 'https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/downloads', + has_downloads: true, + languages_url: + 'https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/languages', + default_branch: 'master', + milestones_url: + 'https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/milestones{/number}', + stargazers_url: + 'https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/stargazers', + watchers_count: 0, + deployments_url: + 'https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/deployments', + git_commits_url: + 'https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/git/commits{/sha}', + subscribers_url: + 'https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/subscribers', + contributors_url: + 'https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/contributors', + issue_events_url: + 'https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/issues/events{/number}', + stargazers_count: 0, + subscription_url: + 'https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/subscription', + collaborators_url: + 'https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/collaborators{/collaborator}', + issue_comment_url: + 'https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/issues/comments{/number}', + notifications_url: + 'https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/notifications{?since,all,participating}', + open_issues_count: 0, + web_commit_signoff_required: false, + }, + { + id: 5203219, + url: 'https://api.github.com/repos/mralexgray/AJS-iTunes-API', + fork: true, + name: 'AJS-iTunes-API', + size: 103, + forks: 0, + owner: { + id: 262517, + url: 'https://api.github.com/users/mralexgray', + type: 'User', + login: 'mralexgray', + node_id: 'MDQ6VXNlcjI2MjUxNw==', + html_url: 'https://github.com/mralexgray', + gists_url: + 'https://api.github.com/users/mralexgray/gists{/gist_id}', + repos_url: 'https://api.github.com/users/mralexgray/repos', + avatar_url: 'https://avatars.githubusercontent.com/u/262517?v=4', + events_url: + 'https://api.github.com/users/mralexgray/events{/privacy}', + site_admin: false, + gravatar_id: '', + starred_url: + 'https://api.github.com/users/mralexgray/starred{/owner}{/repo}', + followers_url: 'https://api.github.com/users/mralexgray/followers', + following_url: + 'https://api.github.com/users/mralexgray/following{/other_user}', + organizations_url: 'https://api.github.com/users/mralexgray/orgs', + subscriptions_url: + 'https://api.github.com/users/mralexgray/subscriptions', + received_events_url: + 'https://api.github.com/users/mralexgray/received_events', + }, + topics: [], + git_url: 'git://github.com/mralexgray/AJS-iTunes-API.git', + license: null, + node_id: 'MDEwOlJlcG9zaXRvcnk1MjAzMjE5', + private: false, + ssh_url: 'git@github.com:mralexgray/AJS-iTunes-API.git', + svn_url: 'https://github.com/mralexgray/AJS-iTunes-API', + archived: false, + disabled: false, + has_wiki: true, + homepage: '', + html_url: 'https://github.com/mralexgray/AJS-iTunes-API', + keys_url: + 'https://api.github.com/repos/mralexgray/AJS-iTunes-API/keys{/key_id}', + language: 'Objective-C', + tags_url: + 'https://api.github.com/repos/mralexgray/AJS-iTunes-API/tags', + watchers: 2, + blobs_url: + 'https://api.github.com/repos/mralexgray/AJS-iTunes-API/git/blobs{/sha}', + clone_url: 'https://github.com/mralexgray/AJS-iTunes-API.git', + forks_url: + 'https://api.github.com/repos/mralexgray/AJS-iTunes-API/forks', + full_name: 'mralexgray/AJS-iTunes-API', + has_pages: false, + hooks_url: + 'https://api.github.com/repos/mralexgray/AJS-iTunes-API/hooks', + pulls_url: + 'https://api.github.com/repos/mralexgray/AJS-iTunes-API/pulls{/number}', + pushed_at: '2011-10-30T22:26:48Z', + teams_url: + 'https://api.github.com/repos/mralexgray/AJS-iTunes-API/teams', + trees_url: + 'https://api.github.com/repos/mralexgray/AJS-iTunes-API/git/trees{/sha}', + created_at: '2012-07-27T10:20:58Z', + events_url: + 'https://api.github.com/repos/mralexgray/AJS-iTunes-API/events', + has_issues: false, + issues_url: + 'https://api.github.com/repos/mralexgray/AJS-iTunes-API/issues{/number}', + labels_url: + 'https://api.github.com/repos/mralexgray/AJS-iTunes-API/labels{/name}', + merges_url: + 'https://api.github.com/repos/mralexgray/AJS-iTunes-API/merges', + mirror_url: null, + updated_at: '2013-01-11T11:00:05Z', + visibility: 'public', + archive_url: + 'https://api.github.com/repos/mralexgray/AJS-iTunes-API/{archive_format}{/ref}', + commits_url: + 'https://api.github.com/repos/mralexgray/AJS-iTunes-API/commits{/sha}', + compare_url: + 'https://api.github.com/repos/mralexgray/AJS-iTunes-API/compare/{base}...{head}', + description: + 'Cocoa wrapper for the iTunes search API - for iOS and Mac OSX projects', + forks_count: 0, + is_template: false, + open_issues: 0, + branches_url: + 'https://api.github.com/repos/mralexgray/AJS-iTunes-API/branches{/branch}', + comments_url: + 'https://api.github.com/repos/mralexgray/AJS-iTunes-API/comments{/number}', + contents_url: + 'https://api.github.com/repos/mralexgray/AJS-iTunes-API/contents/{+path}', + git_refs_url: + 'https://api.github.com/repos/mralexgray/AJS-iTunes-API/git/refs{/sha}', + git_tags_url: + 'https://api.github.com/repos/mralexgray/AJS-iTunes-API/git/tags{/sha}', + has_projects: true, + releases_url: + 'https://api.github.com/repos/mralexgray/AJS-iTunes-API/releases{/id}', + statuses_url: + 'https://api.github.com/repos/mralexgray/AJS-iTunes-API/statuses/{sha}', + allow_forking: true, + assignees_url: + 'https://api.github.com/repos/mralexgray/AJS-iTunes-API/assignees{/user}', + downloads_url: + 'https://api.github.com/repos/mralexgray/AJS-iTunes-API/downloads', + has_downloads: true, + languages_url: + 'https://api.github.com/repos/mralexgray/AJS-iTunes-API/languages', + default_branch: 'master', + milestones_url: + 'https://api.github.com/repos/mralexgray/AJS-iTunes-API/milestones{/number}', + stargazers_url: + 'https://api.github.com/repos/mralexgray/AJS-iTunes-API/stargazers', + watchers_count: 2, + deployments_url: + 'https://api.github.com/repos/mralexgray/AJS-iTunes-API/deployments', + git_commits_url: + 'https://api.github.com/repos/mralexgray/AJS-iTunes-API/git/commits{/sha}', + subscribers_url: + 'https://api.github.com/repos/mralexgray/AJS-iTunes-API/subscribers', + contributors_url: + 'https://api.github.com/repos/mralexgray/AJS-iTunes-API/contributors', + issue_events_url: + 'https://api.github.com/repos/mralexgray/AJS-iTunes-API/issues/events{/number}', + stargazers_count: 2, + subscription_url: + 'https://api.github.com/repos/mralexgray/AJS-iTunes-API/subscription', + collaborators_url: + 'https://api.github.com/repos/mralexgray/AJS-iTunes-API/collaborators{/collaborator}', + issue_comment_url: + 'https://api.github.com/repos/mralexgray/AJS-iTunes-API/issues/comments{/number}', + notifications_url: + 'https://api.github.com/repos/mralexgray/AJS-iTunes-API/notifications{?since,all,participating}', + open_issues_count: 0, + web_commit_signoff_required: false, + }, + { + id: 10093801, + url: 'https://api.github.com/repos/mralexgray/Alcatraz', + fork: true, + name: 'Alcatraz', + size: 3668, + forks: 0, + owner: { + id: 262517, + url: 'https://api.github.com/users/mralexgray', + type: 'User', + login: 'mralexgray', + node_id: 'MDQ6VXNlcjI2MjUxNw==', + html_url: 'https://github.com/mralexgray', + gists_url: + 'https://api.github.com/users/mralexgray/gists{/gist_id}', + repos_url: 'https://api.github.com/users/mralexgray/repos', + avatar_url: 'https://avatars.githubusercontent.com/u/262517?v=4', + events_url: + 'https://api.github.com/users/mralexgray/events{/privacy}', + site_admin: false, + gravatar_id: '', + starred_url: + 'https://api.github.com/users/mralexgray/starred{/owner}{/repo}', + followers_url: 'https://api.github.com/users/mralexgray/followers', + following_url: + 'https://api.github.com/users/mralexgray/following{/other_user}', + organizations_url: 'https://api.github.com/users/mralexgray/orgs', + subscriptions_url: + 'https://api.github.com/users/mralexgray/subscriptions', + received_events_url: + 'https://api.github.com/users/mralexgray/received_events', + }, + topics: [], + git_url: 'git://github.com/mralexgray/Alcatraz.git', + license: { + key: 'mit', + url: 'https://api.github.com/licenses/mit', + name: 'MIT License', + node_id: 'MDc6TGljZW5zZTEz', + spdx_id: 'MIT', + }, + node_id: 'MDEwOlJlcG9zaXRvcnkxMDA5MzgwMQ==', + private: false, + ssh_url: 'git@github.com:mralexgray/Alcatraz.git', + svn_url: 'https://github.com/mralexgray/Alcatraz', + archived: false, + disabled: false, + has_wiki: false, + homepage: 'mneorr.github.com/Alcatraz', + html_url: 'https://github.com/mralexgray/Alcatraz', + keys_url: + 'https://api.github.com/repos/mralexgray/Alcatraz/keys{/key_id}', + language: 'Objective-C', + tags_url: 'https://api.github.com/repos/mralexgray/Alcatraz/tags', + watchers: 0, + blobs_url: + 'https://api.github.com/repos/mralexgray/Alcatraz/git/blobs{/sha}', + clone_url: 'https://github.com/mralexgray/Alcatraz.git', + forks_url: 'https://api.github.com/repos/mralexgray/Alcatraz/forks', + full_name: 'mralexgray/Alcatraz', + has_pages: false, + hooks_url: 'https://api.github.com/repos/mralexgray/Alcatraz/hooks', + pulls_url: + 'https://api.github.com/repos/mralexgray/Alcatraz/pulls{/number}', + pushed_at: '2014-03-19T12:50:37Z', + teams_url: 'https://api.github.com/repos/mralexgray/Alcatraz/teams', + trees_url: + 'https://api.github.com/repos/mralexgray/Alcatraz/git/trees{/sha}', + created_at: '2013-05-16T04:41:13Z', + events_url: 'https://api.github.com/repos/mralexgray/Alcatraz/events', + has_issues: false, + issues_url: + 'https://api.github.com/repos/mralexgray/Alcatraz/issues{/number}', + labels_url: + 'https://api.github.com/repos/mralexgray/Alcatraz/labels{/name}', + merges_url: 'https://api.github.com/repos/mralexgray/Alcatraz/merges', + mirror_url: null, + updated_at: '2014-03-19T20:38:35Z', + visibility: 'public', + archive_url: + 'https://api.github.com/repos/mralexgray/Alcatraz/{archive_format}{/ref}', + commits_url: + 'https://api.github.com/repos/mralexgray/Alcatraz/commits{/sha}', + compare_url: + 'https://api.github.com/repos/mralexgray/Alcatraz/compare/{base}...{head}', + description: 'The most awesome (and only) Xcode package manager!', + forks_count: 0, + is_template: false, + open_issues: 0, + branches_url: + 'https://api.github.com/repos/mralexgray/Alcatraz/branches{/branch}', + comments_url: + 'https://api.github.com/repos/mralexgray/Alcatraz/comments{/number}', + contents_url: + 'https://api.github.com/repos/mralexgray/Alcatraz/contents/{+path}', + git_refs_url: + 'https://api.github.com/repos/mralexgray/Alcatraz/git/refs{/sha}', + git_tags_url: + 'https://api.github.com/repos/mralexgray/Alcatraz/git/tags{/sha}', + has_projects: true, + releases_url: + 'https://api.github.com/repos/mralexgray/Alcatraz/releases{/id}', + statuses_url: + 'https://api.github.com/repos/mralexgray/Alcatraz/statuses/{sha}', + allow_forking: true, + assignees_url: + 'https://api.github.com/repos/mralexgray/Alcatraz/assignees{/user}', + downloads_url: + 'https://api.github.com/repos/mralexgray/Alcatraz/downloads', + has_downloads: true, + languages_url: + 'https://api.github.com/repos/mralexgray/Alcatraz/languages', + default_branch: 'master', + milestones_url: + 'https://api.github.com/repos/mralexgray/Alcatraz/milestones{/number}', + stargazers_url: + 'https://api.github.com/repos/mralexgray/Alcatraz/stargazers', + watchers_count: 0, + deployments_url: + 'https://api.github.com/repos/mralexgray/Alcatraz/deployments', + git_commits_url: + 'https://api.github.com/repos/mralexgray/Alcatraz/git/commits{/sha}', + subscribers_url: + 'https://api.github.com/repos/mralexgray/Alcatraz/subscribers', + contributors_url: + 'https://api.github.com/repos/mralexgray/Alcatraz/contributors', + issue_events_url: + 'https://api.github.com/repos/mralexgray/Alcatraz/issues/events{/number}', + stargazers_count: 0, + subscription_url: + 'https://api.github.com/repos/mralexgray/Alcatraz/subscription', + collaborators_url: + 'https://api.github.com/repos/mralexgray/Alcatraz/collaborators{/collaborator}', + issue_comment_url: + 'https://api.github.com/repos/mralexgray/Alcatraz/issues/comments{/number}', + notifications_url: + 'https://api.github.com/repos/mralexgray/Alcatraz/notifications{?since,all,participating}', + open_issues_count: 0, + web_commit_signoff_required: false, + }, + { + id: 12916552, + url: 'https://api.github.com/repos/mralexgray/alcatraz-packages', + fork: true, + name: 'alcatraz-packages', + size: 826, + forks: 0, + owner: { + id: 262517, + url: 'https://api.github.com/users/mralexgray', + type: 'User', + login: 'mralexgray', + node_id: 'MDQ6VXNlcjI2MjUxNw==', + html_url: 'https://github.com/mralexgray', + gists_url: + 'https://api.github.com/users/mralexgray/gists{/gist_id}', + repos_url: 'https://api.github.com/users/mralexgray/repos', + avatar_url: 'https://avatars.githubusercontent.com/u/262517?v=4', + events_url: + 'https://api.github.com/users/mralexgray/events{/privacy}', + site_admin: false, + gravatar_id: '', + starred_url: + 'https://api.github.com/users/mralexgray/starred{/owner}{/repo}', + followers_url: 'https://api.github.com/users/mralexgray/followers', + following_url: + 'https://api.github.com/users/mralexgray/following{/other_user}', + organizations_url: 'https://api.github.com/users/mralexgray/orgs', + subscriptions_url: + 'https://api.github.com/users/mralexgray/subscriptions', + received_events_url: + 'https://api.github.com/users/mralexgray/received_events', + }, + topics: [], + git_url: 'git://github.com/mralexgray/alcatraz-packages.git', + license: null, + node_id: 'MDEwOlJlcG9zaXRvcnkxMjkxNjU1Mg==', + private: false, + ssh_url: 'git@github.com:mralexgray/alcatraz-packages.git', + svn_url: 'https://github.com/mralexgray/alcatraz-packages', + archived: false, + disabled: false, + has_wiki: true, + homepage: 'mneorr.github.com/Alcatraz', + html_url: 'https://github.com/mralexgray/alcatraz-packages', + keys_url: + 'https://api.github.com/repos/mralexgray/alcatraz-packages/keys{/key_id}', + language: 'Ruby', + tags_url: + 'https://api.github.com/repos/mralexgray/alcatraz-packages/tags', + watchers: 0, + blobs_url: + 'https://api.github.com/repos/mralexgray/alcatraz-packages/git/blobs{/sha}', + clone_url: 'https://github.com/mralexgray/alcatraz-packages.git', + forks_url: + 'https://api.github.com/repos/mralexgray/alcatraz-packages/forks', + full_name: 'mralexgray/alcatraz-packages', + has_pages: false, + hooks_url: + 'https://api.github.com/repos/mralexgray/alcatraz-packages/hooks', + pulls_url: + 'https://api.github.com/repos/mralexgray/alcatraz-packages/pulls{/number}', + pushed_at: '2015-12-14T16:21:31Z', + teams_url: + 'https://api.github.com/repos/mralexgray/alcatraz-packages/teams', + trees_url: + 'https://api.github.com/repos/mralexgray/alcatraz-packages/git/trees{/sha}', + created_at: '2013-09-18T07:15:24Z', + events_url: + 'https://api.github.com/repos/mralexgray/alcatraz-packages/events', + has_issues: false, + issues_url: + 'https://api.github.com/repos/mralexgray/alcatraz-packages/issues{/number}', + labels_url: + 'https://api.github.com/repos/mralexgray/alcatraz-packages/labels{/name}', + merges_url: + 'https://api.github.com/repos/mralexgray/alcatraz-packages/merges', + mirror_url: null, + updated_at: '2015-11-10T20:52:30Z', + visibility: 'public', + archive_url: + 'https://api.github.com/repos/mralexgray/alcatraz-packages/{archive_format}{/ref}', + commits_url: + 'https://api.github.com/repos/mralexgray/alcatraz-packages/commits{/sha}', + compare_url: + 'https://api.github.com/repos/mralexgray/alcatraz-packages/compare/{base}...{head}', + description: 'Package list repository for Alcatraz', + forks_count: 0, + is_template: false, + open_issues: 0, + branches_url: + 'https://api.github.com/repos/mralexgray/alcatraz-packages/branches{/branch}', + comments_url: + 'https://api.github.com/repos/mralexgray/alcatraz-packages/comments{/number}', + contents_url: + 'https://api.github.com/repos/mralexgray/alcatraz-packages/contents/{+path}', + git_refs_url: + 'https://api.github.com/repos/mralexgray/alcatraz-packages/git/refs{/sha}', + git_tags_url: + 'https://api.github.com/repos/mralexgray/alcatraz-packages/git/tags{/sha}', + has_projects: true, + releases_url: + 'https://api.github.com/repos/mralexgray/alcatraz-packages/releases{/id}', + statuses_url: + 'https://api.github.com/repos/mralexgray/alcatraz-packages/statuses/{sha}', + allow_forking: true, + assignees_url: + 'https://api.github.com/repos/mralexgray/alcatraz-packages/assignees{/user}', + downloads_url: + 'https://api.github.com/repos/mralexgray/alcatraz-packages/downloads', + has_downloads: true, + languages_url: + 'https://api.github.com/repos/mralexgray/alcatraz-packages/languages', + default_branch: 'master', + milestones_url: + 'https://api.github.com/repos/mralexgray/alcatraz-packages/milestones{/number}', + stargazers_url: + 'https://api.github.com/repos/mralexgray/alcatraz-packages/stargazers', + watchers_count: 0, + deployments_url: + 'https://api.github.com/repos/mralexgray/alcatraz-packages/deployments', + git_commits_url: + 'https://api.github.com/repos/mralexgray/alcatraz-packages/git/commits{/sha}', + subscribers_url: + 'https://api.github.com/repos/mralexgray/alcatraz-packages/subscribers', + contributors_url: + 'https://api.github.com/repos/mralexgray/alcatraz-packages/contributors', + issue_events_url: + 'https://api.github.com/repos/mralexgray/alcatraz-packages/issues/events{/number}', + stargazers_count: 0, + subscription_url: + 'https://api.github.com/repos/mralexgray/alcatraz-packages/subscription', + collaborators_url: + 'https://api.github.com/repos/mralexgray/alcatraz-packages/collaborators{/collaborator}', + issue_comment_url: + 'https://api.github.com/repos/mralexgray/alcatraz-packages/issues/comments{/number}', + notifications_url: + 'https://api.github.com/repos/mralexgray/alcatraz-packages/notifications{?since,all,participating}', + open_issues_count: 0, + web_commit_signoff_required: false, + }, + { + id: 44278362, + url: 'https://api.github.com/repos/mralexgray/alexicons', + fork: true, + name: 'alexicons', + size: 257, + forks: 0, + owner: { + id: 262517, + url: 'https://api.github.com/users/mralexgray', + type: 'User', + login: 'mralexgray', + node_id: 'MDQ6VXNlcjI2MjUxNw==', + html_url: 'https://github.com/mralexgray', + gists_url: + 'https://api.github.com/users/mralexgray/gists{/gist_id}', + repos_url: 'https://api.github.com/users/mralexgray/repos', + avatar_url: 'https://avatars.githubusercontent.com/u/262517?v=4', + events_url: + 'https://api.github.com/users/mralexgray/events{/privacy}', + site_admin: false, + gravatar_id: '', + starred_url: + 'https://api.github.com/users/mralexgray/starred{/owner}{/repo}', + followers_url: 'https://api.github.com/users/mralexgray/followers', + following_url: + 'https://api.github.com/users/mralexgray/following{/other_user}', + organizations_url: 'https://api.github.com/users/mralexgray/orgs', + subscriptions_url: + 'https://api.github.com/users/mralexgray/subscriptions', + received_events_url: + 'https://api.github.com/users/mralexgray/received_events', + }, + topics: [], + git_url: 'git://github.com/mralexgray/alexicons.git', + license: null, + node_id: 'MDEwOlJlcG9zaXRvcnk0NDI3ODM2Mg==', + private: false, + ssh_url: 'git@github.com:mralexgray/alexicons.git', + svn_url: 'https://github.com/mralexgray/alexicons', + archived: false, + disabled: false, + has_wiki: false, + homepage: null, + html_url: 'https://github.com/mralexgray/alexicons', + keys_url: + 'https://api.github.com/repos/mralexgray/alexicons/keys{/key_id}', + language: 'CoffeeScript', + tags_url: 'https://api.github.com/repos/mralexgray/alexicons/tags', + watchers: 0, + blobs_url: + 'https://api.github.com/repos/mralexgray/alexicons/git/blobs{/sha}', + clone_url: 'https://github.com/mralexgray/alexicons.git', + forks_url: 'https://api.github.com/repos/mralexgray/alexicons/forks', + full_name: 'mralexgray/alexicons', + has_pages: false, + hooks_url: 'https://api.github.com/repos/mralexgray/alexicons/hooks', + pulls_url: + 'https://api.github.com/repos/mralexgray/alexicons/pulls{/number}', + pushed_at: '2015-10-16T03:57:51Z', + teams_url: 'https://api.github.com/repos/mralexgray/alexicons/teams', + trees_url: + 'https://api.github.com/repos/mralexgray/alexicons/git/trees{/sha}', + created_at: '2015-10-14T21:49:39Z', + events_url: + 'https://api.github.com/repos/mralexgray/alexicons/events', + has_issues: false, + issues_url: + 'https://api.github.com/repos/mralexgray/alexicons/issues{/number}', + labels_url: + 'https://api.github.com/repos/mralexgray/alexicons/labels{/name}', + merges_url: + 'https://api.github.com/repos/mralexgray/alexicons/merges', + mirror_url: null, + updated_at: '2015-10-15T06:20:08Z', + visibility: 'public', + archive_url: + 'https://api.github.com/repos/mralexgray/alexicons/{archive_format}{/ref}', + commits_url: + 'https://api.github.com/repos/mralexgray/alexicons/commits{/sha}', + compare_url: + 'https://api.github.com/repos/mralexgray/alexicons/compare/{base}...{head}', + description: 'Get popular cat names', + forks_count: 0, + is_template: false, + open_issues: 0, + branches_url: + 'https://api.github.com/repos/mralexgray/alexicons/branches{/branch}', + comments_url: + 'https://api.github.com/repos/mralexgray/alexicons/comments{/number}', + contents_url: + 'https://api.github.com/repos/mralexgray/alexicons/contents/{+path}', + git_refs_url: + 'https://api.github.com/repos/mralexgray/alexicons/git/refs{/sha}', + git_tags_url: + 'https://api.github.com/repos/mralexgray/alexicons/git/tags{/sha}', + has_projects: true, + releases_url: + 'https://api.github.com/repos/mralexgray/alexicons/releases{/id}', + statuses_url: + 'https://api.github.com/repos/mralexgray/alexicons/statuses/{sha}', + allow_forking: true, + assignees_url: + 'https://api.github.com/repos/mralexgray/alexicons/assignees{/user}', + downloads_url: + 'https://api.github.com/repos/mralexgray/alexicons/downloads', + has_downloads: true, + languages_url: + 'https://api.github.com/repos/mralexgray/alexicons/languages', + default_branch: 'master', + milestones_url: + 'https://api.github.com/repos/mralexgray/alexicons/milestones{/number}', + stargazers_url: + 'https://api.github.com/repos/mralexgray/alexicons/stargazers', + watchers_count: 0, + deployments_url: + 'https://api.github.com/repos/mralexgray/alexicons/deployments', + git_commits_url: + 'https://api.github.com/repos/mralexgray/alexicons/git/commits{/sha}', + subscribers_url: + 'https://api.github.com/repos/mralexgray/alexicons/subscribers', + contributors_url: + 'https://api.github.com/repos/mralexgray/alexicons/contributors', + issue_events_url: + 'https://api.github.com/repos/mralexgray/alexicons/issues/events{/number}', + stargazers_count: 0, + subscription_url: + 'https://api.github.com/repos/mralexgray/alexicons/subscription', + collaborators_url: + 'https://api.github.com/repos/mralexgray/alexicons/collaborators{/collaborator}', + issue_comment_url: + 'https://api.github.com/repos/mralexgray/alexicons/issues/comments{/number}', + notifications_url: + 'https://api.github.com/repos/mralexgray/alexicons/notifications{?since,all,participating}', + open_issues_count: 0, + web_commit_signoff_required: false, + }, + { + id: 10476467, + url: 'https://api.github.com/repos/mralexgray/Alfred-Google-Translate', + fork: true, + name: 'Alfred-Google-Translate', + size: 103, + forks: 0, + owner: { + id: 262517, + url: 'https://api.github.com/users/mralexgray', + type: 'User', + login: 'mralexgray', + node_id: 'MDQ6VXNlcjI2MjUxNw==', + html_url: 'https://github.com/mralexgray', + gists_url: + 'https://api.github.com/users/mralexgray/gists{/gist_id}', + repos_url: 'https://api.github.com/users/mralexgray/repos', + avatar_url: 'https://avatars.githubusercontent.com/u/262517?v=4', + events_url: + 'https://api.github.com/users/mralexgray/events{/privacy}', + site_admin: false, + gravatar_id: '', + starred_url: + 'https://api.github.com/users/mralexgray/starred{/owner}{/repo}', + followers_url: 'https://api.github.com/users/mralexgray/followers', + following_url: + 'https://api.github.com/users/mralexgray/following{/other_user}', + organizations_url: 'https://api.github.com/users/mralexgray/orgs', + subscriptions_url: + 'https://api.github.com/users/mralexgray/subscriptions', + received_events_url: + 'https://api.github.com/users/mralexgray/received_events', + }, + topics: [], + git_url: 'git://github.com/mralexgray/Alfred-Google-Translate.git', + license: null, + node_id: 'MDEwOlJlcG9zaXRvcnkxMDQ3NjQ2Nw==', + private: false, + ssh_url: 'git@github.com:mralexgray/Alfred-Google-Translate.git', + svn_url: 'https://github.com/mralexgray/Alfred-Google-Translate', + archived: false, + disabled: false, + has_wiki: true, + homepage: null, + html_url: 'https://github.com/mralexgray/Alfred-Google-Translate', + keys_url: + 'https://api.github.com/repos/mralexgray/Alfred-Google-Translate/keys{/key_id}', + language: 'Shell', + tags_url: + 'https://api.github.com/repos/mralexgray/Alfred-Google-Translate/tags', + watchers: 0, + blobs_url: + 'https://api.github.com/repos/mralexgray/Alfred-Google-Translate/git/blobs{/sha}', + clone_url: + 'https://github.com/mralexgray/Alfred-Google-Translate.git', + forks_url: + 'https://api.github.com/repos/mralexgray/Alfred-Google-Translate/forks', + full_name: 'mralexgray/Alfred-Google-Translate', + has_pages: false, + hooks_url: + 'https://api.github.com/repos/mralexgray/Alfred-Google-Translate/hooks', + pulls_url: + 'https://api.github.com/repos/mralexgray/Alfred-Google-Translate/pulls{/number}', + pushed_at: '2013-01-12T19:39:03Z', + teams_url: + 'https://api.github.com/repos/mralexgray/Alfred-Google-Translate/teams', + trees_url: + 'https://api.github.com/repos/mralexgray/Alfred-Google-Translate/git/trees{/sha}', + created_at: '2013-06-04T10:45:10Z', + events_url: + 'https://api.github.com/repos/mralexgray/Alfred-Google-Translate/events', + has_issues: false, + issues_url: + 'https://api.github.com/repos/mralexgray/Alfred-Google-Translate/issues{/number}', + labels_url: + 'https://api.github.com/repos/mralexgray/Alfred-Google-Translate/labels{/name}', + merges_url: + 'https://api.github.com/repos/mralexgray/Alfred-Google-Translate/merges', + mirror_url: null, + updated_at: '2013-06-04T10:45:10Z', + visibility: 'public', + archive_url: + 'https://api.github.com/repos/mralexgray/Alfred-Google-Translate/{archive_format}{/ref}', + commits_url: + 'https://api.github.com/repos/mralexgray/Alfred-Google-Translate/commits{/sha}', + compare_url: + 'https://api.github.com/repos/mralexgray/Alfred-Google-Translate/compare/{base}...{head}', + description: + 'Extension for Alfred that will do a Google translate for you', + forks_count: 0, + is_template: false, + open_issues: 0, + branches_url: + 'https://api.github.com/repos/mralexgray/Alfred-Google-Translate/branches{/branch}', + comments_url: + 'https://api.github.com/repos/mralexgray/Alfred-Google-Translate/comments{/number}', + contents_url: + 'https://api.github.com/repos/mralexgray/Alfred-Google-Translate/contents/{+path}', + git_refs_url: + 'https://api.github.com/repos/mralexgray/Alfred-Google-Translate/git/refs{/sha}', + git_tags_url: + 'https://api.github.com/repos/mralexgray/Alfred-Google-Translate/git/tags{/sha}', + has_projects: true, + releases_url: + 'https://api.github.com/repos/mralexgray/Alfred-Google-Translate/releases{/id}', + statuses_url: + 'https://api.github.com/repos/mralexgray/Alfred-Google-Translate/statuses/{sha}', + allow_forking: true, + assignees_url: + 'https://api.github.com/repos/mralexgray/Alfred-Google-Translate/assignees{/user}', + downloads_url: + 'https://api.github.com/repos/mralexgray/Alfred-Google-Translate/downloads', + has_downloads: true, + languages_url: + 'https://api.github.com/repos/mralexgray/Alfred-Google-Translate/languages', + default_branch: 'master', + milestones_url: + 'https://api.github.com/repos/mralexgray/Alfred-Google-Translate/milestones{/number}', + stargazers_url: + 'https://api.github.com/repos/mralexgray/Alfred-Google-Translate/stargazers', + watchers_count: 0, + deployments_url: + 'https://api.github.com/repos/mralexgray/Alfred-Google-Translate/deployments', + git_commits_url: + 'https://api.github.com/repos/mralexgray/Alfred-Google-Translate/git/commits{/sha}', + subscribers_url: + 'https://api.github.com/repos/mralexgray/Alfred-Google-Translate/subscribers', + contributors_url: + 'https://api.github.com/repos/mralexgray/Alfred-Google-Translate/contributors', + issue_events_url: + 'https://api.github.com/repos/mralexgray/Alfred-Google-Translate/issues/events{/number}', + stargazers_count: 0, + subscription_url: + 'https://api.github.com/repos/mralexgray/Alfred-Google-Translate/subscription', + collaborators_url: + 'https://api.github.com/repos/mralexgray/Alfred-Google-Translate/collaborators{/collaborator}', + issue_comment_url: + 'https://api.github.com/repos/mralexgray/Alfred-Google-Translate/issues/comments{/number}', + notifications_url: + 'https://api.github.com/repos/mralexgray/Alfred-Google-Translate/notifications{?since,all,participating}', + open_issues_count: 0, + web_commit_signoff_required: false, + }, + { + id: 5524019, + url: 'https://api.github.com/repos/mralexgray/Amber', + fork: false, + name: 'Amber', + size: 48, + forks: 0, + owner: { + id: 262517, + url: 'https://api.github.com/users/mralexgray', + type: 'User', + login: 'mralexgray', + node_id: 'MDQ6VXNlcjI2MjUxNw==', + html_url: 'https://github.com/mralexgray', + gists_url: + 'https://api.github.com/users/mralexgray/gists{/gist_id}', + repos_url: 'https://api.github.com/users/mralexgray/repos', + avatar_url: 'https://avatars.githubusercontent.com/u/262517?v=4', + events_url: + 'https://api.github.com/users/mralexgray/events{/privacy}', + site_admin: false, + gravatar_id: '', + starred_url: + 'https://api.github.com/users/mralexgray/starred{/owner}{/repo}', + followers_url: 'https://api.github.com/users/mralexgray/followers', + following_url: + 'https://api.github.com/users/mralexgray/following{/other_user}', + organizations_url: 'https://api.github.com/users/mralexgray/orgs', + subscriptions_url: + 'https://api.github.com/users/mralexgray/subscriptions', + received_events_url: + 'https://api.github.com/users/mralexgray/received_events', + }, + topics: [], + git_url: 'git://github.com/mralexgray/Amber.git', + license: null, + node_id: 'MDEwOlJlcG9zaXRvcnk1NTI0MDE5', + private: false, + ssh_url: 'git@github.com:mralexgray/Amber.git', + svn_url: 'https://github.com/mralexgray/Amber', + archived: false, + disabled: false, + has_wiki: true, + homepage: null, + html_url: 'https://github.com/mralexgray/Amber', + keys_url: + 'https://api.github.com/repos/mralexgray/Amber/keys{/key_id}', + language: null, + tags_url: 'https://api.github.com/repos/mralexgray/Amber/tags', + watchers: 0, + blobs_url: + 'https://api.github.com/repos/mralexgray/Amber/git/blobs{/sha}', + clone_url: 'https://github.com/mralexgray/Amber.git', + forks_url: 'https://api.github.com/repos/mralexgray/Amber/forks', + full_name: 'mralexgray/Amber', + has_pages: false, + hooks_url: 'https://api.github.com/repos/mralexgray/Amber/hooks', + pulls_url: + 'https://api.github.com/repos/mralexgray/Amber/pulls{/number}', + pushed_at: '2012-08-23T10:38:25Z', + teams_url: 'https://api.github.com/repos/mralexgray/Amber/teams', + trees_url: + 'https://api.github.com/repos/mralexgray/Amber/git/trees{/sha}', + created_at: '2012-08-23T10:38:24Z', + events_url: 'https://api.github.com/repos/mralexgray/Amber/events', + has_issues: true, + issues_url: + 'https://api.github.com/repos/mralexgray/Amber/issues{/number}', + labels_url: + 'https://api.github.com/repos/mralexgray/Amber/labels{/name}', + merges_url: 'https://api.github.com/repos/mralexgray/Amber/merges', + mirror_url: null, + updated_at: '2013-01-11T22:25:35Z', + visibility: 'public', + archive_url: + 'https://api.github.com/repos/mralexgray/Amber/{archive_format}{/ref}', + commits_url: + 'https://api.github.com/repos/mralexgray/Amber/commits{/sha}', + compare_url: + 'https://api.github.com/repos/mralexgray/Amber/compare/{base}...{head}', + description: 'Fork of the difficult-to-deal-with Amber.framework', + forks_count: 0, + is_template: false, + open_issues: 0, + branches_url: + 'https://api.github.com/repos/mralexgray/Amber/branches{/branch}', + comments_url: + 'https://api.github.com/repos/mralexgray/Amber/comments{/number}', + contents_url: + 'https://api.github.com/repos/mralexgray/Amber/contents/{+path}', + git_refs_url: + 'https://api.github.com/repos/mralexgray/Amber/git/refs{/sha}', + git_tags_url: + 'https://api.github.com/repos/mralexgray/Amber/git/tags{/sha}', + has_projects: true, + releases_url: + 'https://api.github.com/repos/mralexgray/Amber/releases{/id}', + statuses_url: + 'https://api.github.com/repos/mralexgray/Amber/statuses/{sha}', + allow_forking: true, + assignees_url: + 'https://api.github.com/repos/mralexgray/Amber/assignees{/user}', + downloads_url: + 'https://api.github.com/repos/mralexgray/Amber/downloads', + has_downloads: true, + languages_url: + 'https://api.github.com/repos/mralexgray/Amber/languages', + default_branch: 'master', + milestones_url: + 'https://api.github.com/repos/mralexgray/Amber/milestones{/number}', + stargazers_url: + 'https://api.github.com/repos/mralexgray/Amber/stargazers', + watchers_count: 0, + deployments_url: + 'https://api.github.com/repos/mralexgray/Amber/deployments', + git_commits_url: + 'https://api.github.com/repos/mralexgray/Amber/git/commits{/sha}', + subscribers_url: + 'https://api.github.com/repos/mralexgray/Amber/subscribers', + contributors_url: + 'https://api.github.com/repos/mralexgray/Amber/contributors', + issue_events_url: + 'https://api.github.com/repos/mralexgray/Amber/issues/events{/number}', + stargazers_count: 0, + subscription_url: + 'https://api.github.com/repos/mralexgray/Amber/subscription', + collaborators_url: + 'https://api.github.com/repos/mralexgray/Amber/collaborators{/collaborator}', + issue_comment_url: + 'https://api.github.com/repos/mralexgray/Amber/issues/comments{/number}', + notifications_url: + 'https://api.github.com/repos/mralexgray/Amber/notifications{?since,all,participating}', + open_issues_count: 0, + web_commit_signoff_required: false, + }, + { + id: 10809060, + url: 'https://api.github.com/repos/mralexgray/Amethyst', + fork: true, + name: 'Amethyst', + size: 12623, + forks: 0, + owner: { + id: 262517, + url: 'https://api.github.com/users/mralexgray', + type: 'User', + login: 'mralexgray', + node_id: 'MDQ6VXNlcjI2MjUxNw==', + html_url: 'https://github.com/mralexgray', + gists_url: + 'https://api.github.com/users/mralexgray/gists{/gist_id}', + repos_url: 'https://api.github.com/users/mralexgray/repos', + avatar_url: 'https://avatars.githubusercontent.com/u/262517?v=4', + events_url: + 'https://api.github.com/users/mralexgray/events{/privacy}', + site_admin: false, + gravatar_id: '', + starred_url: + 'https://api.github.com/users/mralexgray/starred{/owner}{/repo}', + followers_url: 'https://api.github.com/users/mralexgray/followers', + following_url: + 'https://api.github.com/users/mralexgray/following{/other_user}', + organizations_url: 'https://api.github.com/users/mralexgray/orgs', + subscriptions_url: + 'https://api.github.com/users/mralexgray/subscriptions', + received_events_url: + 'https://api.github.com/users/mralexgray/received_events', + }, + topics: [], + git_url: 'git://github.com/mralexgray/Amethyst.git', + license: { + key: 'mit', + url: 'https://api.github.com/licenses/mit', + name: 'MIT License', + node_id: 'MDc6TGljZW5zZTEz', + spdx_id: 'MIT', + }, + node_id: 'MDEwOlJlcG9zaXRvcnkxMDgwOTA2MA==', + private: false, + ssh_url: 'git@github.com:mralexgray/Amethyst.git', + svn_url: 'https://github.com/mralexgray/Amethyst', + archived: false, + disabled: false, + has_wiki: true, + homepage: 'http://ianyh.github.io/Amethyst/', + html_url: 'https://github.com/mralexgray/Amethyst', + keys_url: + 'https://api.github.com/repos/mralexgray/Amethyst/keys{/key_id}', + language: 'Objective-C', + tags_url: 'https://api.github.com/repos/mralexgray/Amethyst/tags', + watchers: 0, + blobs_url: + 'https://api.github.com/repos/mralexgray/Amethyst/git/blobs{/sha}', + clone_url: 'https://github.com/mralexgray/Amethyst.git', + forks_url: 'https://api.github.com/repos/mralexgray/Amethyst/forks', + full_name: 'mralexgray/Amethyst', + has_pages: false, + hooks_url: 'https://api.github.com/repos/mralexgray/Amethyst/hooks', + pulls_url: + 'https://api.github.com/repos/mralexgray/Amethyst/pulls{/number}', + pushed_at: '2013-06-18T02:54:11Z', + teams_url: 'https://api.github.com/repos/mralexgray/Amethyst/teams', + trees_url: + 'https://api.github.com/repos/mralexgray/Amethyst/git/trees{/sha}', + created_at: '2013-06-20T00:34:22Z', + events_url: 'https://api.github.com/repos/mralexgray/Amethyst/events', + has_issues: false, + issues_url: + 'https://api.github.com/repos/mralexgray/Amethyst/issues{/number}', + labels_url: + 'https://api.github.com/repos/mralexgray/Amethyst/labels{/name}', + merges_url: 'https://api.github.com/repos/mralexgray/Amethyst/merges', + mirror_url: null, + updated_at: '2013-06-20T00:34:22Z', + visibility: 'public', + archive_url: + 'https://api.github.com/repos/mralexgray/Amethyst/{archive_format}{/ref}', + commits_url: + 'https://api.github.com/repos/mralexgray/Amethyst/commits{/sha}', + compare_url: + 'https://api.github.com/repos/mralexgray/Amethyst/compare/{base}...{head}', + description: 'Tiling window manager for OS X.', + forks_count: 0, + is_template: false, + open_issues: 0, + branches_url: + 'https://api.github.com/repos/mralexgray/Amethyst/branches{/branch}', + comments_url: + 'https://api.github.com/repos/mralexgray/Amethyst/comments{/number}', + contents_url: + 'https://api.github.com/repos/mralexgray/Amethyst/contents/{+path}', + git_refs_url: + 'https://api.github.com/repos/mralexgray/Amethyst/git/refs{/sha}', + git_tags_url: + 'https://api.github.com/repos/mralexgray/Amethyst/git/tags{/sha}', + has_projects: true, + releases_url: + 'https://api.github.com/repos/mralexgray/Amethyst/releases{/id}', + statuses_url: + 'https://api.github.com/repos/mralexgray/Amethyst/statuses/{sha}', + allow_forking: true, + assignees_url: + 'https://api.github.com/repos/mralexgray/Amethyst/assignees{/user}', + downloads_url: + 'https://api.github.com/repos/mralexgray/Amethyst/downloads', + has_downloads: true, + languages_url: + 'https://api.github.com/repos/mralexgray/Amethyst/languages', + default_branch: 'master', + milestones_url: + 'https://api.github.com/repos/mralexgray/Amethyst/milestones{/number}', + stargazers_url: + 'https://api.github.com/repos/mralexgray/Amethyst/stargazers', + watchers_count: 0, + deployments_url: + 'https://api.github.com/repos/mralexgray/Amethyst/deployments', + git_commits_url: + 'https://api.github.com/repos/mralexgray/Amethyst/git/commits{/sha}', + subscribers_url: + 'https://api.github.com/repos/mralexgray/Amethyst/subscribers', + contributors_url: + 'https://api.github.com/repos/mralexgray/Amethyst/contributors', + issue_events_url: + 'https://api.github.com/repos/mralexgray/Amethyst/issues/events{/number}', + stargazers_count: 0, + subscription_url: + 'https://api.github.com/repos/mralexgray/Amethyst/subscription', + collaborators_url: + 'https://api.github.com/repos/mralexgray/Amethyst/collaborators{/collaborator}', + issue_comment_url: + 'https://api.github.com/repos/mralexgray/Amethyst/issues/comments{/number}', + notifications_url: + 'https://api.github.com/repos/mralexgray/Amethyst/notifications{?since,all,participating}', + open_issues_count: 0, + web_commit_signoff_required: false, + }, + { + id: 3684286, + url: 'https://api.github.com/repos/mralexgray/Animated-Paths', + fork: true, + name: 'Animated-Paths', + size: 411, + forks: 0, + owner: { + id: 262517, + url: 'https://api.github.com/users/mralexgray', + type: 'User', + login: 'mralexgray', + node_id: 'MDQ6VXNlcjI2MjUxNw==', + html_url: 'https://github.com/mralexgray', + gists_url: + 'https://api.github.com/users/mralexgray/gists{/gist_id}', + repos_url: 'https://api.github.com/users/mralexgray/repos', + avatar_url: 'https://avatars.githubusercontent.com/u/262517?v=4', + events_url: + 'https://api.github.com/users/mralexgray/events{/privacy}', + site_admin: false, + gravatar_id: '', + starred_url: + 'https://api.github.com/users/mralexgray/starred{/owner}{/repo}', + followers_url: 'https://api.github.com/users/mralexgray/followers', + following_url: + 'https://api.github.com/users/mralexgray/following{/other_user}', + organizations_url: 'https://api.github.com/users/mralexgray/orgs', + subscriptions_url: + 'https://api.github.com/users/mralexgray/subscriptions', + received_events_url: + 'https://api.github.com/users/mralexgray/received_events', + }, + topics: [], + git_url: 'git://github.com/mralexgray/Animated-Paths.git', + license: { + key: 'other', + url: null, + name: 'Other', + node_id: 'MDc6TGljZW5zZTA=', + spdx_id: 'NOASSERTION', + }, + node_id: 'MDEwOlJlcG9zaXRvcnkzNjg0Mjg2', + private: false, + ssh_url: 'git@github.com:mralexgray/Animated-Paths.git', + svn_url: 'https://github.com/mralexgray/Animated-Paths', + archived: false, + disabled: false, + has_wiki: true, + homepage: + 'http://oleb.net/blog/2010/12/animating-drawing-of-cgpath-with-cashapelayer/', + html_url: 'https://github.com/mralexgray/Animated-Paths', + keys_url: + 'https://api.github.com/repos/mralexgray/Animated-Paths/keys{/key_id}', + language: 'Objective-C', + tags_url: + 'https://api.github.com/repos/mralexgray/Animated-Paths/tags', + watchers: 2, + blobs_url: + 'https://api.github.com/repos/mralexgray/Animated-Paths/git/blobs{/sha}', + clone_url: 'https://github.com/mralexgray/Animated-Paths.git', + forks_url: + 'https://api.github.com/repos/mralexgray/Animated-Paths/forks', + full_name: 'mralexgray/Animated-Paths', + has_pages: false, + hooks_url: + 'https://api.github.com/repos/mralexgray/Animated-Paths/hooks', + pulls_url: + 'https://api.github.com/repos/mralexgray/Animated-Paths/pulls{/number}', + pushed_at: '2010-12-30T20:56:51Z', + teams_url: + 'https://api.github.com/repos/mralexgray/Animated-Paths/teams', + trees_url: + 'https://api.github.com/repos/mralexgray/Animated-Paths/git/trees{/sha}', + created_at: '2012-03-11T02:56:38Z', + events_url: + 'https://api.github.com/repos/mralexgray/Animated-Paths/events', + has_issues: false, + issues_url: + 'https://api.github.com/repos/mralexgray/Animated-Paths/issues{/number}', + labels_url: + 'https://api.github.com/repos/mralexgray/Animated-Paths/labels{/name}', + merges_url: + 'https://api.github.com/repos/mralexgray/Animated-Paths/merges', + mirror_url: null, + updated_at: '2013-01-08T04:12:21Z', + visibility: 'public', + archive_url: + 'https://api.github.com/repos/mralexgray/Animated-Paths/{archive_format}{/ref}', + commits_url: + 'https://api.github.com/repos/mralexgray/Animated-Paths/commits{/sha}', + compare_url: + 'https://api.github.com/repos/mralexgray/Animated-Paths/compare/{base}...{head}', + description: + 'Demo project: Animating the drawing of a CGPath with CAShapeLayer.strokeEnd', + forks_count: 0, + is_template: false, + open_issues: 0, + branches_url: + 'https://api.github.com/repos/mralexgray/Animated-Paths/branches{/branch}', + comments_url: + 'https://api.github.com/repos/mralexgray/Animated-Paths/comments{/number}', + contents_url: + 'https://api.github.com/repos/mralexgray/Animated-Paths/contents/{+path}', + git_refs_url: + 'https://api.github.com/repos/mralexgray/Animated-Paths/git/refs{/sha}', + git_tags_url: + 'https://api.github.com/repos/mralexgray/Animated-Paths/git/tags{/sha}', + has_projects: true, + releases_url: + 'https://api.github.com/repos/mralexgray/Animated-Paths/releases{/id}', + statuses_url: + 'https://api.github.com/repos/mralexgray/Animated-Paths/statuses/{sha}', + allow_forking: true, + assignees_url: + 'https://api.github.com/repos/mralexgray/Animated-Paths/assignees{/user}', + downloads_url: + 'https://api.github.com/repos/mralexgray/Animated-Paths/downloads', + has_downloads: true, + languages_url: + 'https://api.github.com/repos/mralexgray/Animated-Paths/languages', + default_branch: 'master', + milestones_url: + 'https://api.github.com/repos/mralexgray/Animated-Paths/milestones{/number}', + stargazers_url: + 'https://api.github.com/repos/mralexgray/Animated-Paths/stargazers', + watchers_count: 2, + deployments_url: + 'https://api.github.com/repos/mralexgray/Animated-Paths/deployments', + git_commits_url: + 'https://api.github.com/repos/mralexgray/Animated-Paths/git/commits{/sha}', + subscribers_url: + 'https://api.github.com/repos/mralexgray/Animated-Paths/subscribers', + contributors_url: + 'https://api.github.com/repos/mralexgray/Animated-Paths/contributors', + issue_events_url: + 'https://api.github.com/repos/mralexgray/Animated-Paths/issues/events{/number}', + stargazers_count: 2, + subscription_url: + 'https://api.github.com/repos/mralexgray/Animated-Paths/subscription', + collaborators_url: + 'https://api.github.com/repos/mralexgray/Animated-Paths/collaborators{/collaborator}', + issue_comment_url: + 'https://api.github.com/repos/mralexgray/Animated-Paths/issues/comments{/number}', + notifications_url: + 'https://api.github.com/repos/mralexgray/Animated-Paths/notifications{?since,all,participating}', + open_issues_count: 0, + web_commit_signoff_required: false, + }, + { + id: 16662874, + url: 'https://api.github.com/repos/mralexgray/AnsiLove.framework', + fork: true, + name: 'AnsiLove.framework', + size: 3780, + forks: 0, + owner: { + id: 262517, + url: 'https://api.github.com/users/mralexgray', + type: 'User', + login: 'mralexgray', + node_id: 'MDQ6VXNlcjI2MjUxNw==', + html_url: 'https://github.com/mralexgray', + gists_url: + 'https://api.github.com/users/mralexgray/gists{/gist_id}', + repos_url: 'https://api.github.com/users/mralexgray/repos', + avatar_url: 'https://avatars.githubusercontent.com/u/262517?v=4', + events_url: + 'https://api.github.com/users/mralexgray/events{/privacy}', + site_admin: false, + gravatar_id: '', + starred_url: + 'https://api.github.com/users/mralexgray/starred{/owner}{/repo}', + followers_url: 'https://api.github.com/users/mralexgray/followers', + following_url: + 'https://api.github.com/users/mralexgray/following{/other_user}', + organizations_url: 'https://api.github.com/users/mralexgray/orgs', + subscriptions_url: + 'https://api.github.com/users/mralexgray/subscriptions', + received_events_url: + 'https://api.github.com/users/mralexgray/received_events', + }, + topics: [], + git_url: 'git://github.com/mralexgray/AnsiLove.framework.git', + license: { + key: 'other', + url: null, + name: 'Other', + node_id: 'MDc6TGljZW5zZTA=', + spdx_id: 'NOASSERTION', + }, + node_id: 'MDEwOlJlcG9zaXRvcnkxNjY2Mjg3NA==', + private: false, + ssh_url: 'git@github.com:mralexgray/AnsiLove.framework.git', + svn_url: 'https://github.com/mralexgray/AnsiLove.framework', + archived: false, + disabled: false, + has_wiki: false, + homepage: 'http://byteproject.net', + html_url: 'https://github.com/mralexgray/AnsiLove.framework', + keys_url: + 'https://api.github.com/repos/mralexgray/AnsiLove.framework/keys{/key_id}', + language: 'M', + tags_url: + 'https://api.github.com/repos/mralexgray/AnsiLove.framework/tags', + watchers: 0, + blobs_url: + 'https://api.github.com/repos/mralexgray/AnsiLove.framework/git/blobs{/sha}', + clone_url: 'https://github.com/mralexgray/AnsiLove.framework.git', + forks_url: + 'https://api.github.com/repos/mralexgray/AnsiLove.framework/forks', + full_name: 'mralexgray/AnsiLove.framework', + has_pages: false, + hooks_url: + 'https://api.github.com/repos/mralexgray/AnsiLove.framework/hooks', + pulls_url: + 'https://api.github.com/repos/mralexgray/AnsiLove.framework/pulls{/number}', + pushed_at: '2013-10-04T14:08:38Z', + teams_url: + 'https://api.github.com/repos/mralexgray/AnsiLove.framework/teams', + trees_url: + 'https://api.github.com/repos/mralexgray/AnsiLove.framework/git/trees{/sha}', + created_at: '2014-02-09T08:30:27Z', + events_url: + 'https://api.github.com/repos/mralexgray/AnsiLove.framework/events', + has_issues: false, + issues_url: + 'https://api.github.com/repos/mralexgray/AnsiLove.framework/issues{/number}', + labels_url: + 'https://api.github.com/repos/mralexgray/AnsiLove.framework/labels{/name}', + merges_url: + 'https://api.github.com/repos/mralexgray/AnsiLove.framework/merges', + mirror_url: null, + updated_at: '2015-01-13T20:41:46Z', + visibility: 'public', + archive_url: + 'https://api.github.com/repos/mralexgray/AnsiLove.framework/{archive_format}{/ref}', + commits_url: + 'https://api.github.com/repos/mralexgray/AnsiLove.framework/commits{/sha}', + compare_url: + 'https://api.github.com/repos/mralexgray/AnsiLove.framework/compare/{base}...{head}', + description: 'Cocoa Framework for rendering ANSi / ASCII art', + forks_count: 0, + is_template: false, + open_issues: 0, + branches_url: + 'https://api.github.com/repos/mralexgray/AnsiLove.framework/branches{/branch}', + comments_url: + 'https://api.github.com/repos/mralexgray/AnsiLove.framework/comments{/number}', + contents_url: + 'https://api.github.com/repos/mralexgray/AnsiLove.framework/contents/{+path}', + git_refs_url: + 'https://api.github.com/repos/mralexgray/AnsiLove.framework/git/refs{/sha}', + git_tags_url: + 'https://api.github.com/repos/mralexgray/AnsiLove.framework/git/tags{/sha}', + has_projects: true, + releases_url: + 'https://api.github.com/repos/mralexgray/AnsiLove.framework/releases{/id}', + statuses_url: + 'https://api.github.com/repos/mralexgray/AnsiLove.framework/statuses/{sha}', + allow_forking: true, + assignees_url: + 'https://api.github.com/repos/mralexgray/AnsiLove.framework/assignees{/user}', + downloads_url: + 'https://api.github.com/repos/mralexgray/AnsiLove.framework/downloads', + has_downloads: true, + languages_url: + 'https://api.github.com/repos/mralexgray/AnsiLove.framework/languages', + default_branch: 'master', + milestones_url: + 'https://api.github.com/repos/mralexgray/AnsiLove.framework/milestones{/number}', + stargazers_url: + 'https://api.github.com/repos/mralexgray/AnsiLove.framework/stargazers', + watchers_count: 0, + deployments_url: + 'https://api.github.com/repos/mralexgray/AnsiLove.framework/deployments', + git_commits_url: + 'https://api.github.com/repos/mralexgray/AnsiLove.framework/git/commits{/sha}', + subscribers_url: + 'https://api.github.com/repos/mralexgray/AnsiLove.framework/subscribers', + contributors_url: + 'https://api.github.com/repos/mralexgray/AnsiLove.framework/contributors', + issue_events_url: + 'https://api.github.com/repos/mralexgray/AnsiLove.framework/issues/events{/number}', + stargazers_count: 0, + subscription_url: + 'https://api.github.com/repos/mralexgray/AnsiLove.framework/subscription', + collaborators_url: + 'https://api.github.com/repos/mralexgray/AnsiLove.framework/collaborators{/collaborator}', + issue_comment_url: + 'https://api.github.com/repos/mralexgray/AnsiLove.framework/issues/comments{/number}', + notifications_url: + 'https://api.github.com/repos/mralexgray/AnsiLove.framework/notifications{?since,all,participating}', + open_issues_count: 0, + web_commit_signoff_required: false, + }, + { + id: 5189563, + url: 'https://api.github.com/repos/mralexgray/ANTrackBar', + fork: true, + name: 'ANTrackBar', + size: 94, + forks: 0, + owner: { + id: 262517, + url: 'https://api.github.com/users/mralexgray', + type: 'User', + login: 'mralexgray', + node_id: 'MDQ6VXNlcjI2MjUxNw==', + html_url: 'https://github.com/mralexgray', + gists_url: + 'https://api.github.com/users/mralexgray/gists{/gist_id}', + repos_url: 'https://api.github.com/users/mralexgray/repos', + avatar_url: 'https://avatars.githubusercontent.com/u/262517?v=4', + events_url: + 'https://api.github.com/users/mralexgray/events{/privacy}', + site_admin: false, + gravatar_id: '', + starred_url: + 'https://api.github.com/users/mralexgray/starred{/owner}{/repo}', + followers_url: 'https://api.github.com/users/mralexgray/followers', + following_url: + 'https://api.github.com/users/mralexgray/following{/other_user}', + organizations_url: 'https://api.github.com/users/mralexgray/orgs', + subscriptions_url: + 'https://api.github.com/users/mralexgray/subscriptions', + received_events_url: + 'https://api.github.com/users/mralexgray/received_events', + }, + topics: [], + git_url: 'git://github.com/mralexgray/ANTrackBar.git', + license: null, + node_id: 'MDEwOlJlcG9zaXRvcnk1MTg5NTYz', + private: false, + ssh_url: 'git@github.com:mralexgray/ANTrackBar.git', + svn_url: 'https://github.com/mralexgray/ANTrackBar', + archived: false, + disabled: false, + has_wiki: true, + homepage: '', + html_url: 'https://github.com/mralexgray/ANTrackBar', + keys_url: + 'https://api.github.com/repos/mralexgray/ANTrackBar/keys{/key_id}', + language: 'Objective-C', + tags_url: 'https://api.github.com/repos/mralexgray/ANTrackBar/tags', + watchers: 2, + blobs_url: + 'https://api.github.com/repos/mralexgray/ANTrackBar/git/blobs{/sha}', + clone_url: 'https://github.com/mralexgray/ANTrackBar.git', + forks_url: 'https://api.github.com/repos/mralexgray/ANTrackBar/forks', + full_name: 'mralexgray/ANTrackBar', + has_pages: false, + hooks_url: 'https://api.github.com/repos/mralexgray/ANTrackBar/hooks', + pulls_url: + 'https://api.github.com/repos/mralexgray/ANTrackBar/pulls{/number}', + pushed_at: '2012-03-09T01:40:02Z', + teams_url: 'https://api.github.com/repos/mralexgray/ANTrackBar/teams', + trees_url: + 'https://api.github.com/repos/mralexgray/ANTrackBar/git/trees{/sha}', + created_at: '2012-07-26T08:17:22Z', + events_url: + 'https://api.github.com/repos/mralexgray/ANTrackBar/events', + has_issues: false, + issues_url: + 'https://api.github.com/repos/mralexgray/ANTrackBar/issues{/number}', + labels_url: + 'https://api.github.com/repos/mralexgray/ANTrackBar/labels{/name}', + merges_url: + 'https://api.github.com/repos/mralexgray/ANTrackBar/merges', + mirror_url: null, + updated_at: '2013-01-11T10:29:56Z', + visibility: 'public', + archive_url: + 'https://api.github.com/repos/mralexgray/ANTrackBar/{archive_format}{/ref}', + commits_url: + 'https://api.github.com/repos/mralexgray/ANTrackBar/commits{/sha}', + compare_url: + 'https://api.github.com/repos/mralexgray/ANTrackBar/compare/{base}...{head}', + description: + 'An easy-to-use Cocoa seek bar with a pleasing appearance', + forks_count: 0, + is_template: false, + open_issues: 0, + branches_url: + 'https://api.github.com/repos/mralexgray/ANTrackBar/branches{/branch}', + comments_url: + 'https://api.github.com/repos/mralexgray/ANTrackBar/comments{/number}', + contents_url: + 'https://api.github.com/repos/mralexgray/ANTrackBar/contents/{+path}', + git_refs_url: + 'https://api.github.com/repos/mralexgray/ANTrackBar/git/refs{/sha}', + git_tags_url: + 'https://api.github.com/repos/mralexgray/ANTrackBar/git/tags{/sha}', + has_projects: true, + releases_url: + 'https://api.github.com/repos/mralexgray/ANTrackBar/releases{/id}', + statuses_url: + 'https://api.github.com/repos/mralexgray/ANTrackBar/statuses/{sha}', + allow_forking: true, + assignees_url: + 'https://api.github.com/repos/mralexgray/ANTrackBar/assignees{/user}', + downloads_url: + 'https://api.github.com/repos/mralexgray/ANTrackBar/downloads', + has_downloads: true, + languages_url: + 'https://api.github.com/repos/mralexgray/ANTrackBar/languages', + default_branch: 'master', + milestones_url: + 'https://api.github.com/repos/mralexgray/ANTrackBar/milestones{/number}', + stargazers_url: + 'https://api.github.com/repos/mralexgray/ANTrackBar/stargazers', + watchers_count: 2, + deployments_url: + 'https://api.github.com/repos/mralexgray/ANTrackBar/deployments', + git_commits_url: + 'https://api.github.com/repos/mralexgray/ANTrackBar/git/commits{/sha}', + subscribers_url: + 'https://api.github.com/repos/mralexgray/ANTrackBar/subscribers', + contributors_url: + 'https://api.github.com/repos/mralexgray/ANTrackBar/contributors', + issue_events_url: + 'https://api.github.com/repos/mralexgray/ANTrackBar/issues/events{/number}', + stargazers_count: 2, + subscription_url: + 'https://api.github.com/repos/mralexgray/ANTrackBar/subscription', + collaborators_url: + 'https://api.github.com/repos/mralexgray/ANTrackBar/collaborators{/collaborator}', + issue_comment_url: + 'https://api.github.com/repos/mralexgray/ANTrackBar/issues/comments{/number}', + notifications_url: + 'https://api.github.com/repos/mralexgray/ANTrackBar/notifications{?since,all,participating}', + open_issues_count: 0, + web_commit_signoff_required: false, + }, + { + id: 16240152, + url: 'https://api.github.com/repos/mralexgray/AOP-in-Objective-C', + fork: true, + name: 'AOP-in-Objective-C', + size: 340, + forks: 1, + owner: { + id: 262517, + url: 'https://api.github.com/users/mralexgray', + type: 'User', + login: 'mralexgray', + node_id: 'MDQ6VXNlcjI2MjUxNw==', + html_url: 'https://github.com/mralexgray', + gists_url: + 'https://api.github.com/users/mralexgray/gists{/gist_id}', + repos_url: 'https://api.github.com/users/mralexgray/repos', + avatar_url: 'https://avatars.githubusercontent.com/u/262517?v=4', + events_url: + 'https://api.github.com/users/mralexgray/events{/privacy}', + site_admin: false, + gravatar_id: '', + starred_url: + 'https://api.github.com/users/mralexgray/starred{/owner}{/repo}', + followers_url: 'https://api.github.com/users/mralexgray/followers', + following_url: + 'https://api.github.com/users/mralexgray/following{/other_user}', + organizations_url: 'https://api.github.com/users/mralexgray/orgs', + subscriptions_url: + 'https://api.github.com/users/mralexgray/subscriptions', + received_events_url: + 'https://api.github.com/users/mralexgray/received_events', + }, + topics: [], + git_url: 'git://github.com/mralexgray/AOP-in-Objective-C.git', + license: null, + node_id: 'MDEwOlJlcG9zaXRvcnkxNjI0MDE1Mg==', + private: false, + ssh_url: 'git@github.com:mralexgray/AOP-in-Objective-C.git', + svn_url: 'https://github.com/mralexgray/AOP-in-Objective-C', + archived: false, + disabled: false, + has_wiki: true, + homepage: 'http://innoli.hu/en/opensource/', + html_url: 'https://github.com/mralexgray/AOP-in-Objective-C', + keys_url: + 'https://api.github.com/repos/mralexgray/AOP-in-Objective-C/keys{/key_id}', + language: 'Objective-C', + tags_url: + 'https://api.github.com/repos/mralexgray/AOP-in-Objective-C/tags', + watchers: 0, + blobs_url: + 'https://api.github.com/repos/mralexgray/AOP-in-Objective-C/git/blobs{/sha}', + clone_url: 'https://github.com/mralexgray/AOP-in-Objective-C.git', + forks_url: + 'https://api.github.com/repos/mralexgray/AOP-in-Objective-C/forks', + full_name: 'mralexgray/AOP-in-Objective-C', + has_pages: false, + hooks_url: + 'https://api.github.com/repos/mralexgray/AOP-in-Objective-C/hooks', + pulls_url: + 'https://api.github.com/repos/mralexgray/AOP-in-Objective-C/pulls{/number}', + pushed_at: '2014-02-12T16:23:20Z', + teams_url: + 'https://api.github.com/repos/mralexgray/AOP-in-Objective-C/teams', + trees_url: + 'https://api.github.com/repos/mralexgray/AOP-in-Objective-C/git/trees{/sha}', + created_at: '2014-01-25T21:18:04Z', + events_url: + 'https://api.github.com/repos/mralexgray/AOP-in-Objective-C/events', + has_issues: false, + issues_url: + 'https://api.github.com/repos/mralexgray/AOP-in-Objective-C/issues{/number}', + labels_url: + 'https://api.github.com/repos/mralexgray/AOP-in-Objective-C/labels{/name}', + merges_url: + 'https://api.github.com/repos/mralexgray/AOP-in-Objective-C/merges', + mirror_url: null, + updated_at: '2014-06-19T19:38:12Z', + visibility: 'public', + archive_url: + 'https://api.github.com/repos/mralexgray/AOP-in-Objective-C/{archive_format}{/ref}', + commits_url: + 'https://api.github.com/repos/mralexgray/AOP-in-Objective-C/commits{/sha}', + compare_url: + 'https://api.github.com/repos/mralexgray/AOP-in-Objective-C/compare/{base}...{head}', + description: + 'An NSProxy based library for easily enabling AOP like functionality in Objective-C.', + forks_count: 1, + is_template: false, + open_issues: 0, + branches_url: + 'https://api.github.com/repos/mralexgray/AOP-in-Objective-C/branches{/branch}', + comments_url: + 'https://api.github.com/repos/mralexgray/AOP-in-Objective-C/comments{/number}', + contents_url: + 'https://api.github.com/repos/mralexgray/AOP-in-Objective-C/contents/{+path}', + git_refs_url: + 'https://api.github.com/repos/mralexgray/AOP-in-Objective-C/git/refs{/sha}', + git_tags_url: + 'https://api.github.com/repos/mralexgray/AOP-in-Objective-C/git/tags{/sha}', + has_projects: true, + releases_url: + 'https://api.github.com/repos/mralexgray/AOP-in-Objective-C/releases{/id}', + statuses_url: + 'https://api.github.com/repos/mralexgray/AOP-in-Objective-C/statuses/{sha}', + allow_forking: true, + assignees_url: + 'https://api.github.com/repos/mralexgray/AOP-in-Objective-C/assignees{/user}', + downloads_url: + 'https://api.github.com/repos/mralexgray/AOP-in-Objective-C/downloads', + has_downloads: true, + languages_url: + 'https://api.github.com/repos/mralexgray/AOP-in-Objective-C/languages', + default_branch: 'travis-coveralls', + milestones_url: + 'https://api.github.com/repos/mralexgray/AOP-in-Objective-C/milestones{/number}', + stargazers_url: + 'https://api.github.com/repos/mralexgray/AOP-in-Objective-C/stargazers', + watchers_count: 0, + deployments_url: + 'https://api.github.com/repos/mralexgray/AOP-in-Objective-C/deployments', + git_commits_url: + 'https://api.github.com/repos/mralexgray/AOP-in-Objective-C/git/commits{/sha}', + subscribers_url: + 'https://api.github.com/repos/mralexgray/AOP-in-Objective-C/subscribers', + contributors_url: + 'https://api.github.com/repos/mralexgray/AOP-in-Objective-C/contributors', + issue_events_url: + 'https://api.github.com/repos/mralexgray/AOP-in-Objective-C/issues/events{/number}', + stargazers_count: 0, + subscription_url: + 'https://api.github.com/repos/mralexgray/AOP-in-Objective-C/subscription', + collaborators_url: + 'https://api.github.com/repos/mralexgray/AOP-in-Objective-C/collaborators{/collaborator}', + issue_comment_url: + 'https://api.github.com/repos/mralexgray/AOP-in-Objective-C/issues/comments{/number}', + notifications_url: + 'https://api.github.com/repos/mralexgray/AOP-in-Objective-C/notifications{?since,all,participating}', + open_issues_count: 0, + web_commit_signoff_required: false, + }, + { + id: 13141936, + url: 'https://api.github.com/repos/mralexgray/Apaxy', + fork: true, + name: 'Apaxy', + size: 113, + forks: 0, + owner: { + id: 262517, + url: 'https://api.github.com/users/mralexgray', + type: 'User', + login: 'mralexgray', + node_id: 'MDQ6VXNlcjI2MjUxNw==', + html_url: 'https://github.com/mralexgray', + gists_url: + 'https://api.github.com/users/mralexgray/gists{/gist_id}', + repos_url: 'https://api.github.com/users/mralexgray/repos', + avatar_url: 'https://avatars.githubusercontent.com/u/262517?v=4', + events_url: + 'https://api.github.com/users/mralexgray/events{/privacy}', + site_admin: false, + gravatar_id: '', + starred_url: + 'https://api.github.com/users/mralexgray/starred{/owner}{/repo}', + followers_url: 'https://api.github.com/users/mralexgray/followers', + following_url: + 'https://api.github.com/users/mralexgray/following{/other_user}', + organizations_url: 'https://api.github.com/users/mralexgray/orgs', + subscriptions_url: + 'https://api.github.com/users/mralexgray/subscriptions', + received_events_url: + 'https://api.github.com/users/mralexgray/received_events', + }, + topics: [], + git_url: 'git://github.com/mralexgray/Apaxy.git', + license: { + key: 'unlicense', + url: 'https://api.github.com/licenses/unlicense', + name: 'The Unlicense', + node_id: 'MDc6TGljZW5zZTE1', + spdx_id: 'Unlicense', + }, + node_id: 'MDEwOlJlcG9zaXRvcnkxMzE0MTkzNg==', + private: false, + ssh_url: 'git@github.com:mralexgray/Apaxy.git', + svn_url: 'https://github.com/mralexgray/Apaxy', + archived: false, + disabled: false, + has_wiki: true, + homepage: null, + html_url: 'https://github.com/mralexgray/Apaxy', + keys_url: + 'https://api.github.com/repos/mralexgray/Apaxy/keys{/key_id}', + language: 'CSS', + tags_url: 'https://api.github.com/repos/mralexgray/Apaxy/tags', + watchers: 0, + blobs_url: + 'https://api.github.com/repos/mralexgray/Apaxy/git/blobs{/sha}', + clone_url: 'https://github.com/mralexgray/Apaxy.git', + forks_url: 'https://api.github.com/repos/mralexgray/Apaxy/forks', + full_name: 'mralexgray/Apaxy', + has_pages: false, + hooks_url: 'https://api.github.com/repos/mralexgray/Apaxy/hooks', + pulls_url: + 'https://api.github.com/repos/mralexgray/Apaxy/pulls{/number}', + pushed_at: '2013-08-02T16:01:32Z', + teams_url: 'https://api.github.com/repos/mralexgray/Apaxy/teams', + trees_url: + 'https://api.github.com/repos/mralexgray/Apaxy/git/trees{/sha}', + created_at: '2013-09-27T05:05:35Z', + events_url: 'https://api.github.com/repos/mralexgray/Apaxy/events', + has_issues: false, + issues_url: + 'https://api.github.com/repos/mralexgray/Apaxy/issues{/number}', + labels_url: + 'https://api.github.com/repos/mralexgray/Apaxy/labels{/name}', + merges_url: 'https://api.github.com/repos/mralexgray/Apaxy/merges', + mirror_url: null, + updated_at: '2018-02-16T21:40:24Z', + visibility: 'public', + archive_url: + 'https://api.github.com/repos/mralexgray/Apaxy/{archive_format}{/ref}', + commits_url: + 'https://api.github.com/repos/mralexgray/Apaxy/commits{/sha}', + compare_url: + 'https://api.github.com/repos/mralexgray/Apaxy/compare/{base}...{head}', + description: + 'A simple, customisable theme for your Apache directory listing.', + forks_count: 0, + is_template: false, + open_issues: 0, + branches_url: + 'https://api.github.com/repos/mralexgray/Apaxy/branches{/branch}', + comments_url: + 'https://api.github.com/repos/mralexgray/Apaxy/comments{/number}', + contents_url: + 'https://api.github.com/repos/mralexgray/Apaxy/contents/{+path}', + git_refs_url: + 'https://api.github.com/repos/mralexgray/Apaxy/git/refs{/sha}', + git_tags_url: + 'https://api.github.com/repos/mralexgray/Apaxy/git/tags{/sha}', + has_projects: true, + releases_url: + 'https://api.github.com/repos/mralexgray/Apaxy/releases{/id}', + statuses_url: + 'https://api.github.com/repos/mralexgray/Apaxy/statuses/{sha}', + allow_forking: true, + assignees_url: + 'https://api.github.com/repos/mralexgray/Apaxy/assignees{/user}', + downloads_url: + 'https://api.github.com/repos/mralexgray/Apaxy/downloads', + has_downloads: true, + languages_url: + 'https://api.github.com/repos/mralexgray/Apaxy/languages', + default_branch: 'master', + milestones_url: + 'https://api.github.com/repos/mralexgray/Apaxy/milestones{/number}', + stargazers_url: + 'https://api.github.com/repos/mralexgray/Apaxy/stargazers', + watchers_count: 0, + deployments_url: + 'https://api.github.com/repos/mralexgray/Apaxy/deployments', + git_commits_url: + 'https://api.github.com/repos/mralexgray/Apaxy/git/commits{/sha}', + subscribers_url: + 'https://api.github.com/repos/mralexgray/Apaxy/subscribers', + contributors_url: + 'https://api.github.com/repos/mralexgray/Apaxy/contributors', + issue_events_url: + 'https://api.github.com/repos/mralexgray/Apaxy/issues/events{/number}', + stargazers_count: 0, + subscription_url: + 'https://api.github.com/repos/mralexgray/Apaxy/subscription', + collaborators_url: + 'https://api.github.com/repos/mralexgray/Apaxy/collaborators{/collaborator}', + issue_comment_url: + 'https://api.github.com/repos/mralexgray/Apaxy/issues/comments{/number}', + notifications_url: + 'https://api.github.com/repos/mralexgray/Apaxy/notifications{?since,all,participating}', + open_issues_count: 0, + web_commit_signoff_required: false, + }, + { + id: 20027360, + url: 'https://api.github.com/repos/mralexgray/app', + fork: true, + name: 'app', + size: 1890, + forks: 0, + owner: { + id: 262517, + url: 'https://api.github.com/users/mralexgray', + type: 'User', + login: 'mralexgray', + node_id: 'MDQ6VXNlcjI2MjUxNw==', + html_url: 'https://github.com/mralexgray', + gists_url: + 'https://api.github.com/users/mralexgray/gists{/gist_id}', + repos_url: 'https://api.github.com/users/mralexgray/repos', + avatar_url: 'https://avatars.githubusercontent.com/u/262517?v=4', + events_url: + 'https://api.github.com/users/mralexgray/events{/privacy}', + site_admin: false, + gravatar_id: '', + starred_url: + 'https://api.github.com/users/mralexgray/starred{/owner}{/repo}', + followers_url: 'https://api.github.com/users/mralexgray/followers', + following_url: + 'https://api.github.com/users/mralexgray/following{/other_user}', + organizations_url: 'https://api.github.com/users/mralexgray/orgs', + subscriptions_url: + 'https://api.github.com/users/mralexgray/subscriptions', + received_events_url: + 'https://api.github.com/users/mralexgray/received_events', + }, + topics: [], + git_url: 'git://github.com/mralexgray/app.git', + license: { + key: 'other', + url: null, + name: 'Other', + node_id: 'MDc6TGljZW5zZTA=', + spdx_id: 'NOASSERTION', + }, + node_id: 'MDEwOlJlcG9zaXRvcnkyMDAyNzM2MA==', + private: false, + ssh_url: 'git@github.com:mralexgray/app.git', + svn_url: 'https://github.com/mralexgray/app', + archived: false, + disabled: false, + has_wiki: true, + homepage: null, + html_url: 'https://github.com/mralexgray/app', + keys_url: 'https://api.github.com/repos/mralexgray/app/keys{/key_id}', + language: 'JavaScript', + tags_url: 'https://api.github.com/repos/mralexgray/app/tags', + watchers: 0, + blobs_url: + 'https://api.github.com/repos/mralexgray/app/git/blobs{/sha}', + clone_url: 'https://github.com/mralexgray/app.git', + forks_url: 'https://api.github.com/repos/mralexgray/app/forks', + full_name: 'mralexgray/app', + has_pages: false, + hooks_url: 'https://api.github.com/repos/mralexgray/app/hooks', + pulls_url: + 'https://api.github.com/repos/mralexgray/app/pulls{/number}', + pushed_at: '2014-05-20T19:51:38Z', + teams_url: 'https://api.github.com/repos/mralexgray/app/teams', + trees_url: + 'https://api.github.com/repos/mralexgray/app/git/trees{/sha}', + created_at: '2014-05-21T15:54:20Z', + events_url: 'https://api.github.com/repos/mralexgray/app/events', + has_issues: false, + issues_url: + 'https://api.github.com/repos/mralexgray/app/issues{/number}', + labels_url: + 'https://api.github.com/repos/mralexgray/app/labels{/name}', + merges_url: 'https://api.github.com/repos/mralexgray/app/merges', + mirror_url: null, + updated_at: '2014-05-21T15:54:22Z', + visibility: 'public', + archive_url: + 'https://api.github.com/repos/mralexgray/app/{archive_format}{/ref}', + commits_url: + 'https://api.github.com/repos/mralexgray/app/commits{/sha}', + compare_url: + 'https://api.github.com/repos/mralexgray/app/compare/{base}...{head}', + description: 'Instant mobile web app creation', + forks_count: 0, + is_template: false, + open_issues: 0, + branches_url: + 'https://api.github.com/repos/mralexgray/app/branches{/branch}', + comments_url: + 'https://api.github.com/repos/mralexgray/app/comments{/number}', + contents_url: + 'https://api.github.com/repos/mralexgray/app/contents/{+path}', + git_refs_url: + 'https://api.github.com/repos/mralexgray/app/git/refs{/sha}', + git_tags_url: + 'https://api.github.com/repos/mralexgray/app/git/tags{/sha}', + has_projects: true, + releases_url: + 'https://api.github.com/repos/mralexgray/app/releases{/id}', + statuses_url: + 'https://api.github.com/repos/mralexgray/app/statuses/{sha}', + allow_forking: true, + assignees_url: + 'https://api.github.com/repos/mralexgray/app/assignees{/user}', + downloads_url: + 'https://api.github.com/repos/mralexgray/app/downloads', + has_downloads: true, + languages_url: + 'https://api.github.com/repos/mralexgray/app/languages', + default_branch: 'master', + milestones_url: + 'https://api.github.com/repos/mralexgray/app/milestones{/number}', + stargazers_url: + 'https://api.github.com/repos/mralexgray/app/stargazers', + watchers_count: 0, + deployments_url: + 'https://api.github.com/repos/mralexgray/app/deployments', + git_commits_url: + 'https://api.github.com/repos/mralexgray/app/git/commits{/sha}', + subscribers_url: + 'https://api.github.com/repos/mralexgray/app/subscribers', + contributors_url: + 'https://api.github.com/repos/mralexgray/app/contributors', + issue_events_url: + 'https://api.github.com/repos/mralexgray/app/issues/events{/number}', + stargazers_count: 0, + subscription_url: + 'https://api.github.com/repos/mralexgray/app/subscription', + collaborators_url: + 'https://api.github.com/repos/mralexgray/app/collaborators{/collaborator}', + issue_comment_url: + 'https://api.github.com/repos/mralexgray/app/issues/comments{/number}', + notifications_url: + 'https://api.github.com/repos/mralexgray/app/notifications{?since,all,participating}', + open_issues_count: 0, + web_commit_signoff_required: false, + }, + ], + data2: [ + { + id: 6104546, + url: 'https://api.github.com/repos/mralexgray/-REPONAME', + fork: false, + name: '-REPONAME', + size: 48, + forks: 0, + owner: { + id: 262517, + url: 'https://api.github.com/users/mralexgray', + type: 'User', + login: 'mralexgray', + node_id: 'MDQ6VXNlcjI2MjUxNw==', + html_url: 'https://github.com/mralexgray', + gists_url: + 'https://api.github.com/users/mralexgray/gists{/gist_id}', + repos_url: 'https://api.github.com/users/mralexgray/repos', + avatar_url: 'https://avatars.githubusercontent.com/u/262517?v=4', + events_url: + 'https://api.github.com/users/mralexgray/events{/privacy}', + site_admin: false, + gravatar_id: '', + starred_url: + 'https://api.github.com/users/mralexgray/starred{/owner}{/repo}', + followers_url: 'https://api.github.com/users/mralexgray/followers', + following_url: + 'https://api.github.com/users/mralexgray/following{/other_user}', + organizations_url: 'https://api.github.com/users/mralexgray/orgs', + subscriptions_url: + 'https://api.github.com/users/mralexgray/subscriptions', + received_events_url: + 'https://api.github.com/users/mralexgray/received_events', + }, + topics: [], + git_url: 'git://github.com/mralexgray/-REPONAME.git', + license: null, + node_id: 'MDEwOlJlcG9zaXRvcnk2MTA0NTQ2', + private: false, + ssh_url: 'git@github.com:mralexgray/-REPONAME.git', + svn_url: 'https://github.com/mralexgray/-REPONAME', + archived: false, + disabled: false, + has_wiki: true, + homepage: null, + html_url: 'https://github.com/mralexgray/-REPONAME', + keys_url: + 'https://api.github.com/repos/mralexgray/-REPONAME/keys{/key_id}', + language: null, + tags_url: 'https://api.github.com/repos/mralexgray/-REPONAME/tags', + watchers: 0, + blobs_url: + 'https://api.github.com/repos/mralexgray/-REPONAME/git/blobs{/sha}', + clone_url: 'https://github.com/mralexgray/-REPONAME.git', + forks_url: 'https://api.github.com/repos/mralexgray/-REPONAME/forks', + full_name: 'mralexgray/-REPONAME', + has_pages: false, + hooks_url: 'https://api.github.com/repos/mralexgray/-REPONAME/hooks', + pulls_url: + 'https://api.github.com/repos/mralexgray/-REPONAME/pulls{/number}', + pushed_at: '2012-10-06T16:37:39Z', + teams_url: 'https://api.github.com/repos/mralexgray/-REPONAME/teams', + trees_url: + 'https://api.github.com/repos/mralexgray/-REPONAME/git/trees{/sha}', + created_at: '2012-10-06T16:37:39Z', + events_url: + 'https://api.github.com/repos/mralexgray/-REPONAME/events', + has_issues: true, + issues_url: + 'https://api.github.com/repos/mralexgray/-REPONAME/issues{/number}', + labels_url: + 'https://api.github.com/repos/mralexgray/-REPONAME/labels{/name}', + merges_url: + 'https://api.github.com/repos/mralexgray/-REPONAME/merges', + mirror_url: null, + updated_at: '2013-01-12T13:39:30Z', + visibility: 'public', + archive_url: + 'https://api.github.com/repos/mralexgray/-REPONAME/{archive_format}{/ref}', + commits_url: + 'https://api.github.com/repos/mralexgray/-REPONAME/commits{/sha}', + compare_url: + 'https://api.github.com/repos/mralexgray/-REPONAME/compare/{base}...{head}', + description: null, + forks_count: 0, + is_template: false, + open_issues: 0, + branches_url: + 'https://api.github.com/repos/mralexgray/-REPONAME/branches{/branch}', + comments_url: + 'https://api.github.com/repos/mralexgray/-REPONAME/comments{/number}', + contents_url: + 'https://api.github.com/repos/mralexgray/-REPONAME/contents/{+path}', + git_refs_url: + 'https://api.github.com/repos/mralexgray/-REPONAME/git/refs{/sha}', + git_tags_url: + 'https://api.github.com/repos/mralexgray/-REPONAME/git/tags{/sha}', + has_projects: true, + releases_url: + 'https://api.github.com/repos/mralexgray/-REPONAME/releases{/id}', + statuses_url: + 'https://api.github.com/repos/mralexgray/-REPONAME/statuses/{sha}', + allow_forking: true, + assignees_url: + 'https://api.github.com/repos/mralexgray/-REPONAME/assignees{/user}', + downloads_url: + 'https://api.github.com/repos/mralexgray/-REPONAME/downloads', + has_downloads: true, + languages_url: + 'https://api.github.com/repos/mralexgray/-REPONAME/languages', + default_branch: 'master', + milestones_url: + 'https://api.github.com/repos/mralexgray/-REPONAME/milestones{/number}', + stargazers_url: + 'https://api.github.com/repos/mralexgray/-REPONAME/stargazers', + watchers_count: 0, + deployments_url: + 'https://api.github.com/repos/mralexgray/-REPONAME/deployments', + git_commits_url: + 'https://api.github.com/repos/mralexgray/-REPONAME/git/commits{/sha}', + subscribers_url: + 'https://api.github.com/repos/mralexgray/-REPONAME/subscribers', + contributors_url: + 'https://api.github.com/repos/mralexgray/-REPONAME/contributors', + issue_events_url: + 'https://api.github.com/repos/mralexgray/-REPONAME/issues/events{/number}', + stargazers_count: 0, + subscription_url: + 'https://api.github.com/repos/mralexgray/-REPONAME/subscription', + collaborators_url: + 'https://api.github.com/repos/mralexgray/-REPONAME/collaborators{/collaborator}', + issue_comment_url: + 'https://api.github.com/repos/mralexgray/-REPONAME/issues/comments{/number}', + notifications_url: + 'https://api.github.com/repos/mralexgray/-REPONAME/notifications{?since,all,participating}', + open_issues_count: 0, + web_commit_signoff_required: false, + }, + { + id: 104510411, + url: 'https://api.github.com/repos/mralexgray/...', + fork: true, + name: '...', + size: 113, + forks: 0, + owner: { + id: 262517, + url: 'https://api.github.com/users/mralexgray', + type: 'User', + login: 'mralexgray', + node_id: 'MDQ6VXNlcjI2MjUxNw==', + html_url: 'https://github.com/mralexgray', + gists_url: + 'https://api.github.com/users/mralexgray/gists{/gist_id}', + repos_url: 'https://api.github.com/users/mralexgray/repos', + avatar_url: 'https://avatars.githubusercontent.com/u/262517?v=4', + events_url: + 'https://api.github.com/users/mralexgray/events{/privacy}', + site_admin: false, + gravatar_id: '', + starred_url: + 'https://api.github.com/users/mralexgray/starred{/owner}{/repo}', + followers_url: 'https://api.github.com/users/mralexgray/followers', + following_url: + 'https://api.github.com/users/mralexgray/following{/other_user}', + organizations_url: 'https://api.github.com/users/mralexgray/orgs', + subscriptions_url: + 'https://api.github.com/users/mralexgray/subscriptions', + received_events_url: + 'https://api.github.com/users/mralexgray/received_events', + }, + topics: [], + git_url: 'git://github.com/mralexgray/....git', + license: { + key: 'mit', + url: 'https://api.github.com/licenses/mit', + name: 'MIT License', + node_id: 'MDc6TGljZW5zZTEz', + spdx_id: 'MIT', + }, + node_id: 'MDEwOlJlcG9zaXRvcnkxMDQ1MTA0MTE=', + private: false, + ssh_url: 'git@github.com:mralexgray/....git', + svn_url: 'https://github.com/mralexgray/...', + archived: false, + disabled: false, + has_wiki: false, + homepage: 'https://driesvints.com/blog/getting-started-with-dotfiles', + html_url: 'https://github.com/mralexgray/...', + keys_url: 'https://api.github.com/repos/mralexgray/.../keys{/key_id}', + language: 'Shell', + tags_url: 'https://api.github.com/repos/mralexgray/.../tags', + watchers: 0, + blobs_url: + 'https://api.github.com/repos/mralexgray/.../git/blobs{/sha}', + clone_url: 'https://github.com/mralexgray/....git', + forks_url: 'https://api.github.com/repos/mralexgray/.../forks', + full_name: 'mralexgray/...', + has_pages: false, + hooks_url: 'https://api.github.com/repos/mralexgray/.../hooks', + pulls_url: + 'https://api.github.com/repos/mralexgray/.../pulls{/number}', + pushed_at: '2017-09-15T08:27:32Z', + teams_url: 'https://api.github.com/repos/mralexgray/.../teams', + trees_url: + 'https://api.github.com/repos/mralexgray/.../git/trees{/sha}', + created_at: '2017-09-22T19:19:42Z', + events_url: 'https://api.github.com/repos/mralexgray/.../events', + has_issues: false, + issues_url: + 'https://api.github.com/repos/mralexgray/.../issues{/number}', + labels_url: + 'https://api.github.com/repos/mralexgray/.../labels{/name}', + merges_url: 'https://api.github.com/repos/mralexgray/.../merges', + mirror_url: null, + updated_at: '2017-09-22T19:20:22Z', + visibility: 'public', + archive_url: + 'https://api.github.com/repos/mralexgray/.../{archive_format}{/ref}', + commits_url: + 'https://api.github.com/repos/mralexgray/.../commits{/sha}', + compare_url: + 'https://api.github.com/repos/mralexgray/.../compare/{base}...{head}', + description: ':computer: Public repo for my personal dotfiles.', + forks_count: 0, + is_template: false, + open_issues: 0, + branches_url: + 'https://api.github.com/repos/mralexgray/.../branches{/branch}', + comments_url: + 'https://api.github.com/repos/mralexgray/.../comments{/number}', + contents_url: + 'https://api.github.com/repos/mralexgray/.../contents/{+path}', + git_refs_url: + 'https://api.github.com/repos/mralexgray/.../git/refs{/sha}', + git_tags_url: + 'https://api.github.com/repos/mralexgray/.../git/tags{/sha}', + has_projects: true, + releases_url: + 'https://api.github.com/repos/mralexgray/.../releases{/id}', + statuses_url: + 'https://api.github.com/repos/mralexgray/.../statuses/{sha}', + allow_forking: true, + assignees_url: + 'https://api.github.com/repos/mralexgray/.../assignees{/user}', + downloads_url: + 'https://api.github.com/repos/mralexgray/.../downloads', + has_downloads: true, + languages_url: + 'https://api.github.com/repos/mralexgray/.../languages', + default_branch: 'master', + milestones_url: + 'https://api.github.com/repos/mralexgray/.../milestones{/number}', + stargazers_url: + 'https://api.github.com/repos/mralexgray/.../stargazers', + watchers_count: 0, + deployments_url: + 'https://api.github.com/repos/mralexgray/.../deployments', + git_commits_url: + 'https://api.github.com/repos/mralexgray/.../git/commits{/sha}', + subscribers_url: + 'https://api.github.com/repos/mralexgray/.../subscribers', + contributors_url: + 'https://api.github.com/repos/mralexgray/.../contributors', + issue_events_url: + 'https://api.github.com/repos/mralexgray/.../issues/events{/number}', + stargazers_count: 0, + subscription_url: + 'https://api.github.com/repos/mralexgray/.../subscription', + collaborators_url: + 'https://api.github.com/repos/mralexgray/.../collaborators{/collaborator}', + issue_comment_url: + 'https://api.github.com/repos/mralexgray/.../issues/comments{/number}', + notifications_url: + 'https://api.github.com/repos/mralexgray/.../notifications{?since,all,participating}', + open_issues_count: 0, + web_commit_signoff_required: false, + }, + { + id: 58656723, + url: 'https://api.github.com/repos/mralexgray/2200087-Serial-Protocol', + fork: true, + name: '2200087-Serial-Protocol', + size: 41, + forks: 1, + owner: { + id: 262517, + url: 'https://api.github.com/users/mralexgray', + type: 'User', + login: 'mralexgray', + node_id: 'MDQ6VXNlcjI2MjUxNw==', + html_url: 'https://github.com/mralexgray', + gists_url: + 'https://api.github.com/users/mralexgray/gists{/gist_id}', + repos_url: 'https://api.github.com/users/mralexgray/repos', + avatar_url: 'https://avatars.githubusercontent.com/u/262517?v=4', + events_url: + 'https://api.github.com/users/mralexgray/events{/privacy}', + site_admin: false, + gravatar_id: '', + starred_url: + 'https://api.github.com/users/mralexgray/starred{/owner}{/repo}', + followers_url: 'https://api.github.com/users/mralexgray/followers', + following_url: + 'https://api.github.com/users/mralexgray/following{/other_user}', + organizations_url: 'https://api.github.com/users/mralexgray/orgs', + subscriptions_url: + 'https://api.github.com/users/mralexgray/subscriptions', + received_events_url: + 'https://api.github.com/users/mralexgray/received_events', + }, + topics: [], + git_url: 'git://github.com/mralexgray/2200087-Serial-Protocol.git', + license: { + key: 'gpl-2.0', + url: 'https://api.github.com/licenses/gpl-2.0', + name: 'GNU General Public License v2.0', + node_id: 'MDc6TGljZW5zZTg=', + spdx_id: 'GPL-2.0', + }, + node_id: 'MDEwOlJlcG9zaXRvcnk1ODY1NjcyMw==', + private: false, + ssh_url: 'git@github.com:mralexgray/2200087-Serial-Protocol.git', + svn_url: 'https://github.com/mralexgray/2200087-Serial-Protocol', + archived: false, + disabled: false, + has_wiki: true, + homepage: 'http://daviddworken.com', + html_url: 'https://github.com/mralexgray/2200087-Serial-Protocol', + keys_url: + 'https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/keys{/key_id}', + language: 'Python', + tags_url: + 'https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/tags', + watchers: 0, + blobs_url: + 'https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/git/blobs{/sha}', + clone_url: + 'https://github.com/mralexgray/2200087-Serial-Protocol.git', + forks_url: + 'https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/forks', + full_name: 'mralexgray/2200087-Serial-Protocol', + has_pages: false, + hooks_url: + 'https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/hooks', + pulls_url: + 'https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/pulls{/number}', + pushed_at: '2016-05-12T16:07:24Z', + teams_url: + 'https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/teams', + trees_url: + 'https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/git/trees{/sha}', + created_at: '2016-05-12T16:05:28Z', + events_url: + 'https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/events', + has_issues: false, + issues_url: + 'https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/issues{/number}', + labels_url: + 'https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/labels{/name}', + merges_url: + 'https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/merges', + mirror_url: null, + updated_at: '2016-05-12T16:05:30Z', + visibility: 'public', + archive_url: + 'https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/{archive_format}{/ref}', + commits_url: + 'https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/commits{/sha}', + compare_url: + 'https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/compare/{base}...{head}', + description: + "A reverse engineered protocol description and accompanying code for Radioshack's 2200087 multimeter", + forks_count: 1, + is_template: false, + open_issues: 0, + branches_url: + 'https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/branches{/branch}', + comments_url: + 'https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/comments{/number}', + contents_url: + 'https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/contents/{+path}', + git_refs_url: + 'https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/git/refs{/sha}', + git_tags_url: + 'https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/git/tags{/sha}', + has_projects: true, + releases_url: + 'https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/releases{/id}', + statuses_url: + 'https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/statuses/{sha}', + allow_forking: true, + assignees_url: + 'https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/assignees{/user}', + downloads_url: + 'https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/downloads', + has_downloads: true, + languages_url: + 'https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/languages', + default_branch: 'master', + milestones_url: + 'https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/milestones{/number}', + stargazers_url: + 'https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/stargazers', + watchers_count: 0, + deployments_url: + 'https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/deployments', + git_commits_url: + 'https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/git/commits{/sha}', + subscribers_url: + 'https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/subscribers', + contributors_url: + 'https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/contributors', + issue_events_url: + 'https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/issues/events{/number}', + stargazers_count: 0, + subscription_url: + 'https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/subscription', + collaborators_url: + 'https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/collaborators{/collaborator}', + issue_comment_url: + 'https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/issues/comments{/number}', + notifications_url: + 'https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/notifications{?since,all,participating}', + open_issues_count: 0, + web_commit_signoff_required: false, + }, + { + id: 13121042, + url: 'https://api.github.com/repos/mralexgray/ace', + fork: true, + name: 'ace', + size: 21080, + forks: 1, + owner: { + id: 262517, + url: 'https://api.github.com/users/mralexgray', + type: 'User', + login: 'mralexgray', + node_id: 'MDQ6VXNlcjI2MjUxNw==', + html_url: 'https://github.com/mralexgray', + gists_url: + 'https://api.github.com/users/mralexgray/gists{/gist_id}', + repos_url: 'https://api.github.com/users/mralexgray/repos', + avatar_url: 'https://avatars.githubusercontent.com/u/262517?v=4', + events_url: + 'https://api.github.com/users/mralexgray/events{/privacy}', + site_admin: false, + gravatar_id: '', + starred_url: + 'https://api.github.com/users/mralexgray/starred{/owner}{/repo}', + followers_url: 'https://api.github.com/users/mralexgray/followers', + following_url: + 'https://api.github.com/users/mralexgray/following{/other_user}', + organizations_url: 'https://api.github.com/users/mralexgray/orgs', + subscriptions_url: + 'https://api.github.com/users/mralexgray/subscriptions', + received_events_url: + 'https://api.github.com/users/mralexgray/received_events', + }, + topics: [], + git_url: 'git://github.com/mralexgray/ace.git', + license: { + key: 'other', + url: null, + name: 'Other', + node_id: 'MDc6TGljZW5zZTA=', + spdx_id: 'NOASSERTION', + }, + node_id: 'MDEwOlJlcG9zaXRvcnkxMzEyMTA0Mg==', + private: false, + ssh_url: 'git@github.com:mralexgray/ace.git', + svn_url: 'https://github.com/mralexgray/ace', + archived: false, + disabled: false, + has_wiki: true, + homepage: 'http://ace.c9.io', + html_url: 'https://github.com/mralexgray/ace', + keys_url: 'https://api.github.com/repos/mralexgray/ace/keys{/key_id}', + language: 'JavaScript', + tags_url: 'https://api.github.com/repos/mralexgray/ace/tags', + watchers: 0, + blobs_url: + 'https://api.github.com/repos/mralexgray/ace/git/blobs{/sha}', + clone_url: 'https://github.com/mralexgray/ace.git', + forks_url: 'https://api.github.com/repos/mralexgray/ace/forks', + full_name: 'mralexgray/ace', + has_pages: false, + hooks_url: 'https://api.github.com/repos/mralexgray/ace/hooks', + pulls_url: + 'https://api.github.com/repos/mralexgray/ace/pulls{/number}', + pushed_at: '2013-10-26T12:34:48Z', + teams_url: 'https://api.github.com/repos/mralexgray/ace/teams', + trees_url: + 'https://api.github.com/repos/mralexgray/ace/git/trees{/sha}', + created_at: '2013-09-26T11:58:10Z', + events_url: 'https://api.github.com/repos/mralexgray/ace/events', + has_issues: false, + issues_url: + 'https://api.github.com/repos/mralexgray/ace/issues{/number}', + labels_url: + 'https://api.github.com/repos/mralexgray/ace/labels{/name}', + merges_url: 'https://api.github.com/repos/mralexgray/ace/merges', + mirror_url: null, + updated_at: '2013-10-26T12:34:49Z', + visibility: 'public', + archive_url: + 'https://api.github.com/repos/mralexgray/ace/{archive_format}{/ref}', + commits_url: + 'https://api.github.com/repos/mralexgray/ace/commits{/sha}', + compare_url: + 'https://api.github.com/repos/mralexgray/ace/compare/{base}...{head}', + description: 'Ace (Ajax.org Cloud9 Editor)', + forks_count: 1, + is_template: false, + open_issues: 0, + branches_url: + 'https://api.github.com/repos/mralexgray/ace/branches{/branch}', + comments_url: + 'https://api.github.com/repos/mralexgray/ace/comments{/number}', + contents_url: + 'https://api.github.com/repos/mralexgray/ace/contents/{+path}', + git_refs_url: + 'https://api.github.com/repos/mralexgray/ace/git/refs{/sha}', + git_tags_url: + 'https://api.github.com/repos/mralexgray/ace/git/tags{/sha}', + has_projects: true, + releases_url: + 'https://api.github.com/repos/mralexgray/ace/releases{/id}', + statuses_url: + 'https://api.github.com/repos/mralexgray/ace/statuses/{sha}', + allow_forking: true, + assignees_url: + 'https://api.github.com/repos/mralexgray/ace/assignees{/user}', + downloads_url: + 'https://api.github.com/repos/mralexgray/ace/downloads', + has_downloads: true, + languages_url: + 'https://api.github.com/repos/mralexgray/ace/languages', + default_branch: 'master', + milestones_url: + 'https://api.github.com/repos/mralexgray/ace/milestones{/number}', + stargazers_url: + 'https://api.github.com/repos/mralexgray/ace/stargazers', + watchers_count: 0, + deployments_url: + 'https://api.github.com/repos/mralexgray/ace/deployments', + git_commits_url: + 'https://api.github.com/repos/mralexgray/ace/git/commits{/sha}', + subscribers_url: + 'https://api.github.com/repos/mralexgray/ace/subscribers', + contributors_url: + 'https://api.github.com/repos/mralexgray/ace/contributors', + issue_events_url: + 'https://api.github.com/repos/mralexgray/ace/issues/events{/number}', + stargazers_count: 0, + subscription_url: + 'https://api.github.com/repos/mralexgray/ace/subscription', + collaborators_url: + 'https://api.github.com/repos/mralexgray/ace/collaborators{/collaborator}', + issue_comment_url: + 'https://api.github.com/repos/mralexgray/ace/issues/comments{/number}', + notifications_url: + 'https://api.github.com/repos/mralexgray/ace/notifications{?since,all,participating}', + open_issues_count: 0, + web_commit_signoff_required: false, + }, + { + id: 10791045, + url: 'https://api.github.com/repos/mralexgray/ACEView', + fork: true, + name: 'ACEView', + size: 1733, + forks: 1, + owner: { + id: 262517, + url: 'https://api.github.com/users/mralexgray', + type: 'User', + login: 'mralexgray', + node_id: 'MDQ6VXNlcjI2MjUxNw==', + html_url: 'https://github.com/mralexgray', + gists_url: + 'https://api.github.com/users/mralexgray/gists{/gist_id}', + repos_url: 'https://api.github.com/users/mralexgray/repos', + avatar_url: 'https://avatars.githubusercontent.com/u/262517?v=4', + events_url: + 'https://api.github.com/users/mralexgray/events{/privacy}', + site_admin: false, + gravatar_id: '', + starred_url: + 'https://api.github.com/users/mralexgray/starred{/owner}{/repo}', + followers_url: 'https://api.github.com/users/mralexgray/followers', + following_url: + 'https://api.github.com/users/mralexgray/following{/other_user}', + organizations_url: 'https://api.github.com/users/mralexgray/orgs', + subscriptions_url: + 'https://api.github.com/users/mralexgray/subscriptions', + received_events_url: + 'https://api.github.com/users/mralexgray/received_events', + }, + topics: [], + git_url: 'git://github.com/mralexgray/ACEView.git', + license: { + key: 'other', + url: null, + name: 'Other', + node_id: 'MDc6TGljZW5zZTA=', + spdx_id: 'NOASSERTION', + }, + node_id: 'MDEwOlJlcG9zaXRvcnkxMDc5MTA0NQ==', + private: false, + ssh_url: 'git@github.com:mralexgray/ACEView.git', + svn_url: 'https://github.com/mralexgray/ACEView', + archived: false, + disabled: false, + has_wiki: true, + homepage: null, + html_url: 'https://github.com/mralexgray/ACEView', + keys_url: + 'https://api.github.com/repos/mralexgray/ACEView/keys{/key_id}', + language: 'Objective-C', + tags_url: 'https://api.github.com/repos/mralexgray/ACEView/tags', + watchers: 0, + blobs_url: + 'https://api.github.com/repos/mralexgray/ACEView/git/blobs{/sha}', + clone_url: 'https://github.com/mralexgray/ACEView.git', + forks_url: 'https://api.github.com/repos/mralexgray/ACEView/forks', + full_name: 'mralexgray/ACEView', + has_pages: false, + hooks_url: 'https://api.github.com/repos/mralexgray/ACEView/hooks', + pulls_url: + 'https://api.github.com/repos/mralexgray/ACEView/pulls{/number}', + pushed_at: '2014-05-09T01:36:23Z', + teams_url: 'https://api.github.com/repos/mralexgray/ACEView/teams', + trees_url: + 'https://api.github.com/repos/mralexgray/ACEView/git/trees{/sha}', + created_at: '2013-06-19T12:15:04Z', + events_url: 'https://api.github.com/repos/mralexgray/ACEView/events', + has_issues: false, + issues_url: + 'https://api.github.com/repos/mralexgray/ACEView/issues{/number}', + labels_url: + 'https://api.github.com/repos/mralexgray/ACEView/labels{/name}', + merges_url: 'https://api.github.com/repos/mralexgray/ACEView/merges', + mirror_url: null, + updated_at: '2015-11-24T01:14:10Z', + visibility: 'public', + archive_url: + 'https://api.github.com/repos/mralexgray/ACEView/{archive_format}{/ref}', + commits_url: + 'https://api.github.com/repos/mralexgray/ACEView/commits{/sha}', + compare_url: + 'https://api.github.com/repos/mralexgray/ACEView/compare/{base}...{head}', + description: + 'Use the wonderful ACE editor in your Cocoa applications', + forks_count: 1, + is_template: false, + open_issues: 0, + branches_url: + 'https://api.github.com/repos/mralexgray/ACEView/branches{/branch}', + comments_url: + 'https://api.github.com/repos/mralexgray/ACEView/comments{/number}', + contents_url: + 'https://api.github.com/repos/mralexgray/ACEView/contents/{+path}', + git_refs_url: + 'https://api.github.com/repos/mralexgray/ACEView/git/refs{/sha}', + git_tags_url: + 'https://api.github.com/repos/mralexgray/ACEView/git/tags{/sha}', + has_projects: true, + releases_url: + 'https://api.github.com/repos/mralexgray/ACEView/releases{/id}', + statuses_url: + 'https://api.github.com/repos/mralexgray/ACEView/statuses/{sha}', + allow_forking: true, + assignees_url: + 'https://api.github.com/repos/mralexgray/ACEView/assignees{/user}', + downloads_url: + 'https://api.github.com/repos/mralexgray/ACEView/downloads', + has_downloads: true, + languages_url: + 'https://api.github.com/repos/mralexgray/ACEView/languages', + default_branch: 'master', + milestones_url: + 'https://api.github.com/repos/mralexgray/ACEView/milestones{/number}', + stargazers_url: + 'https://api.github.com/repos/mralexgray/ACEView/stargazers', + watchers_count: 0, + deployments_url: + 'https://api.github.com/repos/mralexgray/ACEView/deployments', + git_commits_url: + 'https://api.github.com/repos/mralexgray/ACEView/git/commits{/sha}', + subscribers_url: + 'https://api.github.com/repos/mralexgray/ACEView/subscribers', + contributors_url: + 'https://api.github.com/repos/mralexgray/ACEView/contributors', + issue_events_url: + 'https://api.github.com/repos/mralexgray/ACEView/issues/events{/number}', + stargazers_count: 0, + subscription_url: + 'https://api.github.com/repos/mralexgray/ACEView/subscription', + collaborators_url: + 'https://api.github.com/repos/mralexgray/ACEView/collaborators{/collaborator}', + issue_comment_url: + 'https://api.github.com/repos/mralexgray/ACEView/issues/comments{/number}', + notifications_url: + 'https://api.github.com/repos/mralexgray/ACEView/notifications{?since,all,participating}', + open_issues_count: 0, + web_commit_signoff_required: false, + }, + { + id: 13623648, + url: 'https://api.github.com/repos/mralexgray/ActiveLog', + fork: true, + name: 'ActiveLog', + size: 60, + forks: 0, + owner: { + id: 262517, + url: 'https://api.github.com/users/mralexgray', + type: 'User', + login: 'mralexgray', + node_id: 'MDQ6VXNlcjI2MjUxNw==', + html_url: 'https://github.com/mralexgray', + gists_url: + 'https://api.github.com/users/mralexgray/gists{/gist_id}', + repos_url: 'https://api.github.com/users/mralexgray/repos', + avatar_url: 'https://avatars.githubusercontent.com/u/262517?v=4', + events_url: + 'https://api.github.com/users/mralexgray/events{/privacy}', + site_admin: false, + gravatar_id: '', + starred_url: + 'https://api.github.com/users/mralexgray/starred{/owner}{/repo}', + followers_url: 'https://api.github.com/users/mralexgray/followers', + following_url: + 'https://api.github.com/users/mralexgray/following{/other_user}', + organizations_url: 'https://api.github.com/users/mralexgray/orgs', + subscriptions_url: + 'https://api.github.com/users/mralexgray/subscriptions', + received_events_url: + 'https://api.github.com/users/mralexgray/received_events', + }, + topics: [], + git_url: 'git://github.com/mralexgray/ActiveLog.git', + license: null, + node_id: 'MDEwOlJlcG9zaXRvcnkxMzYyMzY0OA==', + private: false, + ssh_url: 'git@github.com:mralexgray/ActiveLog.git', + svn_url: 'https://github.com/mralexgray/ActiveLog', + archived: false, + disabled: false, + has_wiki: true, + homepage: 'http://deepitpro.com/en/articles/ActiveLog/info/', + html_url: 'https://github.com/mralexgray/ActiveLog', + keys_url: + 'https://api.github.com/repos/mralexgray/ActiveLog/keys{/key_id}', + language: 'Objective-C', + tags_url: 'https://api.github.com/repos/mralexgray/ActiveLog/tags', + watchers: 0, + blobs_url: + 'https://api.github.com/repos/mralexgray/ActiveLog/git/blobs{/sha}', + clone_url: 'https://github.com/mralexgray/ActiveLog.git', + forks_url: 'https://api.github.com/repos/mralexgray/ActiveLog/forks', + full_name: 'mralexgray/ActiveLog', + has_pages: false, + hooks_url: 'https://api.github.com/repos/mralexgray/ActiveLog/hooks', + pulls_url: + 'https://api.github.com/repos/mralexgray/ActiveLog/pulls{/number}', + pushed_at: '2011-07-03T06:28:59Z', + teams_url: 'https://api.github.com/repos/mralexgray/ActiveLog/teams', + trees_url: + 'https://api.github.com/repos/mralexgray/ActiveLog/git/trees{/sha}', + created_at: '2013-10-16T15:52:37Z', + events_url: + 'https://api.github.com/repos/mralexgray/ActiveLog/events', + has_issues: false, + issues_url: + 'https://api.github.com/repos/mralexgray/ActiveLog/issues{/number}', + labels_url: + 'https://api.github.com/repos/mralexgray/ActiveLog/labels{/name}', + merges_url: + 'https://api.github.com/repos/mralexgray/ActiveLog/merges', + mirror_url: null, + updated_at: '2013-10-16T15:52:37Z', + visibility: 'public', + archive_url: + 'https://api.github.com/repos/mralexgray/ActiveLog/{archive_format}{/ref}', + commits_url: + 'https://api.github.com/repos/mralexgray/ActiveLog/commits{/sha}', + compare_url: + 'https://api.github.com/repos/mralexgray/ActiveLog/compare/{base}...{head}', + description: 'Shut up all logs with active filter.', + forks_count: 0, + is_template: false, + open_issues: 0, + branches_url: + 'https://api.github.com/repos/mralexgray/ActiveLog/branches{/branch}', + comments_url: + 'https://api.github.com/repos/mralexgray/ActiveLog/comments{/number}', + contents_url: + 'https://api.github.com/repos/mralexgray/ActiveLog/contents/{+path}', + git_refs_url: + 'https://api.github.com/repos/mralexgray/ActiveLog/git/refs{/sha}', + git_tags_url: + 'https://api.github.com/repos/mralexgray/ActiveLog/git/tags{/sha}', + has_projects: true, + releases_url: + 'https://api.github.com/repos/mralexgray/ActiveLog/releases{/id}', + statuses_url: + 'https://api.github.com/repos/mralexgray/ActiveLog/statuses/{sha}', + allow_forking: true, + assignees_url: + 'https://api.github.com/repos/mralexgray/ActiveLog/assignees{/user}', + downloads_url: + 'https://api.github.com/repos/mralexgray/ActiveLog/downloads', + has_downloads: true, + languages_url: + 'https://api.github.com/repos/mralexgray/ActiveLog/languages', + default_branch: 'master', + milestones_url: + 'https://api.github.com/repos/mralexgray/ActiveLog/milestones{/number}', + stargazers_url: + 'https://api.github.com/repos/mralexgray/ActiveLog/stargazers', + watchers_count: 0, + deployments_url: + 'https://api.github.com/repos/mralexgray/ActiveLog/deployments', + git_commits_url: + 'https://api.github.com/repos/mralexgray/ActiveLog/git/commits{/sha}', + subscribers_url: + 'https://api.github.com/repos/mralexgray/ActiveLog/subscribers', + contributors_url: + 'https://api.github.com/repos/mralexgray/ActiveLog/contributors', + issue_events_url: + 'https://api.github.com/repos/mralexgray/ActiveLog/issues/events{/number}', + stargazers_count: 0, + subscription_url: + 'https://api.github.com/repos/mralexgray/ActiveLog/subscription', + collaborators_url: + 'https://api.github.com/repos/mralexgray/ActiveLog/collaborators{/collaborator}', + issue_comment_url: + 'https://api.github.com/repos/mralexgray/ActiveLog/issues/comments{/number}', + notifications_url: + 'https://api.github.com/repos/mralexgray/ActiveLog/notifications{?since,all,participating}', + open_issues_count: 0, + web_commit_signoff_required: false, + }, + { + id: 9716210, + url: 'https://api.github.com/repos/mralexgray/adium', + fork: false, + name: 'adium', + size: 277719, + forks: 37, + owner: { + id: 262517, + url: 'https://api.github.com/users/mralexgray', + type: 'User', + login: 'mralexgray', + node_id: 'MDQ6VXNlcjI2MjUxNw==', + html_url: 'https://github.com/mralexgray', + gists_url: + 'https://api.github.com/users/mralexgray/gists{/gist_id}', + repos_url: 'https://api.github.com/users/mralexgray/repos', + avatar_url: 'https://avatars.githubusercontent.com/u/262517?v=4', + events_url: + 'https://api.github.com/users/mralexgray/events{/privacy}', + site_admin: false, + gravatar_id: '', + starred_url: + 'https://api.github.com/users/mralexgray/starred{/owner}{/repo}', + followers_url: 'https://api.github.com/users/mralexgray/followers', + following_url: + 'https://api.github.com/users/mralexgray/following{/other_user}', + organizations_url: 'https://api.github.com/users/mralexgray/orgs', + subscriptions_url: + 'https://api.github.com/users/mralexgray/subscriptions', + received_events_url: + 'https://api.github.com/users/mralexgray/received_events', + }, + topics: [], + git_url: 'git://github.com/mralexgray/adium.git', + license: { + key: 'other', + url: null, + name: 'Other', + node_id: 'MDc6TGljZW5zZTA=', + spdx_id: 'NOASSERTION', + }, + node_id: 'MDEwOlJlcG9zaXRvcnk5NzE2MjEw', + private: false, + ssh_url: 'git@github.com:mralexgray/adium.git', + svn_url: 'https://github.com/mralexgray/adium', + archived: false, + disabled: false, + has_wiki: false, + homepage: null, + html_url: 'https://github.com/mralexgray/adium', + keys_url: + 'https://api.github.com/repos/mralexgray/adium/keys{/key_id}', + language: 'Objective-C', + tags_url: 'https://api.github.com/repos/mralexgray/adium/tags', + watchers: 0, + blobs_url: + 'https://api.github.com/repos/mralexgray/adium/git/blobs{/sha}', + clone_url: 'https://github.com/mralexgray/adium.git', + forks_url: 'https://api.github.com/repos/mralexgray/adium/forks', + full_name: 'mralexgray/adium', + has_pages: false, + hooks_url: 'https://api.github.com/repos/mralexgray/adium/hooks', + pulls_url: + 'https://api.github.com/repos/mralexgray/adium/pulls{/number}', + pushed_at: '2013-04-26T16:43:53Z', + teams_url: 'https://api.github.com/repos/mralexgray/adium/teams', + trees_url: + 'https://api.github.com/repos/mralexgray/adium/git/trees{/sha}', + created_at: '2013-04-27T14:59:33Z', + events_url: 'https://api.github.com/repos/mralexgray/adium/events', + has_issues: false, + issues_url: + 'https://api.github.com/repos/mralexgray/adium/issues{/number}', + labels_url: + 'https://api.github.com/repos/mralexgray/adium/labels{/name}', + merges_url: 'https://api.github.com/repos/mralexgray/adium/merges', + mirror_url: null, + updated_at: '2019-12-11T06:51:45Z', + visibility: 'public', + archive_url: + 'https://api.github.com/repos/mralexgray/adium/{archive_format}{/ref}', + commits_url: + 'https://api.github.com/repos/mralexgray/adium/commits{/sha}', + compare_url: + 'https://api.github.com/repos/mralexgray/adium/compare/{base}...{head}', + description: 'Official mirror of hg.adium.im', + forks_count: 37, + is_template: false, + open_issues: 0, + branches_url: + 'https://api.github.com/repos/mralexgray/adium/branches{/branch}', + comments_url: + 'https://api.github.com/repos/mralexgray/adium/comments{/number}', + contents_url: + 'https://api.github.com/repos/mralexgray/adium/contents/{+path}', + git_refs_url: + 'https://api.github.com/repos/mralexgray/adium/git/refs{/sha}', + git_tags_url: + 'https://api.github.com/repos/mralexgray/adium/git/tags{/sha}', + has_projects: true, + releases_url: + 'https://api.github.com/repos/mralexgray/adium/releases{/id}', + statuses_url: + 'https://api.github.com/repos/mralexgray/adium/statuses/{sha}', + allow_forking: true, + assignees_url: + 'https://api.github.com/repos/mralexgray/adium/assignees{/user}', + downloads_url: + 'https://api.github.com/repos/mralexgray/adium/downloads', + has_downloads: true, + languages_url: + 'https://api.github.com/repos/mralexgray/adium/languages', + default_branch: 'master', + milestones_url: + 'https://api.github.com/repos/mralexgray/adium/milestones{/number}', + stargazers_url: + 'https://api.github.com/repos/mralexgray/adium/stargazers', + watchers_count: 0, + deployments_url: + 'https://api.github.com/repos/mralexgray/adium/deployments', + git_commits_url: + 'https://api.github.com/repos/mralexgray/adium/git/commits{/sha}', + subscribers_url: + 'https://api.github.com/repos/mralexgray/adium/subscribers', + contributors_url: + 'https://api.github.com/repos/mralexgray/adium/contributors', + issue_events_url: + 'https://api.github.com/repos/mralexgray/adium/issues/events{/number}', + stargazers_count: 0, + subscription_url: + 'https://api.github.com/repos/mralexgray/adium/subscription', + collaborators_url: + 'https://api.github.com/repos/mralexgray/adium/collaborators{/collaborator}', + issue_comment_url: + 'https://api.github.com/repos/mralexgray/adium/issues/comments{/number}', + notifications_url: + 'https://api.github.com/repos/mralexgray/adium/notifications{?since,all,participating}', + open_issues_count: 0, + web_commit_signoff_required: false, + }, + { + id: 12752329, + url: 'https://api.github.com/repos/mralexgray/ADLivelyTableView', + fork: true, + name: 'ADLivelyTableView', + size: 73, + forks: 0, + owner: { + id: 262517, + url: 'https://api.github.com/users/mralexgray', + type: 'User', + login: 'mralexgray', + node_id: 'MDQ6VXNlcjI2MjUxNw==', + html_url: 'https://github.com/mralexgray', + gists_url: + 'https://api.github.com/users/mralexgray/gists{/gist_id}', + repos_url: 'https://api.github.com/users/mralexgray/repos', + avatar_url: 'https://avatars.githubusercontent.com/u/262517?v=4', + events_url: + 'https://api.github.com/users/mralexgray/events{/privacy}', + site_admin: false, + gravatar_id: '', + starred_url: + 'https://api.github.com/users/mralexgray/starred{/owner}{/repo}', + followers_url: 'https://api.github.com/users/mralexgray/followers', + following_url: + 'https://api.github.com/users/mralexgray/following{/other_user}', + organizations_url: 'https://api.github.com/users/mralexgray/orgs', + subscriptions_url: + 'https://api.github.com/users/mralexgray/subscriptions', + received_events_url: + 'https://api.github.com/users/mralexgray/received_events', + }, + topics: [], + git_url: 'git://github.com/mralexgray/ADLivelyTableView.git', + license: { + key: 'other', + url: null, + name: 'Other', + node_id: 'MDc6TGljZW5zZTA=', + spdx_id: 'NOASSERTION', + }, + node_id: 'MDEwOlJlcG9zaXRvcnkxMjc1MjMyOQ==', + private: false, + ssh_url: 'git@github.com:mralexgray/ADLivelyTableView.git', + svn_url: 'https://github.com/mralexgray/ADLivelyTableView', + archived: false, + disabled: false, + has_wiki: true, + homepage: 'http://applidium.com/en/news/lively_uitableview/', + html_url: 'https://github.com/mralexgray/ADLivelyTableView', + keys_url: + 'https://api.github.com/repos/mralexgray/ADLivelyTableView/keys{/key_id}', + language: 'Objective-C', + tags_url: + 'https://api.github.com/repos/mralexgray/ADLivelyTableView/tags', + watchers: 0, + blobs_url: + 'https://api.github.com/repos/mralexgray/ADLivelyTableView/git/blobs{/sha}', + clone_url: 'https://github.com/mralexgray/ADLivelyTableView.git', + forks_url: + 'https://api.github.com/repos/mralexgray/ADLivelyTableView/forks', + full_name: 'mralexgray/ADLivelyTableView', + has_pages: false, + hooks_url: + 'https://api.github.com/repos/mralexgray/ADLivelyTableView/hooks', + pulls_url: + 'https://api.github.com/repos/mralexgray/ADLivelyTableView/pulls{/number}', + pushed_at: '2012-05-10T10:40:15Z', + teams_url: + 'https://api.github.com/repos/mralexgray/ADLivelyTableView/teams', + trees_url: + 'https://api.github.com/repos/mralexgray/ADLivelyTableView/git/trees{/sha}', + created_at: '2013-09-11T09:18:01Z', + events_url: + 'https://api.github.com/repos/mralexgray/ADLivelyTableView/events', + has_issues: false, + issues_url: + 'https://api.github.com/repos/mralexgray/ADLivelyTableView/issues{/number}', + labels_url: + 'https://api.github.com/repos/mralexgray/ADLivelyTableView/labels{/name}', + merges_url: + 'https://api.github.com/repos/mralexgray/ADLivelyTableView/merges', + mirror_url: null, + updated_at: '2013-09-11T09:18:03Z', + visibility: 'public', + archive_url: + 'https://api.github.com/repos/mralexgray/ADLivelyTableView/{archive_format}{/ref}', + commits_url: + 'https://api.github.com/repos/mralexgray/ADLivelyTableView/commits{/sha}', + compare_url: + 'https://api.github.com/repos/mralexgray/ADLivelyTableView/compare/{base}...{head}', + description: 'Lively UITableView', + forks_count: 0, + is_template: false, + open_issues: 0, + branches_url: + 'https://api.github.com/repos/mralexgray/ADLivelyTableView/branches{/branch}', + comments_url: + 'https://api.github.com/repos/mralexgray/ADLivelyTableView/comments{/number}', + contents_url: + 'https://api.github.com/repos/mralexgray/ADLivelyTableView/contents/{+path}', + git_refs_url: + 'https://api.github.com/repos/mralexgray/ADLivelyTableView/git/refs{/sha}', + git_tags_url: + 'https://api.github.com/repos/mralexgray/ADLivelyTableView/git/tags{/sha}', + has_projects: true, + releases_url: + 'https://api.github.com/repos/mralexgray/ADLivelyTableView/releases{/id}', + statuses_url: + 'https://api.github.com/repos/mralexgray/ADLivelyTableView/statuses/{sha}', + allow_forking: true, + assignees_url: + 'https://api.github.com/repos/mralexgray/ADLivelyTableView/assignees{/user}', + downloads_url: + 'https://api.github.com/repos/mralexgray/ADLivelyTableView/downloads', + has_downloads: true, + languages_url: + 'https://api.github.com/repos/mralexgray/ADLivelyTableView/languages', + default_branch: 'master', + milestones_url: + 'https://api.github.com/repos/mralexgray/ADLivelyTableView/milestones{/number}', + stargazers_url: + 'https://api.github.com/repos/mralexgray/ADLivelyTableView/stargazers', + watchers_count: 0, + deployments_url: + 'https://api.github.com/repos/mralexgray/ADLivelyTableView/deployments', + git_commits_url: + 'https://api.github.com/repos/mralexgray/ADLivelyTableView/git/commits{/sha}', + subscribers_url: + 'https://api.github.com/repos/mralexgray/ADLivelyTableView/subscribers', + contributors_url: + 'https://api.github.com/repos/mralexgray/ADLivelyTableView/contributors', + issue_events_url: + 'https://api.github.com/repos/mralexgray/ADLivelyTableView/issues/events{/number}', + stargazers_count: 0, + subscription_url: + 'https://api.github.com/repos/mralexgray/ADLivelyTableView/subscription', + collaborators_url: + 'https://api.github.com/repos/mralexgray/ADLivelyTableView/collaborators{/collaborator}', + issue_comment_url: + 'https://api.github.com/repos/mralexgray/ADLivelyTableView/issues/comments{/number}', + notifications_url: + 'https://api.github.com/repos/mralexgray/ADLivelyTableView/notifications{?since,all,participating}', + open_issues_count: 0, + web_commit_signoff_required: false, + }, + { + id: 5697379, + url: 'https://api.github.com/repos/mralexgray/AFIncrementalStore', + fork: true, + name: 'AFIncrementalStore', + size: 139, + forks: 0, + owner: { + id: 262517, + url: 'https://api.github.com/users/mralexgray', + type: 'User', + login: 'mralexgray', + node_id: 'MDQ6VXNlcjI2MjUxNw==', + html_url: 'https://github.com/mralexgray', + gists_url: + 'https://api.github.com/users/mralexgray/gists{/gist_id}', + repos_url: 'https://api.github.com/users/mralexgray/repos', + avatar_url: 'https://avatars.githubusercontent.com/u/262517?v=4', + events_url: + 'https://api.github.com/users/mralexgray/events{/privacy}', + site_admin: false, + gravatar_id: '', + starred_url: + 'https://api.github.com/users/mralexgray/starred{/owner}{/repo}', + followers_url: 'https://api.github.com/users/mralexgray/followers', + following_url: + 'https://api.github.com/users/mralexgray/following{/other_user}', + organizations_url: 'https://api.github.com/users/mralexgray/orgs', + subscriptions_url: + 'https://api.github.com/users/mralexgray/subscriptions', + received_events_url: + 'https://api.github.com/users/mralexgray/received_events', + }, + topics: [], + git_url: 'git://github.com/mralexgray/AFIncrementalStore.git', + license: { + key: 'mit', + url: 'https://api.github.com/licenses/mit', + name: 'MIT License', + node_id: 'MDc6TGljZW5zZTEz', + spdx_id: 'MIT', + }, + node_id: 'MDEwOlJlcG9zaXRvcnk1Njk3Mzc5', + private: false, + ssh_url: 'git@github.com:mralexgray/AFIncrementalStore.git', + svn_url: 'https://github.com/mralexgray/AFIncrementalStore', + archived: false, + disabled: false, + has_wiki: true, + homepage: null, + html_url: 'https://github.com/mralexgray/AFIncrementalStore', + keys_url: + 'https://api.github.com/repos/mralexgray/AFIncrementalStore/keys{/key_id}', + language: 'Objective-C', + tags_url: + 'https://api.github.com/repos/mralexgray/AFIncrementalStore/tags', + watchers: 0, + blobs_url: + 'https://api.github.com/repos/mralexgray/AFIncrementalStore/git/blobs{/sha}', + clone_url: 'https://github.com/mralexgray/AFIncrementalStore.git', + forks_url: + 'https://api.github.com/repos/mralexgray/AFIncrementalStore/forks', + full_name: 'mralexgray/AFIncrementalStore', + has_pages: false, + hooks_url: + 'https://api.github.com/repos/mralexgray/AFIncrementalStore/hooks', + pulls_url: + 'https://api.github.com/repos/mralexgray/AFIncrementalStore/pulls{/number}', + pushed_at: '2012-09-01T22:46:25Z', + teams_url: + 'https://api.github.com/repos/mralexgray/AFIncrementalStore/teams', + trees_url: + 'https://api.github.com/repos/mralexgray/AFIncrementalStore/git/trees{/sha}', + created_at: '2012-09-06T04:20:33Z', + events_url: + 'https://api.github.com/repos/mralexgray/AFIncrementalStore/events', + has_issues: false, + issues_url: + 'https://api.github.com/repos/mralexgray/AFIncrementalStore/issues{/number}', + labels_url: + 'https://api.github.com/repos/mralexgray/AFIncrementalStore/labels{/name}', + merges_url: + 'https://api.github.com/repos/mralexgray/AFIncrementalStore/merges', + mirror_url: null, + updated_at: '2013-01-12T03:15:29Z', + visibility: 'public', + archive_url: + 'https://api.github.com/repos/mralexgray/AFIncrementalStore/{archive_format}{/ref}', + commits_url: + 'https://api.github.com/repos/mralexgray/AFIncrementalStore/commits{/sha}', + compare_url: + 'https://api.github.com/repos/mralexgray/AFIncrementalStore/compare/{base}...{head}', + description: 'Core Data Persistence with AFNetworking, Done Right', + forks_count: 0, + is_template: false, + open_issues: 0, + branches_url: + 'https://api.github.com/repos/mralexgray/AFIncrementalStore/branches{/branch}', + comments_url: + 'https://api.github.com/repos/mralexgray/AFIncrementalStore/comments{/number}', + contents_url: + 'https://api.github.com/repos/mralexgray/AFIncrementalStore/contents/{+path}', + git_refs_url: + 'https://api.github.com/repos/mralexgray/AFIncrementalStore/git/refs{/sha}', + git_tags_url: + 'https://api.github.com/repos/mralexgray/AFIncrementalStore/git/tags{/sha}', + has_projects: true, + releases_url: + 'https://api.github.com/repos/mralexgray/AFIncrementalStore/releases{/id}', + statuses_url: + 'https://api.github.com/repos/mralexgray/AFIncrementalStore/statuses/{sha}', + allow_forking: true, + assignees_url: + 'https://api.github.com/repos/mralexgray/AFIncrementalStore/assignees{/user}', + downloads_url: + 'https://api.github.com/repos/mralexgray/AFIncrementalStore/downloads', + has_downloads: true, + languages_url: + 'https://api.github.com/repos/mralexgray/AFIncrementalStore/languages', + default_branch: 'master', + milestones_url: + 'https://api.github.com/repos/mralexgray/AFIncrementalStore/milestones{/number}', + stargazers_url: + 'https://api.github.com/repos/mralexgray/AFIncrementalStore/stargazers', + watchers_count: 0, + deployments_url: + 'https://api.github.com/repos/mralexgray/AFIncrementalStore/deployments', + git_commits_url: + 'https://api.github.com/repos/mralexgray/AFIncrementalStore/git/commits{/sha}', + subscribers_url: + 'https://api.github.com/repos/mralexgray/AFIncrementalStore/subscribers', + contributors_url: + 'https://api.github.com/repos/mralexgray/AFIncrementalStore/contributors', + issue_events_url: + 'https://api.github.com/repos/mralexgray/AFIncrementalStore/issues/events{/number}', + stargazers_count: 0, + subscription_url: + 'https://api.github.com/repos/mralexgray/AFIncrementalStore/subscription', + collaborators_url: + 'https://api.github.com/repos/mralexgray/AFIncrementalStore/collaborators{/collaborator}', + issue_comment_url: + 'https://api.github.com/repos/mralexgray/AFIncrementalStore/issues/comments{/number}', + notifications_url: + 'https://api.github.com/repos/mralexgray/AFIncrementalStore/notifications{?since,all,participating}', + open_issues_count: 0, + web_commit_signoff_required: false, + }, + { + id: 6969621, + url: 'https://api.github.com/repos/mralexgray/AFNetworking', + fork: true, + name: 'AFNetworking', + size: 4341, + forks: 0, + owner: { + id: 262517, + url: 'https://api.github.com/users/mralexgray', + type: 'User', + login: 'mralexgray', + node_id: 'MDQ6VXNlcjI2MjUxNw==', + html_url: 'https://github.com/mralexgray', + gists_url: + 'https://api.github.com/users/mralexgray/gists{/gist_id}', + repos_url: 'https://api.github.com/users/mralexgray/repos', + avatar_url: 'https://avatars.githubusercontent.com/u/262517?v=4', + events_url: + 'https://api.github.com/users/mralexgray/events{/privacy}', + site_admin: false, + gravatar_id: '', + starred_url: + 'https://api.github.com/users/mralexgray/starred{/owner}{/repo}', + followers_url: 'https://api.github.com/users/mralexgray/followers', + following_url: + 'https://api.github.com/users/mralexgray/following{/other_user}', + organizations_url: 'https://api.github.com/users/mralexgray/orgs', + subscriptions_url: + 'https://api.github.com/users/mralexgray/subscriptions', + received_events_url: + 'https://api.github.com/users/mralexgray/received_events', + }, + topics: [], + git_url: 'git://github.com/mralexgray/AFNetworking.git', + license: { + key: 'mit', + url: 'https://api.github.com/licenses/mit', + name: 'MIT License', + node_id: 'MDc6TGljZW5zZTEz', + spdx_id: 'MIT', + }, + node_id: 'MDEwOlJlcG9zaXRvcnk2OTY5NjIx', + private: false, + ssh_url: 'git@github.com:mralexgray/AFNetworking.git', + svn_url: 'https://github.com/mralexgray/AFNetworking', + archived: false, + disabled: false, + has_wiki: true, + homepage: 'http://afnetworking.com', + html_url: 'https://github.com/mralexgray/AFNetworking', + keys_url: + 'https://api.github.com/repos/mralexgray/AFNetworking/keys{/key_id}', + language: 'Objective-C', + tags_url: 'https://api.github.com/repos/mralexgray/AFNetworking/tags', + watchers: 2, + blobs_url: + 'https://api.github.com/repos/mralexgray/AFNetworking/git/blobs{/sha}', + clone_url: 'https://github.com/mralexgray/AFNetworking.git', + forks_url: + 'https://api.github.com/repos/mralexgray/AFNetworking/forks', + full_name: 'mralexgray/AFNetworking', + has_pages: false, + hooks_url: + 'https://api.github.com/repos/mralexgray/AFNetworking/hooks', + pulls_url: + 'https://api.github.com/repos/mralexgray/AFNetworking/pulls{/number}', + pushed_at: '2014-01-24T07:14:32Z', + teams_url: + 'https://api.github.com/repos/mralexgray/AFNetworking/teams', + trees_url: + 'https://api.github.com/repos/mralexgray/AFNetworking/git/trees{/sha}', + created_at: '2012-12-02T17:00:04Z', + events_url: + 'https://api.github.com/repos/mralexgray/AFNetworking/events', + has_issues: false, + issues_url: + 'https://api.github.com/repos/mralexgray/AFNetworking/issues{/number}', + labels_url: + 'https://api.github.com/repos/mralexgray/AFNetworking/labels{/name}', + merges_url: + 'https://api.github.com/repos/mralexgray/AFNetworking/merges', + mirror_url: null, + updated_at: '2014-01-24T07:14:33Z', + visibility: 'public', + archive_url: + 'https://api.github.com/repos/mralexgray/AFNetworking/{archive_format}{/ref}', + commits_url: + 'https://api.github.com/repos/mralexgray/AFNetworking/commits{/sha}', + compare_url: + 'https://api.github.com/repos/mralexgray/AFNetworking/compare/{base}...{head}', + description: 'A delightful iOS and OS X networking framework', + forks_count: 0, + is_template: false, + open_issues: 0, + branches_url: + 'https://api.github.com/repos/mralexgray/AFNetworking/branches{/branch}', + comments_url: + 'https://api.github.com/repos/mralexgray/AFNetworking/comments{/number}', + contents_url: + 'https://api.github.com/repos/mralexgray/AFNetworking/contents/{+path}', + git_refs_url: + 'https://api.github.com/repos/mralexgray/AFNetworking/git/refs{/sha}', + git_tags_url: + 'https://api.github.com/repos/mralexgray/AFNetworking/git/tags{/sha}', + has_projects: true, + releases_url: + 'https://api.github.com/repos/mralexgray/AFNetworking/releases{/id}', + statuses_url: + 'https://api.github.com/repos/mralexgray/AFNetworking/statuses/{sha}', + allow_forking: true, + assignees_url: + 'https://api.github.com/repos/mralexgray/AFNetworking/assignees{/user}', + downloads_url: + 'https://api.github.com/repos/mralexgray/AFNetworking/downloads', + has_downloads: true, + languages_url: + 'https://api.github.com/repos/mralexgray/AFNetworking/languages', + default_branch: 'master', + milestones_url: + 'https://api.github.com/repos/mralexgray/AFNetworking/milestones{/number}', + stargazers_url: + 'https://api.github.com/repos/mralexgray/AFNetworking/stargazers', + watchers_count: 2, + deployments_url: + 'https://api.github.com/repos/mralexgray/AFNetworking/deployments', + git_commits_url: + 'https://api.github.com/repos/mralexgray/AFNetworking/git/commits{/sha}', + subscribers_url: + 'https://api.github.com/repos/mralexgray/AFNetworking/subscribers', + contributors_url: + 'https://api.github.com/repos/mralexgray/AFNetworking/contributors', + issue_events_url: + 'https://api.github.com/repos/mralexgray/AFNetworking/issues/events{/number}', + stargazers_count: 2, + subscription_url: + 'https://api.github.com/repos/mralexgray/AFNetworking/subscription', + collaborators_url: + 'https://api.github.com/repos/mralexgray/AFNetworking/collaborators{/collaborator}', + issue_comment_url: + 'https://api.github.com/repos/mralexgray/AFNetworking/issues/comments{/number}', + notifications_url: + 'https://api.github.com/repos/mralexgray/AFNetworking/notifications{?since,all,participating}', + open_issues_count: 0, + web_commit_signoff_required: false, + }, + { + id: 9485541, + url: 'https://api.github.com/repos/mralexgray/AGNSSplitView', + fork: true, + name: 'AGNSSplitView', + size: 68, + forks: 0, + owner: { + id: 262517, + url: 'https://api.github.com/users/mralexgray', + type: 'User', + login: 'mralexgray', + node_id: 'MDQ6VXNlcjI2MjUxNw==', + html_url: 'https://github.com/mralexgray', + gists_url: + 'https://api.github.com/users/mralexgray/gists{/gist_id}', + repos_url: 'https://api.github.com/users/mralexgray/repos', + avatar_url: 'https://avatars.githubusercontent.com/u/262517?v=4', + events_url: + 'https://api.github.com/users/mralexgray/events{/privacy}', + site_admin: false, + gravatar_id: '', + starred_url: + 'https://api.github.com/users/mralexgray/starred{/owner}{/repo}', + followers_url: 'https://api.github.com/users/mralexgray/followers', + following_url: + 'https://api.github.com/users/mralexgray/following{/other_user}', + organizations_url: 'https://api.github.com/users/mralexgray/orgs', + subscriptions_url: + 'https://api.github.com/users/mralexgray/subscriptions', + received_events_url: + 'https://api.github.com/users/mralexgray/received_events', + }, + topics: [], + git_url: 'git://github.com/mralexgray/AGNSSplitView.git', + license: null, + node_id: 'MDEwOlJlcG9zaXRvcnk5NDg1NTQx', + private: false, + ssh_url: 'git@github.com:mralexgray/AGNSSplitView.git', + svn_url: 'https://github.com/mralexgray/AGNSSplitView', + archived: false, + disabled: false, + has_wiki: true, + homepage: null, + html_url: 'https://github.com/mralexgray/AGNSSplitView', + keys_url: + 'https://api.github.com/repos/mralexgray/AGNSSplitView/keys{/key_id}', + language: 'Objective-C', + tags_url: + 'https://api.github.com/repos/mralexgray/AGNSSplitView/tags', + watchers: 0, + blobs_url: + 'https://api.github.com/repos/mralexgray/AGNSSplitView/git/blobs{/sha}', + clone_url: 'https://github.com/mralexgray/AGNSSplitView.git', + forks_url: + 'https://api.github.com/repos/mralexgray/AGNSSplitView/forks', + full_name: 'mralexgray/AGNSSplitView', + has_pages: false, + hooks_url: + 'https://api.github.com/repos/mralexgray/AGNSSplitView/hooks', + pulls_url: + 'https://api.github.com/repos/mralexgray/AGNSSplitView/pulls{/number}', + pushed_at: '2013-02-26T00:32:32Z', + teams_url: + 'https://api.github.com/repos/mralexgray/AGNSSplitView/teams', + trees_url: + 'https://api.github.com/repos/mralexgray/AGNSSplitView/git/trees{/sha}', + created_at: '2013-04-17T00:10:13Z', + events_url: + 'https://api.github.com/repos/mralexgray/AGNSSplitView/events', + has_issues: false, + issues_url: + 'https://api.github.com/repos/mralexgray/AGNSSplitView/issues{/number}', + labels_url: + 'https://api.github.com/repos/mralexgray/AGNSSplitView/labels{/name}', + merges_url: + 'https://api.github.com/repos/mralexgray/AGNSSplitView/merges', + mirror_url: null, + updated_at: '2013-04-17T00:10:13Z', + visibility: 'public', + archive_url: + 'https://api.github.com/repos/mralexgray/AGNSSplitView/{archive_format}{/ref}', + commits_url: + 'https://api.github.com/repos/mralexgray/AGNSSplitView/commits{/sha}', + compare_url: + 'https://api.github.com/repos/mralexgray/AGNSSplitView/compare/{base}...{head}', + description: 'Simple NSSplitView additions.', + forks_count: 0, + is_template: false, + open_issues: 0, + branches_url: + 'https://api.github.com/repos/mralexgray/AGNSSplitView/branches{/branch}', + comments_url: + 'https://api.github.com/repos/mralexgray/AGNSSplitView/comments{/number}', + contents_url: + 'https://api.github.com/repos/mralexgray/AGNSSplitView/contents/{+path}', + git_refs_url: + 'https://api.github.com/repos/mralexgray/AGNSSplitView/git/refs{/sha}', + git_tags_url: + 'https://api.github.com/repos/mralexgray/AGNSSplitView/git/tags{/sha}', + has_projects: true, + releases_url: + 'https://api.github.com/repos/mralexgray/AGNSSplitView/releases{/id}', + statuses_url: + 'https://api.github.com/repos/mralexgray/AGNSSplitView/statuses/{sha}', + allow_forking: true, + assignees_url: + 'https://api.github.com/repos/mralexgray/AGNSSplitView/assignees{/user}', + downloads_url: + 'https://api.github.com/repos/mralexgray/AGNSSplitView/downloads', + has_downloads: true, + languages_url: + 'https://api.github.com/repos/mralexgray/AGNSSplitView/languages', + default_branch: 'master', + milestones_url: + 'https://api.github.com/repos/mralexgray/AGNSSplitView/milestones{/number}', + stargazers_url: + 'https://api.github.com/repos/mralexgray/AGNSSplitView/stargazers', + watchers_count: 0, + deployments_url: + 'https://api.github.com/repos/mralexgray/AGNSSplitView/deployments', + git_commits_url: + 'https://api.github.com/repos/mralexgray/AGNSSplitView/git/commits{/sha}', + subscribers_url: + 'https://api.github.com/repos/mralexgray/AGNSSplitView/subscribers', + contributors_url: + 'https://api.github.com/repos/mralexgray/AGNSSplitView/contributors', + issue_events_url: + 'https://api.github.com/repos/mralexgray/AGNSSplitView/issues/events{/number}', + stargazers_count: 0, + subscription_url: + 'https://api.github.com/repos/mralexgray/AGNSSplitView/subscription', + collaborators_url: + 'https://api.github.com/repos/mralexgray/AGNSSplitView/collaborators{/collaborator}', + issue_comment_url: + 'https://api.github.com/repos/mralexgray/AGNSSplitView/issues/comments{/number}', + notifications_url: + 'https://api.github.com/repos/mralexgray/AGNSSplitView/notifications{?since,all,participating}', + open_issues_count: 0, + web_commit_signoff_required: false, + }, + { + id: 12767784, + url: 'https://api.github.com/repos/mralexgray/AGScopeBar', + fork: true, + name: 'AGScopeBar', + size: 64, + forks: 0, + owner: { + id: 262517, + url: 'https://api.github.com/users/mralexgray', + type: 'User', + login: 'mralexgray', + node_id: 'MDQ6VXNlcjI2MjUxNw==', + html_url: 'https://github.com/mralexgray', + gists_url: + 'https://api.github.com/users/mralexgray/gists{/gist_id}', + repos_url: 'https://api.github.com/users/mralexgray/repos', + avatar_url: 'https://avatars.githubusercontent.com/u/262517?v=4', + events_url: + 'https://api.github.com/users/mralexgray/events{/privacy}', + site_admin: false, + gravatar_id: '', + starred_url: + 'https://api.github.com/users/mralexgray/starred{/owner}{/repo}', + followers_url: 'https://api.github.com/users/mralexgray/followers', + following_url: + 'https://api.github.com/users/mralexgray/following{/other_user}', + organizations_url: 'https://api.github.com/users/mralexgray/orgs', + subscriptions_url: + 'https://api.github.com/users/mralexgray/subscriptions', + received_events_url: + 'https://api.github.com/users/mralexgray/received_events', + }, + topics: [], + git_url: 'git://github.com/mralexgray/AGScopeBar.git', + license: null, + node_id: 'MDEwOlJlcG9zaXRvcnkxMjc2Nzc4NA==', + private: false, + ssh_url: 'git@github.com:mralexgray/AGScopeBar.git', + svn_url: 'https://github.com/mralexgray/AGScopeBar', + archived: false, + disabled: false, + has_wiki: true, + homepage: null, + html_url: 'https://github.com/mralexgray/AGScopeBar', + keys_url: + 'https://api.github.com/repos/mralexgray/AGScopeBar/keys{/key_id}', + language: 'Objective-C', + tags_url: 'https://api.github.com/repos/mralexgray/AGScopeBar/tags', + watchers: 0, + blobs_url: + 'https://api.github.com/repos/mralexgray/AGScopeBar/git/blobs{/sha}', + clone_url: 'https://github.com/mralexgray/AGScopeBar.git', + forks_url: 'https://api.github.com/repos/mralexgray/AGScopeBar/forks', + full_name: 'mralexgray/AGScopeBar', + has_pages: false, + hooks_url: 'https://api.github.com/repos/mralexgray/AGScopeBar/hooks', + pulls_url: + 'https://api.github.com/repos/mralexgray/AGScopeBar/pulls{/number}', + pushed_at: '2013-05-07T03:35:29Z', + teams_url: 'https://api.github.com/repos/mralexgray/AGScopeBar/teams', + trees_url: + 'https://api.github.com/repos/mralexgray/AGScopeBar/git/trees{/sha}', + created_at: '2013-09-11T21:06:54Z', + events_url: + 'https://api.github.com/repos/mralexgray/AGScopeBar/events', + has_issues: false, + issues_url: + 'https://api.github.com/repos/mralexgray/AGScopeBar/issues{/number}', + labels_url: + 'https://api.github.com/repos/mralexgray/AGScopeBar/labels{/name}', + merges_url: + 'https://api.github.com/repos/mralexgray/AGScopeBar/merges', + mirror_url: null, + updated_at: '2013-09-11T21:06:54Z', + visibility: 'public', + archive_url: + 'https://api.github.com/repos/mralexgray/AGScopeBar/{archive_format}{/ref}', + commits_url: + 'https://api.github.com/repos/mralexgray/AGScopeBar/commits{/sha}', + compare_url: + 'https://api.github.com/repos/mralexgray/AGScopeBar/compare/{base}...{head}', + description: 'Custom scope bar implementation for Cocoa', + forks_count: 0, + is_template: false, + open_issues: 0, + branches_url: + 'https://api.github.com/repos/mralexgray/AGScopeBar/branches{/branch}', + comments_url: + 'https://api.github.com/repos/mralexgray/AGScopeBar/comments{/number}', + contents_url: + 'https://api.github.com/repos/mralexgray/AGScopeBar/contents/{+path}', + git_refs_url: + 'https://api.github.com/repos/mralexgray/AGScopeBar/git/refs{/sha}', + git_tags_url: + 'https://api.github.com/repos/mralexgray/AGScopeBar/git/tags{/sha}', + has_projects: true, + releases_url: + 'https://api.github.com/repos/mralexgray/AGScopeBar/releases{/id}', + statuses_url: + 'https://api.github.com/repos/mralexgray/AGScopeBar/statuses/{sha}', + allow_forking: true, + assignees_url: + 'https://api.github.com/repos/mralexgray/AGScopeBar/assignees{/user}', + downloads_url: + 'https://api.github.com/repos/mralexgray/AGScopeBar/downloads', + has_downloads: true, + languages_url: + 'https://api.github.com/repos/mralexgray/AGScopeBar/languages', + default_branch: 'master', + milestones_url: + 'https://api.github.com/repos/mralexgray/AGScopeBar/milestones{/number}', + stargazers_url: + 'https://api.github.com/repos/mralexgray/AGScopeBar/stargazers', + watchers_count: 0, + deployments_url: + 'https://api.github.com/repos/mralexgray/AGScopeBar/deployments', + git_commits_url: + 'https://api.github.com/repos/mralexgray/AGScopeBar/git/commits{/sha}', + subscribers_url: + 'https://api.github.com/repos/mralexgray/AGScopeBar/subscribers', + contributors_url: + 'https://api.github.com/repos/mralexgray/AGScopeBar/contributors', + issue_events_url: + 'https://api.github.com/repos/mralexgray/AGScopeBar/issues/events{/number}', + stargazers_count: 0, + subscription_url: + 'https://api.github.com/repos/mralexgray/AGScopeBar/subscription', + collaborators_url: + 'https://api.github.com/repos/mralexgray/AGScopeBar/collaborators{/collaborator}', + issue_comment_url: + 'https://api.github.com/repos/mralexgray/AGScopeBar/issues/comments{/number}', + notifications_url: + 'https://api.github.com/repos/mralexgray/AGScopeBar/notifications{?since,all,participating}', + open_issues_count: 0, + web_commit_signoff_required: false, + }, + { + id: 31829499, + url: 'https://api.github.com/repos/mralexgray/agvtool-xcode-plugin', + fork: true, + name: 'agvtool-xcode-plugin', + size: 102, + forks: 0, + owner: { + id: 262517, + url: 'https://api.github.com/users/mralexgray', + type: 'User', + login: 'mralexgray', + node_id: 'MDQ6VXNlcjI2MjUxNw==', + html_url: 'https://github.com/mralexgray', + gists_url: + 'https://api.github.com/users/mralexgray/gists{/gist_id}', + repos_url: 'https://api.github.com/users/mralexgray/repos', + avatar_url: 'https://avatars.githubusercontent.com/u/262517?v=4', + events_url: + 'https://api.github.com/users/mralexgray/events{/privacy}', + site_admin: false, + gravatar_id: '', + starred_url: + 'https://api.github.com/users/mralexgray/starred{/owner}{/repo}', + followers_url: 'https://api.github.com/users/mralexgray/followers', + following_url: + 'https://api.github.com/users/mralexgray/following{/other_user}', + organizations_url: 'https://api.github.com/users/mralexgray/orgs', + subscriptions_url: + 'https://api.github.com/users/mralexgray/subscriptions', + received_events_url: + 'https://api.github.com/users/mralexgray/received_events', + }, + topics: [], + git_url: 'git://github.com/mralexgray/agvtool-xcode-plugin.git', + license: null, + node_id: 'MDEwOlJlcG9zaXRvcnkzMTgyOTQ5OQ==', + private: false, + ssh_url: 'git@github.com:mralexgray/agvtool-xcode-plugin.git', + svn_url: 'https://github.com/mralexgray/agvtool-xcode-plugin', + archived: false, + disabled: false, + has_wiki: true, + homepage: null, + html_url: 'https://github.com/mralexgray/agvtool-xcode-plugin', + keys_url: + 'https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/keys{/key_id}', + language: 'Objective-C', + tags_url: + 'https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/tags', + watchers: 0, + blobs_url: + 'https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/git/blobs{/sha}', + clone_url: 'https://github.com/mralexgray/agvtool-xcode-plugin.git', + forks_url: + 'https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/forks', + full_name: 'mralexgray/agvtool-xcode-plugin', + has_pages: false, + hooks_url: + 'https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/hooks', + pulls_url: + 'https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/pulls{/number}', + pushed_at: '2015-03-08T00:04:31Z', + teams_url: + 'https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/teams', + trees_url: + 'https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/git/trees{/sha}', + created_at: '2015-03-07T22:15:38Z', + events_url: + 'https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/events', + has_issues: false, + issues_url: + 'https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/issues{/number}', + labels_url: + 'https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/labels{/name}', + merges_url: + 'https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/merges', + mirror_url: null, + updated_at: '2015-03-07T22:15:41Z', + visibility: 'public', + archive_url: + 'https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/{archive_format}{/ref}', + commits_url: + 'https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/commits{/sha}', + compare_url: + 'https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/compare/{base}...{head}', + description: 'this is a plugin wrapper for agvtool for xcode.', + forks_count: 0, + is_template: false, + open_issues: 0, + branches_url: + 'https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/branches{/branch}', + comments_url: + 'https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/comments{/number}', + contents_url: + 'https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/contents/{+path}', + git_refs_url: + 'https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/git/refs{/sha}', + git_tags_url: + 'https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/git/tags{/sha}', + has_projects: true, + releases_url: + 'https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/releases{/id}', + statuses_url: + 'https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/statuses/{sha}', + allow_forking: true, + assignees_url: + 'https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/assignees{/user}', + downloads_url: + 'https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/downloads', + has_downloads: true, + languages_url: + 'https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/languages', + default_branch: 'master', + milestones_url: + 'https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/milestones{/number}', + stargazers_url: + 'https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/stargazers', + watchers_count: 0, + deployments_url: + 'https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/deployments', + git_commits_url: + 'https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/git/commits{/sha}', + subscribers_url: + 'https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/subscribers', + contributors_url: + 'https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/contributors', + issue_events_url: + 'https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/issues/events{/number}', + stargazers_count: 0, + subscription_url: + 'https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/subscription', + collaborators_url: + 'https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/collaborators{/collaborator}', + issue_comment_url: + 'https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/issues/comments{/number}', + notifications_url: + 'https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/notifications{?since,all,participating}', + open_issues_count: 0, + web_commit_signoff_required: false, + }, + { + id: 9227846, + url: 'https://api.github.com/repos/mralexgray/AHContentBrowser', + fork: true, + name: 'AHContentBrowser', + size: 223, + forks: 0, + owner: { + id: 262517, + url: 'https://api.github.com/users/mralexgray', + type: 'User', + login: 'mralexgray', + node_id: 'MDQ6VXNlcjI2MjUxNw==', + html_url: 'https://github.com/mralexgray', + gists_url: + 'https://api.github.com/users/mralexgray/gists{/gist_id}', + repos_url: 'https://api.github.com/users/mralexgray/repos', + avatar_url: 'https://avatars.githubusercontent.com/u/262517?v=4', + events_url: + 'https://api.github.com/users/mralexgray/events{/privacy}', + site_admin: false, + gravatar_id: '', + starred_url: + 'https://api.github.com/users/mralexgray/starred{/owner}{/repo}', + followers_url: 'https://api.github.com/users/mralexgray/followers', + following_url: + 'https://api.github.com/users/mralexgray/following{/other_user}', + organizations_url: 'https://api.github.com/users/mralexgray/orgs', + subscriptions_url: + 'https://api.github.com/users/mralexgray/subscriptions', + received_events_url: + 'https://api.github.com/users/mralexgray/received_events', + }, + topics: [], + git_url: 'git://github.com/mralexgray/AHContentBrowser.git', + license: null, + node_id: 'MDEwOlJlcG9zaXRvcnk5MjI3ODQ2', + private: false, + ssh_url: 'git@github.com:mralexgray/AHContentBrowser.git', + svn_url: 'https://github.com/mralexgray/AHContentBrowser', + archived: false, + disabled: false, + has_wiki: true, + homepage: '', + html_url: 'https://github.com/mralexgray/AHContentBrowser', + keys_url: + 'https://api.github.com/repos/mralexgray/AHContentBrowser/keys{/key_id}', + language: 'Objective-C', + tags_url: + 'https://api.github.com/repos/mralexgray/AHContentBrowser/tags', + watchers: 0, + blobs_url: + 'https://api.github.com/repos/mralexgray/AHContentBrowser/git/blobs{/sha}', + clone_url: 'https://github.com/mralexgray/AHContentBrowser.git', + forks_url: + 'https://api.github.com/repos/mralexgray/AHContentBrowser/forks', + full_name: 'mralexgray/AHContentBrowser', + has_pages: false, + hooks_url: + 'https://api.github.com/repos/mralexgray/AHContentBrowser/hooks', + pulls_url: + 'https://api.github.com/repos/mralexgray/AHContentBrowser/pulls{/number}', + pushed_at: '2013-03-13T17:38:23Z', + teams_url: + 'https://api.github.com/repos/mralexgray/AHContentBrowser/teams', + trees_url: + 'https://api.github.com/repos/mralexgray/AHContentBrowser/git/trees{/sha}', + created_at: '2013-04-04T20:56:16Z', + events_url: + 'https://api.github.com/repos/mralexgray/AHContentBrowser/events', + has_issues: false, + issues_url: + 'https://api.github.com/repos/mralexgray/AHContentBrowser/issues{/number}', + labels_url: + 'https://api.github.com/repos/mralexgray/AHContentBrowser/labels{/name}', + merges_url: + 'https://api.github.com/repos/mralexgray/AHContentBrowser/merges', + mirror_url: null, + updated_at: '2015-10-22T05:00:24Z', + visibility: 'public', + archive_url: + 'https://api.github.com/repos/mralexgray/AHContentBrowser/{archive_format}{/ref}', + commits_url: + 'https://api.github.com/repos/mralexgray/AHContentBrowser/commits{/sha}', + compare_url: + 'https://api.github.com/repos/mralexgray/AHContentBrowser/compare/{base}...{head}', + description: + 'A Mac only webview that loads a fast readable version of the website if available.', + forks_count: 0, + is_template: false, + open_issues: 0, + branches_url: + 'https://api.github.com/repos/mralexgray/AHContentBrowser/branches{/branch}', + comments_url: + 'https://api.github.com/repos/mralexgray/AHContentBrowser/comments{/number}', + contents_url: + 'https://api.github.com/repos/mralexgray/AHContentBrowser/contents/{+path}', + git_refs_url: + 'https://api.github.com/repos/mralexgray/AHContentBrowser/git/refs{/sha}', + git_tags_url: + 'https://api.github.com/repos/mralexgray/AHContentBrowser/git/tags{/sha}', + has_projects: true, + releases_url: + 'https://api.github.com/repos/mralexgray/AHContentBrowser/releases{/id}', + statuses_url: + 'https://api.github.com/repos/mralexgray/AHContentBrowser/statuses/{sha}', + allow_forking: true, + assignees_url: + 'https://api.github.com/repos/mralexgray/AHContentBrowser/assignees{/user}', + downloads_url: + 'https://api.github.com/repos/mralexgray/AHContentBrowser/downloads', + has_downloads: true, + languages_url: + 'https://api.github.com/repos/mralexgray/AHContentBrowser/languages', + default_branch: 'master', + milestones_url: + 'https://api.github.com/repos/mralexgray/AHContentBrowser/milestones{/number}', + stargazers_url: + 'https://api.github.com/repos/mralexgray/AHContentBrowser/stargazers', + watchers_count: 0, + deployments_url: + 'https://api.github.com/repos/mralexgray/AHContentBrowser/deployments', + git_commits_url: + 'https://api.github.com/repos/mralexgray/AHContentBrowser/git/commits{/sha}', + subscribers_url: + 'https://api.github.com/repos/mralexgray/AHContentBrowser/subscribers', + contributors_url: + 'https://api.github.com/repos/mralexgray/AHContentBrowser/contributors', + issue_events_url: + 'https://api.github.com/repos/mralexgray/AHContentBrowser/issues/events{/number}', + stargazers_count: 0, + subscription_url: + 'https://api.github.com/repos/mralexgray/AHContentBrowser/subscription', + collaborators_url: + 'https://api.github.com/repos/mralexgray/AHContentBrowser/collaborators{/collaborator}', + issue_comment_url: + 'https://api.github.com/repos/mralexgray/AHContentBrowser/issues/comments{/number}', + notifications_url: + 'https://api.github.com/repos/mralexgray/AHContentBrowser/notifications{?since,all,participating}', + open_issues_count: 0, + web_commit_signoff_required: false, + }, + { + id: 37430328, + url: 'https://api.github.com/repos/mralexgray/AHLaunchCtl', + fork: true, + name: 'AHLaunchCtl', + size: 592, + forks: 0, + owner: { + id: 262517, + url: 'https://api.github.com/users/mralexgray', + type: 'User', + login: 'mralexgray', + node_id: 'MDQ6VXNlcjI2MjUxNw==', + html_url: 'https://github.com/mralexgray', + gists_url: + 'https://api.github.com/users/mralexgray/gists{/gist_id}', + repos_url: 'https://api.github.com/users/mralexgray/repos', + avatar_url: 'https://avatars.githubusercontent.com/u/262517?v=4', + events_url: + 'https://api.github.com/users/mralexgray/events{/privacy}', + site_admin: false, + gravatar_id: '', + starred_url: + 'https://api.github.com/users/mralexgray/starred{/owner}{/repo}', + followers_url: 'https://api.github.com/users/mralexgray/followers', + following_url: + 'https://api.github.com/users/mralexgray/following{/other_user}', + organizations_url: 'https://api.github.com/users/mralexgray/orgs', + subscriptions_url: + 'https://api.github.com/users/mralexgray/subscriptions', + received_events_url: + 'https://api.github.com/users/mralexgray/received_events', + }, + topics: [], + git_url: 'git://github.com/mralexgray/AHLaunchCtl.git', + license: { + key: 'mit', + url: 'https://api.github.com/licenses/mit', + name: 'MIT License', + node_id: 'MDc6TGljZW5zZTEz', + spdx_id: 'MIT', + }, + node_id: 'MDEwOlJlcG9zaXRvcnkzNzQzMDMyOA==', + private: false, + ssh_url: 'git@github.com:mralexgray/AHLaunchCtl.git', + svn_url: 'https://github.com/mralexgray/AHLaunchCtl', + archived: false, + disabled: false, + has_wiki: true, + homepage: '', + html_url: 'https://github.com/mralexgray/AHLaunchCtl', + keys_url: + 'https://api.github.com/repos/mralexgray/AHLaunchCtl/keys{/key_id}', + language: 'Objective-C', + tags_url: 'https://api.github.com/repos/mralexgray/AHLaunchCtl/tags', + watchers: 0, + blobs_url: + 'https://api.github.com/repos/mralexgray/AHLaunchCtl/git/blobs{/sha}', + clone_url: 'https://github.com/mralexgray/AHLaunchCtl.git', + forks_url: + 'https://api.github.com/repos/mralexgray/AHLaunchCtl/forks', + full_name: 'mralexgray/AHLaunchCtl', + has_pages: false, + hooks_url: + 'https://api.github.com/repos/mralexgray/AHLaunchCtl/hooks', + pulls_url: + 'https://api.github.com/repos/mralexgray/AHLaunchCtl/pulls{/number}', + pushed_at: '2015-05-26T18:50:48Z', + teams_url: + 'https://api.github.com/repos/mralexgray/AHLaunchCtl/teams', + trees_url: + 'https://api.github.com/repos/mralexgray/AHLaunchCtl/git/trees{/sha}', + created_at: '2015-06-14T21:31:03Z', + events_url: + 'https://api.github.com/repos/mralexgray/AHLaunchCtl/events', + has_issues: false, + issues_url: + 'https://api.github.com/repos/mralexgray/AHLaunchCtl/issues{/number}', + labels_url: + 'https://api.github.com/repos/mralexgray/AHLaunchCtl/labels{/name}', + merges_url: + 'https://api.github.com/repos/mralexgray/AHLaunchCtl/merges', + mirror_url: null, + updated_at: '2015-06-14T21:31:04Z', + visibility: 'public', + archive_url: + 'https://api.github.com/repos/mralexgray/AHLaunchCtl/{archive_format}{/ref}', + commits_url: + 'https://api.github.com/repos/mralexgray/AHLaunchCtl/commits{/sha}', + compare_url: + 'https://api.github.com/repos/mralexgray/AHLaunchCtl/compare/{base}...{head}', + description: 'LaunchD Framework for Cocoa Apps', + forks_count: 0, + is_template: false, + open_issues: 0, + branches_url: + 'https://api.github.com/repos/mralexgray/AHLaunchCtl/branches{/branch}', + comments_url: + 'https://api.github.com/repos/mralexgray/AHLaunchCtl/comments{/number}', + contents_url: + 'https://api.github.com/repos/mralexgray/AHLaunchCtl/contents/{+path}', + git_refs_url: + 'https://api.github.com/repos/mralexgray/AHLaunchCtl/git/refs{/sha}', + git_tags_url: + 'https://api.github.com/repos/mralexgray/AHLaunchCtl/git/tags{/sha}', + has_projects: true, + releases_url: + 'https://api.github.com/repos/mralexgray/AHLaunchCtl/releases{/id}', + statuses_url: + 'https://api.github.com/repos/mralexgray/AHLaunchCtl/statuses/{sha}', + allow_forking: true, + assignees_url: + 'https://api.github.com/repos/mralexgray/AHLaunchCtl/assignees{/user}', + downloads_url: + 'https://api.github.com/repos/mralexgray/AHLaunchCtl/downloads', + has_downloads: true, + languages_url: + 'https://api.github.com/repos/mralexgray/AHLaunchCtl/languages', + default_branch: 'master', + milestones_url: + 'https://api.github.com/repos/mralexgray/AHLaunchCtl/milestones{/number}', + stargazers_url: + 'https://api.github.com/repos/mralexgray/AHLaunchCtl/stargazers', + watchers_count: 0, + deployments_url: + 'https://api.github.com/repos/mralexgray/AHLaunchCtl/deployments', + git_commits_url: + 'https://api.github.com/repos/mralexgray/AHLaunchCtl/git/commits{/sha}', + subscribers_url: + 'https://api.github.com/repos/mralexgray/AHLaunchCtl/subscribers', + contributors_url: + 'https://api.github.com/repos/mralexgray/AHLaunchCtl/contributors', + issue_events_url: + 'https://api.github.com/repos/mralexgray/AHLaunchCtl/issues/events{/number}', + stargazers_count: 0, + subscription_url: + 'https://api.github.com/repos/mralexgray/AHLaunchCtl/subscription', + collaborators_url: + 'https://api.github.com/repos/mralexgray/AHLaunchCtl/collaborators{/collaborator}', + issue_comment_url: + 'https://api.github.com/repos/mralexgray/AHLaunchCtl/issues/comments{/number}', + notifications_url: + 'https://api.github.com/repos/mralexgray/AHLaunchCtl/notifications{?since,all,participating}', + open_issues_count: 0, + web_commit_signoff_required: false, + }, + { + id: 9167473, + url: 'https://api.github.com/repos/mralexgray/AHLayout', + fork: true, + name: 'AHLayout', + size: 359, + forks: 0, + owner: { + id: 262517, + url: 'https://api.github.com/users/mralexgray', + type: 'User', + login: 'mralexgray', + node_id: 'MDQ6VXNlcjI2MjUxNw==', + html_url: 'https://github.com/mralexgray', + gists_url: + 'https://api.github.com/users/mralexgray/gists{/gist_id}', + repos_url: 'https://api.github.com/users/mralexgray/repos', + avatar_url: 'https://avatars.githubusercontent.com/u/262517?v=4', + events_url: + 'https://api.github.com/users/mralexgray/events{/privacy}', + site_admin: false, + gravatar_id: '', + starred_url: + 'https://api.github.com/users/mralexgray/starred{/owner}{/repo}', + followers_url: 'https://api.github.com/users/mralexgray/followers', + following_url: + 'https://api.github.com/users/mralexgray/following{/other_user}', + organizations_url: 'https://api.github.com/users/mralexgray/orgs', + subscriptions_url: + 'https://api.github.com/users/mralexgray/subscriptions', + received_events_url: + 'https://api.github.com/users/mralexgray/received_events', + }, + topics: [], + git_url: 'git://github.com/mralexgray/AHLayout.git', + license: null, + node_id: 'MDEwOlJlcG9zaXRvcnk5MTY3NDcz', + private: false, + ssh_url: 'git@github.com:mralexgray/AHLayout.git', + svn_url: 'https://github.com/mralexgray/AHLayout', + archived: false, + disabled: false, + has_wiki: true, + homepage: null, + html_url: 'https://github.com/mralexgray/AHLayout', + keys_url: + 'https://api.github.com/repos/mralexgray/AHLayout/keys{/key_id}', + language: 'Objective-C', + tags_url: 'https://api.github.com/repos/mralexgray/AHLayout/tags', + watchers: 0, + blobs_url: + 'https://api.github.com/repos/mralexgray/AHLayout/git/blobs{/sha}', + clone_url: 'https://github.com/mralexgray/AHLayout.git', + forks_url: 'https://api.github.com/repos/mralexgray/AHLayout/forks', + full_name: 'mralexgray/AHLayout', + has_pages: false, + hooks_url: 'https://api.github.com/repos/mralexgray/AHLayout/hooks', + pulls_url: + 'https://api.github.com/repos/mralexgray/AHLayout/pulls{/number}', + pushed_at: '2013-07-08T02:31:14Z', + teams_url: 'https://api.github.com/repos/mralexgray/AHLayout/teams', + trees_url: + 'https://api.github.com/repos/mralexgray/AHLayout/git/trees{/sha}', + created_at: '2013-04-02T10:10:30Z', + events_url: 'https://api.github.com/repos/mralexgray/AHLayout/events', + has_issues: false, + issues_url: + 'https://api.github.com/repos/mralexgray/AHLayout/issues{/number}', + labels_url: + 'https://api.github.com/repos/mralexgray/AHLayout/labels{/name}', + merges_url: 'https://api.github.com/repos/mralexgray/AHLayout/merges', + mirror_url: null, + updated_at: '2013-07-08T02:31:17Z', + visibility: 'public', + archive_url: + 'https://api.github.com/repos/mralexgray/AHLayout/{archive_format}{/ref}', + commits_url: + 'https://api.github.com/repos/mralexgray/AHLayout/commits{/sha}', + compare_url: + 'https://api.github.com/repos/mralexgray/AHLayout/compare/{base}...{head}', + description: 'AHLayout', + forks_count: 0, + is_template: false, + open_issues: 0, + branches_url: + 'https://api.github.com/repos/mralexgray/AHLayout/branches{/branch}', + comments_url: + 'https://api.github.com/repos/mralexgray/AHLayout/comments{/number}', + contents_url: + 'https://api.github.com/repos/mralexgray/AHLayout/contents/{+path}', + git_refs_url: + 'https://api.github.com/repos/mralexgray/AHLayout/git/refs{/sha}', + git_tags_url: + 'https://api.github.com/repos/mralexgray/AHLayout/git/tags{/sha}', + has_projects: true, + releases_url: + 'https://api.github.com/repos/mralexgray/AHLayout/releases{/id}', + statuses_url: + 'https://api.github.com/repos/mralexgray/AHLayout/statuses/{sha}', + allow_forking: true, + assignees_url: + 'https://api.github.com/repos/mralexgray/AHLayout/assignees{/user}', + downloads_url: + 'https://api.github.com/repos/mralexgray/AHLayout/downloads', + has_downloads: true, + languages_url: + 'https://api.github.com/repos/mralexgray/AHLayout/languages', + default_branch: 'master', + milestones_url: + 'https://api.github.com/repos/mralexgray/AHLayout/milestones{/number}', + stargazers_url: + 'https://api.github.com/repos/mralexgray/AHLayout/stargazers', + watchers_count: 0, + deployments_url: + 'https://api.github.com/repos/mralexgray/AHLayout/deployments', + git_commits_url: + 'https://api.github.com/repos/mralexgray/AHLayout/git/commits{/sha}', + subscribers_url: + 'https://api.github.com/repos/mralexgray/AHLayout/subscribers', + contributors_url: + 'https://api.github.com/repos/mralexgray/AHLayout/contributors', + issue_events_url: + 'https://api.github.com/repos/mralexgray/AHLayout/issues/events{/number}', + stargazers_count: 0, + subscription_url: + 'https://api.github.com/repos/mralexgray/AHLayout/subscription', + collaborators_url: + 'https://api.github.com/repos/mralexgray/AHLayout/collaborators{/collaborator}', + issue_comment_url: + 'https://api.github.com/repos/mralexgray/AHLayout/issues/comments{/number}', + notifications_url: + 'https://api.github.com/repos/mralexgray/AHLayout/notifications{?since,all,participating}', + open_issues_count: 0, + web_commit_signoff_required: false, + }, + { + id: 18450201, + url: 'https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework', + fork: true, + name: 'Airmail-Plug-In-Framework', + size: 888, + forks: 0, + owner: { + id: 262517, + url: 'https://api.github.com/users/mralexgray', + type: 'User', + login: 'mralexgray', + node_id: 'MDQ6VXNlcjI2MjUxNw==', + html_url: 'https://github.com/mralexgray', + gists_url: + 'https://api.github.com/users/mralexgray/gists{/gist_id}', + repos_url: 'https://api.github.com/users/mralexgray/repos', + avatar_url: 'https://avatars.githubusercontent.com/u/262517?v=4', + events_url: + 'https://api.github.com/users/mralexgray/events{/privacy}', + site_admin: false, + gravatar_id: '', + starred_url: + 'https://api.github.com/users/mralexgray/starred{/owner}{/repo}', + followers_url: 'https://api.github.com/users/mralexgray/followers', + following_url: + 'https://api.github.com/users/mralexgray/following{/other_user}', + organizations_url: 'https://api.github.com/users/mralexgray/orgs', + subscriptions_url: + 'https://api.github.com/users/mralexgray/subscriptions', + received_events_url: + 'https://api.github.com/users/mralexgray/received_events', + }, + topics: [], + git_url: 'git://github.com/mralexgray/Airmail-Plug-In-Framework.git', + license: { + key: 'gpl-2.0', + url: 'https://api.github.com/licenses/gpl-2.0', + name: 'GNU General Public License v2.0', + node_id: 'MDc6TGljZW5zZTg=', + spdx_id: 'GPL-2.0', + }, + node_id: 'MDEwOlJlcG9zaXRvcnkxODQ1MDIwMQ==', + private: false, + ssh_url: 'git@github.com:mralexgray/Airmail-Plug-In-Framework.git', + svn_url: 'https://github.com/mralexgray/Airmail-Plug-In-Framework', + archived: false, + disabled: false, + has_wiki: true, + homepage: null, + html_url: 'https://github.com/mralexgray/Airmail-Plug-In-Framework', + keys_url: + 'https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/keys{/key_id}', + language: null, + tags_url: + 'https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/tags', + watchers: 0, + blobs_url: + 'https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/git/blobs{/sha}', + clone_url: + 'https://github.com/mralexgray/Airmail-Plug-In-Framework.git', + forks_url: + 'https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/forks', + full_name: 'mralexgray/Airmail-Plug-In-Framework', + has_pages: false, + hooks_url: + 'https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/hooks', + pulls_url: + 'https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/pulls{/number}', + pushed_at: '2014-03-27T15:42:19Z', + teams_url: + 'https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/teams', + trees_url: + 'https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/git/trees{/sha}', + created_at: '2014-04-04T19:33:54Z', + events_url: + 'https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/events', + has_issues: false, + issues_url: + 'https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/issues{/number}', + labels_url: + 'https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/labels{/name}', + merges_url: + 'https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/merges', + mirror_url: null, + updated_at: '2014-11-23T19:31:04Z', + visibility: 'public', + archive_url: + 'https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/{archive_format}{/ref}', + commits_url: + 'https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/commits{/sha}', + compare_url: + 'https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/compare/{base}...{head}', + description: null, + forks_count: 0, + is_template: false, + open_issues: 0, + branches_url: + 'https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/branches{/branch}', + comments_url: + 'https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/comments{/number}', + contents_url: + 'https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/contents/{+path}', + git_refs_url: + 'https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/git/refs{/sha}', + git_tags_url: + 'https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/git/tags{/sha}', + has_projects: true, + releases_url: + 'https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/releases{/id}', + statuses_url: + 'https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/statuses/{sha}', + allow_forking: true, + assignees_url: + 'https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/assignees{/user}', + downloads_url: + 'https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/downloads', + has_downloads: true, + languages_url: + 'https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/languages', + default_branch: 'master', + milestones_url: + 'https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/milestones{/number}', + stargazers_url: + 'https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/stargazers', + watchers_count: 0, + deployments_url: + 'https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/deployments', + git_commits_url: + 'https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/git/commits{/sha}', + subscribers_url: + 'https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/subscribers', + contributors_url: + 'https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/contributors', + issue_events_url: + 'https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/issues/events{/number}', + stargazers_count: 0, + subscription_url: + 'https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/subscription', + collaborators_url: + 'https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/collaborators{/collaborator}', + issue_comment_url: + 'https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/issues/comments{/number}', + notifications_url: + 'https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/notifications{?since,all,participating}', + open_issues_count: 0, + web_commit_signoff_required: false, + }, + { + id: 5203219, + url: 'https://api.github.com/repos/mralexgray/AJS-iTunes-API', + fork: true, + name: 'AJS-iTunes-API', + size: 103, + forks: 0, + owner: { + id: 262517, + url: 'https://api.github.com/users/mralexgray', + type: 'User', + login: 'mralexgray', + node_id: 'MDQ6VXNlcjI2MjUxNw==', + html_url: 'https://github.com/mralexgray', + gists_url: + 'https://api.github.com/users/mralexgray/gists{/gist_id}', + repos_url: 'https://api.github.com/users/mralexgray/repos', + avatar_url: 'https://avatars.githubusercontent.com/u/262517?v=4', + events_url: + 'https://api.github.com/users/mralexgray/events{/privacy}', + site_admin: false, + gravatar_id: '', + starred_url: + 'https://api.github.com/users/mralexgray/starred{/owner}{/repo}', + followers_url: 'https://api.github.com/users/mralexgray/followers', + following_url: + 'https://api.github.com/users/mralexgray/following{/other_user}', + organizations_url: 'https://api.github.com/users/mralexgray/orgs', + subscriptions_url: + 'https://api.github.com/users/mralexgray/subscriptions', + received_events_url: + 'https://api.github.com/users/mralexgray/received_events', + }, + topics: [], + git_url: 'git://github.com/mralexgray/AJS-iTunes-API.git', + license: null, + node_id: 'MDEwOlJlcG9zaXRvcnk1MjAzMjE5', + private: false, + ssh_url: 'git@github.com:mralexgray/AJS-iTunes-API.git', + svn_url: 'https://github.com/mralexgray/AJS-iTunes-API', + archived: false, + disabled: false, + has_wiki: true, + homepage: '', + html_url: 'https://github.com/mralexgray/AJS-iTunes-API', + keys_url: + 'https://api.github.com/repos/mralexgray/AJS-iTunes-API/keys{/key_id}', + language: 'Objective-C', + tags_url: + 'https://api.github.com/repos/mralexgray/AJS-iTunes-API/tags', + watchers: 2, + blobs_url: + 'https://api.github.com/repos/mralexgray/AJS-iTunes-API/git/blobs{/sha}', + clone_url: 'https://github.com/mralexgray/AJS-iTunes-API.git', + forks_url: + 'https://api.github.com/repos/mralexgray/AJS-iTunes-API/forks', + full_name: 'mralexgray/AJS-iTunes-API', + has_pages: false, + hooks_url: + 'https://api.github.com/repos/mralexgray/AJS-iTunes-API/hooks', + pulls_url: + 'https://api.github.com/repos/mralexgray/AJS-iTunes-API/pulls{/number}', + pushed_at: '2011-10-30T22:26:48Z', + teams_url: + 'https://api.github.com/repos/mralexgray/AJS-iTunes-API/teams', + trees_url: + 'https://api.github.com/repos/mralexgray/AJS-iTunes-API/git/trees{/sha}', + created_at: '2012-07-27T10:20:58Z', + events_url: + 'https://api.github.com/repos/mralexgray/AJS-iTunes-API/events', + has_issues: false, + issues_url: + 'https://api.github.com/repos/mralexgray/AJS-iTunes-API/issues{/number}', + labels_url: + 'https://api.github.com/repos/mralexgray/AJS-iTunes-API/labels{/name}', + merges_url: + 'https://api.github.com/repos/mralexgray/AJS-iTunes-API/merges', + mirror_url: null, + updated_at: '2013-01-11T11:00:05Z', + visibility: 'public', + archive_url: + 'https://api.github.com/repos/mralexgray/AJS-iTunes-API/{archive_format}{/ref}', + commits_url: + 'https://api.github.com/repos/mralexgray/AJS-iTunes-API/commits{/sha}', + compare_url: + 'https://api.github.com/repos/mralexgray/AJS-iTunes-API/compare/{base}...{head}', + description: + 'Cocoa wrapper for the iTunes search API - for iOS and Mac OSX projects', + forks_count: 0, + is_template: false, + open_issues: 0, + branches_url: + 'https://api.github.com/repos/mralexgray/AJS-iTunes-API/branches{/branch}', + comments_url: + 'https://api.github.com/repos/mralexgray/AJS-iTunes-API/comments{/number}', + contents_url: + 'https://api.github.com/repos/mralexgray/AJS-iTunes-API/contents/{+path}', + git_refs_url: + 'https://api.github.com/repos/mralexgray/AJS-iTunes-API/git/refs{/sha}', + git_tags_url: + 'https://api.github.com/repos/mralexgray/AJS-iTunes-API/git/tags{/sha}', + has_projects: true, + releases_url: + 'https://api.github.com/repos/mralexgray/AJS-iTunes-API/releases{/id}', + statuses_url: + 'https://api.github.com/repos/mralexgray/AJS-iTunes-API/statuses/{sha}', + allow_forking: true, + assignees_url: + 'https://api.github.com/repos/mralexgray/AJS-iTunes-API/assignees{/user}', + downloads_url: + 'https://api.github.com/repos/mralexgray/AJS-iTunes-API/downloads', + has_downloads: true, + languages_url: + 'https://api.github.com/repos/mralexgray/AJS-iTunes-API/languages', + default_branch: 'master', + milestones_url: + 'https://api.github.com/repos/mralexgray/AJS-iTunes-API/milestones{/number}', + stargazers_url: + 'https://api.github.com/repos/mralexgray/AJS-iTunes-API/stargazers', + watchers_count: 2, + deployments_url: + 'https://api.github.com/repos/mralexgray/AJS-iTunes-API/deployments', + git_commits_url: + 'https://api.github.com/repos/mralexgray/AJS-iTunes-API/git/commits{/sha}', + subscribers_url: + 'https://api.github.com/repos/mralexgray/AJS-iTunes-API/subscribers', + contributors_url: + 'https://api.github.com/repos/mralexgray/AJS-iTunes-API/contributors', + issue_events_url: + 'https://api.github.com/repos/mralexgray/AJS-iTunes-API/issues/events{/number}', + stargazers_count: 2, + subscription_url: + 'https://api.github.com/repos/mralexgray/AJS-iTunes-API/subscription', + collaborators_url: + 'https://api.github.com/repos/mralexgray/AJS-iTunes-API/collaborators{/collaborator}', + issue_comment_url: + 'https://api.github.com/repos/mralexgray/AJS-iTunes-API/issues/comments{/number}', + notifications_url: + 'https://api.github.com/repos/mralexgray/AJS-iTunes-API/notifications{?since,all,participating}', + open_issues_count: 0, + web_commit_signoff_required: false, + }, + { + id: 10093801, + url: 'https://api.github.com/repos/mralexgray/Alcatraz', + fork: true, + name: 'Alcatraz', + size: 3668, + forks: 0, + owner: { + id: 262517, + url: 'https://api.github.com/users/mralexgray', + type: 'User', + login: 'mralexgray', + node_id: 'MDQ6VXNlcjI2MjUxNw==', + html_url: 'https://github.com/mralexgray', + gists_url: + 'https://api.github.com/users/mralexgray/gists{/gist_id}', + repos_url: 'https://api.github.com/users/mralexgray/repos', + avatar_url: 'https://avatars.githubusercontent.com/u/262517?v=4', + events_url: + 'https://api.github.com/users/mralexgray/events{/privacy}', + site_admin: false, + gravatar_id: '', + starred_url: + 'https://api.github.com/users/mralexgray/starred{/owner}{/repo}', + followers_url: 'https://api.github.com/users/mralexgray/followers', + following_url: + 'https://api.github.com/users/mralexgray/following{/other_user}', + organizations_url: 'https://api.github.com/users/mralexgray/orgs', + subscriptions_url: + 'https://api.github.com/users/mralexgray/subscriptions', + received_events_url: + 'https://api.github.com/users/mralexgray/received_events', + }, + topics: [], + git_url: 'git://github.com/mralexgray/Alcatraz.git', + license: { + key: 'mit', + url: 'https://api.github.com/licenses/mit', + name: 'MIT License', + node_id: 'MDc6TGljZW5zZTEz', + spdx_id: 'MIT', + }, + node_id: 'MDEwOlJlcG9zaXRvcnkxMDA5MzgwMQ==', + private: false, + ssh_url: 'git@github.com:mralexgray/Alcatraz.git', + svn_url: 'https://github.com/mralexgray/Alcatraz', + archived: false, + disabled: false, + has_wiki: false, + homepage: 'mneorr.github.com/Alcatraz', + html_url: 'https://github.com/mralexgray/Alcatraz', + keys_url: + 'https://api.github.com/repos/mralexgray/Alcatraz/keys{/key_id}', + language: 'Objective-C', + tags_url: 'https://api.github.com/repos/mralexgray/Alcatraz/tags', + watchers: 0, + blobs_url: + 'https://api.github.com/repos/mralexgray/Alcatraz/git/blobs{/sha}', + clone_url: 'https://github.com/mralexgray/Alcatraz.git', + forks_url: 'https://api.github.com/repos/mralexgray/Alcatraz/forks', + full_name: 'mralexgray/Alcatraz', + has_pages: false, + hooks_url: 'https://api.github.com/repos/mralexgray/Alcatraz/hooks', + pulls_url: + 'https://api.github.com/repos/mralexgray/Alcatraz/pulls{/number}', + pushed_at: '2014-03-19T12:50:37Z', + teams_url: 'https://api.github.com/repos/mralexgray/Alcatraz/teams', + trees_url: + 'https://api.github.com/repos/mralexgray/Alcatraz/git/trees{/sha}', + created_at: '2013-05-16T04:41:13Z', + events_url: 'https://api.github.com/repos/mralexgray/Alcatraz/events', + has_issues: false, + issues_url: + 'https://api.github.com/repos/mralexgray/Alcatraz/issues{/number}', + labels_url: + 'https://api.github.com/repos/mralexgray/Alcatraz/labels{/name}', + merges_url: 'https://api.github.com/repos/mralexgray/Alcatraz/merges', + mirror_url: null, + updated_at: '2014-03-19T20:38:35Z', + visibility: 'public', + archive_url: + 'https://api.github.com/repos/mralexgray/Alcatraz/{archive_format}{/ref}', + commits_url: + 'https://api.github.com/repos/mralexgray/Alcatraz/commits{/sha}', + compare_url: + 'https://api.github.com/repos/mralexgray/Alcatraz/compare/{base}...{head}', + description: 'The most awesome (and only) Xcode package manager!', + forks_count: 0, + is_template: false, + open_issues: 0, + branches_url: + 'https://api.github.com/repos/mralexgray/Alcatraz/branches{/branch}', + comments_url: + 'https://api.github.com/repos/mralexgray/Alcatraz/comments{/number}', + contents_url: + 'https://api.github.com/repos/mralexgray/Alcatraz/contents/{+path}', + git_refs_url: + 'https://api.github.com/repos/mralexgray/Alcatraz/git/refs{/sha}', + git_tags_url: + 'https://api.github.com/repos/mralexgray/Alcatraz/git/tags{/sha}', + has_projects: true, + releases_url: + 'https://api.github.com/repos/mralexgray/Alcatraz/releases{/id}', + statuses_url: + 'https://api.github.com/repos/mralexgray/Alcatraz/statuses/{sha}', + allow_forking: true, + assignees_url: + 'https://api.github.com/repos/mralexgray/Alcatraz/assignees{/user}', + downloads_url: + 'https://api.github.com/repos/mralexgray/Alcatraz/downloads', + has_downloads: true, + languages_url: + 'https://api.github.com/repos/mralexgray/Alcatraz/languages', + default_branch: 'master', + milestones_url: + 'https://api.github.com/repos/mralexgray/Alcatraz/milestones{/number}', + stargazers_url: + 'https://api.github.com/repos/mralexgray/Alcatraz/stargazers', + watchers_count: 0, + deployments_url: + 'https://api.github.com/repos/mralexgray/Alcatraz/deployments', + git_commits_url: + 'https://api.github.com/repos/mralexgray/Alcatraz/git/commits{/sha}', + subscribers_url: + 'https://api.github.com/repos/mralexgray/Alcatraz/subscribers', + contributors_url: + 'https://api.github.com/repos/mralexgray/Alcatraz/contributors', + issue_events_url: + 'https://api.github.com/repos/mralexgray/Alcatraz/issues/events{/number}', + stargazers_count: 0, + subscription_url: + 'https://api.github.com/repos/mralexgray/Alcatraz/subscription', + collaborators_url: + 'https://api.github.com/repos/mralexgray/Alcatraz/collaborators{/collaborator}', + issue_comment_url: + 'https://api.github.com/repos/mralexgray/Alcatraz/issues/comments{/number}', + notifications_url: + 'https://api.github.com/repos/mralexgray/Alcatraz/notifications{?since,all,participating}', + open_issues_count: 0, + web_commit_signoff_required: false, + }, + { + id: 12916552, + url: 'https://api.github.com/repos/mralexgray/alcatraz-packages', + fork: true, + name: 'alcatraz-packages', + size: 826, + forks: 0, + owner: { + id: 262517, + url: 'https://api.github.com/users/mralexgray', + type: 'User', + login: 'mralexgray', + node_id: 'MDQ6VXNlcjI2MjUxNw==', + html_url: 'https://github.com/mralexgray', + gists_url: + 'https://api.github.com/users/mralexgray/gists{/gist_id}', + repos_url: 'https://api.github.com/users/mralexgray/repos', + avatar_url: 'https://avatars.githubusercontent.com/u/262517?v=4', + events_url: + 'https://api.github.com/users/mralexgray/events{/privacy}', + site_admin: false, + gravatar_id: '', + starred_url: + 'https://api.github.com/users/mralexgray/starred{/owner}{/repo}', + followers_url: 'https://api.github.com/users/mralexgray/followers', + following_url: + 'https://api.github.com/users/mralexgray/following{/other_user}', + organizations_url: 'https://api.github.com/users/mralexgray/orgs', + subscriptions_url: + 'https://api.github.com/users/mralexgray/subscriptions', + received_events_url: + 'https://api.github.com/users/mralexgray/received_events', + }, + topics: [], + git_url: 'git://github.com/mralexgray/alcatraz-packages.git', + license: null, + node_id: 'MDEwOlJlcG9zaXRvcnkxMjkxNjU1Mg==', + private: false, + ssh_url: 'git@github.com:mralexgray/alcatraz-packages.git', + svn_url: 'https://github.com/mralexgray/alcatraz-packages', + archived: false, + disabled: false, + has_wiki: true, + homepage: 'mneorr.github.com/Alcatraz', + html_url: 'https://github.com/mralexgray/alcatraz-packages', + keys_url: + 'https://api.github.com/repos/mralexgray/alcatraz-packages/keys{/key_id}', + language: 'Ruby', + tags_url: + 'https://api.github.com/repos/mralexgray/alcatraz-packages/tags', + watchers: 0, + blobs_url: + 'https://api.github.com/repos/mralexgray/alcatraz-packages/git/blobs{/sha}', + clone_url: 'https://github.com/mralexgray/alcatraz-packages.git', + forks_url: + 'https://api.github.com/repos/mralexgray/alcatraz-packages/forks', + full_name: 'mralexgray/alcatraz-packages', + has_pages: false, + hooks_url: + 'https://api.github.com/repos/mralexgray/alcatraz-packages/hooks', + pulls_url: + 'https://api.github.com/repos/mralexgray/alcatraz-packages/pulls{/number}', + pushed_at: '2015-12-14T16:21:31Z', + teams_url: + 'https://api.github.com/repos/mralexgray/alcatraz-packages/teams', + trees_url: + 'https://api.github.com/repos/mralexgray/alcatraz-packages/git/trees{/sha}', + created_at: '2013-09-18T07:15:24Z', + events_url: + 'https://api.github.com/repos/mralexgray/alcatraz-packages/events', + has_issues: false, + issues_url: + 'https://api.github.com/repos/mralexgray/alcatraz-packages/issues{/number}', + labels_url: + 'https://api.github.com/repos/mralexgray/alcatraz-packages/labels{/name}', + merges_url: + 'https://api.github.com/repos/mralexgray/alcatraz-packages/merges', + mirror_url: null, + updated_at: '2015-11-10T20:52:30Z', + visibility: 'public', + archive_url: + 'https://api.github.com/repos/mralexgray/alcatraz-packages/{archive_format}{/ref}', + commits_url: + 'https://api.github.com/repos/mralexgray/alcatraz-packages/commits{/sha}', + compare_url: + 'https://api.github.com/repos/mralexgray/alcatraz-packages/compare/{base}...{head}', + description: 'Package list repository for Alcatraz', + forks_count: 0, + is_template: false, + open_issues: 0, + branches_url: + 'https://api.github.com/repos/mralexgray/alcatraz-packages/branches{/branch}', + comments_url: + 'https://api.github.com/repos/mralexgray/alcatraz-packages/comments{/number}', + contents_url: + 'https://api.github.com/repos/mralexgray/alcatraz-packages/contents/{+path}', + git_refs_url: + 'https://api.github.com/repos/mralexgray/alcatraz-packages/git/refs{/sha}', + git_tags_url: + 'https://api.github.com/repos/mralexgray/alcatraz-packages/git/tags{/sha}', + has_projects: true, + releases_url: + 'https://api.github.com/repos/mralexgray/alcatraz-packages/releases{/id}', + statuses_url: + 'https://api.github.com/repos/mralexgray/alcatraz-packages/statuses/{sha}', + allow_forking: true, + assignees_url: + 'https://api.github.com/repos/mralexgray/alcatraz-packages/assignees{/user}', + downloads_url: + 'https://api.github.com/repos/mralexgray/alcatraz-packages/downloads', + has_downloads: true, + languages_url: + 'https://api.github.com/repos/mralexgray/alcatraz-packages/languages', + default_branch: 'master', + milestones_url: + 'https://api.github.com/repos/mralexgray/alcatraz-packages/milestones{/number}', + stargazers_url: + 'https://api.github.com/repos/mralexgray/alcatraz-packages/stargazers', + watchers_count: 0, + deployments_url: + 'https://api.github.com/repos/mralexgray/alcatraz-packages/deployments', + git_commits_url: + 'https://api.github.com/repos/mralexgray/alcatraz-packages/git/commits{/sha}', + subscribers_url: + 'https://api.github.com/repos/mralexgray/alcatraz-packages/subscribers', + contributors_url: + 'https://api.github.com/repos/mralexgray/alcatraz-packages/contributors', + issue_events_url: + 'https://api.github.com/repos/mralexgray/alcatraz-packages/issues/events{/number}', + stargazers_count: 0, + subscription_url: + 'https://api.github.com/repos/mralexgray/alcatraz-packages/subscription', + collaborators_url: + 'https://api.github.com/repos/mralexgray/alcatraz-packages/collaborators{/collaborator}', + issue_comment_url: + 'https://api.github.com/repos/mralexgray/alcatraz-packages/issues/comments{/number}', + notifications_url: + 'https://api.github.com/repos/mralexgray/alcatraz-packages/notifications{?since,all,participating}', + open_issues_count: 0, + web_commit_signoff_required: false, + }, + { + id: 44278362, + url: 'https://api.github.com/repos/mralexgray/alexicons', + fork: true, + name: 'alexicons', + size: 257, + forks: 0, + owner: { + id: 262517, + url: 'https://api.github.com/users/mralexgray', + type: 'User', + login: 'mralexgray', + node_id: 'MDQ6VXNlcjI2MjUxNw==', + html_url: 'https://github.com/mralexgray', + gists_url: + 'https://api.github.com/users/mralexgray/gists{/gist_id}', + repos_url: 'https://api.github.com/users/mralexgray/repos', + avatar_url: 'https://avatars.githubusercontent.com/u/262517?v=4', + events_url: + 'https://api.github.com/users/mralexgray/events{/privacy}', + site_admin: false, + gravatar_id: '', + starred_url: + 'https://api.github.com/users/mralexgray/starred{/owner}{/repo}', + followers_url: 'https://api.github.com/users/mralexgray/followers', + following_url: + 'https://api.github.com/users/mralexgray/following{/other_user}', + organizations_url: 'https://api.github.com/users/mralexgray/orgs', + subscriptions_url: + 'https://api.github.com/users/mralexgray/subscriptions', + received_events_url: + 'https://api.github.com/users/mralexgray/received_events', + }, + topics: [], + git_url: 'git://github.com/mralexgray/alexicons.git', + license: null, + node_id: 'MDEwOlJlcG9zaXRvcnk0NDI3ODM2Mg==', + private: false, + ssh_url: 'git@github.com:mralexgray/alexicons.git', + svn_url: 'https://github.com/mralexgray/alexicons', + archived: false, + disabled: false, + has_wiki: false, + homepage: null, + html_url: 'https://github.com/mralexgray/alexicons', + keys_url: + 'https://api.github.com/repos/mralexgray/alexicons/keys{/key_id}', + language: 'CoffeeScript', + tags_url: 'https://api.github.com/repos/mralexgray/alexicons/tags', + watchers: 0, + blobs_url: + 'https://api.github.com/repos/mralexgray/alexicons/git/blobs{/sha}', + clone_url: 'https://github.com/mralexgray/alexicons.git', + forks_url: 'https://api.github.com/repos/mralexgray/alexicons/forks', + full_name: 'mralexgray/alexicons', + has_pages: false, + hooks_url: 'https://api.github.com/repos/mralexgray/alexicons/hooks', + pulls_url: + 'https://api.github.com/repos/mralexgray/alexicons/pulls{/number}', + pushed_at: '2015-10-16T03:57:51Z', + teams_url: 'https://api.github.com/repos/mralexgray/alexicons/teams', + trees_url: + 'https://api.github.com/repos/mralexgray/alexicons/git/trees{/sha}', + created_at: '2015-10-14T21:49:39Z', + events_url: + 'https://api.github.com/repos/mralexgray/alexicons/events', + has_issues: false, + issues_url: + 'https://api.github.com/repos/mralexgray/alexicons/issues{/number}', + labels_url: + 'https://api.github.com/repos/mralexgray/alexicons/labels{/name}', + merges_url: + 'https://api.github.com/repos/mralexgray/alexicons/merges', + mirror_url: null, + updated_at: '2015-10-15T06:20:08Z', + visibility: 'public', + archive_url: + 'https://api.github.com/repos/mralexgray/alexicons/{archive_format}{/ref}', + commits_url: + 'https://api.github.com/repos/mralexgray/alexicons/commits{/sha}', + compare_url: + 'https://api.github.com/repos/mralexgray/alexicons/compare/{base}...{head}', + description: 'Get popular cat names', + forks_count: 0, + is_template: false, + open_issues: 0, + branches_url: + 'https://api.github.com/repos/mralexgray/alexicons/branches{/branch}', + comments_url: + 'https://api.github.com/repos/mralexgray/alexicons/comments{/number}', + contents_url: + 'https://api.github.com/repos/mralexgray/alexicons/contents/{+path}', + git_refs_url: + 'https://api.github.com/repos/mralexgray/alexicons/git/refs{/sha}', + git_tags_url: + 'https://api.github.com/repos/mralexgray/alexicons/git/tags{/sha}', + has_projects: true, + releases_url: + 'https://api.github.com/repos/mralexgray/alexicons/releases{/id}', + statuses_url: + 'https://api.github.com/repos/mralexgray/alexicons/statuses/{sha}', + allow_forking: true, + assignees_url: + 'https://api.github.com/repos/mralexgray/alexicons/assignees{/user}', + downloads_url: + 'https://api.github.com/repos/mralexgray/alexicons/downloads', + has_downloads: true, + languages_url: + 'https://api.github.com/repos/mralexgray/alexicons/languages', + default_branch: 'master', + milestones_url: + 'https://api.github.com/repos/mralexgray/alexicons/milestones{/number}', + stargazers_url: + 'https://api.github.com/repos/mralexgray/alexicons/stargazers', + watchers_count: 0, + deployments_url: + 'https://api.github.com/repos/mralexgray/alexicons/deployments', + git_commits_url: + 'https://api.github.com/repos/mralexgray/alexicons/git/commits{/sha}', + subscribers_url: + 'https://api.github.com/repos/mralexgray/alexicons/subscribers', + contributors_url: + 'https://api.github.com/repos/mralexgray/alexicons/contributors', + issue_events_url: + 'https://api.github.com/repos/mralexgray/alexicons/issues/events{/number}', + stargazers_count: 0, + subscription_url: + 'https://api.github.com/repos/mralexgray/alexicons/subscription', + collaborators_url: + 'https://api.github.com/repos/mralexgray/alexicons/collaborators{/collaborator}', + issue_comment_url: + 'https://api.github.com/repos/mralexgray/alexicons/issues/comments{/number}', + notifications_url: + 'https://api.github.com/repos/mralexgray/alexicons/notifications{?since,all,participating}', + open_issues_count: 0, + web_commit_signoff_required: false, + }, + { + id: 10476467, + url: 'https://api.github.com/repos/mralexgray/Alfred-Google-Translate', + fork: true, + name: 'Alfred-Google-Translate', + size: 103, + forks: 0, + owner: { + id: 262517, + url: 'https://api.github.com/users/mralexgray', + type: 'User', + login: 'mralexgray', + node_id: 'MDQ6VXNlcjI2MjUxNw==', + html_url: 'https://github.com/mralexgray', + gists_url: + 'https://api.github.com/users/mralexgray/gists{/gist_id}', + repos_url: 'https://api.github.com/users/mralexgray/repos', + avatar_url: 'https://avatars.githubusercontent.com/u/262517?v=4', + events_url: + 'https://api.github.com/users/mralexgray/events{/privacy}', + site_admin: false, + gravatar_id: '', + starred_url: + 'https://api.github.com/users/mralexgray/starred{/owner}{/repo}', + followers_url: 'https://api.github.com/users/mralexgray/followers', + following_url: + 'https://api.github.com/users/mralexgray/following{/other_user}', + organizations_url: 'https://api.github.com/users/mralexgray/orgs', + subscriptions_url: + 'https://api.github.com/users/mralexgray/subscriptions', + received_events_url: + 'https://api.github.com/users/mralexgray/received_events', + }, + topics: [], + git_url: 'git://github.com/mralexgray/Alfred-Google-Translate.git', + license: null, + node_id: 'MDEwOlJlcG9zaXRvcnkxMDQ3NjQ2Nw==', + private: false, + ssh_url: 'git@github.com:mralexgray/Alfred-Google-Translate.git', + svn_url: 'https://github.com/mralexgray/Alfred-Google-Translate', + archived: false, + disabled: false, + has_wiki: true, + homepage: null, + html_url: 'https://github.com/mralexgray/Alfred-Google-Translate', + keys_url: + 'https://api.github.com/repos/mralexgray/Alfred-Google-Translate/keys{/key_id}', + language: 'Shell', + tags_url: + 'https://api.github.com/repos/mralexgray/Alfred-Google-Translate/tags', + watchers: 0, + blobs_url: + 'https://api.github.com/repos/mralexgray/Alfred-Google-Translate/git/blobs{/sha}', + clone_url: + 'https://github.com/mralexgray/Alfred-Google-Translate.git', + forks_url: + 'https://api.github.com/repos/mralexgray/Alfred-Google-Translate/forks', + full_name: 'mralexgray/Alfred-Google-Translate', + has_pages: false, + hooks_url: + 'https://api.github.com/repos/mralexgray/Alfred-Google-Translate/hooks', + pulls_url: + 'https://api.github.com/repos/mralexgray/Alfred-Google-Translate/pulls{/number}', + pushed_at: '2013-01-12T19:39:03Z', + teams_url: + 'https://api.github.com/repos/mralexgray/Alfred-Google-Translate/teams', + trees_url: + 'https://api.github.com/repos/mralexgray/Alfred-Google-Translate/git/trees{/sha}', + created_at: '2013-06-04T10:45:10Z', + events_url: + 'https://api.github.com/repos/mralexgray/Alfred-Google-Translate/events', + has_issues: false, + issues_url: + 'https://api.github.com/repos/mralexgray/Alfred-Google-Translate/issues{/number}', + labels_url: + 'https://api.github.com/repos/mralexgray/Alfred-Google-Translate/labels{/name}', + merges_url: + 'https://api.github.com/repos/mralexgray/Alfred-Google-Translate/merges', + mirror_url: null, + updated_at: '2013-06-04T10:45:10Z', + visibility: 'public', + archive_url: + 'https://api.github.com/repos/mralexgray/Alfred-Google-Translate/{archive_format}{/ref}', + commits_url: + 'https://api.github.com/repos/mralexgray/Alfred-Google-Translate/commits{/sha}', + compare_url: + 'https://api.github.com/repos/mralexgray/Alfred-Google-Translate/compare/{base}...{head}', + description: + 'Extension for Alfred that will do a Google translate for you', + forks_count: 0, + is_template: false, + open_issues: 0, + branches_url: + 'https://api.github.com/repos/mralexgray/Alfred-Google-Translate/branches{/branch}', + comments_url: + 'https://api.github.com/repos/mralexgray/Alfred-Google-Translate/comments{/number}', + contents_url: + 'https://api.github.com/repos/mralexgray/Alfred-Google-Translate/contents/{+path}', + git_refs_url: + 'https://api.github.com/repos/mralexgray/Alfred-Google-Translate/git/refs{/sha}', + git_tags_url: + 'https://api.github.com/repos/mralexgray/Alfred-Google-Translate/git/tags{/sha}', + has_projects: true, + releases_url: + 'https://api.github.com/repos/mralexgray/Alfred-Google-Translate/releases{/id}', + statuses_url: + 'https://api.github.com/repos/mralexgray/Alfred-Google-Translate/statuses/{sha}', + allow_forking: true, + assignees_url: + 'https://api.github.com/repos/mralexgray/Alfred-Google-Translate/assignees{/user}', + downloads_url: + 'https://api.github.com/repos/mralexgray/Alfred-Google-Translate/downloads', + has_downloads: true, + languages_url: + 'https://api.github.com/repos/mralexgray/Alfred-Google-Translate/languages', + default_branch: 'master', + milestones_url: + 'https://api.github.com/repos/mralexgray/Alfred-Google-Translate/milestones{/number}', + stargazers_url: + 'https://api.github.com/repos/mralexgray/Alfred-Google-Translate/stargazers', + watchers_count: 0, + deployments_url: + 'https://api.github.com/repos/mralexgray/Alfred-Google-Translate/deployments', + git_commits_url: + 'https://api.github.com/repos/mralexgray/Alfred-Google-Translate/git/commits{/sha}', + subscribers_url: + 'https://api.github.com/repos/mralexgray/Alfred-Google-Translate/subscribers', + contributors_url: + 'https://api.github.com/repos/mralexgray/Alfred-Google-Translate/contributors', + issue_events_url: + 'https://api.github.com/repos/mralexgray/Alfred-Google-Translate/issues/events{/number}', + stargazers_count: 0, + subscription_url: + 'https://api.github.com/repos/mralexgray/Alfred-Google-Translate/subscription', + collaborators_url: + 'https://api.github.com/repos/mralexgray/Alfred-Google-Translate/collaborators{/collaborator}', + issue_comment_url: + 'https://api.github.com/repos/mralexgray/Alfred-Google-Translate/issues/comments{/number}', + notifications_url: + 'https://api.github.com/repos/mralexgray/Alfred-Google-Translate/notifications{?since,all,participating}', + open_issues_count: 0, + web_commit_signoff_required: false, + }, + { + id: 5524019, + url: 'https://api.github.com/repos/mralexgray/Amber', + fork: false, + name: 'Amber', + size: 48, + forks: 0, + owner: { + id: 262517, + url: 'https://api.github.com/users/mralexgray', + type: 'User', + login: 'mralexgray', + node_id: 'MDQ6VXNlcjI2MjUxNw==', + html_url: 'https://github.com/mralexgray', + gists_url: + 'https://api.github.com/users/mralexgray/gists{/gist_id}', + repos_url: 'https://api.github.com/users/mralexgray/repos', + avatar_url: 'https://avatars.githubusercontent.com/u/262517?v=4', + events_url: + 'https://api.github.com/users/mralexgray/events{/privacy}', + site_admin: false, + gravatar_id: '', + starred_url: + 'https://api.github.com/users/mralexgray/starred{/owner}{/repo}', + followers_url: 'https://api.github.com/users/mralexgray/followers', + following_url: + 'https://api.github.com/users/mralexgray/following{/other_user}', + organizations_url: 'https://api.github.com/users/mralexgray/orgs', + subscriptions_url: + 'https://api.github.com/users/mralexgray/subscriptions', + received_events_url: + 'https://api.github.com/users/mralexgray/received_events', + }, + topics: [], + git_url: 'git://github.com/mralexgray/Amber.git', + license: null, + node_id: 'MDEwOlJlcG9zaXRvcnk1NTI0MDE5', + private: false, + ssh_url: 'git@github.com:mralexgray/Amber.git', + svn_url: 'https://github.com/mralexgray/Amber', + archived: false, + disabled: false, + has_wiki: true, + homepage: null, + html_url: 'https://github.com/mralexgray/Amber', + keys_url: + 'https://api.github.com/repos/mralexgray/Amber/keys{/key_id}', + language: null, + tags_url: 'https://api.github.com/repos/mralexgray/Amber/tags', + watchers: 0, + blobs_url: + 'https://api.github.com/repos/mralexgray/Amber/git/blobs{/sha}', + clone_url: 'https://github.com/mralexgray/Amber.git', + forks_url: 'https://api.github.com/repos/mralexgray/Amber/forks', + full_name: 'mralexgray/Amber', + has_pages: false, + hooks_url: 'https://api.github.com/repos/mralexgray/Amber/hooks', + pulls_url: + 'https://api.github.com/repos/mralexgray/Amber/pulls{/number}', + pushed_at: '2012-08-23T10:38:25Z', + teams_url: 'https://api.github.com/repos/mralexgray/Amber/teams', + trees_url: + 'https://api.github.com/repos/mralexgray/Amber/git/trees{/sha}', + created_at: '2012-08-23T10:38:24Z', + events_url: 'https://api.github.com/repos/mralexgray/Amber/events', + has_issues: true, + issues_url: + 'https://api.github.com/repos/mralexgray/Amber/issues{/number}', + labels_url: + 'https://api.github.com/repos/mralexgray/Amber/labels{/name}', + merges_url: 'https://api.github.com/repos/mralexgray/Amber/merges', + mirror_url: null, + updated_at: '2013-01-11T22:25:35Z', + visibility: 'public', + archive_url: + 'https://api.github.com/repos/mralexgray/Amber/{archive_format}{/ref}', + commits_url: + 'https://api.github.com/repos/mralexgray/Amber/commits{/sha}', + compare_url: + 'https://api.github.com/repos/mralexgray/Amber/compare/{base}...{head}', + description: 'Fork of the difficult-to-deal-with Amber.framework', + forks_count: 0, + is_template: false, + open_issues: 0, + branches_url: + 'https://api.github.com/repos/mralexgray/Amber/branches{/branch}', + comments_url: + 'https://api.github.com/repos/mralexgray/Amber/comments{/number}', + contents_url: + 'https://api.github.com/repos/mralexgray/Amber/contents/{+path}', + git_refs_url: + 'https://api.github.com/repos/mralexgray/Amber/git/refs{/sha}', + git_tags_url: + 'https://api.github.com/repos/mralexgray/Amber/git/tags{/sha}', + has_projects: true, + releases_url: + 'https://api.github.com/repos/mralexgray/Amber/releases{/id}', + statuses_url: + 'https://api.github.com/repos/mralexgray/Amber/statuses/{sha}', + allow_forking: true, + assignees_url: + 'https://api.github.com/repos/mralexgray/Amber/assignees{/user}', + downloads_url: + 'https://api.github.com/repos/mralexgray/Amber/downloads', + has_downloads: true, + languages_url: + 'https://api.github.com/repos/mralexgray/Amber/languages', + default_branch: 'master', + milestones_url: + 'https://api.github.com/repos/mralexgray/Amber/milestones{/number}', + stargazers_url: + 'https://api.github.com/repos/mralexgray/Amber/stargazers', + watchers_count: 0, + deployments_url: + 'https://api.github.com/repos/mralexgray/Amber/deployments', + git_commits_url: + 'https://api.github.com/repos/mralexgray/Amber/git/commits{/sha}', + subscribers_url: + 'https://api.github.com/repos/mralexgray/Amber/subscribers', + contributors_url: + 'https://api.github.com/repos/mralexgray/Amber/contributors', + issue_events_url: + 'https://api.github.com/repos/mralexgray/Amber/issues/events{/number}', + stargazers_count: 0, + subscription_url: + 'https://api.github.com/repos/mralexgray/Amber/subscription', + collaborators_url: + 'https://api.github.com/repos/mralexgray/Amber/collaborators{/collaborator}', + issue_comment_url: + 'https://api.github.com/repos/mralexgray/Amber/issues/comments{/number}', + notifications_url: + 'https://api.github.com/repos/mralexgray/Amber/notifications{?since,all,participating}', + open_issues_count: 0, + web_commit_signoff_required: false, + }, + { + id: 10809060, + url: 'https://api.github.com/repos/mralexgray/Amethyst', + fork: true, + name: 'Amethyst', + size: 12623, + forks: 0, + owner: { + id: 262517, + url: 'https://api.github.com/users/mralexgray', + type: 'User', + login: 'mralexgray', + node_id: 'MDQ6VXNlcjI2MjUxNw==', + html_url: 'https://github.com/mralexgray', + gists_url: + 'https://api.github.com/users/mralexgray/gists{/gist_id}', + repos_url: 'https://api.github.com/users/mralexgray/repos', + avatar_url: 'https://avatars.githubusercontent.com/u/262517?v=4', + events_url: + 'https://api.github.com/users/mralexgray/events{/privacy}', + site_admin: false, + gravatar_id: '', + starred_url: + 'https://api.github.com/users/mralexgray/starred{/owner}{/repo}', + followers_url: 'https://api.github.com/users/mralexgray/followers', + following_url: + 'https://api.github.com/users/mralexgray/following{/other_user}', + organizations_url: 'https://api.github.com/users/mralexgray/orgs', + subscriptions_url: + 'https://api.github.com/users/mralexgray/subscriptions', + received_events_url: + 'https://api.github.com/users/mralexgray/received_events', + }, + topics: [], + git_url: 'git://github.com/mralexgray/Amethyst.git', + license: { + key: 'mit', + url: 'https://api.github.com/licenses/mit', + name: 'MIT License', + node_id: 'MDc6TGljZW5zZTEz', + spdx_id: 'MIT', + }, + node_id: 'MDEwOlJlcG9zaXRvcnkxMDgwOTA2MA==', + private: false, + ssh_url: 'git@github.com:mralexgray/Amethyst.git', + svn_url: 'https://github.com/mralexgray/Amethyst', + archived: false, + disabled: false, + has_wiki: true, + homepage: 'http://ianyh.github.io/Amethyst/', + html_url: 'https://github.com/mralexgray/Amethyst', + keys_url: + 'https://api.github.com/repos/mralexgray/Amethyst/keys{/key_id}', + language: 'Objective-C', + tags_url: 'https://api.github.com/repos/mralexgray/Amethyst/tags', + watchers: 0, + blobs_url: + 'https://api.github.com/repos/mralexgray/Amethyst/git/blobs{/sha}', + clone_url: 'https://github.com/mralexgray/Amethyst.git', + forks_url: 'https://api.github.com/repos/mralexgray/Amethyst/forks', + full_name: 'mralexgray/Amethyst', + has_pages: false, + hooks_url: 'https://api.github.com/repos/mralexgray/Amethyst/hooks', + pulls_url: + 'https://api.github.com/repos/mralexgray/Amethyst/pulls{/number}', + pushed_at: '2013-06-18T02:54:11Z', + teams_url: 'https://api.github.com/repos/mralexgray/Amethyst/teams', + trees_url: + 'https://api.github.com/repos/mralexgray/Amethyst/git/trees{/sha}', + created_at: '2013-06-20T00:34:22Z', + events_url: 'https://api.github.com/repos/mralexgray/Amethyst/events', + has_issues: false, + issues_url: + 'https://api.github.com/repos/mralexgray/Amethyst/issues{/number}', + labels_url: + 'https://api.github.com/repos/mralexgray/Amethyst/labels{/name}', + merges_url: 'https://api.github.com/repos/mralexgray/Amethyst/merges', + mirror_url: null, + updated_at: '2013-06-20T00:34:22Z', + visibility: 'public', + archive_url: + 'https://api.github.com/repos/mralexgray/Amethyst/{archive_format}{/ref}', + commits_url: + 'https://api.github.com/repos/mralexgray/Amethyst/commits{/sha}', + compare_url: + 'https://api.github.com/repos/mralexgray/Amethyst/compare/{base}...{head}', + description: 'Tiling window manager for OS X.', + forks_count: 0, + is_template: false, + open_issues: 0, + branches_url: + 'https://api.github.com/repos/mralexgray/Amethyst/branches{/branch}', + comments_url: + 'https://api.github.com/repos/mralexgray/Amethyst/comments{/number}', + contents_url: + 'https://api.github.com/repos/mralexgray/Amethyst/contents/{+path}', + git_refs_url: + 'https://api.github.com/repos/mralexgray/Amethyst/git/refs{/sha}', + git_tags_url: + 'https://api.github.com/repos/mralexgray/Amethyst/git/tags{/sha}', + has_projects: true, + releases_url: + 'https://api.github.com/repos/mralexgray/Amethyst/releases{/id}', + statuses_url: + 'https://api.github.com/repos/mralexgray/Amethyst/statuses/{sha}', + allow_forking: true, + assignees_url: + 'https://api.github.com/repos/mralexgray/Amethyst/assignees{/user}', + downloads_url: + 'https://api.github.com/repos/mralexgray/Amethyst/downloads', + has_downloads: true, + languages_url: + 'https://api.github.com/repos/mralexgray/Amethyst/languages', + default_branch: 'master', + milestones_url: + 'https://api.github.com/repos/mralexgray/Amethyst/milestones{/number}', + stargazers_url: + 'https://api.github.com/repos/mralexgray/Amethyst/stargazers', + watchers_count: 0, + deployments_url: + 'https://api.github.com/repos/mralexgray/Amethyst/deployments', + git_commits_url: + 'https://api.github.com/repos/mralexgray/Amethyst/git/commits{/sha}', + subscribers_url: + 'https://api.github.com/repos/mralexgray/Amethyst/subscribers', + contributors_url: + 'https://api.github.com/repos/mralexgray/Amethyst/contributors', + issue_events_url: + 'https://api.github.com/repos/mralexgray/Amethyst/issues/events{/number}', + stargazers_count: 0, + subscription_url: + 'https://api.github.com/repos/mralexgray/Amethyst/subscription', + collaborators_url: + 'https://api.github.com/repos/mralexgray/Amethyst/collaborators{/collaborator}', + issue_comment_url: + 'https://api.github.com/repos/mralexgray/Amethyst/issues/comments{/number}', + notifications_url: + 'https://api.github.com/repos/mralexgray/Amethyst/notifications{?since,all,participating}', + open_issues_count: 0, + web_commit_signoff_required: false, + }, + { + id: 3684286, + url: 'https://api.github.com/repos/mralexgray/Animated-Paths', + fork: true, + name: 'Animated-Paths', + size: 411, + forks: 0, + owner: { + id: 262517, + url: 'https://api.github.com/users/mralexgray', + type: 'User', + login: 'mralexgray', + node_id: 'MDQ6VXNlcjI2MjUxNw==', + html_url: 'https://github.com/mralexgray', + gists_url: + 'https://api.github.com/users/mralexgray/gists{/gist_id}', + repos_url: 'https://api.github.com/users/mralexgray/repos', + avatar_url: 'https://avatars.githubusercontent.com/u/262517?v=4', + events_url: + 'https://api.github.com/users/mralexgray/events{/privacy}', + site_admin: false, + gravatar_id: '', + starred_url: + 'https://api.github.com/users/mralexgray/starred{/owner}{/repo}', + followers_url: 'https://api.github.com/users/mralexgray/followers', + following_url: + 'https://api.github.com/users/mralexgray/following{/other_user}', + organizations_url: 'https://api.github.com/users/mralexgray/orgs', + subscriptions_url: + 'https://api.github.com/users/mralexgray/subscriptions', + received_events_url: + 'https://api.github.com/users/mralexgray/received_events', + }, + topics: [], + git_url: 'git://github.com/mralexgray/Animated-Paths.git', + license: { + key: 'other', + url: null, + name: 'Other', + node_id: 'MDc6TGljZW5zZTA=', + spdx_id: 'NOASSERTION', + }, + node_id: 'MDEwOlJlcG9zaXRvcnkzNjg0Mjg2', + private: false, + ssh_url: 'git@github.com:mralexgray/Animated-Paths.git', + svn_url: 'https://github.com/mralexgray/Animated-Paths', + archived: false, + disabled: false, + has_wiki: true, + homepage: + 'http://oleb.net/blog/2010/12/animating-drawing-of-cgpath-with-cashapelayer/', + html_url: 'https://github.com/mralexgray/Animated-Paths', + keys_url: + 'https://api.github.com/repos/mralexgray/Animated-Paths/keys{/key_id}', + language: 'Objective-C', + tags_url: + 'https://api.github.com/repos/mralexgray/Animated-Paths/tags', + watchers: 2, + blobs_url: + 'https://api.github.com/repos/mralexgray/Animated-Paths/git/blobs{/sha}', + clone_url: 'https://github.com/mralexgray/Animated-Paths.git', + forks_url: + 'https://api.github.com/repos/mralexgray/Animated-Paths/forks', + full_name: 'mralexgray/Animated-Paths', + has_pages: false, + hooks_url: + 'https://api.github.com/repos/mralexgray/Animated-Paths/hooks', + pulls_url: + 'https://api.github.com/repos/mralexgray/Animated-Paths/pulls{/number}', + pushed_at: '2010-12-30T20:56:51Z', + teams_url: + 'https://api.github.com/repos/mralexgray/Animated-Paths/teams', + trees_url: + 'https://api.github.com/repos/mralexgray/Animated-Paths/git/trees{/sha}', + created_at: '2012-03-11T02:56:38Z', + events_url: + 'https://api.github.com/repos/mralexgray/Animated-Paths/events', + has_issues: false, + issues_url: + 'https://api.github.com/repos/mralexgray/Animated-Paths/issues{/number}', + labels_url: + 'https://api.github.com/repos/mralexgray/Animated-Paths/labels{/name}', + merges_url: + 'https://api.github.com/repos/mralexgray/Animated-Paths/merges', + mirror_url: null, + updated_at: '2013-01-08T04:12:21Z', + visibility: 'public', + archive_url: + 'https://api.github.com/repos/mralexgray/Animated-Paths/{archive_format}{/ref}', + commits_url: + 'https://api.github.com/repos/mralexgray/Animated-Paths/commits{/sha}', + compare_url: + 'https://api.github.com/repos/mralexgray/Animated-Paths/compare/{base}...{head}', + description: + 'Demo project: Animating the drawing of a CGPath with CAShapeLayer.strokeEnd', + forks_count: 0, + is_template: false, + open_issues: 0, + branches_url: + 'https://api.github.com/repos/mralexgray/Animated-Paths/branches{/branch}', + comments_url: + 'https://api.github.com/repos/mralexgray/Animated-Paths/comments{/number}', + contents_url: + 'https://api.github.com/repos/mralexgray/Animated-Paths/contents/{+path}', + git_refs_url: + 'https://api.github.com/repos/mralexgray/Animated-Paths/git/refs{/sha}', + git_tags_url: + 'https://api.github.com/repos/mralexgray/Animated-Paths/git/tags{/sha}', + has_projects: true, + releases_url: + 'https://api.github.com/repos/mralexgray/Animated-Paths/releases{/id}', + statuses_url: + 'https://api.github.com/repos/mralexgray/Animated-Paths/statuses/{sha}', + allow_forking: true, + assignees_url: + 'https://api.github.com/repos/mralexgray/Animated-Paths/assignees{/user}', + downloads_url: + 'https://api.github.com/repos/mralexgray/Animated-Paths/downloads', + has_downloads: true, + languages_url: + 'https://api.github.com/repos/mralexgray/Animated-Paths/languages', + default_branch: 'master', + milestones_url: + 'https://api.github.com/repos/mralexgray/Animated-Paths/milestones{/number}', + stargazers_url: + 'https://api.github.com/repos/mralexgray/Animated-Paths/stargazers', + watchers_count: 2, + deployments_url: + 'https://api.github.com/repos/mralexgray/Animated-Paths/deployments', + git_commits_url: + 'https://api.github.com/repos/mralexgray/Animated-Paths/git/commits{/sha}', + subscribers_url: + 'https://api.github.com/repos/mralexgray/Animated-Paths/subscribers', + contributors_url: + 'https://api.github.com/repos/mralexgray/Animated-Paths/contributors', + issue_events_url: + 'https://api.github.com/repos/mralexgray/Animated-Paths/issues/events{/number}', + stargazers_count: 2, + subscription_url: + 'https://api.github.com/repos/mralexgray/Animated-Paths/subscription', + collaborators_url: + 'https://api.github.com/repos/mralexgray/Animated-Paths/collaborators{/collaborator}', + issue_comment_url: + 'https://api.github.com/repos/mralexgray/Animated-Paths/issues/comments{/number}', + notifications_url: + 'https://api.github.com/repos/mralexgray/Animated-Paths/notifications{?since,all,participating}', + open_issues_count: 0, + web_commit_signoff_required: false, + }, + { + id: 16662874, + url: 'https://api.github.com/repos/mralexgray/AnsiLove.framework', + fork: true, + name: 'AnsiLove.framework', + size: 3780, + forks: 0, + owner: { + id: 262517, + url: 'https://api.github.com/users/mralexgray', + type: 'User', + login: 'mralexgray', + node_id: 'MDQ6VXNlcjI2MjUxNw==', + html_url: 'https://github.com/mralexgray', + gists_url: + 'https://api.github.com/users/mralexgray/gists{/gist_id}', + repos_url: 'https://api.github.com/users/mralexgray/repos', + avatar_url: 'https://avatars.githubusercontent.com/u/262517?v=4', + events_url: + 'https://api.github.com/users/mralexgray/events{/privacy}', + site_admin: false, + gravatar_id: '', + starred_url: + 'https://api.github.com/users/mralexgray/starred{/owner}{/repo}', + followers_url: 'https://api.github.com/users/mralexgray/followers', + following_url: + 'https://api.github.com/users/mralexgray/following{/other_user}', + organizations_url: 'https://api.github.com/users/mralexgray/orgs', + subscriptions_url: + 'https://api.github.com/users/mralexgray/subscriptions', + received_events_url: + 'https://api.github.com/users/mralexgray/received_events', + }, + topics: [], + git_url: 'git://github.com/mralexgray/AnsiLove.framework.git', + license: { + key: 'other', + url: null, + name: 'Other', + node_id: 'MDc6TGljZW5zZTA=', + spdx_id: 'NOASSERTION', + }, + node_id: 'MDEwOlJlcG9zaXRvcnkxNjY2Mjg3NA==', + private: false, + ssh_url: 'git@github.com:mralexgray/AnsiLove.framework.git', + svn_url: 'https://github.com/mralexgray/AnsiLove.framework', + archived: false, + disabled: false, + has_wiki: false, + homepage: 'http://byteproject.net', + html_url: 'https://github.com/mralexgray/AnsiLove.framework', + keys_url: + 'https://api.github.com/repos/mralexgray/AnsiLove.framework/keys{/key_id}', + language: 'M', + tags_url: + 'https://api.github.com/repos/mralexgray/AnsiLove.framework/tags', + watchers: 0, + blobs_url: + 'https://api.github.com/repos/mralexgray/AnsiLove.framework/git/blobs{/sha}', + clone_url: 'https://github.com/mralexgray/AnsiLove.framework.git', + forks_url: + 'https://api.github.com/repos/mralexgray/AnsiLove.framework/forks', + full_name: 'mralexgray/AnsiLove.framework', + has_pages: false, + hooks_url: + 'https://api.github.com/repos/mralexgray/AnsiLove.framework/hooks', + pulls_url: + 'https://api.github.com/repos/mralexgray/AnsiLove.framework/pulls{/number}', + pushed_at: '2013-10-04T14:08:38Z', + teams_url: + 'https://api.github.com/repos/mralexgray/AnsiLove.framework/teams', + trees_url: + 'https://api.github.com/repos/mralexgray/AnsiLove.framework/git/trees{/sha}', + created_at: '2014-02-09T08:30:27Z', + events_url: + 'https://api.github.com/repos/mralexgray/AnsiLove.framework/events', + has_issues: false, + issues_url: + 'https://api.github.com/repos/mralexgray/AnsiLove.framework/issues{/number}', + labels_url: + 'https://api.github.com/repos/mralexgray/AnsiLove.framework/labels{/name}', + merges_url: + 'https://api.github.com/repos/mralexgray/AnsiLove.framework/merges', + mirror_url: null, + updated_at: '2015-01-13T20:41:46Z', + visibility: 'public', + archive_url: + 'https://api.github.com/repos/mralexgray/AnsiLove.framework/{archive_format}{/ref}', + commits_url: + 'https://api.github.com/repos/mralexgray/AnsiLove.framework/commits{/sha}', + compare_url: + 'https://api.github.com/repos/mralexgray/AnsiLove.framework/compare/{base}...{head}', + description: 'Cocoa Framework for rendering ANSi / ASCII art', + forks_count: 0, + is_template: false, + open_issues: 0, + branches_url: + 'https://api.github.com/repos/mralexgray/AnsiLove.framework/branches{/branch}', + comments_url: + 'https://api.github.com/repos/mralexgray/AnsiLove.framework/comments{/number}', + contents_url: + 'https://api.github.com/repos/mralexgray/AnsiLove.framework/contents/{+path}', + git_refs_url: + 'https://api.github.com/repos/mralexgray/AnsiLove.framework/git/refs{/sha}', + git_tags_url: + 'https://api.github.com/repos/mralexgray/AnsiLove.framework/git/tags{/sha}', + has_projects: true, + releases_url: + 'https://api.github.com/repos/mralexgray/AnsiLove.framework/releases{/id}', + statuses_url: + 'https://api.github.com/repos/mralexgray/AnsiLove.framework/statuses/{sha}', + allow_forking: true, + assignees_url: + 'https://api.github.com/repos/mralexgray/AnsiLove.framework/assignees{/user}', + downloads_url: + 'https://api.github.com/repos/mralexgray/AnsiLove.framework/downloads', + has_downloads: true, + languages_url: + 'https://api.github.com/repos/mralexgray/AnsiLove.framework/languages', + default_branch: 'master', + milestones_url: + 'https://api.github.com/repos/mralexgray/AnsiLove.framework/milestones{/number}', + stargazers_url: + 'https://api.github.com/repos/mralexgray/AnsiLove.framework/stargazers', + watchers_count: 0, + deployments_url: + 'https://api.github.com/repos/mralexgray/AnsiLove.framework/deployments', + git_commits_url: + 'https://api.github.com/repos/mralexgray/AnsiLove.framework/git/commits{/sha}', + subscribers_url: + 'https://api.github.com/repos/mralexgray/AnsiLove.framework/subscribers', + contributors_url: + 'https://api.github.com/repos/mralexgray/AnsiLove.framework/contributors', + issue_events_url: + 'https://api.github.com/repos/mralexgray/AnsiLove.framework/issues/events{/number}', + stargazers_count: 0, + subscription_url: + 'https://api.github.com/repos/mralexgray/AnsiLove.framework/subscription', + collaborators_url: + 'https://api.github.com/repos/mralexgray/AnsiLove.framework/collaborators{/collaborator}', + issue_comment_url: + 'https://api.github.com/repos/mralexgray/AnsiLove.framework/issues/comments{/number}', + notifications_url: + 'https://api.github.com/repos/mralexgray/AnsiLove.framework/notifications{?since,all,participating}', + open_issues_count: 0, + web_commit_signoff_required: false, + }, + { + id: 5189563, + url: 'https://api.github.com/repos/mralexgray/ANTrackBar', + fork: true, + name: 'ANTrackBar', + size: 94, + forks: 0, + owner: { + id: 262517, + url: 'https://api.github.com/users/mralexgray', + type: 'User', + login: 'mralexgray', + node_id: 'MDQ6VXNlcjI2MjUxNw==', + html_url: 'https://github.com/mralexgray', + gists_url: + 'https://api.github.com/users/mralexgray/gists{/gist_id}', + repos_url: 'https://api.github.com/users/mralexgray/repos', + avatar_url: 'https://avatars.githubusercontent.com/u/262517?v=4', + events_url: + 'https://api.github.com/users/mralexgray/events{/privacy}', + site_admin: false, + gravatar_id: '', + starred_url: + 'https://api.github.com/users/mralexgray/starred{/owner}{/repo}', + followers_url: 'https://api.github.com/users/mralexgray/followers', + following_url: + 'https://api.github.com/users/mralexgray/following{/other_user}', + organizations_url: 'https://api.github.com/users/mralexgray/orgs', + subscriptions_url: + 'https://api.github.com/users/mralexgray/subscriptions', + received_events_url: + 'https://api.github.com/users/mralexgray/received_events', + }, + topics: [], + git_url: 'git://github.com/mralexgray/ANTrackBar.git', + license: null, + node_id: 'MDEwOlJlcG9zaXRvcnk1MTg5NTYz', + private: false, + ssh_url: 'git@github.com:mralexgray/ANTrackBar.git', + svn_url: 'https://github.com/mralexgray/ANTrackBar', + archived: false, + disabled: false, + has_wiki: true, + homepage: '', + html_url: 'https://github.com/mralexgray/ANTrackBar', + keys_url: + 'https://api.github.com/repos/mralexgray/ANTrackBar/keys{/key_id}', + language: 'Objective-C', + tags_url: 'https://api.github.com/repos/mralexgray/ANTrackBar/tags', + watchers: 2, + blobs_url: + 'https://api.github.com/repos/mralexgray/ANTrackBar/git/blobs{/sha}', + clone_url: 'https://github.com/mralexgray/ANTrackBar.git', + forks_url: 'https://api.github.com/repos/mralexgray/ANTrackBar/forks', + full_name: 'mralexgray/ANTrackBar', + has_pages: false, + hooks_url: 'https://api.github.com/repos/mralexgray/ANTrackBar/hooks', + pulls_url: + 'https://api.github.com/repos/mralexgray/ANTrackBar/pulls{/number}', + pushed_at: '2012-03-09T01:40:02Z', + teams_url: 'https://api.github.com/repos/mralexgray/ANTrackBar/teams', + trees_url: + 'https://api.github.com/repos/mralexgray/ANTrackBar/git/trees{/sha}', + created_at: '2012-07-26T08:17:22Z', + events_url: + 'https://api.github.com/repos/mralexgray/ANTrackBar/events', + has_issues: false, + issues_url: + 'https://api.github.com/repos/mralexgray/ANTrackBar/issues{/number}', + labels_url: + 'https://api.github.com/repos/mralexgray/ANTrackBar/labels{/name}', + merges_url: + 'https://api.github.com/repos/mralexgray/ANTrackBar/merges', + mirror_url: null, + updated_at: '2013-01-11T10:29:56Z', + visibility: 'public', + archive_url: + 'https://api.github.com/repos/mralexgray/ANTrackBar/{archive_format}{/ref}', + commits_url: + 'https://api.github.com/repos/mralexgray/ANTrackBar/commits{/sha}', + compare_url: + 'https://api.github.com/repos/mralexgray/ANTrackBar/compare/{base}...{head}', + description: + 'An easy-to-use Cocoa seek bar with a pleasing appearance', + forks_count: 0, + is_template: false, + open_issues: 0, + branches_url: + 'https://api.github.com/repos/mralexgray/ANTrackBar/branches{/branch}', + comments_url: + 'https://api.github.com/repos/mralexgray/ANTrackBar/comments{/number}', + contents_url: + 'https://api.github.com/repos/mralexgray/ANTrackBar/contents/{+path}', + git_refs_url: + 'https://api.github.com/repos/mralexgray/ANTrackBar/git/refs{/sha}', + git_tags_url: + 'https://api.github.com/repos/mralexgray/ANTrackBar/git/tags{/sha}', + has_projects: true, + releases_url: + 'https://api.github.com/repos/mralexgray/ANTrackBar/releases{/id}', + statuses_url: + 'https://api.github.com/repos/mralexgray/ANTrackBar/statuses/{sha}', + allow_forking: true, + assignees_url: + 'https://api.github.com/repos/mralexgray/ANTrackBar/assignees{/user}', + downloads_url: + 'https://api.github.com/repos/mralexgray/ANTrackBar/downloads', + has_downloads: true, + languages_url: + 'https://api.github.com/repos/mralexgray/ANTrackBar/languages', + default_branch: 'master', + milestones_url: + 'https://api.github.com/repos/mralexgray/ANTrackBar/milestones{/number}', + stargazers_url: + 'https://api.github.com/repos/mralexgray/ANTrackBar/stargazers', + watchers_count: 2, + deployments_url: + 'https://api.github.com/repos/mralexgray/ANTrackBar/deployments', + git_commits_url: + 'https://api.github.com/repos/mralexgray/ANTrackBar/git/commits{/sha}', + subscribers_url: + 'https://api.github.com/repos/mralexgray/ANTrackBar/subscribers', + contributors_url: + 'https://api.github.com/repos/mralexgray/ANTrackBar/contributors', + issue_events_url: + 'https://api.github.com/repos/mralexgray/ANTrackBar/issues/events{/number}', + stargazers_count: 2, + subscription_url: + 'https://api.github.com/repos/mralexgray/ANTrackBar/subscription', + collaborators_url: + 'https://api.github.com/repos/mralexgray/ANTrackBar/collaborators{/collaborator}', + issue_comment_url: + 'https://api.github.com/repos/mralexgray/ANTrackBar/issues/comments{/number}', + notifications_url: + 'https://api.github.com/repos/mralexgray/ANTrackBar/notifications{?since,all,participating}', + open_issues_count: 0, + web_commit_signoff_required: false, + }, + { + id: 16240152, + url: 'https://api.github.com/repos/mralexgray/AOP-in-Objective-C', + fork: true, + name: 'AOP-in-Objective-C', + size: 340, + forks: 1, + owner: { + id: 262517, + url: 'https://api.github.com/users/mralexgray', + type: 'User', + login: 'mralexgray', + node_id: 'MDQ6VXNlcjI2MjUxNw==', + html_url: 'https://github.com/mralexgray', + gists_url: + 'https://api.github.com/users/mralexgray/gists{/gist_id}', + repos_url: 'https://api.github.com/users/mralexgray/repos', + avatar_url: 'https://avatars.githubusercontent.com/u/262517?v=4', + events_url: + 'https://api.github.com/users/mralexgray/events{/privacy}', + site_admin: false, + gravatar_id: '', + starred_url: + 'https://api.github.com/users/mralexgray/starred{/owner}{/repo}', + followers_url: 'https://api.github.com/users/mralexgray/followers', + following_url: + 'https://api.github.com/users/mralexgray/following{/other_user}', + organizations_url: 'https://api.github.com/users/mralexgray/orgs', + subscriptions_url: + 'https://api.github.com/users/mralexgray/subscriptions', + received_events_url: + 'https://api.github.com/users/mralexgray/received_events', + }, + topics: [], + git_url: 'git://github.com/mralexgray/AOP-in-Objective-C.git', + license: null, + node_id: 'MDEwOlJlcG9zaXRvcnkxNjI0MDE1Mg==', + private: false, + ssh_url: 'git@github.com:mralexgray/AOP-in-Objective-C.git', + svn_url: 'https://github.com/mralexgray/AOP-in-Objective-C', + archived: false, + disabled: false, + has_wiki: true, + homepage: 'http://innoli.hu/en/opensource/', + html_url: 'https://github.com/mralexgray/AOP-in-Objective-C', + keys_url: + 'https://api.github.com/repos/mralexgray/AOP-in-Objective-C/keys{/key_id}', + language: 'Objective-C', + tags_url: + 'https://api.github.com/repos/mralexgray/AOP-in-Objective-C/tags', + watchers: 0, + blobs_url: + 'https://api.github.com/repos/mralexgray/AOP-in-Objective-C/git/blobs{/sha}', + clone_url: 'https://github.com/mralexgray/AOP-in-Objective-C.git', + forks_url: + 'https://api.github.com/repos/mralexgray/AOP-in-Objective-C/forks', + full_name: 'mralexgray/AOP-in-Objective-C', + has_pages: false, + hooks_url: + 'https://api.github.com/repos/mralexgray/AOP-in-Objective-C/hooks', + pulls_url: + 'https://api.github.com/repos/mralexgray/AOP-in-Objective-C/pulls{/number}', + pushed_at: '2014-02-12T16:23:20Z', + teams_url: + 'https://api.github.com/repos/mralexgray/AOP-in-Objective-C/teams', + trees_url: + 'https://api.github.com/repos/mralexgray/AOP-in-Objective-C/git/trees{/sha}', + created_at: '2014-01-25T21:18:04Z', + events_url: + 'https://api.github.com/repos/mralexgray/AOP-in-Objective-C/events', + has_issues: false, + issues_url: + 'https://api.github.com/repos/mralexgray/AOP-in-Objective-C/issues{/number}', + labels_url: + 'https://api.github.com/repos/mralexgray/AOP-in-Objective-C/labels{/name}', + merges_url: + 'https://api.github.com/repos/mralexgray/AOP-in-Objective-C/merges', + mirror_url: null, + updated_at: '2014-06-19T19:38:12Z', + visibility: 'public', + archive_url: + 'https://api.github.com/repos/mralexgray/AOP-in-Objective-C/{archive_format}{/ref}', + commits_url: + 'https://api.github.com/repos/mralexgray/AOP-in-Objective-C/commits{/sha}', + compare_url: + 'https://api.github.com/repos/mralexgray/AOP-in-Objective-C/compare/{base}...{head}', + description: + 'An NSProxy based library for easily enabling AOP like functionality in Objective-C.', + forks_count: 1, + is_template: false, + open_issues: 0, + branches_url: + 'https://api.github.com/repos/mralexgray/AOP-in-Objective-C/branches{/branch}', + comments_url: + 'https://api.github.com/repos/mralexgray/AOP-in-Objective-C/comments{/number}', + contents_url: + 'https://api.github.com/repos/mralexgray/AOP-in-Objective-C/contents/{+path}', + git_refs_url: + 'https://api.github.com/repos/mralexgray/AOP-in-Objective-C/git/refs{/sha}', + git_tags_url: + 'https://api.github.com/repos/mralexgray/AOP-in-Objective-C/git/tags{/sha}', + has_projects: true, + releases_url: + 'https://api.github.com/repos/mralexgray/AOP-in-Objective-C/releases{/id}', + statuses_url: + 'https://api.github.com/repos/mralexgray/AOP-in-Objective-C/statuses/{sha}', + allow_forking: true, + assignees_url: + 'https://api.github.com/repos/mralexgray/AOP-in-Objective-C/assignees{/user}', + downloads_url: + 'https://api.github.com/repos/mralexgray/AOP-in-Objective-C/downloads', + has_downloads: true, + languages_url: + 'https://api.github.com/repos/mralexgray/AOP-in-Objective-C/languages', + default_branch: 'travis-coveralls', + milestones_url: + 'https://api.github.com/repos/mralexgray/AOP-in-Objective-C/milestones{/number}', + stargazers_url: + 'https://api.github.com/repos/mralexgray/AOP-in-Objective-C/stargazers', + watchers_count: 0, + deployments_url: + 'https://api.github.com/repos/mralexgray/AOP-in-Objective-C/deployments', + git_commits_url: + 'https://api.github.com/repos/mralexgray/AOP-in-Objective-C/git/commits{/sha}', + subscribers_url: + 'https://api.github.com/repos/mralexgray/AOP-in-Objective-C/subscribers', + contributors_url: + 'https://api.github.com/repos/mralexgray/AOP-in-Objective-C/contributors', + issue_events_url: + 'https://api.github.com/repos/mralexgray/AOP-in-Objective-C/issues/events{/number}', + stargazers_count: 0, + subscription_url: + 'https://api.github.com/repos/mralexgray/AOP-in-Objective-C/subscription', + collaborators_url: + 'https://api.github.com/repos/mralexgray/AOP-in-Objective-C/collaborators{/collaborator}', + issue_comment_url: + 'https://api.github.com/repos/mralexgray/AOP-in-Objective-C/issues/comments{/number}', + notifications_url: + 'https://api.github.com/repos/mralexgray/AOP-in-Objective-C/notifications{?since,all,participating}', + open_issues_count: 0, + web_commit_signoff_required: false, + }, + { + id: 13141936, + url: 'https://api.github.com/repos/mralexgray/Apaxy', + fork: true, + name: 'Apaxy', + size: 113, + forks: 0, + owner: { + id: 262517, + url: 'https://api.github.com/users/mralexgray', + type: 'User', + login: 'mralexgray', + node_id: 'MDQ6VXNlcjI2MjUxNw==', + html_url: 'https://github.com/mralexgray', + gists_url: + 'https://api.github.com/users/mralexgray/gists{/gist_id}', + repos_url: 'https://api.github.com/users/mralexgray/repos', + avatar_url: 'https://avatars.githubusercontent.com/u/262517?v=4', + events_url: + 'https://api.github.com/users/mralexgray/events{/privacy}', + site_admin: false, + gravatar_id: '', + starred_url: + 'https://api.github.com/users/mralexgray/starred{/owner}{/repo}', + followers_url: 'https://api.github.com/users/mralexgray/followers', + following_url: + 'https://api.github.com/users/mralexgray/following{/other_user}', + organizations_url: 'https://api.github.com/users/mralexgray/orgs', + subscriptions_url: + 'https://api.github.com/users/mralexgray/subscriptions', + received_events_url: + 'https://api.github.com/users/mralexgray/received_events', + }, + topics: [], + git_url: 'git://github.com/mralexgray/Apaxy.git', + license: { + key: 'unlicense', + url: 'https://api.github.com/licenses/unlicense', + name: 'The Unlicense', + node_id: 'MDc6TGljZW5zZTE1', + spdx_id: 'Unlicense', + }, + node_id: 'MDEwOlJlcG9zaXRvcnkxMzE0MTkzNg==', + private: false, + ssh_url: 'git@github.com:mralexgray/Apaxy.git', + svn_url: 'https://github.com/mralexgray/Apaxy', + archived: false, + disabled: false, + has_wiki: true, + homepage: null, + html_url: 'https://github.com/mralexgray/Apaxy', + keys_url: + 'https://api.github.com/repos/mralexgray/Apaxy/keys{/key_id}', + language: 'CSS', + tags_url: 'https://api.github.com/repos/mralexgray/Apaxy/tags', + watchers: 0, + blobs_url: + 'https://api.github.com/repos/mralexgray/Apaxy/git/blobs{/sha}', + clone_url: 'https://github.com/mralexgray/Apaxy.git', + forks_url: 'https://api.github.com/repos/mralexgray/Apaxy/forks', + full_name: 'mralexgray/Apaxy', + has_pages: false, + hooks_url: 'https://api.github.com/repos/mralexgray/Apaxy/hooks', + pulls_url: + 'https://api.github.com/repos/mralexgray/Apaxy/pulls{/number}', + pushed_at: '2013-08-02T16:01:32Z', + teams_url: 'https://api.github.com/repos/mralexgray/Apaxy/teams', + trees_url: + 'https://api.github.com/repos/mralexgray/Apaxy/git/trees{/sha}', + created_at: '2013-09-27T05:05:35Z', + events_url: 'https://api.github.com/repos/mralexgray/Apaxy/events', + has_issues: false, + issues_url: + 'https://api.github.com/repos/mralexgray/Apaxy/issues{/number}', + labels_url: + 'https://api.github.com/repos/mralexgray/Apaxy/labels{/name}', + merges_url: 'https://api.github.com/repos/mralexgray/Apaxy/merges', + mirror_url: null, + updated_at: '2018-02-16T21:40:24Z', + visibility: 'public', + archive_url: + 'https://api.github.com/repos/mralexgray/Apaxy/{archive_format}{/ref}', + commits_url: + 'https://api.github.com/repos/mralexgray/Apaxy/commits{/sha}', + compare_url: + 'https://api.github.com/repos/mralexgray/Apaxy/compare/{base}...{head}', + description: + 'A simple, customisable theme for your Apache directory listing.', + forks_count: 0, + is_template: false, + open_issues: 0, + branches_url: + 'https://api.github.com/repos/mralexgray/Apaxy/branches{/branch}', + comments_url: + 'https://api.github.com/repos/mralexgray/Apaxy/comments{/number}', + contents_url: + 'https://api.github.com/repos/mralexgray/Apaxy/contents/{+path}', + git_refs_url: + 'https://api.github.com/repos/mralexgray/Apaxy/git/refs{/sha}', + git_tags_url: + 'https://api.github.com/repos/mralexgray/Apaxy/git/tags{/sha}', + has_projects: true, + releases_url: + 'https://api.github.com/repos/mralexgray/Apaxy/releases{/id}', + statuses_url: + 'https://api.github.com/repos/mralexgray/Apaxy/statuses/{sha}', + allow_forking: true, + assignees_url: + 'https://api.github.com/repos/mralexgray/Apaxy/assignees{/user}', + downloads_url: + 'https://api.github.com/repos/mralexgray/Apaxy/downloads', + has_downloads: true, + languages_url: + 'https://api.github.com/repos/mralexgray/Apaxy/languages', + default_branch: 'master', + milestones_url: + 'https://api.github.com/repos/mralexgray/Apaxy/milestones{/number}', + stargazers_url: + 'https://api.github.com/repos/mralexgray/Apaxy/stargazers', + watchers_count: 0, + deployments_url: + 'https://api.github.com/repos/mralexgray/Apaxy/deployments', + git_commits_url: + 'https://api.github.com/repos/mralexgray/Apaxy/git/commits{/sha}', + subscribers_url: + 'https://api.github.com/repos/mralexgray/Apaxy/subscribers', + contributors_url: + 'https://api.github.com/repos/mralexgray/Apaxy/contributors', + issue_events_url: + 'https://api.github.com/repos/mralexgray/Apaxy/issues/events{/number}', + stargazers_count: 0, + subscription_url: + 'https://api.github.com/repos/mralexgray/Apaxy/subscription', + collaborators_url: + 'https://api.github.com/repos/mralexgray/Apaxy/collaborators{/collaborator}', + issue_comment_url: + 'https://api.github.com/repos/mralexgray/Apaxy/issues/comments{/number}', + notifications_url: + 'https://api.github.com/repos/mralexgray/Apaxy/notifications{?since,all,participating}', + open_issues_count: 0, + web_commit_signoff_required: false, + }, + { + id: 20027360, + url: 'https://api.github.com/repos/mralexgray/app', + fork: true, + name: 'app', + size: 1890, + forks: 0, + owner: { + id: 262517, + url: 'https://api.github.com/users/mralexgray', + type: 'User', + login: 'mralexgray', + node_id: 'MDQ6VXNlcjI2MjUxNw==', + html_url: 'https://github.com/mralexgray', + gists_url: + 'https://api.github.com/users/mralexgray/gists{/gist_id}', + repos_url: 'https://api.github.com/users/mralexgray/repos', + avatar_url: 'https://avatars.githubusercontent.com/u/262517?v=4', + events_url: + 'https://api.github.com/users/mralexgray/events{/privacy}', + site_admin: false, + gravatar_id: '', + starred_url: + 'https://api.github.com/users/mralexgray/starred{/owner}{/repo}', + followers_url: 'https://api.github.com/users/mralexgray/followers', + following_url: + 'https://api.github.com/users/mralexgray/following{/other_user}', + organizations_url: 'https://api.github.com/users/mralexgray/orgs', + subscriptions_url: + 'https://api.github.com/users/mralexgray/subscriptions', + received_events_url: + 'https://api.github.com/users/mralexgray/received_events', + }, + topics: [], + git_url: 'git://github.com/mralexgray/app.git', + license: { + key: 'other', + url: null, + name: 'Other', + node_id: 'MDc6TGljZW5zZTA=', + spdx_id: 'NOASSERTION', + }, + node_id: 'MDEwOlJlcG9zaXRvcnkyMDAyNzM2MA==', + private: false, + ssh_url: 'git@github.com:mralexgray/app.git', + svn_url: 'https://github.com/mralexgray/app', + archived: false, + disabled: false, + has_wiki: true, + homepage: null, + html_url: 'https://github.com/mralexgray/app', + keys_url: 'https://api.github.com/repos/mralexgray/app/keys{/key_id}', + language: 'JavaScript', + tags_url: 'https://api.github.com/repos/mralexgray/app/tags', + watchers: 0, + blobs_url: + 'https://api.github.com/repos/mralexgray/app/git/blobs{/sha}', + clone_url: 'https://github.com/mralexgray/app.git', + forks_url: 'https://api.github.com/repos/mralexgray/app/forks', + full_name: 'mralexgray/app', + has_pages: false, + hooks_url: 'https://api.github.com/repos/mralexgray/app/hooks', + pulls_url: + 'https://api.github.com/repos/mralexgray/app/pulls{/number}', + pushed_at: '2014-05-20T19:51:38Z', + teams_url: 'https://api.github.com/repos/mralexgray/app/teams', + trees_url: + 'https://api.github.com/repos/mralexgray/app/git/trees{/sha}', + created_at: '2014-05-21T15:54:20Z', + events_url: 'https://api.github.com/repos/mralexgray/app/events', + has_issues: false, + issues_url: + 'https://api.github.com/repos/mralexgray/app/issues{/number}', + labels_url: + 'https://api.github.com/repos/mralexgray/app/labels{/name}', + merges_url: 'https://api.github.com/repos/mralexgray/app/merges', + mirror_url: null, + updated_at: '2014-05-21T15:54:22Z', + visibility: 'public', + archive_url: + 'https://api.github.com/repos/mralexgray/app/{archive_format}{/ref}', + commits_url: + 'https://api.github.com/repos/mralexgray/app/commits{/sha}', + compare_url: + 'https://api.github.com/repos/mralexgray/app/compare/{base}...{head}', + description: 'Instant mobile web app creation', + forks_count: 0, + is_template: false, + open_issues: 0, + branches_url: + 'https://api.github.com/repos/mralexgray/app/branches{/branch}', + comments_url: + 'https://api.github.com/repos/mralexgray/app/comments{/number}', + contents_url: + 'https://api.github.com/repos/mralexgray/app/contents/{+path}', + git_refs_url: + 'https://api.github.com/repos/mralexgray/app/git/refs{/sha}', + git_tags_url: + 'https://api.github.com/repos/mralexgray/app/git/tags{/sha}', + has_projects: true, + releases_url: + 'https://api.github.com/repos/mralexgray/app/releases{/id}', + statuses_url: + 'https://api.github.com/repos/mralexgray/app/statuses/{sha}', + allow_forking: true, + assignees_url: + 'https://api.github.com/repos/mralexgray/app/assignees{/user}', + downloads_url: + 'https://api.github.com/repos/mralexgray/app/downloads', + has_downloads: true, + languages_url: + 'https://api.github.com/repos/mralexgray/app/languages', + default_branch: 'master', + milestones_url: + 'https://api.github.com/repos/mralexgray/app/milestones{/number}', + stargazers_url: + 'https://api.github.com/repos/mralexgray/app/stargazers', + watchers_count: 0, + deployments_url: + 'https://api.github.com/repos/mralexgray/app/deployments', + git_commits_url: + 'https://api.github.com/repos/mralexgray/app/git/commits{/sha}', + subscribers_url: + 'https://api.github.com/repos/mralexgray/app/subscribers', + contributors_url: + 'https://api.github.com/repos/mralexgray/app/contributors', + issue_events_url: + 'https://api.github.com/repos/mralexgray/app/issues/events{/number}', + stargazers_count: 0, + subscription_url: + 'https://api.github.com/repos/mralexgray/app/subscription', + collaborators_url: + 'https://api.github.com/repos/mralexgray/app/collaborators{/collaborator}', + issue_comment_url: + 'https://api.github.com/repos/mralexgray/app/issues/comments{/number}', + notifications_url: + 'https://api.github.com/repos/mralexgray/app/notifications{?since,all,participating}', + open_issues_count: 0, + web_commit_signoff_required: false, + }, + ], + trait1: 'new-val', + }, + library: { + name: 'http', + }, + }, + rudderId: 'daf823fb-e8d3-413a-8313-d34cd756f968', + messageId: 'c864b4cd-8f07-4922-b3d0-82ef04c987d3', + timestamp: '2020-02-02T00:23:09.544Z', + receivedAt: '2022-08-18T08:43:13.521+05:30', + request_ip: '[::1]', + anonymousId: 'anon-id-new', + originalTimestamp: '2022-08-18T08:43:15.539+05:30', + }, + PayloadSize: 95943, + LastJobStatus: { + JobID: 0, + JobState: '', + AttemptNum: 0, + ExecTime: '0001-01-01T00:00:00Z', + RetryTime: '0001-01-01T00:00:00Z', + ErrorCode: '', + ErrorResponse: null, + Parameters: null, + WorkspaceId: '', + }, + Parameters: { + record_id: null, + source_id: '2DTlLPQxignYp4ag9sISgGN2uY7', + event_name: '', + event_type: 'identify', + message_id: 'c864b4cd-8f07-4922-b3d0-82ef04c987d3', + received_at: '2022-08-18T08:43:13.521+05:30', + workspaceId: '2DTlBMipxWfJZzZ1SsjELQWvkwd', + transform_at: 'router', + source_job_id: '', + destination_id: '2DTozIMGtBwTGNJtuvdPByFSL2Z', + gateway_job_id: 6, + source_task_id: '', + source_batch_id: '', + source_category: '', + source_job_run_id: '', + source_task_run_id: '', + source_definition_id: '2DTlJaW1jHhM8B27Et2CMTZoxZF', + destination_definition_id: '', + }, + WorkspaceId: '2DTlBMipxWfJZzZ1SsjELQWvkwd', + }, + workerAssignedTime: '2022-08-18T08:43:16.586825+05:30', + }, + ], + batched: false, + statusCode: 400, + error: 'payload size limit exceeded', + }, + ], + }, + }, + }, + }, +]; diff --git a/test/integrations/destinations/leanplum/processor/data.ts b/test/integrations/destinations/leanplum/processor/data.ts new file mode 100644 index 0000000000..a866b035a8 --- /dev/null +++ b/test/integrations/destinations/leanplum/processor/data.ts @@ -0,0 +1,1708 @@ +export const data = [ + { + name: 'leanplum', + description: 'Test 0', + feature: 'processor', + module: 'destination', + version: 'v0', + input: { + request: { + body: [ + { + message: { + anonymousId: '5094f5704b9cf2b3', + channel: 'mobile', + context: { + app: { + build: '1', + name: 'LeanPlumIntegrationAndroid', + namespace: 'com.android.SampleLeanPlum', + version: '1.0', + }, + device: { + id: '5094f5704b9cf2b3', + manufacturer: 'Google', + model: 'Android SDK built for x86', + name: 'generic_x86', + type: 'android', + }, + library: { name: 'com.rudderstack.android.sdk.core', version: '1.0.1-beta.1' }, + locale: 'en-US', + network: { carrier: 'Android', bluetooth: false, cellular: true, wifi: true }, + os: { name: 'Android', version: '8.1.0' }, + screen: { density: 420, height: 1794, width: 1080 }, + timezone: 'Asia/Kolkata', + traits: { anonymousId: '5094f5704b9cf2b3' }, + userAgent: + 'Dalvik/2.1.0 (Linux; U; Android 8.1.0; Android SDK built for x86 Build/OSM1.180201.007)', + }, + event: 'MainActivity', + integrations: { All: true }, + messageId: 'id1', + properties: { name: 'MainActivity', automatic: true }, + originalTimestamp: '2020-03-12T09:05:03.421Z', + type: 'screen', + sentAt: '2020-03-12T09:05:13.042Z', + }, + destination: { + Config: { + applicationId: 'leanplum_application_id', + clientKey: 'leanplum_client_key', + isDevelop: true, + useNativeSDK: false, + sendEvents: false, + }, + }, + }, + ], + method: 'POST', + }, + pathSuffix: '', + }, + output: { + response: { + status: 200, + body: [ + { + output: { + version: '1', + type: 'REST', + method: 'POST', + endpoint: 'https://api.leanplum.com/api', + headers: { 'Content-Type': 'application/json' }, + params: { action: 'start' }, + body: { + JSON: { + apiVersion: '1.0.6', + appId: 'leanplum_application_id', + clientKey: 'leanplum_client_key', + userId: '5094f5704b9cf2b3', + deviceId: '5094f5704b9cf2b3', + appVersion: '1.0', + systemName: 'Android', + systemVersion: '8.1.0', + deviceName: 'generic_x86', + deviceModel: 'Android SDK built for x86', + userAttributes: { anonymousId: '5094f5704b9cf2b3' }, + locale: 'en-US', + timezone: 'Asia/Kolkata', + time: 1584003903, + devMode: true, + }, + XML: {}, + JSON_ARRAY: {}, + FORM: {}, + }, + files: {}, + userId: '5094f5704b9cf2b3', + }, + statusCode: 200, + }, + { + output: { + version: '1', + type: 'REST', + method: 'POST', + endpoint: 'https://api.leanplum.com/api', + headers: { 'Content-Type': 'application/json' }, + params: { action: 'advance' }, + body: { + JSON: { + apiVersion: '1.0.6', + appId: 'leanplum_application_id', + clientKey: 'leanplum_client_key', + userId: '5094f5704b9cf2b3', + state: 'MainActivity', + deviceId: '5094f5704b9cf2b3', + time: 1584003903, + devMode: true, + }, + XML: {}, + JSON_ARRAY: {}, + FORM: {}, + }, + files: {}, + userId: '5094f5704b9cf2b3', + }, + statusCode: 200, + }, + ], + }, + }, + }, + { + name: 'leanplum', + description: 'Test 1', + feature: 'processor', + module: 'destination', + version: 'v0', + input: { + request: { + body: [ + { + message: { + anonymousId: '5094f5704b9cf2b3', + channel: 'mobile', + context: { + app: { + build: '1', + name: 'LeanPlumIntegrationAndroid', + namespace: 'com.android.SampleLeanPlum', + version: '1.0', + }, + device: { + id: '5094f5704b9cf2b3', + manufacturer: 'Google', + model: 'Android SDK built for x86', + name: 'generic_x86', + type: 'android', + }, + library: { name: 'com.rudderstack.android.sdk.core', version: '1.0.1-beta.1' }, + locale: 'en-US', + network: { carrier: 'Android', bluetooth: false, cellular: true, wifi: true }, + os: { name: 'Android', version: '8.1.0' }, + screen: { density: 420, height: 1794, width: 1080 }, + timezone: 'Asia/Kolkata', + traits: { anonymousId: '5094f5704b9cf2b3' }, + userAgent: + 'Dalvik/2.1.0 (Linux; U; Android 8.1.0; Android SDK built for x86 Build/OSM1.180201.007)', + }, + event: 'MainActivity', + integrations: { All: true }, + messageId: 'id2', + properties: { name: 'MainActivity', automatic: true }, + originalTimestamp: '2020-03-12T09:05:03.421Z', + type: 'screen', + sentAt: '2020-03-12T09:05:13.042Z', + }, + destination: { + Config: { + applicationId: 'leanplum_application_id', + clientKey: 'leanplum_client_key__', + isDevelop: true, + useNativeSDK: false, + sendEvents: false, + }, + }, + }, + ], + method: 'POST', + }, + pathSuffix: '', + }, + output: { + response: { + status: 200, + body: [ + { + output: { + version: '1', + type: 'REST', + method: 'POST', + endpoint: 'https://api.leanplum.com/api', + headers: { 'Content-Type': 'application/json' }, + params: { action: 'start' }, + body: { + JSON: { + apiVersion: '1.0.6', + appId: 'leanplum_application_id', + clientKey: 'leanplum_client_key__', + userId: '5094f5704b9cf2b3', + deviceId: '5094f5704b9cf2b3', + appVersion: '1.0', + systemName: 'Android', + systemVersion: '8.1.0', + deviceName: 'generic_x86', + deviceModel: 'Android SDK built for x86', + userAttributes: { anonymousId: '5094f5704b9cf2b3' }, + locale: 'en-US', + timezone: 'Asia/Kolkata', + time: 1584003903, + devMode: true, + }, + XML: {}, + JSON_ARRAY: {}, + FORM: {}, + }, + files: {}, + userId: '5094f5704b9cf2b3', + }, + statusCode: 200, + }, + { + output: { + version: '1', + type: 'REST', + method: 'POST', + endpoint: 'https://api.leanplum.com/api', + headers: { 'Content-Type': 'application/json' }, + params: { action: 'advance' }, + body: { + JSON: { + apiVersion: '1.0.6', + appId: 'leanplum_application_id', + clientKey: 'leanplum_client_key__', + userId: '5094f5704b9cf2b3', + state: 'MainActivity', + deviceId: '5094f5704b9cf2b3', + time: 1584003903, + devMode: true, + }, + XML: {}, + JSON_ARRAY: {}, + FORM: {}, + }, + files: {}, + userId: '5094f5704b9cf2b3', + }, + statusCode: 200, + }, + ], + }, + }, + }, + { + name: 'leanplum', + description: 'Test 2', + feature: 'processor', + module: 'destination', + version: 'v0', + input: { + request: { + body: [ + { + message: { + anonymousId: '5094f5704b9cf2b3', + channel: 'mobile', + context: { + app: { + build: '1', + name: 'LeanPlumIntegrationAndroid', + namespace: 'com.android.SampleLeanPlum', + version: '1.0', + }, + device: { + id: '5094f5704b9cf2b3', + manufacturer: 'Google', + model: 'Android SDK built for x86', + name: 'generic_x86', + type: 'android', + }, + library: { name: 'com.rudderstack.android.sdk.core', version: '1.0.1-beta.1' }, + locale: 'en-US', + network: { carrier: 'Android', bluetooth: false, cellular: true, wifi: true }, + os: { name: 'Android', version: '8.1.0' }, + screen: { density: 420, height: 1794, width: 1080 }, + timezone: 'Asia/Kolkata', + traits: { anonymousId: '5094f5704b9cf2b3' }, + userAgent: + 'Dalvik/2.1.0 (Linux; U; Android 8.1.0; Android SDK built for x86 Build/OSM1.180201.007)', + }, + event: 'MainActivity', + integrations: { All: true }, + messageId: 'id3', + properties: { name: 'MainActivity', automatic: true }, + originalTimestamp: '2020-03-12T09:05:03.421Z', + type: 'screen', + sentAt: '2020-03-12T09:05:13.042Z', + }, + destination: { + Config: { + applicationId: 'leanplum_application_id', + clientKey: 'leanplum_client_key', + isDevelop: true, + useNativeSDK: false, + sendEvents: false, + }, + }, + }, + ], + method: 'POST', + }, + pathSuffix: '', + }, + output: { + response: { + status: 200, + body: [ + { + output: { + version: '1', + type: 'REST', + method: 'POST', + endpoint: 'https://api.leanplum.com/api', + headers: { 'Content-Type': 'application/json' }, + params: { action: 'start' }, + body: { + JSON: { + apiVersion: '1.0.6', + appId: 'leanplum_application_id', + clientKey: 'leanplum_client_key', + userId: '5094f5704b9cf2b3', + deviceId: '5094f5704b9cf2b3', + appVersion: '1.0', + systemName: 'Android', + systemVersion: '8.1.0', + deviceName: 'generic_x86', + deviceModel: 'Android SDK built for x86', + userAttributes: { anonymousId: '5094f5704b9cf2b3' }, + locale: 'en-US', + timezone: 'Asia/Kolkata', + time: 1584003903, + devMode: true, + }, + XML: {}, + JSON_ARRAY: {}, + FORM: {}, + }, + files: {}, + userId: '5094f5704b9cf2b3', + }, + statusCode: 200, + }, + { + output: { + version: '1', + type: 'REST', + method: 'POST', + endpoint: 'https://api.leanplum.com/api', + headers: { 'Content-Type': 'application/json' }, + params: { action: 'advance' }, + body: { + JSON: { + apiVersion: '1.0.6', + appId: 'leanplum_application_id', + clientKey: 'leanplum_client_key', + userId: '5094f5704b9cf2b3', + state: 'MainActivity', + deviceId: '5094f5704b9cf2b3', + time: 1584003903, + devMode: true, + }, + XML: {}, + JSON_ARRAY: {}, + FORM: {}, + }, + files: {}, + userId: '5094f5704b9cf2b3', + }, + statusCode: 200, + }, + ], + }, + }, + }, + { + name: 'leanplum', + description: 'Test 3', + feature: 'processor', + module: 'destination', + version: 'v0', + input: { + request: { + body: [ + { + message: { + anonymousId: '5094f5704b9cf2b3', + channel: 'mobile', + context: { + app: { + build: '1', + name: 'LeanPlumIntegrationAndroid', + namespace: 'com.android.SampleLeanPlum', + version: '1.0', + }, + device: { + id: '5094f5704b9cf2b3', + manufacturer: 'Google', + model: 'Android SDK built for x86', + name: 'generic_x86', + type: 'android', + }, + library: { name: 'com.rudderstack.android.sdk.core', version: '1.0.1-beta.1' }, + locale: 'en-US', + network: { carrier: 'Android', bluetooth: false, cellular: true, wifi: true }, + os: { name: 'Android', version: '8.1.0' }, + screen: { density: 420, height: 1794, width: 1080 }, + timezone: 'Asia/Kolkata', + traits: { anonymousId: '5094f5704b9cf2b3' }, + userAgent: + 'Dalvik/2.1.0 (Linux; U; Android 8.1.0; Android SDK built for x86 Build/OSM1.180201.007)', + }, + event: 'MainActivity', + integrations: { All: true }, + messageId: 'id3', + properties: { name: 'MainActivity', automatic: true }, + originalTimestamp: '2020-03-12T09:05:03.421Z', + type: 'page', + sentAt: '2020-03-12T09:05:13.042Z', + }, + destination: { + Config: { + applicationId: 'leanplum_application_id', + clientKey: 'leanplum_client_key', + isDevelop: true, + useNativeSDK: false, + sendEvents: false, + }, + }, + }, + ], + method: 'POST', + }, + pathSuffix: '', + }, + output: { + response: { + status: 200, + body: [ + { + output: { + version: '1', + type: 'REST', + method: 'POST', + endpoint: 'https://api.leanplum.com/api', + headers: { 'Content-Type': 'application/json' }, + params: { action: 'start' }, + body: { + JSON: { + apiVersion: '1.0.6', + appId: 'leanplum_application_id', + clientKey: 'leanplum_client_key', + userId: '5094f5704b9cf2b3', + deviceId: '5094f5704b9cf2b3', + appVersion: '1.0', + systemName: 'Android', + systemVersion: '8.1.0', + deviceName: 'generic_x86', + deviceModel: 'Android SDK built for x86', + userAttributes: { anonymousId: '5094f5704b9cf2b3' }, + locale: 'en-US', + timezone: 'Asia/Kolkata', + time: 1584003903, + devMode: true, + }, + XML: {}, + JSON_ARRAY: {}, + FORM: {}, + }, + files: {}, + userId: '5094f5704b9cf2b3', + }, + statusCode: 200, + }, + { + output: { + version: '1', + type: 'REST', + method: 'POST', + endpoint: 'https://api.leanplum.com/api', + headers: { 'Content-Type': 'application/json' }, + params: { action: 'advance' }, + body: { + JSON: { + apiVersion: '1.0.6', + appId: 'leanplum_application_id', + clientKey: 'leanplum_client_key', + userId: '5094f5704b9cf2b3', + state: 'MainActivity', + deviceId: '5094f5704b9cf2b3', + time: 1584003903, + devMode: true, + }, + XML: {}, + JSON_ARRAY: {}, + FORM: {}, + }, + files: {}, + userId: '5094f5704b9cf2b3', + }, + statusCode: 200, + }, + ], + }, + }, + }, + { + name: 'leanplum', + description: 'Test 4', + feature: 'processor', + module: 'destination', + version: 'v0', + input: { + request: { + body: [ + { + message: { + anonymousId: '5094f5704b9cf2b3', + channel: 'mobile', + name: 'Test Page Name', + context: { + app: { + build: '1', + name: 'LeanPlumIntegrationAndroid', + namespace: 'com.android.SampleLeanPlum', + version: '1.0', + }, + device: { + id: '5094f5704b9cf2b3', + manufacturer: 'Google', + model: 'Android SDK built for x86', + name: 'generic_x86', + type: 'android', + }, + library: { name: 'com.rudderstack.android.sdk.core', version: '1.0.1-beta.1' }, + locale: 'en-US', + network: { carrier: 'Android', bluetooth: false, cellular: true, wifi: true }, + os: { name: 'Android', version: '8.1.0' }, + screen: { density: 420, height: 1794, width: 1080 }, + timezone: 'Asia/Kolkata', + traits: { anonymousId: '5094f5704b9cf2b3' }, + userAgent: + 'Dalvik/2.1.0 (Linux; U; Android 8.1.0; Android SDK built for x86 Build/OSM1.180201.007)', + }, + event: 'MainActivity', + integrations: { All: true }, + messageId: 'id3', + properties: { name: 'MainActivity', automatic: true }, + originalTimestamp: '2020-03-12T09:05:03.421Z', + type: 'page', + sentAt: '2020-03-12T09:05:13.042Z', + }, + destination: { + Config: { + applicationId: 'leanplum_application_id', + clientKey: 'leanplum_client_key', + isDevelop: true, + useNativeSDK: false, + sendEvents: false, + }, + }, + }, + ], + method: 'POST', + }, + pathSuffix: '', + }, + output: { + response: { + status: 200, + body: [ + { + output: { + version: '1', + type: 'REST', + method: 'POST', + endpoint: 'https://api.leanplum.com/api', + headers: { 'Content-Type': 'application/json' }, + params: { action: 'start' }, + body: { + JSON: { + apiVersion: '1.0.6', + appId: 'leanplum_application_id', + clientKey: 'leanplum_client_key', + userId: '5094f5704b9cf2b3', + deviceId: '5094f5704b9cf2b3', + appVersion: '1.0', + systemName: 'Android', + systemVersion: '8.1.0', + deviceName: 'generic_x86', + deviceModel: 'Android SDK built for x86', + userAttributes: { anonymousId: '5094f5704b9cf2b3' }, + locale: 'en-US', + timezone: 'Asia/Kolkata', + time: 1584003903, + devMode: true, + }, + XML: {}, + JSON_ARRAY: {}, + FORM: {}, + }, + files: {}, + userId: '5094f5704b9cf2b3', + }, + statusCode: 200, + }, + { + output: { + version: '1', + type: 'REST', + method: 'POST', + endpoint: 'https://api.leanplum.com/api', + headers: { 'Content-Type': 'application/json' }, + params: { action: 'advance' }, + body: { + JSON: { + apiVersion: '1.0.6', + appId: 'leanplum_application_id', + clientKey: 'leanplum_client_key', + userId: '5094f5704b9cf2b3', + state: 'Test Page Name', + deviceId: '5094f5704b9cf2b3', + time: 1584003903, + devMode: true, + }, + XML: {}, + JSON_ARRAY: {}, + FORM: {}, + }, + files: {}, + userId: '5094f5704b9cf2b3', + }, + statusCode: 200, + }, + ], + }, + }, + }, + { + name: 'leanplum', + description: 'Test 5', + feature: 'processor', + module: 'destination', + version: 'v0', + input: { + request: { + body: [ + { + message: { + anonymousId: '5094f5704b9cf2b3', + channel: 'mobile', + context: { + app: { + build: '1', + name: 'LeanPlumIntegrationAndroid', + namespace: 'com.android.SampleLeanPlum', + version: '1.0', + }, + device: { + id: '5094f5704b9cf2b3', + manufacturer: 'Google', + model: 'Android SDK built for x86', + name: 'generic_x86', + type: 'android', + }, + library: { name: 'com.rudderstack.android.sdk.core', version: '1.0.1-beta.1' }, + locale: 'en-US', + network: { carrier: 'Android', bluetooth: false, cellular: true, wifi: true }, + os: { name: 'Android', version: '8.1.0' }, + screen: { density: 420, height: 1794, width: 1080 }, + timezone: 'Asia/Kolkata', + traits: { anonymousId: '5094f5704b9cf2b3' }, + userAgent: + 'Dalvik/2.1.0 (Linux; U; Android 8.1.0; Android SDK built for x86 Build/OSM1.180201.007)', + }, + event: 'MainActivity', + integrations: { All: true }, + messageId: 'id4', + properties: { name: 'MainActivity', automatic: true }, + originalTimestamp: '2020-03-12T09:05:03.421Z', + type: 'screen', + sentAt: '2020-03-12T09:05:13.042Z', + }, + destination: { + Config: { + applicationId: 'leanplum_application_id', + clientKey: 'leanplum_client_key', + isDevelop: true, + useNativeSDK: false, + sendEvents: false, + }, + }, + }, + ], + method: 'POST', + }, + pathSuffix: '', + }, + output: { + response: { + status: 200, + body: [ + { + output: { + version: '1', + type: 'REST', + method: 'POST', + endpoint: 'https://api.leanplum.com/api', + headers: { 'Content-Type': 'application/json' }, + params: { action: 'start' }, + body: { + JSON: { + apiVersion: '1.0.6', + appId: 'leanplum_application_id', + clientKey: 'leanplum_client_key', + userId: '5094f5704b9cf2b3', + deviceId: '5094f5704b9cf2b3', + appVersion: '1.0', + systemName: 'Android', + systemVersion: '8.1.0', + deviceName: 'generic_x86', + deviceModel: 'Android SDK built for x86', + userAttributes: { anonymousId: '5094f5704b9cf2b3' }, + locale: 'en-US', + timezone: 'Asia/Kolkata', + time: 1584003903, + devMode: true, + }, + XML: {}, + JSON_ARRAY: {}, + FORM: {}, + }, + files: {}, + userId: '5094f5704b9cf2b3', + }, + statusCode: 200, + }, + { + output: { + version: '1', + type: 'REST', + method: 'POST', + endpoint: 'https://api.leanplum.com/api', + headers: { 'Content-Type': 'application/json' }, + params: { action: 'advance' }, + body: { + JSON: { + apiVersion: '1.0.6', + appId: 'leanplum_application_id', + clientKey: 'leanplum_client_key', + userId: '5094f5704b9cf2b3', + state: 'MainActivity', + deviceId: '5094f5704b9cf2b3', + time: 1584003903, + devMode: true, + }, + XML: {}, + JSON_ARRAY: {}, + FORM: {}, + }, + files: {}, + userId: '5094f5704b9cf2b3', + }, + statusCode: 200, + }, + ], + }, + }, + }, + { + name: 'leanplum', + description: 'Test 6', + feature: 'processor', + module: 'destination', + version: 'v0', + input: { + request: { + body: [ + { + message: { + anonymousId: '5094f5704b9cf2b3', + channel: 'mobile', + context: { + app: { + build: '1', + name: 'LeanPlumIntegrationAndroid', + namespace: 'com.android.SampleLeanPlum', + version: '1.0', + }, + device: { + id: '5094f5704b9cf2b3', + manufacturer: 'Google', + model: 'Android SDK built for x86', + name: 'generic_x86', + type: 'android', + }, + library: { name: 'com.rudderstack.android.sdk.core', version: '1.0.1-beta.1' }, + locale: 'en-US', + network: { carrier: 'Android', bluetooth: false, cellular: true, wifi: true }, + os: { name: 'Android', version: '8.1.0' }, + screen: { density: 420, height: 1794, width: 1080 }, + timezone: 'Asia/Kolkata', + traits: { anonymousId: '5094f5704b9cf2b3' }, + userAgent: + 'Dalvik/2.1.0 (Linux; U; Android 8.1.0; Android SDK built for x86 Build/OSM1.180201.007)', + }, + event: 'MainActivity', + integrations: { All: true }, + messageId: 'id5', + properties: { automatic: true }, + originalTimestamp: '2020-03-12T09:05:03.421Z', + type: 'screen', + sentAt: '2020-03-12T09:05:13.042Z', + }, + destination: { + Config: { + applicationId: 'leanplum_application_id', + clientKey: 'leanplum_client_key', + isDevelop: true, + useNativeSDK: false, + sendEvents: false, + }, + }, + }, + ], + method: 'POST', + }, + pathSuffix: '', + }, + output: { + response: { + status: 200, + body: [ + { + output: { + version: '1', + type: 'REST', + method: 'POST', + endpoint: 'https://api.leanplum.com/api', + headers: { 'Content-Type': 'application/json' }, + params: { action: 'start' }, + body: { + JSON: { + apiVersion: '1.0.6', + appId: 'leanplum_application_id', + clientKey: 'leanplum_client_key', + userId: '5094f5704b9cf2b3', + deviceId: '5094f5704b9cf2b3', + appVersion: '1.0', + systemName: 'Android', + systemVersion: '8.1.0', + deviceName: 'generic_x86', + deviceModel: 'Android SDK built for x86', + userAttributes: { anonymousId: '5094f5704b9cf2b3' }, + locale: 'en-US', + timezone: 'Asia/Kolkata', + time: 1584003903, + devMode: true, + }, + XML: {}, + JSON_ARRAY: {}, + FORM: {}, + }, + files: {}, + userId: '5094f5704b9cf2b3', + }, + statusCode: 200, + }, + { + output: { + version: '1', + type: 'REST', + method: 'POST', + endpoint: 'https://api.leanplum.com/api', + headers: { 'Content-Type': 'application/json' }, + params: { action: 'advance' }, + body: { + JSON: { + apiVersion: '1.0.6', + appId: 'leanplum_application_id', + clientKey: 'leanplum_client_key', + userId: '5094f5704b9cf2b3', + state: 'MainActivity', + deviceId: '5094f5704b9cf2b3', + time: 1584003903, + devMode: true, + }, + XML: {}, + JSON_ARRAY: {}, + FORM: {}, + }, + files: {}, + userId: '5094f5704b9cf2b3', + }, + statusCode: 200, + }, + ], + }, + }, + }, + { + name: 'leanplum', + description: 'Test 7', + feature: 'processor', + module: 'destination', + version: 'v0', + input: { + request: { + body: [ + { + message: { + anonymousId: '5094f5704b9cf2b3', + channel: 'mobile', + context: { + app: { + build: '1', + name: 'LeanPlumIntegrationAndroid', + namespace: 'com.android.SampleLeanPlum', + version: '1.0', + }, + device: { + id: '5094f5704b9cf2b3', + manufacturer: 'Google', + model: 'Android SDK built for x86', + name: 'generic_x86', + type: 'android', + }, + library: { name: 'com.rudderstack.android.sdk.core', version: '1.0.1-beta.1' }, + locale: 'en-US', + network: { carrier: 'Android', bluetooth: false, cellular: true, wifi: true }, + os: { name: 'Android', version: '8.1.0' }, + screen: { density: 420, height: 1794, width: 1080 }, + timezone: 'Asia/Kolkata', + traits: { anonymousId: '5094f5704b9cf2b3' }, + userAgent: + 'Dalvik/2.1.0 (Linux; U; Android 8.1.0; Android SDK built for x86 Build/OSM1.180201.007)', + }, + integrations: { All: true }, + messageId: 'id6', + properties: { automatic: true }, + originalTimestamp: '2020-03-12T09:05:03.421Z', + type: 'screen', + sentAt: '2020-03-12T09:05:13.042Z', + }, + destination: { + Config: { + applicationId: 'leanplum_application_id', + clientKey: 'leanplum_client_key', + isDevelop: true, + useNativeSDK: false, + sendEvents: false, + }, + }, + }, + ], + method: 'POST', + }, + pathSuffix: '', + }, + output: { + response: { + status: 200, + body: [ + { + error: "Missing required value from [\"properties.name\",\"event\"]", + statTags: { + destType: 'LEANPLUM', + errorCategory: 'dataValidation', + errorType: 'instrumentation', + feature: 'processor', + implementation: 'native', + module: 'destination', + }, + statusCode: 400, + }, + ], + }, + }, + }, + { + name: 'leanplum', + description: 'Test 8', + feature: 'processor', + module: 'destination', + version: 'v0', + input: { + request: { + body: [ + { + message: { + channel: 'web', + context: { + app: { + build: '1.0.0', + name: 'RudderLabs JavaScript SDK', + namespace: 'com.rudderlabs.javascript', + version: '1.0.0', + }, + library: { name: 'RudderLabs JavaScript SDK', version: '1.0.0' }, + userAgent: + 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.90 Safari/537.36', + locale: 'en-US', + ip: '0.0.0.0', + os: { name: '', version: '' }, + screen: { density: 2 }, + traits: { + id: 'some_developer_id', + createAt: '2019-10-14T09:03:17.562Z', + address: { country: 'USA', city: 'NY' }, + country: 'India', + city: 'Delhi', + }, + }, + type: 'identify', + messageId: '84e26acc-56a5-4835-8233-591137fca468', + originalTimestamp: '2019-10-14T09:03:17.562Z', + anonymousId: '00000000000000000000000000', + integrations: { All: true }, + sentAt: '2019-10-14T09:03:22.563Z', + }, + destination: { + Config: { + applicationId: 'leanplum_application_id', + clientKey: 'leanplum_client_key', + isDevelop: true, + useNativeSDK: false, + sendEvents: false, + }, + }, + }, + ], + method: 'POST', + }, + pathSuffix: '', + }, + output: { + response: { + status: 200, + body: [ + { + output: { + version: '1', + type: 'REST', + method: 'POST', + endpoint: 'https://api.leanplum.com/api', + headers: { 'Content-Type': 'application/json' }, + params: { action: 'setUserAttributes' }, + body: { + JSON: { + apiVersion: '1.0.6', + appId: 'leanplum_application_id', + clientKey: 'leanplum_client_key', + userId: '00000000000000000000000000', + newUserId: 'some_developer_id', + userAttributes: { + id: 'some_developer_id', + createAt: '2019-10-14T09:03:17.562Z', + address: { country: 'USA', city: 'NY' }, + country: 'India', + city: 'Delhi', + }, + created: 1571043798, + locale: 'en-US', + country: 'USA', + city: 'NY', + time: 1571043798, + devMode: true, + }, + XML: {}, + JSON_ARRAY: {}, + FORM: {}, + }, + files: {}, + userId: '00000000000000000000000000', + }, + statusCode: 200, + }, + ], + }, + }, + }, + { + name: 'leanplum', + description: 'Test 9', + feature: 'processor', + module: 'destination', + version: 'v0', + input: { + request: { + body: [ + { + message: { + anonymousId: '5094f5704b9cf2b3', + channel: 'mobile', + context: { + app: { + build: '1', + name: 'LeanPlumIntegrationAndroid', + namespace: 'com.android.SampleLeanPlum', + version: '1.0', + }, + device: { + id: '5094f5704b9cf2b3', + manufacturer: 'Google', + model: 'Android SDK built for x86', + name: 'generic_x86', + type: 'android', + }, + library: { name: 'com.rudderstack.android.sdk.core', version: '1.0.1-beta.1' }, + locale: 'en-US', + network: { carrier: 'Android', bluetooth: false, cellular: true, wifi: true }, + os: { name: 'Android', version: '8.1.0' }, + screen: { density: 420, height: 1794, width: 1080 }, + timezone: 'Asia/Kolkata', + traits: { anonymousId: '5094f5704b9cf2b3' }, + userAgent: + 'Dalvik/2.1.0 (Linux; U; Android 8.1.0; Android SDK built for x86 Build/OSM1.180201.007)', + }, + event: 'MainActivity', + integrations: { All: true }, + messageId: 'id1', + properties: { name: 'MainActivity', automatic: true }, + originalTimestamp: '2020-03-12T09:05:03.421Z', + type: 'screen', + sentAt: '2020-03-12T09:05:13.042Z', + }, + destination: { + Config: { + applicationId: 'leanplum_application_id', + clientKey: 'leanplum_client_key', + isDevelop: true, + useNativeSDK: false, + sendEvents: false, + }, + }, + }, + ], + method: 'POST', + }, + pathSuffix: '', + }, + output: { + response: { + status: 200, + body: [ + { + output: { + version: '1', + type: 'REST', + method: 'POST', + endpoint: 'https://api.leanplum.com/api', + headers: { 'Content-Type': 'application/json' }, + params: { action: 'start' }, + body: { + JSON: { + apiVersion: '1.0.6', + appId: 'leanplum_application_id', + clientKey: 'leanplum_client_key', + userId: '5094f5704b9cf2b3', + deviceId: '5094f5704b9cf2b3', + appVersion: '1.0', + systemName: 'Android', + systemVersion: '8.1.0', + deviceName: 'generic_x86', + deviceModel: 'Android SDK built for x86', + userAttributes: { anonymousId: '5094f5704b9cf2b3' }, + locale: 'en-US', + timezone: 'Asia/Kolkata', + time: 1584003903, + devMode: true, + }, + XML: {}, + JSON_ARRAY: {}, + FORM: {}, + }, + files: {}, + userId: '5094f5704b9cf2b3', + }, + statusCode: 200, + }, + { + output: { + version: '1', + type: 'REST', + method: 'POST', + endpoint: 'https://api.leanplum.com/api', + headers: { 'Content-Type': 'application/json' }, + params: { action: 'advance' }, + body: { + JSON: { + apiVersion: '1.0.6', + appId: 'leanplum_application_id', + clientKey: 'leanplum_client_key', + userId: '5094f5704b9cf2b3', + state: 'MainActivity', + deviceId: '5094f5704b9cf2b3', + time: 1584003903, + devMode: true, + }, + XML: {}, + JSON_ARRAY: {}, + FORM: {}, + }, + files: {}, + userId: '5094f5704b9cf2b3', + }, + statusCode: 200, + }, + ], + }, + }, + }, + { + name: 'leanplum', + description: 'Test 10', + feature: 'processor', + module: 'destination', + version: 'v0', + input: { + request: { + body: [ + { + message: { + anonymousId: '5094f5704b9cf2b3', + channel: 'mobile', + context: { + app: { + build: '1', + name: 'LeanPlumIntegrationAndroid', + namespace: 'com.android.SampleLeanPlum', + version: '1.0', + }, + device: { + id: '5094f5704b9cf2b3', + manufacturer: 'Google', + model: 'Android SDK built for x86', + name: 'generic_x86', + type: 'android', + }, + library: { name: 'com.rudderstack.android.sdk.core', version: '1.0.1-beta.1' }, + locale: 'en-US', + network: { carrier: 'Android', bluetooth: false, cellular: true, wifi: true }, + os: { name: 'Android', version: '8.1.0' }, + screen: { density: 420, height: 1794, width: 1080 }, + timezone: 'Asia/Kolkata', + traits: { anonymousId: '5094f5704b9cf2b3' }, + userAgent: + 'Dalvik/2.1.0 (Linux; U; Android 8.1.0; Android SDK built for x86 Build/OSM1.180201.007)', + }, + event: 'MainActivity', + integrations: { All: true }, + messageId: 'id1', + properties: { automatic: true }, + originalTimestamp: '2020-03-12T09:05:03.421Z', + type: 'screen', + sentAt: '2020-03-12T09:05:13.042Z', + }, + destination: { + Config: { + applicationId: 'leanplum_application_id', + clientKey: 'leanplum_client_key', + isDevelop: true, + useNativeSDK: false, + sendEvents: false, + }, + }, + }, + ], + method: 'POST', + }, + pathSuffix: '', + }, + output: { + response: { + status: 200, + body: [ + { + output: { + version: '1', + type: 'REST', + method: 'POST', + endpoint: 'https://api.leanplum.com/api', + headers: { 'Content-Type': 'application/json' }, + params: { action: 'start' }, + body: { + JSON: { + apiVersion: '1.0.6', + appId: 'leanplum_application_id', + clientKey: 'leanplum_client_key', + userId: '5094f5704b9cf2b3', + deviceId: '5094f5704b9cf2b3', + appVersion: '1.0', + systemName: 'Android', + systemVersion: '8.1.0', + deviceName: 'generic_x86', + deviceModel: 'Android SDK built for x86', + userAttributes: { anonymousId: '5094f5704b9cf2b3' }, + locale: 'en-US', + timezone: 'Asia/Kolkata', + time: 1584003903, + devMode: true, + }, + XML: {}, + JSON_ARRAY: {}, + FORM: {}, + }, + files: {}, + userId: '5094f5704b9cf2b3', + }, + statusCode: 200, + }, + { + output: { + version: '1', + type: 'REST', + method: 'POST', + endpoint: 'https://api.leanplum.com/api', + headers: { 'Content-Type': 'application/json' }, + params: { action: 'advance' }, + body: { + JSON: { + apiVersion: '1.0.6', + appId: 'leanplum_application_id', + clientKey: 'leanplum_client_key', + userId: '5094f5704b9cf2b3', + state: 'MainActivity', + deviceId: '5094f5704b9cf2b3', + time: 1584003903, + devMode: true, + }, + XML: {}, + JSON_ARRAY: {}, + FORM: {}, + }, + files: {}, + userId: '5094f5704b9cf2b3', + }, + statusCode: 200, + }, + ], + }, + }, + }, + { + name: 'leanplum', + description: 'Test 11', + feature: 'processor', + module: 'destination', + version: 'v0', + input: { + request: { + body: [ + { + message: { + anonymousId: '5094f5704b9cf2b3', + channel: 'mobile', + context: { + app: { + build: '1', + name: 'LeanPlumIntegrationAndroid', + namespace: 'com.android.SampleLeanPlum', + version: '1.0', + }, + device: { + id: '5094f5704b9cf2b3', + manufacturer: 'Google', + model: 'Android SDK built for x86', + name: 'generic_x86', + type: 'android', + }, + library: { name: 'com.rudderstack.android.sdk.core', version: '1.0.1-beta.1' }, + locale: 'en-US', + network: { carrier: 'Android', bluetooth: false, cellular: true, wifi: true }, + os: { name: 'Android', version: '8.1.0' }, + screen: { density: 420, height: 1794, width: 1080 }, + timezone: 'Asia/Kolkata', + traits: { anonymousId: '5094f5704b9cf2b3' }, + userAgent: + 'Dalvik/2.1.0 (Linux; U; Android 8.1.0; Android SDK built for x86 Build/OSM1.180201.007)', + }, + integrations: { All: true }, + messageId: 'id1', + properties: { automatic: true }, + originalTimestamp: '2020-03-12T09:05:03.421Z', + type: 'screen', + sentAt: '2020-03-12T09:05:13.042Z', + }, + destination: { + Config: { + applicationId: 'leanplum_application_id', + clientKey: 'leanplum_client_key', + isDevelop: true, + useNativeSDK: false, + sendEvents: false, + }, + }, + }, + ], + method: 'POST', + }, + pathSuffix: '', + }, + output: { + response: { + status: 200, + body: [ + { + error: "Missing required value from [\"properties.name\",\"event\"]", + statTags: { + destType: 'LEANPLUM', + errorCategory: 'dataValidation', + errorType: 'instrumentation', + feature: 'processor', + implementation: 'native', + module: 'destination', + }, + statusCode: 400, + }, + ], + }, + }, + }, + { + name: 'leanplum', + description: 'Test 12', + feature: 'processor', + module: 'destination', + version: 'v0', + input: { + request: { + body: [ + { + message: { + anonymousId: '5094f5704b9cf2b3', + channel: 'mobile', + context: { + app: { + build: '1', + name: 'LeanPlumIntegrationAndroid', + namespace: 'com.android.SampleLeanPlum', + version: '1.0', + }, + device: { + id: '5094f5704b9cf2b3', + manufacturer: 'Google', + model: 'Android SDK built for x86', + name: 'generic_x86', + type: 'android', + }, + library: { name: 'com.rudderstack.android.sdk.core', version: '1.0.1-beta.1' }, + locale: 'en-US', + network: { carrier: 'Android', bluetooth: false, cellular: true, wifi: true }, + os: { name: 'Android', version: '8.1.0' }, + screen: { density: 420, height: 1794, width: 1080 }, + timezone: 'Asia/Kolkata', + traits: { anonymousId: '5094f5704b9cf2b3' }, + userAgent: + 'Dalvik/2.1.0 (Linux; U; Android 8.1.0; Android SDK built for x86 Build/OSM1.180201.007)', + }, + event: 'account: logged out', + integrations: { All: true }, + messageId: 'id1', + properties: { name: 'MainActivity', automatic: true }, + originalTimestamp: '2020-03-12T09:05:03.421Z', + type: 'track', + sentAt: '2020-03-12T09:05:13.042Z', + }, + destination: { + Config: { + applicationId: 'leanplum_application_id', + clientKey: 'leanplum_client_key', + isDevelop: true, + useNativeSDK: false, + sendEvents: false, + }, + }, + }, + ], + method: 'POST', + }, + pathSuffix: '', + }, + output: { + response: { + status: 200, + body: [ + { + output: { + version: '1', + type: 'REST', + method: 'POST', + endpoint: 'https://api.leanplum.com/api', + headers: { 'Content-Type': 'application/json' }, + params: { action: 'start' }, + body: { + JSON: { + apiVersion: '1.0.6', + appId: 'leanplum_application_id', + clientKey: 'leanplum_client_key', + userId: '5094f5704b9cf2b3', + deviceId: '5094f5704b9cf2b3', + appVersion: '1.0', + systemName: 'Android', + systemVersion: '8.1.0', + deviceName: 'generic_x86', + deviceModel: 'Android SDK built for x86', + userAttributes: { anonymousId: '5094f5704b9cf2b3' }, + locale: 'en-US', + timezone: 'Asia/Kolkata', + time: 1584003903, + devMode: true, + }, + XML: {}, + JSON_ARRAY: {}, + FORM: {}, + }, + files: {}, + userId: '5094f5704b9cf2b3', + }, + statusCode: 200, + }, + { + output: { + version: '1', + type: 'REST', + method: 'POST', + endpoint: 'https://api.leanplum.com/api', + headers: { 'Content-Type': 'application/json' }, + params: { action: 'track' }, + body: { + JSON: { + apiVersion: '1.0.6', + appId: 'leanplum_application_id', + clientKey: 'leanplum_client_key', + userId: '5094f5704b9cf2b3', + event: 'account: logged out', + deviceId: '5094f5704b9cf2b3', + params: { name: 'MainActivity', automatic: true }, + time: 1584003903, + devMode: true, + }, + XML: {}, + JSON_ARRAY: {}, + FORM: {}, + }, + files: {}, + userId: '5094f5704b9cf2b3', + }, + statusCode: 200, + }, + ], + }, + }, + }, + { + name: 'leanplum', + description: 'Test 13', + feature: 'processor', + module: 'destination', + version: 'v0', + input: { + request: { + body: [ + { + message: { + anonymousId: '5094f5704b9cf2b3', + channel: 'mobile', + context: { + app: { + build: '1', + name: 'LeanPlumIntegrationAndroid', + namespace: 'com.android.SampleLeanPlum', + version: '1.0', + }, + device: { + id: '5094f5704b9cf2b3', + manufacturer: 'Google', + model: 'Android SDK built for x86', + name: 'generic_x86', + type: 'android', + }, + library: { name: 'com.rudderstack.android.sdk.core', version: '1.0.1-beta.1' }, + locale: 'en-US', + network: { carrier: 'Android', bluetooth: false, cellular: true, wifi: true }, + os: { name: 'Android', version: '8.1.0' }, + screen: { density: 420, height: 1794, width: 1080 }, + timezone: 'Asia/Kolkata', + traits: { anonymousId: '5094f5704b9cf2b3' }, + userAgent: + 'Dalvik/2.1.0 (Linux; U; Android 8.1.0; Android SDK built for x86 Build/OSM1.180201.007)', + }, + event: 'account: logged out', + integrations: { All: true }, + messageId: 'id1', + properties: { name: 'MainActivity', automatic: true, total: 2.45, currency: 'USD' }, + originalTimestamp: '2020-03-12T09:05:03.421Z', + type: 'track', + sentAt: '2020-03-12T09:05:13.042Z', + }, + destination: { + Config: { + applicationId: 'leanplum_application_id', + clientKey: 'leanplum_client_key', + isDevelop: true, + useNativeSDK: false, + sendEvents: false, + }, + }, + }, + ], + method: 'POST', + }, + pathSuffix: '', + }, + output: { + response: { + status: 200, + body: [ + { + output: { + version: '1', + type: 'REST', + method: 'POST', + endpoint: 'https://api.leanplum.com/api', + headers: { 'Content-Type': 'application/json' }, + params: { action: 'start' }, + body: { + JSON: { + apiVersion: '1.0.6', + appId: 'leanplum_application_id', + clientKey: 'leanplum_client_key', + userId: '5094f5704b9cf2b3', + deviceId: '5094f5704b9cf2b3', + appVersion: '1.0', + systemName: 'Android', + systemVersion: '8.1.0', + deviceName: 'generic_x86', + deviceModel: 'Android SDK built for x86', + userAttributes: { anonymousId: '5094f5704b9cf2b3' }, + locale: 'en-US', + timezone: 'Asia/Kolkata', + time: 1584003903, + devMode: true, + }, + XML: {}, + JSON_ARRAY: {}, + FORM: {}, + }, + files: {}, + userId: '5094f5704b9cf2b3', + }, + statusCode: 200, + }, + { + output: { + version: '1', + type: 'REST', + method: 'POST', + endpoint: 'https://api.leanplum.com/api', + headers: { 'Content-Type': 'application/json' }, + params: { action: 'track' }, + body: { + JSON: { + apiVersion: '1.0.6', + appId: 'leanplum_application_id', + clientKey: 'leanplum_client_key', + userId: '5094f5704b9cf2b3', + event: 'account: logged out', + deviceId: '5094f5704b9cf2b3', + params: { name: 'MainActivity', automatic: true, total: 2.45, currency: 'USD' }, + value: 2.45, + currencyCode: 'USD', + time: 1584003903, + devMode: true, + }, + XML: {}, + JSON_ARRAY: {}, + FORM: {}, + }, + files: {}, + userId: '5094f5704b9cf2b3', + }, + statusCode: 200, + }, + ], + }, + }, + }, +]; diff --git a/test/integrations/destinations/leanplum/router/data.ts b/test/integrations/destinations/leanplum/router/data.ts new file mode 100644 index 0000000000..db75a7fdc4 --- /dev/null +++ b/test/integrations/destinations/leanplum/router/data.ts @@ -0,0 +1,370 @@ +export const data = [ + { + name: 'leanplum', + description: 'Test 0', + feature: 'router', + module: 'destination', + version: 'v0', + input: { + request: { + body: { + input: [ + { + message: { + anonymousId: '5094f5704b9cf2b3', + channel: 'mobile', + context: { + app: { + build: '1', + name: 'LeanPlumIntegrationAndroid', + namespace: 'com.android.SampleLeanPlum', + version: '1.0', + }, + device: { + id: '5094f5704b9cf2b3', + manufacturer: 'Google', + model: 'Android SDK built for x86', + name: 'generic_x86', + type: 'android', + }, + library: { + name: 'com.rudderstack.android.sdk.core', + version: '1.0.1-beta.1', + }, + locale: 'en-US', + network: { + carrier: 'Android', + bluetooth: false, + cellular: true, + wifi: true, + }, + os: { + name: 'Android', + version: '8.1.0', + }, + screen: { + density: 420, + height: 1794, + width: 1080, + }, + timezone: 'Asia/Kolkata', + traits: { + anonymousId: '5094f5704b9cf2b3', + }, + userAgent: + 'Dalvik/2.1.0 (Linux; U; Android 8.1.0; Android SDK built for x86 Build/OSM1.180201.007)', + }, + event: 'MainActivity', + integrations: { + All: true, + }, + messageId: 'id1', + properties: { + name: 'MainActivity', + automatic: true, + }, + originalTimestamp: '2020-03-12T09:05:03.421Z', + type: 'screen', + sentAt: '2020-03-12T09:05:13.042Z', + }, + metadata: { + jobId: 1, + }, + destination: { + Config: { + applicationId: 'leanplum_application_id', + clientKey: 'leanplum_client_key', + isDevelop: true, + useNativeSDK: false, + sendEvents: false, + }, + }, + }, + ], + destType: 'leanplum', + }, + method: 'POST', + }, + }, + output: { + response: { + status: 200, + body: { + output: [ + { + batchedRequest: [ + { + version: '1', + type: 'REST', + method: 'POST', + endpoint: 'https://api.leanplum.com/api', + headers: { + 'Content-Type': 'application/json', + }, + params: { + action: 'start', + }, + body: { + JSON: { + appId: 'leanplum_application_id', + clientKey: 'leanplum_client_key', + apiVersion: '1.0.6', + userId: '5094f5704b9cf2b3', + deviceId: '5094f5704b9cf2b3', + appVersion: '1.0', + systemName: 'Android', + systemVersion: '8.1.0', + deviceName: 'generic_x86', + deviceModel: 'Android SDK built for x86', + userAttributes: { + anonymousId: '5094f5704b9cf2b3', + }, + locale: 'en-US', + timezone: 'Asia/Kolkata', + time: 1584003903, + devMode: true, + }, + XML: {}, + JSON_ARRAY: {}, + FORM: {}, + }, + files: {}, + userId: '5094f5704b9cf2b3', + }, + { + version: '1', + type: 'REST', + method: 'POST', + endpoint: 'https://api.leanplum.com/api', + headers: { + 'Content-Type': 'application/json', + }, + params: { + action: 'advance', + }, + body: { + JSON: { + appId: 'leanplum_application_id', + clientKey: 'leanplum_client_key', + apiVersion: '1.0.6', + userId: '5094f5704b9cf2b3', + state: 'MainActivity', + deviceId: '5094f5704b9cf2b3', + time: 1584003903, + devMode: true, + }, + XML: {}, + JSON_ARRAY: {}, + FORM: {}, + }, + files: {}, + userId: '5094f5704b9cf2b3', + }, + ], + metadata: [ + { + jobId: 1, + }, + ], + batched: false, + statusCode: 200, + destination: { + Config: { + applicationId: 'leanplum_application_id', + clientKey: 'leanplum_client_key', + isDevelop: true, + useNativeSDK: false, + sendEvents: false, + }, + }, + }, + ], + }, + }, + }, + }, + { + name: 'leanplum', + description: 'Test 1', + feature: 'router', + module: 'destination', + version: 'v0', + input: { + request: { + body: { + input: [ + { + message: { + anonymousId: '5094f5704b9cf2b3', + channel: 'mobile', + context: { + app: { + build: '1', + name: 'LeanPlumIntegrationAndroid', + namespace: 'com.android.SampleLeanPlum', + version: '1.0', + }, + device: { + id: '5094f5704b9cf2b3', + manufacturer: 'Google', + model: 'Android SDK built for x86', + name: 'generic_x86', + type: 'android', + }, + library: { + name: 'com.rudderstack.android.sdk.core', + version: '1.0.1-beta.1', + }, + locale: 'en-US', + network: { + carrier: 'Android', + bluetooth: false, + cellular: true, + wifi: true, + }, + os: { + name: 'Android', + version: '8.1.0', + }, + screen: { + density: 420, + height: 1794, + width: 1080, + }, + timezone: 'Asia/Kolkata', + traits: { + anonymousId: '5094f5704b9cf2b3', + }, + userAgent: + 'Dalvik/2.1.0 (Linux; U; Android 8.1.0; Android SDK built for x86 Build/OSM1.180201.007)', + }, + event: 'MainActivity', + integrations: { + All: true, + }, + messageId: 'id2', + properties: { + name: 'MainActivity', + automatic: true, + }, + originalTimestamp: '2020-03-12T09:05:03.421Z', + type: 'screen', + sentAt: '2020-03-12T09:05:13.042Z', + }, + metadata: { + jobId: 2, + }, + destination: { + Config: { + applicationId: 'leanplum_application_id', + clientKey: 'leanplum_client_key__', + isDevelop: true, + useNativeSDK: false, + sendEvents: false, + }, + }, + }, + ], + destType: 'leanplum', + }, + method: 'POST', + }, + }, + output: { + response: { + status: 200, + body: { + output: [ + { + batchedRequest: [ + { + version: '1', + type: 'REST', + method: 'POST', + endpoint: 'https://api.leanplum.com/api', + headers: { + 'Content-Type': 'application/json', + }, + params: { + action: 'start', + }, + body: { + JSON: { + appId: 'leanplum_application_id', + clientKey: 'leanplum_client_key__', + apiVersion: '1.0.6', + userId: '5094f5704b9cf2b3', + deviceId: '5094f5704b9cf2b3', + appVersion: '1.0', + systemName: 'Android', + systemVersion: '8.1.0', + deviceName: 'generic_x86', + deviceModel: 'Android SDK built for x86', + userAttributes: { + anonymousId: '5094f5704b9cf2b3', + }, + locale: 'en-US', + timezone: 'Asia/Kolkata', + time: 1584003903, + devMode: true, + }, + XML: {}, + JSON_ARRAY: {}, + FORM: {}, + }, + files: {}, + userId: '5094f5704b9cf2b3', + }, + { + version: '1', + type: 'REST', + method: 'POST', + endpoint: 'https://api.leanplum.com/api', + headers: { + 'Content-Type': 'application/json', + }, + params: { + action: 'advance', + }, + body: { + JSON: { + appId: 'leanplum_application_id', + clientKey: 'leanplum_client_key__', + apiVersion: '1.0.6', + userId: '5094f5704b9cf2b3', + state: 'MainActivity', + deviceId: '5094f5704b9cf2b3', + time: 1584003903, + devMode: true, + }, + XML: {}, + JSON_ARRAY: {}, + FORM: {}, + }, + files: {}, + userId: '5094f5704b9cf2b3', + }, + ], + metadata: [ + { + jobId: 2, + }, + ], + batched: false, + statusCode: 200, + destination: { + Config: { + applicationId: 'leanplum_application_id', + clientKey: 'leanplum_client_key__', + isDevelop: true, + useNativeSDK: false, + sendEvents: false, + }, + }, + }, + ], + }, + }, + }, + }, +]; diff --git a/test/integrations/destinations/lemnisk/processor/data.ts b/test/integrations/destinations/lemnisk/processor/data.ts new file mode 100644 index 0000000000..9127e247c8 --- /dev/null +++ b/test/integrations/destinations/lemnisk/processor/data.ts @@ -0,0 +1,1088 @@ +export const data = [ + { + name: 'lemnisk', + description: 'Error: Event Type is required ', + feature: 'processor', + module: 'destination', + version: 'v0', + input: { + request: { + body: [ + { + message: { + userId: 'user123', + event: 'Product Reviewed', + properties: { review_body: 'Average product, expected much more.' }, + context: { + userAgent: + 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.80 Safari/537.36', + }, + timestamp: '2020-02-02T00:23:09.544Z', + messageId: '1578564113557-af022c68-429e-4af4-b99b-2b9174056383', + }, + destination: { + id: '2JAdls99p6UxoFNSKGwvh0aIt7E', + name: 'Lemnisk Marketing Automation', + enabled: true, + Config: { + plWriteKey: 'pl_writeKey', + pl: 'http://10.11.36.17:8080/analyze/analyze.php', + passKey: '', + apiKey: '', + diapi: '', + cloudMode: 'web', + srcId: '', + diapiWriteKey: '', + }, + destinationDefinition: { + config: { + transformAt: 'processor', + transformAtV1: 'processor', + saveDestinationResponse: true, + includeKeys: [ + 'apiKey', + 'passKey', + 'cloudMode', + 'diapi', + 'pl', + 'diapiWriteKey', + 'plWriteKey', + 'srcId', + ], + excludeKeys: [], + supportedSourceTypes: [ + 'android', + 'ios', + 'web', + 'unity', + 'amp', + 'cloud', + 'reactnative', + 'flutter', + 'cordova', + 'warehouse', + ], + supportedMessageTypes: ['track', 'identify', 'page'], + destConfig: { + defaultConfig: [ + 'apiKey', + 'passKey', + 'cloudMode', + 'diapi', + 'pl', + 'diapiWriteKey', + 'plWriteKey', + 'deviceModeWriteKey', + 'srcId', + ], + }, + secretKeys: ['apiKey', 'passKey', 'plWriteKey', 'diapiWriteKey'], + }, + responseRules: null, + id: '1j9dYVEplxUC5swbXkpK9fYT7uk', + name: 'LEMNISK_MARKETING_AUTOMATION', + displayName: 'Lemnisk Marketing Automation', + createdAt: '2022-12-12T21:58:08.637Z', + }, + rootStore: null, + isProcessorEnabled: true, + }, + }, + ], + method: 'POST', + }, + pathSuffix: '', + }, + output: { + response: { + status: 200, + body: [ + { + error: 'Event type is required', + statTags: { + destType: 'LEMNISK', + errorCategory: 'dataValidation', + errorType: 'instrumentation', + feature: 'processor', + implementation: 'native', + module: 'destination', + }, + statusCode: 400, + }, + ], + }, + }, + }, + { + name: 'lemnisk', + description: 'Error: Pl Track: Invalid Configuration', + feature: 'processor', + module: 'destination', + version: 'v0', + input: { + request: { + body: [ + { + message: { + type: 'track', + properties: { + product_id: 'ab1234', + rating: 3, + review_body: 'Average product, expected much more.', + review_id: '12345', + }, + event: 'Product Reviewed', + context: { + library: { name: 'RudderLabs JavaScript SDK', version: '2.9.1' }, + userAgent: + 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.80 Safari/537.36', + }, + timestamp: '2020-02-02T00:23:09.544Z', + messageId: '1578564113557-af022c68-429e-4af4-b99b-2b9174056383', + }, + destination: { + id: '2JAdls99p6UxoFNSKGwvh0aIt7E', + name: 'Lemnisk Marketing Automation', + enabled: true, + Config: { + plWriteKey: 'pl_writeKey', + pl: '', + passKey: '', + apiKey: '', + diapi: '', + cloudMode: 'web', + srcId: '', + diapiWriteKey: '', + }, + destinationDefinition: { + config: { + transformAt: 'processor', + transformAtV1: 'processor', + saveDestinationResponse: true, + includeKeys: [ + 'apiKey', + 'passKey', + 'cloudMode', + 'diapi', + 'pl', + 'diapiWriteKey', + 'plWriteKey', + 'srcId', + ], + excludeKeys: [], + supportedSourceTypes: [ + 'android', + 'ios', + 'web', + 'unity', + 'amp', + 'cloud', + 'reactnative', + 'flutter', + 'cordova', + 'warehouse', + ], + supportedMessageTypes: ['track', 'identify', 'page'], + destConfig: { + defaultConfig: [ + 'apiKey', + 'passKey', + 'cloudMode', + 'diapi', + 'pl', + 'diapiWriteKey', + 'plWriteKey', + 'deviceModeWriteKey', + 'srcId', + ], + }, + secretKeys: ['apiKey', 'passKey', 'plWriteKey', 'diapiWriteKey'], + }, + responseRules: null, + id: '1j9dYVEplxUC5swbXkpK9fYT7uk', + name: 'LEMNISK_MARKETING_AUTOMATION', + displayName: 'Lemnisk Marketing Automation', + createdAt: '2022-12-12T21:58:08.637Z', + }, + rootStore: null, + isProcessorEnabled: true, + }, + }, + ], + method: 'POST', + }, + pathSuffix: '', + }, + output: { + response: { + status: 200, + body: [ + { + error: 'Configuration for Web Mode requires write key and region url', + statTags: { + destType: 'LEMNISK', + errorCategory: 'dataValidation', + errorType: 'configuration', + feature: 'processor', + implementation: 'native', + module: 'destination', + }, + statusCode: 400, + }, + ], + }, + }, + }, + { + name: 'lemnisk', + description: 'Error: Invalid Configs for Diapi', + feature: 'processor', + module: 'destination', + version: 'v0', + input: { + request: { + body: [ + { + message: { + anonymousId: 'anon-id-new', + context: { + ip: '14.5.67.21', + library: { name: 'http' }, + traits: { + firstName: 'test', + lastName: 'rudderlabs', + role: 'Manager', + address: 'Flat No 58 ABC building XYZ Area near PQRS , 354408', + hasPurchased: 'yes', + email: 'abc@xyz.com', + title: 'Mr', + phone: '9876543212', + state: 'Uttar Pradesh', + zipcode: '243001', + prospectOrCustomer: 'Prospect', + country: 'India', + website: 'abc.com', + subscriptionStatus: 'New', + }, + }, + messageId: '25ea6605-c788-4cab-8fed-2cf0b831c4a8', + originalTimestamp: '2020-02-02T00:23:09.544Z', + receivedAt: '2022-08-17T10:40:21.162+05:30', + request_ip: '[::1]', + rudderId: 'daf823fb-e8d3-413a-8313-d34cd756f968', + sentAt: '2022-08-17T10:40:21.728+05:30', + timestamp: '2020-02-02T05:53:08.977+05:30', + type: 'track', + userId: 'identified user id', + }, + destination: { + id: '2JAdls99p6UxoFNSKGwvh0aIt7E', + name: 'Lemnisk Marketing Automation', + enabled: true, + Config: { + plWriteKey: '', + pl: '', + passKey: '1234', + apiKey: '', + diapi: 'https://crux.lemnisk.co/v3/data', + cloudMode: 'server', + srcId: '1', + diapiWriteKey: '', + }, + destinationDefinition: { + config: { + transformAt: 'processor', + transformAtV1: 'processor', + saveDestinationResponse: true, + includeKeys: [ + 'apiKey', + 'passKey', + 'cloudMode', + 'diapi', + 'pl', + 'diapiWriteKey', + 'plWriteKey', + 'srcId', + ], + excludeKeys: [], + supportedSourceTypes: [ + 'android', + 'ios', + 'web', + 'unity', + 'amp', + 'cloud', + 'reactnative', + 'flutter', + 'cordova', + 'warehouse', + ], + supportedMessageTypes: ['track', 'identify', 'page'], + destConfig: { + defaultConfig: [ + 'apiKey', + 'passKey', + 'cloudMode', + 'diapi', + 'pl', + 'diapiWriteKey', + 'plWriteKey', + 'deviceModeWriteKey', + 'srcId', + ], + }, + secretKeys: ['apiKey', 'passKey', 'plWriteKey', 'diapiWriteKey'], + }, + responseRules: null, + id: '1j9dYVEplxUC5swbXkpK9fYT7uk', + name: 'LEMNISK_MARKETING_AUTOMATION', + displayName: 'Lemnisk Marketing Automation', + createdAt: '2022-12-12T21:58:08.637Z', + }, + rootStore: null, + isProcessorEnabled: true, + }, + }, + ], + method: 'POST', + }, + pathSuffix: '', + }, + output: { + response: { + status: 200, + body: [ + { + error: 'Configuration for Server Mode requires Api key, Pass Key and region url', + statTags: { + destType: 'LEMNISK', + errorCategory: 'dataValidation', + errorType: 'configuration', + feature: 'processor', + implementation: 'native', + module: 'destination', + }, + statusCode: 400, + }, + ], + }, + }, + }, + { + name: 'lemnisk', + description: 'Diapi Platform: Track Call', + feature: 'processor', + module: 'destination', + version: 'v0', + input: { + request: { + body: [ + { + message: { + type: 'track', + properties: { + product_id: 'ab1234', + rating: 3, + review_body: 'Average product, expected much more.', + review_id: '12345', + }, + event: 'Product Reviewed', + context: { + library: { name: 'RudderLabs JavaScript SDK', version: '2.9.1' }, + traits: { email: 'a@example.com' }, + userAgent: + 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.80 Safari/537.36', + }, + timestamp: '2020-02-02T00:23:09.544Z', + messageId: '1578564113557-af022c68-429e-4af4-b99b-2b9174056383', + userId: 'user123', + }, + destination: { + id: '2JAdls99p6UxoFNSKGwvh0aIt7E', + name: 'Lemnisk Marketing Automation', + enabled: true, + Config: { + plWriteKey: '', + pl: '', + passKey: '1234', + apiKey: 'abcd', + diapi: 'https://crux.lemnisk.co/v3/data', + cloudMode: 'server', + srcId: '1', + diapiWriteKey: 'diapi_write_key', + }, + destinationDefinition: { + config: { + transformAt: 'processor', + transformAtV1: 'processor', + saveDestinationResponse: true, + includeKeys: [ + 'apiKey', + 'passKey', + 'cloudMode', + 'diapi', + 'pl', + 'diapiWriteKey', + 'plWriteKey', + 'srcId', + ], + excludeKeys: [], + supportedSourceTypes: [ + 'android', + 'ios', + 'web', + 'unity', + 'amp', + 'cloud', + 'reactnative', + 'flutter', + 'cordova', + 'warehouse', + ], + supportedMessageTypes: ['track', 'identify', 'page'], + destConfig: { + defaultConfig: [ + 'apiKey', + 'passKey', + 'cloudMode', + 'diapi', + 'pl', + 'diapiWriteKey', + 'plWriteKey', + 'deviceModeWriteKey', + 'srcId', + ], + }, + secretKeys: ['apiKey', 'passKey', 'plWriteKey', 'diapiWriteKey'], + }, + responseRules: null, + id: '1j9dYVEplxUC5swbXkpK9fYT7uk', + name: 'LEMNISK_MARKETING_AUTOMATION', + displayName: 'Lemnisk Marketing Automation', + createdAt: '2022-12-12T21:58:08.637Z', + }, + rootStore: null, + isProcessorEnabled: true, + }, + }, + ], + method: 'POST', + }, + pathSuffix: '', + }, + output: { + response: { + status: 200, + body: [ + { + output: { + version: '1', + type: 'REST', + method: 'POST', + endpoint: 'https://crux.lemnisk.co/v3/data', + headers: { + 'Content-Type': 'application/json', + 'x-api-passKey': '1234', + 'x-api-key': 'abcd', + }, + params: {}, + body: { + JSON: { + type: 'track', + properties: { + product_id: 'ab1234', + rating: 3, + review_body: 'Average product, expected much more.', + review_id: '12345', + }, + WriteKey: 'diapi_write_key', + eventname: 'Product Reviewed', + userId: 'user123', + email: 'a@example.com', + srcid: '1', + }, + JSON_ARRAY: {}, + XML: {}, + FORM: {}, + }, + files: {}, + userId: 'user123', + }, + statusCode: 200, + }, + ], + }, + }, + }, + { + name: 'lemnisk', + description: 'Error: Message type not supported', + feature: 'processor', + module: 'destination', + version: 'v0', + input: { + request: { + body: [ + { + message: { + anonymousId: 'anon-id-new', + context: { + ip: '14.5.67.21', + library: { name: 'http' }, + traits: { state: 'uttar pradesh' }, + }, + messageId: '25ea6605-c788-4cab-8fed-2cf0b831c4a8', + originalTimestamp: '2020-02-02T00:23:09.544Z', + receivedAt: '2022-08-17T10:40:21.162+05:30', + request_ip: '[::1]', + rudderId: 'daf823fb-e8d3-413a-8313-d34cd756f968', + sentAt: '2022-08-17T10:40:21.728+05:30', + timestamp: '2020-02-02T05:53:08.977+05:30', + userId: 'identified user id', + type: 'Alias', + }, + destination: { + id: '2JAdls99p6UxoFNSKGwvh0aIt7E', + name: 'Lemnisk Marketing Automation', + enabled: true, + Config: { + plWriteKey: 'pl_writeKey', + pl: 'http://10.11.36.17:8080/analyze/analyze.php', + passKey: '', + apiKey: '', + diapi: '', + cloudMode: 'web', + srcId: '', + diapiWriteKey: '', + }, + destinationDefinition: { + config: { + transformAt: 'processor', + transformAtV1: 'processor', + saveDestinationResponse: true, + includeKeys: [ + 'apiKey', + 'passKey', + 'cloudMode', + 'diapi', + 'pl', + 'diapiWriteKey', + 'plWriteKey', + 'srcId', + ], + excludeKeys: [], + supportedSourceTypes: [ + 'android', + 'ios', + 'web', + 'unity', + 'amp', + 'cloud', + 'reactnative', + 'flutter', + 'cordova', + 'warehouse', + ], + supportedMessageTypes: ['track', 'identify', 'page'], + destConfig: { + defaultConfig: [ + 'apiKey', + 'passKey', + 'cloudMode', + 'diapi', + 'pl', + 'diapiWriteKey', + 'plWriteKey', + 'deviceModeWriteKey', + 'srcId', + ], + }, + secretKeys: ['apiKey', 'passKey', 'plWriteKey', 'diapiWriteKey'], + }, + responseRules: null, + id: '1j9dYVEplxUC5swbXkpK9fYT7uk', + name: 'LEMNISK_MARKETING_AUTOMATION', + displayName: 'Lemnisk Marketing Automation', + createdAt: '2022-12-12T21:58:08.637Z', + }, + rootStore: null, + isProcessorEnabled: true, + }, + }, + ], + method: 'POST', + }, + pathSuffix: '', + }, + output: { + response: { + status: 200, + body: [ + { + error: 'Event type alias is not supported in Web Cloud Mode', + statTags: { + destType: 'LEMNISK', + errorCategory: 'dataValidation', + errorType: 'instrumentation', + feature: 'processor', + implementation: 'native', + module: 'destination', + }, + statusCode: 400, + }, + ], + }, + }, + }, + { + name: 'lemnisk', + description: ' Page Call -> pl Platform ', + feature: 'processor', + module: 'destination', + version: 'v0', + input: { + request: { + body: [ + { + message: { + anonymousId: 'anon-id-new', + channel: 'mobile', + context: { + app: { build: '4', name: 'RuddCDN' }, + page: { referrer: 'google.com' }, + device: { id: '3f034872-5e28-45a1-9eda-ce22a3e36d1a', name: 'generic_x86_arm' }, + library: { name: 'com.rudderstack.android.sdk.core', version: '1.0.6' }, + os: { name: 'Android', version: '9' }, + timezone: 'Asia/Kolkata', + traits: { customProp: 'customValue' }, + userAgent: + 'Dalvik/2.1.0 (Linux; U; Android 9; AOSP on IA Emulator Build/PSR1.180720.117)', + }, + name: 'Home', + category: 'Profile', + messageId: '1601322811899-d9c7dd00-50dc-4364-95c8-e89423eb3cfb', + originalTimestamp: '2020-09-28T19:53:31.900Z', + properties: { title: 'Home | RudderStack', url: 'http://www.rudderstack.com' }, + receivedAt: '2020-09-29T14:50:43.005+05:30', + sentAt: '2020-09-28T19:53:44.998Z', + timestamp: '2020-09-29T14:50:29.907+05:30', + type: 'page', + }, + destination: { + id: '2JAdls99p6UxoFNSKGwvh0aIt7E', + name: 'Lemnisk Marketing Automation', + enabled: true, + Config: { + plWriteKey: 'pl_writeKey', + pl: 'http://10.11.36.17:8080/analyze/analyze.php', + passKey: '', + apiKey: '', + diapi: '', + cloudMode: 'web', + srcId: '', + diapiWriteKey: '', + }, + destinationDefinition: { + config: { + transformAt: 'processor', + transformAtV1: 'processor', + saveDestinationResponse: true, + includeKeys: [ + 'apiKey', + 'passKey', + 'cloudMode', + 'diapi', + 'pl', + 'diapiWriteKey', + 'plWriteKey', + 'srcId', + ], + excludeKeys: [], + supportedSourceTypes: [ + 'android', + 'ios', + 'web', + 'unity', + 'amp', + 'cloud', + 'reactnative', + 'flutter', + 'cordova', + 'warehouse', + ], + supportedMessageTypes: ['track', 'identify', 'page'], + destConfig: { + defaultConfig: [ + 'apiKey', + 'passKey', + 'cloudMode', + 'diapi', + 'pl', + 'diapiWriteKey', + 'plWriteKey', + 'deviceModeWriteKey', + 'srcId', + ], + }, + secretKeys: ['apiKey', 'passKey', 'plWriteKey', 'diapiWriteKey'], + }, + responseRules: null, + id: '1j9dYVEplxUC5swbXkpK9fYT7uk', + name: 'LEMNISK_MARKETING_AUTOMATION', + displayName: 'Lemnisk Marketing Automation', + createdAt: '2022-12-12T21:58:08.637Z', + }, + rootStore: null, + isProcessorEnabled: true, + }, + }, + ], + method: 'POST', + }, + pathSuffix: '', + }, + output: { + response: { + status: 200, + body: [ + { + output: { + version: '1', + type: 'REST', + method: 'POST', + endpoint: 'http://10.11.36.17:8080/analyze/analyze.php', + headers: { 'Content-Type': 'application/json' }, + params: {}, + body: { + JSON: { + type: 'page', + context: { + app: { build: '4', name: 'RuddCDN' }, + page: { referrer: 'google.com' }, + device: { id: '3f034872-5e28-45a1-9eda-ce22a3e36d1a', name: 'generic_x86_arm' }, + library: { name: 'com.rudderstack.android.sdk.core', version: '1.0.6' }, + os: { name: 'Android', version: '9' }, + timezone: 'Asia/Kolkata', + traits: { customProp: 'customValue' }, + userAgent: { + ua: 'Dalvik/2.1.0 (Linux; U; Android 9; AOSP on IA Emulator Build/PSR1.180720.117)', + }, + }, + properties: { title: 'Home | RudderStack', url: 'http://www.rudderstack.com' }, + name: 'Home', + id: 'anon-id-new', + userId: 'anon-id-new', + messageId: '1601322811899-d9c7dd00-50dc-4364-95c8-e89423eb3cfb', + originalTimestamp: '2020-09-29T14:50:29.907+05:30', + writeKey: 'pl_writeKey', + }, + JSON_ARRAY: {}, + XML: {}, + FORM: {}, + }, + files: {}, + userId: 'anon-id-new', + }, + statusCode: 200, + }, + ], + }, + }, + }, + { + name: 'lemnisk', + description: ' Identify Call -> pl Platform ', + feature: 'processor', + module: 'destination', + version: 'v0', + input: { + request: { + body: [ + { + message: { + anonymousId: 'anon-id-new', + channel: 'mobile', + context: { + userAgent: + 'Dalvik/2.1.0 (Linux; U; Android 9; AOSP on IA Emulator Build/PSR1.180720.117)', + }, + event: 'Visited Home', + messageId: '1601322811899-d9c7dd00-50dc-4364-95c8-e89423eb3cfb', + originalTimestamp: '2020-09-28T19:53:31.900Z', + traits: { name: 'Home | RudderStack', url: 'http://www.rudderstack.com' }, + receivedAt: '2020-09-29T14:50:43.005+05:30', + sentAt: '2020-09-28T19:53:44.998Z', + timestamp: '2020-09-29T14:50:29.907+05:30', + type: 'identify', + }, + destination: { + id: '2JAdls99p6UxoFNSKGwvh0aIt7E', + name: 'Lemnisk Marketing Automation', + enabled: true, + Config: { + plWriteKey: 'pl_writeKey', + pl: 'http://10.11.36.17:8080/analyze/analyze.php', + passKey: '', + apiKey: '', + diapi: '', + cloudMode: 'web', + srcId: '', + diapiWriteKey: '', + }, + destinationDefinition: { + config: { + transformAt: 'processor', + transformAtV1: 'processor', + saveDestinationResponse: true, + includeKeys: [ + 'apiKey', + 'passKey', + 'cloudMode', + 'diapi', + 'pl', + 'diapiWriteKey', + 'plWriteKey', + 'srcId', + ], + excludeKeys: [], + supportedSourceTypes: [ + 'android', + 'ios', + 'web', + 'unity', + 'amp', + 'cloud', + 'reactnative', + 'flutter', + 'cordova', + 'warehouse', + ], + supportedMessageTypes: ['track', 'identify', 'page'], + destConfig: { + defaultConfig: [ + 'apiKey', + 'passKey', + 'cloudMode', + 'diapi', + 'pl', + 'diapiWriteKey', + 'plWriteKey', + 'deviceModeWriteKey', + 'srcId', + ], + }, + secretKeys: ['apiKey', 'passKey', 'plWriteKey', 'diapiWriteKey'], + }, + responseRules: null, + id: '1j9dYVEplxUC5swbXkpK9fYT7uk', + name: 'LEMNISK_MARKETING_AUTOMATION', + displayName: 'Lemnisk Marketing Automation', + createdAt: '2022-12-12T21:58:08.637Z', + }, + rootStore: null, + isProcessorEnabled: true, + }, + }, + ], + method: 'POST', + }, + pathSuffix: '', + }, + output: { + response: { + status: 200, + body: [ + { + output: { + version: '1', + type: 'REST', + method: 'POST', + endpoint: 'http://10.11.36.17:8080/analyze/analyze.php', + headers: { 'Content-Type': 'application/json' }, + params: {}, + body: { + JSON: { + type: 'identify', + context: { + userAgent: { + ua: 'Dalvik/2.1.0 (Linux; U; Android 9; AOSP on IA Emulator Build/PSR1.180720.117)', + }, + }, + customerProperties: { + name: 'Home | RudderStack', + url: 'http://www.rudderstack.com', + }, + id: 'anon-id-new', + userId: 'anon-id-new', + messageId: '1601322811899-d9c7dd00-50dc-4364-95c8-e89423eb3cfb', + originalTimestamp: '2020-09-29T14:50:29.907+05:30', + writeKey: 'pl_writeKey', + }, + JSON_ARRAY: {}, + XML: {}, + FORM: {}, + }, + files: {}, + userId: 'anon-id-new', + }, + statusCode: 200, + }, + ], + }, + }, + }, + { + name: 'lemnisk', + description: ' Track Call -> pl Platform ', + feature: 'processor', + module: 'destination', + version: 'v0', + input: { + request: { + body: [ + { + message: { + anonymousId: 'anon-id-new', + channel: 'mobile', + context: { + app: { build: '4', name: 'RuddCDN' }, + page: { referrer: 'google.com' }, + device: { id: '3f034872-5e28-45a1-9eda-ce22a3e36d1a', name: 'generic_x86_arm' }, + library: { name: 'com.rudderstack.android.sdk.core', version: '1.0.6' }, + os: { name: 'Android', version: '9' }, + timezone: 'Asia/Kolkata', + traits: { customProp: 'customValue' }, + userAgent: + 'Dalvik/2.1.0 (Linux; U; Android 9; AOSP on IA Emulator Build/PSR1.180720.117)', + }, + event: 'Visited Home', + messageId: '1601322811899-d9c7dd00-50dc-4364-95c8-e89423eb3cfb', + originalTimestamp: '2020-09-28T19:53:31.900Z', + properties: { title: 'Home | RudderStack', url: 'http://www.rudderstack.com' }, + receivedAt: '2020-09-29T14:50:43.005+05:30', + sentAt: '2020-09-28T19:53:44.998Z', + timestamp: '2020-09-29T14:50:29.907+05:30', + type: 'track', + }, + destination: { + id: '2JAdls99p6UxoFNSKGwvh0aIt7E', + name: 'Lemnisk Marketing Automation', + enabled: true, + Config: { + plWriteKey: 'pl_writeKey', + pl: 'http://10.11.36.17:8080/analyze/analyze.php', + passKey: '', + apiKey: '', + diapi: '', + cloudMode: 'web', + srcId: '', + diapiWriteKey: '', + }, + destinationDefinition: { + config: { + transformAt: 'processor', + transformAtV1: 'processor', + saveDestinationResponse: true, + includeKeys: [ + 'apiKey', + 'passKey', + 'cloudMode', + 'diapi', + 'pl', + 'diapiWriteKey', + 'plWriteKey', + 'srcId', + ], + excludeKeys: [], + supportedSourceTypes: [ + 'android', + 'ios', + 'web', + 'unity', + 'amp', + 'cloud', + 'reactnative', + 'flutter', + 'cordova', + 'warehouse', + ], + supportedMessageTypes: ['track', 'identify', 'page'], + destConfig: { + defaultConfig: [ + 'apiKey', + 'passKey', + 'cloudMode', + 'diapi', + 'pl', + 'diapiWriteKey', + 'plWriteKey', + 'deviceModeWriteKey', + 'srcId', + ], + }, + secretKeys: ['apiKey', 'passKey', 'plWriteKey', 'diapiWriteKey'], + }, + responseRules: null, + id: '1j9dYVEplxUC5swbXkpK9fYT7uk', + name: 'LEMNISK_MARKETING_AUTOMATION', + displayName: 'Lemnisk Marketing Automation', + createdAt: '2022-12-12T21:58:08.637Z', + }, + rootStore: null, + isProcessorEnabled: true, + }, + }, + ], + method: 'POST', + }, + pathSuffix: '', + }, + output: { + response: { + status: 200, + body: [ + { + output: { + version: '1', + type: 'REST', + method: 'POST', + endpoint: 'http://10.11.36.17:8080/analyze/analyze.php', + headers: { 'Content-Type': 'application/json' }, + params: {}, + body: { + JSON: { + type: 'track', + context: { + app: { build: '4', name: 'RuddCDN' }, + page: { referrer: 'google.com' }, + device: { id: '3f034872-5e28-45a1-9eda-ce22a3e36d1a', name: 'generic_x86_arm' }, + library: { name: 'com.rudderstack.android.sdk.core', version: '1.0.6' }, + os: { name: 'Android', version: '9' }, + timezone: 'Asia/Kolkata', + traits: { customProp: 'customValue' }, + userAgent: { + ua: 'Dalvik/2.1.0 (Linux; U; Android 9; AOSP on IA Emulator Build/PSR1.180720.117)', + }, + }, + properties: { title: 'Home | RudderStack', url: 'http://www.rudderstack.com' }, + event: 'Visited Home', + id: 'anon-id-new', + userId: 'anon-id-new', + messageId: '1601322811899-d9c7dd00-50dc-4364-95c8-e89423eb3cfb', + originalTimestamp: '2020-09-29T14:50:29.907+05:30', + writeKey: 'pl_writeKey', + }, + JSON_ARRAY: {}, + XML: {}, + FORM: {}, + }, + files: {}, + userId: 'anon-id-new', + }, + statusCode: 200, + }, + ], + }, + }, + }, +]; diff --git a/test/integrations/destinations/lemnisk/router/data.ts b/test/integrations/destinations/lemnisk/router/data.ts new file mode 100644 index 0000000000..1a1b84f180 --- /dev/null +++ b/test/integrations/destinations/lemnisk/router/data.ts @@ -0,0 +1,664 @@ +export const data = [ + { + name: 'lemnisk', + description: 'Test 0', + feature: 'router', + module: 'destination', + version: 'v0', + input: { + request: { + body: { + input: [ + { + message: { + anonymousId: 'anon-id-new', + context: { + ip: '14.5.67.21', + library: { + name: 'http', + }, + }, + type: 'identify', + }, + destination: { + id: '2JAdls99p6UxoFNSKGwvh0aIt7E', + name: 'Lemnisk Marketing Automation', + enabled: true, + Config: { + plWriteKey: '', + pl: 'https://crux.lemnisk.co/v2/data', + passKey: '', + apiKey: '', + diapi: ' ', + cloudMode: 'web', + srcId: '', + diapiWriteKey: '', + }, + destinationDefinition: { + config: { + transformAt: 'processor', + transformAtV1: 'processor', + saveDestinationResponse: true, + includeKeys: [ + 'apiKey', + 'passKey', + 'cloudMode', + 'diapi', + 'pl', + 'diapiWriteKey', + 'plWriteKey', + 'srcId', + ], + excludeKeys: [], + supportedSourceTypes: [ + 'android', + 'ios', + 'web', + 'unity', + 'amp', + 'cloud', + 'reactnative', + 'flutter', + 'cordova', + 'warehouse', + ], + supportedMessageTypes: ['track', 'identify', 'page'], + destConfig: { + defaultConfig: [ + 'apiKey', + 'passKey', + 'cloudMode', + 'diapi', + 'pl', + 'diapiWriteKey', + 'plWriteKey', + 'deviceModeWriteKey', + 'srcId', + ], + }, + secretKeys: ['apiKey', 'passKey', 'plWriteKey', 'diapiWriteKey'], + }, + responseRules: null, + id: '1j9dYVEplxUC5swbXkpK9fYT7uk', + name: 'LEMNISK_MARKETING_AUTOMATION', + displayName: 'Lemnisk Marketing Automation', + createdAt: '2022-12-12T21:58:08.637Z', + }, + rootStore: null, + isProcessorEnabled: true, + }, + metadata: { + jobId: 1, + }, + }, + { + message: { + anonymousId: 'anon-id-new', + channel: 'mobile', + context: { + userAgent: + 'Dalvik/2.1.0 (Linux; U; Android 9; AOSP on IA Emulator Build/PSR1.180720.117)', + }, + event: 'Visited Home', + messageId: '1601322811899-d9c7dd00-50dc-4364-95c8-e89423eb3cfb', + originalTimestamp: '2020-09-29T14:50:29.907+05:30', + traits: { + name: 'Home | RudderStack', + url: 'http://www.rudderstack.com', + }, + receivedAt: '2020-09-29T14:50:43.005+05:30', + sentAt: '2020-09-28T19:53:44.998Z', + timestamp: '2020-09-29T14:50:29.907+05:30', + type: 'identify', + }, + destination: { + id: '2JAdls99p6UxoFNSKGwvh0aIt7E', + name: 'Lemnisk Marketing Automation', + enabled: true, + Config: { + plWriteKey: 'pl_writeKey', + pl: 'http://10.11.36.17:8080/analyze/analyze.php', + passKey: '', + apiKey: '', + diapi: '', + cloudMode: 'web', + srcId: '', + diapiWriteKey: '', + }, + destinationDefinition: { + config: { + transformAt: 'processor', + transformAtV1: 'processor', + saveDestinationResponse: true, + includeKeys: [ + 'apiKey', + 'passKey', + 'cloudMode', + 'diapi', + 'pl', + 'diapiWriteKey', + 'plWriteKey', + 'srcId', + ], + excludeKeys: [], + supportedSourceTypes: [ + 'android', + 'ios', + 'web', + 'unity', + 'amp', + 'cloud', + 'reactnative', + 'flutter', + 'cordova', + 'warehouse', + ], + supportedMessageTypes: ['track', 'identify', 'page'], + destConfig: { + defaultConfig: [ + 'apiKey', + 'passKey', + 'cloudMode', + 'diapi', + 'pl', + 'diapiWriteKey', + 'plWriteKey', + 'deviceModeWriteKey', + 'srcId', + ], + }, + secretKeys: ['apiKey', 'passKey', 'plWriteKey', 'diapiWriteKey'], + }, + responseRules: null, + id: '1j9dYVEplxUC5swbXkpK9fYT7uk', + name: 'LEMNISK_MARKETING_AUTOMATION', + displayName: 'Lemnisk Marketing Automation', + createdAt: '2022-12-12T21:58:08.637Z', + }, + rootStore: null, + isProcessorEnabled: true, + }, + metadata: { + anonymousId: '12345', + destinationId: '1ZQVSU9SXNg6KYgZALaqjAO3PIL', + destinationType: 'DISCORD', + jobId: 123, + messageId: '4aaecff2-a513-4bbf-9824-c471f4ac9777', + sourceId: '1YhwKyDcKstudlGxkeN5p2wgsrp', + }, + }, + { + message: { + anonymousId: 'anon-id-new', + channel: 'mobile', + context: { + app: { + build: '4', + name: 'RuddCDN', + }, + page: { + referrer: 'google.com', + }, + device: { + id: '3f034872-5e28-45a1-9eda-ce22a3e36d1a', + name: 'generic_x86_arm', + }, + library: { + name: 'com.rudderstack.android.sdk.core', + version: '1.0.6', + }, + os: { + name: 'Android', + version: '9', + }, + timezone: 'Asia/Kolkata', + traits: { + customProp: 'customValue', + }, + userAgent: + 'Dalvik/2.1.0 (Linux; U; Android 9; AOSP on IA Emulator Build/PSR1.180720.117)', + }, + event: 'Visited Home', + messageId: '1601322811899-d9c7dd00-50dc-4364-95c8-e89423eb3cfb', + originalTimestamp: '2020-09-28T19:53:31.900Z', + properties: { + title: 'Home | RudderStack', + url: 'http://www.rudderstack.com', + }, + receivedAt: '2020-09-29T14:50:43.005+05:30', + sentAt: '2020-09-28T19:53:44.998Z', + timestamp: '2020-09-29T14:50:29.907+05:30', + type: 'track', + }, + destination: { + id: '2JAdls99p6UxoFNSKGwvh0aIt7E', + name: 'Lemnisk Marketing Automation', + enabled: true, + Config: { + plWriteKey: 'pl_writeKey', + pl: 'http://10.11.36.17:8080/analyze/analyze.php', + passKey: '', + apiKey: '', + diapi: '', + cloudMode: 'web', + srcId: '', + diapiWriteKey: '', + }, + destinationDefinition: { + config: { + transformAt: 'processor', + transformAtV1: 'processor', + saveDestinationResponse: true, + includeKeys: [ + 'apiKey', + 'passKey', + 'cloudMode', + 'diapi', + 'pl', + 'diapiWriteKey', + 'plWriteKey', + 'srcId', + ], + excludeKeys: [], + supportedSourceTypes: [ + 'android', + 'ios', + 'web', + 'unity', + 'amp', + 'cloud', + 'reactnative', + 'flutter', + 'cordova', + 'warehouse', + ], + supportedMessageTypes: ['track', 'identify', 'page'], + destConfig: { + defaultConfig: [ + 'apiKey', + 'passKey', + 'cloudMode', + 'diapi', + 'pl', + 'diapiWriteKey', + 'plWriteKey', + 'deviceModeWriteKey', + 'srcId', + ], + }, + secretKeys: ['apiKey', 'passKey', 'plWriteKey', 'diapiWriteKey'], + }, + responseRules: null, + id: '1j9dYVEplxUC5swbXkpK9fYT7uk', + name: 'LEMNISK_MARKETING_AUTOMATION', + displayName: 'Lemnisk Marketing Automation', + createdAt: '2022-12-12T21:58:08.637Z', + }, + rootStore: null, + isProcessorEnabled: true, + }, + metadata: { + anonymousId: '00000000000000000000000000', + destinationId: '1ZQVSU9SXNg6KYgZALaqjAO3PIL', + destinationType: 'DISCORD', + jobId: 129, + messageId: '8b8d5937-09bc-49dc-a35e-8cd6370575f8', + sourceId: '1YhwKyDcKstudlGxkeN5p2wgsrp', + }, + }, + ], + destType: 'lemnisk', + }, + method: 'POST', + }, + }, + output: { + response: { + status: 200, + body: { + output: [ + { + destination: { + id: '2JAdls99p6UxoFNSKGwvh0aIt7E', + name: 'Lemnisk Marketing Automation', + enabled: true, + Config: { + plWriteKey: '', + pl: 'https://crux.lemnisk.co/v2/data', + passKey: '', + apiKey: '', + diapi: ' ', + cloudMode: 'web', + srcId: '', + diapiWriteKey: '', + }, + destinationDefinition: { + config: { + transformAt: 'processor', + transformAtV1: 'processor', + saveDestinationResponse: true, + includeKeys: [ + 'apiKey', + 'passKey', + 'cloudMode', + 'diapi', + 'pl', + 'diapiWriteKey', + 'plWriteKey', + 'srcId', + ], + excludeKeys: [], + supportedSourceTypes: [ + 'android', + 'ios', + 'web', + 'unity', + 'amp', + 'cloud', + 'reactnative', + 'flutter', + 'cordova', + 'warehouse', + ], + supportedMessageTypes: ['track', 'identify', 'page'], + destConfig: { + defaultConfig: [ + 'apiKey', + 'passKey', + 'cloudMode', + 'diapi', + 'pl', + 'diapiWriteKey', + 'plWriteKey', + 'deviceModeWriteKey', + 'srcId', + ], + }, + secretKeys: ['apiKey', 'passKey', 'plWriteKey', 'diapiWriteKey'], + }, + responseRules: null, + id: '1j9dYVEplxUC5swbXkpK9fYT7uk', + name: 'LEMNISK_MARKETING_AUTOMATION', + displayName: 'Lemnisk Marketing Automation', + createdAt: '2022-12-12T21:58:08.637Z', + }, + rootStore: null, + isProcessorEnabled: true, + }, + metadata: [ + { + jobId: 1, + }, + ], + statTags: { + destType: 'LEMNISK', + feature: 'router', + implementation: 'native', + module: 'destination', + errorCategory: 'dataValidation', + errorType: 'configuration', + }, + batched: false, + statusCode: 400, + error: 'Configuration for Web Mode requires write key and region url', + }, + { + batchedRequest: { + version: '1', + type: 'REST', + method: 'POST', + endpoint: 'http://10.11.36.17:8080/analyze/analyze.php', + headers: { + 'Content-Type': 'application/json', + }, + params: {}, + body: { + JSON: { + type: 'identify', + context: { + userAgent: { + ua: 'Dalvik/2.1.0 (Linux; U; Android 9; AOSP on IA Emulator Build/PSR1.180720.117)', + }, + }, + customerProperties: { + name: 'Home | RudderStack', + url: 'http://www.rudderstack.com', + }, + id: 'anon-id-new', + userId: 'anon-id-new', + messageId: '1601322811899-d9c7dd00-50dc-4364-95c8-e89423eb3cfb', + originalTimestamp: '2020-09-29T14:50:29.907+05:30', + writeKey: 'pl_writeKey', + }, + JSON_ARRAY: {}, + XML: {}, + FORM: {}, + }, + files: {}, + userId: 'anon-id-new', + }, + destination: { + id: '2JAdls99p6UxoFNSKGwvh0aIt7E', + name: 'Lemnisk Marketing Automation', + enabled: true, + Config: { + plWriteKey: 'pl_writeKey', + pl: 'http://10.11.36.17:8080/analyze/analyze.php', + passKey: '', + apiKey: '', + diapi: '', + cloudMode: 'web', + srcId: '', + diapiWriteKey: '', + }, + destinationDefinition: { + config: { + transformAt: 'processor', + transformAtV1: 'processor', + saveDestinationResponse: true, + includeKeys: [ + 'apiKey', + 'passKey', + 'cloudMode', + 'diapi', + 'pl', + 'diapiWriteKey', + 'plWriteKey', + 'srcId', + ], + excludeKeys: [], + supportedSourceTypes: [ + 'android', + 'ios', + 'web', + 'unity', + 'amp', + 'cloud', + 'reactnative', + 'flutter', + 'cordova', + 'warehouse', + ], + supportedMessageTypes: ['track', 'identify', 'page'], + destConfig: { + defaultConfig: [ + 'apiKey', + 'passKey', + 'cloudMode', + 'diapi', + 'pl', + 'diapiWriteKey', + 'plWriteKey', + 'deviceModeWriteKey', + 'srcId', + ], + }, + secretKeys: ['apiKey', 'passKey', 'plWriteKey', 'diapiWriteKey'], + }, + responseRules: null, + id: '1j9dYVEplxUC5swbXkpK9fYT7uk', + name: 'LEMNISK_MARKETING_AUTOMATION', + displayName: 'Lemnisk Marketing Automation', + createdAt: '2022-12-12T21:58:08.637Z', + }, + rootStore: null, + isProcessorEnabled: true, + }, + metadata: [ + { + anonymousId: '12345', + destinationId: '1ZQVSU9SXNg6KYgZALaqjAO3PIL', + destinationType: 'DISCORD', + jobId: 123, + messageId: '4aaecff2-a513-4bbf-9824-c471f4ac9777', + sourceId: '1YhwKyDcKstudlGxkeN5p2wgsrp', + }, + ], + batched: false, + statusCode: 200, + }, + { + batchedRequest: { + version: '1', + type: 'REST', + method: 'POST', + endpoint: 'http://10.11.36.17:8080/analyze/analyze.php', + headers: { + 'Content-Type': 'application/json', + }, + params: {}, + body: { + JSON: { + type: 'track', + context: { + app: { + build: '4', + name: 'RuddCDN', + }, + page: { + referrer: 'google.com', + }, + device: { + id: '3f034872-5e28-45a1-9eda-ce22a3e36d1a', + name: 'generic_x86_arm', + }, + library: { + name: 'com.rudderstack.android.sdk.core', + version: '1.0.6', + }, + os: { + name: 'Android', + version: '9', + }, + timezone: 'Asia/Kolkata', + traits: { + customProp: 'customValue', + }, + userAgent: { + ua: 'Dalvik/2.1.0 (Linux; U; Android 9; AOSP on IA Emulator Build/PSR1.180720.117)', + }, + }, + properties: { + title: 'Home | RudderStack', + url: 'http://www.rudderstack.com', + }, + event: 'Visited Home', + id: 'anon-id-new', + userId: 'anon-id-new', + messageId: '1601322811899-d9c7dd00-50dc-4364-95c8-e89423eb3cfb', + originalTimestamp: '2020-09-29T14:50:29.907+05:30', + writeKey: 'pl_writeKey', + }, + JSON_ARRAY: {}, + XML: {}, + FORM: {}, + }, + files: {}, + userId: 'anon-id-new', + }, + destination: { + id: '2JAdls99p6UxoFNSKGwvh0aIt7E', + name: 'Lemnisk Marketing Automation', + enabled: true, + Config: { + plWriteKey: 'pl_writeKey', + pl: 'http://10.11.36.17:8080/analyze/analyze.php', + passKey: '', + apiKey: '', + diapi: '', + cloudMode: 'web', + srcId: '', + diapiWriteKey: '', + }, + destinationDefinition: { + config: { + transformAt: 'processor', + transformAtV1: 'processor', + saveDestinationResponse: true, + includeKeys: [ + 'apiKey', + 'passKey', + 'cloudMode', + 'diapi', + 'pl', + 'diapiWriteKey', + 'plWriteKey', + 'srcId', + ], + excludeKeys: [], + supportedSourceTypes: [ + 'android', + 'ios', + 'web', + 'unity', + 'amp', + 'cloud', + 'reactnative', + 'flutter', + 'cordova', + 'warehouse', + ], + supportedMessageTypes: ['track', 'identify', 'page'], + destConfig: { + defaultConfig: [ + 'apiKey', + 'passKey', + 'cloudMode', + 'diapi', + 'pl', + 'diapiWriteKey', + 'plWriteKey', + 'deviceModeWriteKey', + 'srcId', + ], + }, + secretKeys: ['apiKey', 'passKey', 'plWriteKey', 'diapiWriteKey'], + }, + responseRules: null, + id: '1j9dYVEplxUC5swbXkpK9fYT7uk', + name: 'LEMNISK_MARKETING_AUTOMATION', + displayName: 'Lemnisk Marketing Automation', + createdAt: '2022-12-12T21:58:08.637Z', + }, + rootStore: null, + isProcessorEnabled: true, + }, + metadata: [ + { + anonymousId: '00000000000000000000000000', + destinationId: '1ZQVSU9SXNg6KYgZALaqjAO3PIL', + destinationType: 'DISCORD', + jobId: 129, + messageId: '8b8d5937-09bc-49dc-a35e-8cd6370575f8', + sourceId: '1YhwKyDcKstudlGxkeN5p2wgsrp', + }, + ], + batched: false, + statusCode: 200, + }, + ], + }, + }, + }, + }, +]; diff --git a/test/integrations/destinations/lytics/processor/data.ts b/test/integrations/destinations/lytics/processor/data.ts new file mode 100644 index 0000000000..e04b1aa413 --- /dev/null +++ b/test/integrations/destinations/lytics/processor/data.ts @@ -0,0 +1,1360 @@ +export const data = [ + { + name: 'lytics', + description: 'Test 0', + feature: 'processor', + module: 'destination', + version: 'v0', + input: { + request: { + body: [ + { + message: { + anonymousId: '4eb021e9-a2af-4926-ae82-fe996d12f3c5', + channel: 'web', + context: { + app: { + build: '1.0.0', + name: 'RudderLabs JavaScript SDK', + namespace: 'com.rudderlabs.javascript', + version: '1.1.6', + }, + library: { name: 'RudderLabs JavaScript SDK', version: '1.1.6' }, + locale: 'en-GB', + os: { name: '', version: '' }, + page: { + path: '/testing/script-test.html', + referrer: '', + search: '', + title: '', + url: 'http://localhost:3243/testing/script-test.html', + }, + screen: { density: 2 }, + traits: { + company: { id: 'abc123' }, + createdAt: 'Thu Mar 24 2016 17:46:45 GMT+0000 (UTC)', + email: 'rudderTest@gmail.com', + name: 'Rudder Test', + plan: 'Enterprise', + }, + userAgent: + 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.80 Safari/537.36', + }, + event: 'Order Completed', + integrations: { All: true }, + messageId: 'a0adfab9-baf7-4e09-a2ce-bbe2844c324a', + timestamp: '2020-10-16T08:10:12.782Z', + originalTimestamp: '2020-10-16T08:10:12.782Z', + properties: { + checkout_id: 'what is checkout id here??', + coupon: 'APPARELSALE', + currency: 'GBP', + order_id: 'transactionId', + products: [ + { + brand: '', + category: 'Merch', + currency: 'GBP', + image_url: 'https://www.example.com/product/bacon-jam.jpg', + name: 'Food/Drink', + position: 1, + price: 3, + product_id: 'product-bacon-jam', + quantity: 2, + sku: 'sku-1', + typeOfProduct: 'Food', + url: 'https://www.example.com/product/bacon-jam', + value: 6, + variant: 'Extra topped', + }, + { + brand: 'Levis', + category: 'Merch', + currency: 'GBP', + image_url: 'https://www.example.com/product/t-shirt.jpg', + name: 'T-Shirt', + position: 2, + price: 12.99, + product_id: 'product-t-shirt', + quantity: 1, + sku: 'sku-2', + typeOfProduct: 'Shirt', + url: 'https://www.example.com/product/t-shirt', + value: 12.99, + variant: 'White', + }, + { + brand: 'Levis', + category: 'Merch', + coupon: 'APPARELSALE', + currency: 'GBP', + image_url: 'https://www.example.com/product/offer-t-shirt.jpg', + name: 'T-Shirt-on-offer', + position: 1, + price: 12.99, + product_id: 'offer-t-shirt', + quantity: 1, + sku: 'sku-3', + typeOfProduct: 'Shirt', + url: 'https://www.example.com/product/offer-t-shirt', + value: 12.99, + variant: 'Black', + }, + ], + revenue: 31.98, + shipping: 4, + value: 31.98, + }, + receivedAt: '2020-10-16T13:40:12.792+05:30', + request_ip: '[::1]', + sentAt: '2020-10-16T08:10:12.783Z', + type: 'track', + userId: 'rudder123', + }, + destination: { + DestinationDefinition: { Config: { cdkEnabled: true } }, + Config: { apiKey: 'dummyApiKey', stream: 'default' }, + Enabled: true, + Transformations: [], + IsProcessorEnabled: true, + }, + }, + ], + method: 'POST', + }, + pathSuffix: '', + }, + output: { + response: { + status: 200, + body: [ + { + output: { + version: '1', + type: 'REST', + method: 'POST', + endpoint: 'https://api.lytics.io/collect/json/default?access_token=dummyApiKey', + headers: { 'Content-Type': 'application/json' }, + params: {}, + body: { + JSON: { + _e: 'Order Completed', + checkout_id: 'what is checkout id here??', + coupon: 'APPARELSALE', + currency: 'GBP', + order_id: 'transactionId', + 'products[0].brand': '', + 'products[0].category': 'Merch', + 'products[0].currency': 'GBP', + 'products[0].image_url': 'https://www.example.com/product/bacon-jam.jpg', + 'products[0].name': 'Food/Drink', + 'products[0].position': 1, + 'products[0].price': 3, + 'products[0].product_id': 'product-bacon-jam', + 'products[0].quantity': 2, + 'products[0].sku': 'sku-1', + 'products[0].typeOfProduct': 'Food', + 'products[0].url': 'https://www.example.com/product/bacon-jam', + 'products[0].value': 6, + 'products[0].variant': 'Extra topped', + 'products[1].brand': 'Levis', + 'products[1].category': 'Merch', + 'products[1].currency': 'GBP', + 'products[1].image_url': 'https://www.example.com/product/t-shirt.jpg', + 'products[1].name': 'T-Shirt', + 'products[1].position': 2, + 'products[1].price': 12.99, + 'products[1].product_id': 'product-t-shirt', + 'products[1].quantity': 1, + 'products[1].sku': 'sku-2', + 'products[1].typeOfProduct': 'Shirt', + 'products[1].url': 'https://www.example.com/product/t-shirt', + 'products[1].value': 12.99, + 'products[1].variant': 'White', + 'products[2].brand': 'Levis', + 'products[2].category': 'Merch', + 'products[2].coupon': 'APPARELSALE', + 'products[2].currency': 'GBP', + 'products[2].image_url': 'https://www.example.com/product/offer-t-shirt.jpg', + 'products[2].name': 'T-Shirt-on-offer', + 'products[2].position': 1, + 'products[2].price': 12.99, + 'products[2].product_id': 'offer-t-shirt', + 'products[2].quantity': 1, + 'products[2].sku': 'sku-3', + 'products[2].typeOfProduct': 'Shirt', + 'products[2].url': 'https://www.example.com/product/offer-t-shirt', + 'products[2].value': 12.99, + 'products[2].variant': 'Black', + revenue: 31.98, + shipping: 4, + value: 31.98, + }, + XML: {}, + JSON_ARRAY: {}, + FORM: {}, + }, + files: {}, + userId: '', + }, + statusCode: 200, + }, + ], + }, + }, + }, + { + name: 'lytics', + description: 'Test 1', + feature: 'processor', + module: 'destination', + version: 'v0', + input: { + request: { + body: [ + { + message: { + anonymousId: '4eb021e9-a2af-4926-ae82-fe996d12f3c5', + channel: 'web', + context: { + app: { + build: '1.0.0', + name: 'RudderLabs JavaScript SDK', + namespace: 'com.rudderlabs.javascript', + version: '1.1.6', + }, + library: { name: 'RudderLabs JavaScript SDK', version: '1.1.6' }, + locale: 'en-GB', + os: { name: '', version: '' }, + page: { + path: '/testing/script-test.html', + referrer: '', + search: '', + title: '', + url: 'http://localhost:3243/testing/script-test.html', + }, + screen: { density: 2 }, + traits: { + company: { id: 'abc123' }, + createdAt: 'Thu Mar 24 2016 17:46:45 GMT+0000 (UTC)', + email: 'rudderTest@gmail.com', + name: 'Rudder Test', + plan: 'Enterprise', + }, + userAgent: + 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.80 Safari/537.36', + }, + integrations: { All: true }, + messageId: 'e108eb05-f6cd-4624-ba8c-568f2e2b3f92', + originalTimestamp: '2020-10-16T08:26:14.938Z', + receivedAt: '2020-10-16T13:56:14.945+05:30', + request_ip: '[::1]', + sentAt: '2020-10-16T08:26:14.939Z', + timestamp: '2020-10-16T13:56:14.944+05:30', + type: 'identify', + userId: 'rudder123', + }, + destination: { + DestinationDefinition: { Config: { cdkEnabled: true } }, + Config: { apiKey: 'dummyApiKey', stream: 'default' }, + Enabled: true, + Transformations: [], + IsProcessorEnabled: true, + }, + }, + ], + method: 'POST', + }, + pathSuffix: '', + }, + output: { + response: { + status: 200, + body: [ + { + output: { + version: '1', + type: 'REST', + method: 'POST', + endpoint: 'https://api.lytics.io/collect/json/default?access_token=dummyApiKey', + headers: { 'Content-Type': 'application/json' }, + params: {}, + body: { + JSON: { + user_id: 'rudder123', + 'company.id': 'abc123', + createdAt: 'Thu Mar 24 2016 17:46:45 GMT+0000 (UTC)', + email: 'rudderTest@gmail.com', + name: 'Rudder Test', + plan: 'Enterprise', + }, + XML: {}, + JSON_ARRAY: {}, + FORM: {}, + }, + files: {}, + userId: '', + }, + statusCode: 200, + }, + ], + }, + }, + }, + { + name: 'lytics', + description: 'Test 2', + feature: 'processor', + module: 'destination', + version: 'v0', + input: { + request: { + body: [ + { + message: { + anonymousId: '4eb021e9-a2af-4926-ae82-fe996d12f3c5', + channel: 'web', + context: { + app: { + build: '1.0.0', + name: 'RudderLabs JavaScript SDK', + namespace: 'com.rudderlabs.javascript', + version: '1.1.6', + }, + device: { + id: '7e32188a4dab669f', + manufacturer: 'Google', + model: 'Android SDK built for x86', + name: 'generic_x86', + token: 'desuhere', + type: 'android', + }, + library: { name: 'RudderLabs JavaScript SDK', version: '1.1.6' }, + locale: 'en-GB', + os: { name: '', version: '' }, + page: { + path: '/testing/script-test.html', + referrer: '', + search: '', + title: '', + url: 'http://localhost:3243/testing/script-test.html', + }, + screen: { density: 2 }, + traits: { + company: { id: 'abc123' }, + createdAt: 'Thu Mar 24 2016 17:46:45 GMT+0000 (UTC)', + email: 'rudderTest@gmail.com', + name: 'Rudder Test', + plan: 'Enterprise', + }, + userAgent: + 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.80 Safari/537.36', + }, + integrations: { All: true }, + messageId: '531e3507-1ef5-4a06-b83c-cb521ff34f0c', + originalTimestamp: '2020-10-16T08:53:29.386Z', + receivedAt: '2020-10-16T14:23:29.402+05:30', + request_ip: '[::1]', + sentAt: '2020-10-16T08:53:29.387Z', + timestamp: '2020-10-16T14:23:29.401+05:30', + type: 'identify', + userId: 'rudder123', + }, + destination: { + DestinationDefinition: { Config: { cdkEnabled: true } }, + Config: { apiKey: 'dummyApiKey', stream: 'default' }, + Enabled: true, + Transformations: [], + IsProcessorEnabled: true, + }, + }, + ], + method: 'POST', + }, + pathSuffix: '', + }, + output: { + response: { + status: 200, + body: [ + { + output: { + version: '1', + type: 'REST', + method: 'POST', + endpoint: 'https://api.lytics.io/collect/json/default?access_token=dummyApiKey', + headers: { 'Content-Type': 'application/json' }, + params: {}, + body: { + JSON: { + user_id: 'rudder123', + 'company.id': 'abc123', + createdAt: 'Thu Mar 24 2016 17:46:45 GMT+0000 (UTC)', + email: 'rudderTest@gmail.com', + name: 'Rudder Test', + plan: 'Enterprise', + }, + XML: {}, + JSON_ARRAY: {}, + FORM: {}, + }, + files: {}, + userId: '', + }, + statusCode: 200, + }, + ], + }, + }, + }, + { + name: 'lytics', + description: 'Test 3', + feature: 'processor', + module: 'destination', + version: 'v0', + input: { + request: { + body: [ + { + message: { + anonymousId: '4eb021e9-a2af-4926-ae82-fe996d12f3c5', + channel: 'web', + context: { + app: { + build: '1.0.0', + name: 'RudderLabs JavaScript SDK', + namespace: 'com.rudderlabs.javascript', + version: '1.1.6', + }, + library: { name: 'RudderLabs JavaScript SDK', version: '1.1.6' }, + locale: 'en-GB', + os: { name: '', version: '' }, + page: { + path: '/testing/script-test.html', + referrer: '', + search: '', + title: '', + url: 'http://localhost:3243/testing/script-test.html', + }, + screen: { density: 2 }, + traits: { + company: { id: 'abc123' }, + createdAt: 'Thu Mar 24 2016 17:46:45 GMT+0000 (UTC)', + email: 'rudderTest@gmail.com', + name: 'Rudder Test', + plan: 'Enterprise', + }, + userAgent: + 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.80 Safari/537.36', + }, + integrations: { All: true }, + messageId: 'a61357dd-e29e-4033-b1af-029625947fec', + originalTimestamp: '2020-10-16T09:05:11.001Z', + receivedAt: '2020-10-16T14:35:11.014+05:30', + request_ip: '[::1]', + sentAt: '2020-10-16T09:05:11.002Z', + timestamp: '2020-10-16T14:35:11.013+05:30', + type: 'identify', + userId: 'rudder123', + }, + destination: { + DestinationDefinition: { Config: { cdkEnabled: true } }, + Config: { apiKey: 'dummyApiKey', stream: 'default' }, + Enabled: true, + Transformations: [], + IsProcessorEnabled: true, + }, + }, + ], + method: 'POST', + }, + pathSuffix: '', + }, + output: { + response: { + status: 200, + body: [ + { + output: { + version: '1', + type: 'REST', + method: 'POST', + endpoint: 'https://api.lytics.io/collect/json/default?access_token=dummyApiKey', + headers: { 'Content-Type': 'application/json' }, + params: {}, + body: { + JSON: { + user_id: 'rudder123', + 'company.id': 'abc123', + createdAt: 'Thu Mar 24 2016 17:46:45 GMT+0000 (UTC)', + email: 'rudderTest@gmail.com', + name: 'Rudder Test', + plan: 'Enterprise', + }, + XML: {}, + JSON_ARRAY: {}, + FORM: {}, + }, + files: {}, + userId: '', + }, + statusCode: 200, + }, + ], + }, + }, + }, + { + name: 'lytics', + description: 'Test 4', + feature: 'processor', + module: 'destination', + version: 'v0', + input: { + request: { + body: [ + { + message: { + anonymousId: '4eb021e9-a2af-4926-ae82-fe996d12f3c5', + channel: 'web', + context: { + app: { + build: '1.0.0', + name: 'RudderLabs JavaScript SDK', + namespace: 'com.rudderlabs.javascript', + version: '1.1.6', + }, + library: { name: 'RudderLabs JavaScript SDK', version: '1.1.6' }, + locale: 'en-GB', + os: { name: '', version: '' }, + page: { + path: '/testing/script-test.html', + referrer: '', + search: '', + title: '', + url: 'http://localhost:3243/testing/script-test.html', + }, + screen: { density: 2 }, + traits: { + company: { id: 'abc123' }, + createdAt: 'Thu Mar 24 2016 17:46:45 GMT+0000 (UTC)', + email: 'rudderTest@gmail.com', + name: 'Rudder Test', + plan: 'Enterprise', + }, + userAgent: + 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.80 Safari/537.36', + }, + integrations: { All: true }, + messageId: '9eb2f7c0-d896-494e-b105-60f604ce2906', + originalTimestamp: '2020-10-16T09:09:31.465Z', + receivedAt: '2020-10-16T14:39:31.468+05:30', + request_ip: '[::1]', + sentAt: '2020-10-16T09:09:31.466Z', + timestamp: '2020-10-16T14:39:31.467+05:30', + type: 'identify', + userId: 'rudder123', + }, + destination: { + DestinationDefinition: { Config: { cdkEnabled: true } }, + Config: { apiKey: 'dummyApiKey', stream: 'default' }, + Enabled: true, + Transformations: [], + IsProcessorEnabled: true, + }, + }, + ], + method: 'POST', + }, + pathSuffix: '', + }, + output: { + response: { + status: 200, + body: [ + { + output: { + version: '1', + type: 'REST', + method: 'POST', + endpoint: 'https://api.lytics.io/collect/json/default?access_token=dummyApiKey', + headers: { 'Content-Type': 'application/json' }, + params: {}, + body: { + JSON: { + user_id: 'rudder123', + 'company.id': 'abc123', + createdAt: 'Thu Mar 24 2016 17:46:45 GMT+0000 (UTC)', + email: 'rudderTest@gmail.com', + name: 'Rudder Test', + plan: 'Enterprise', + }, + XML: {}, + JSON_ARRAY: {}, + FORM: {}, + }, + files: {}, + userId: '', + }, + statusCode: 200, + }, + ], + }, + }, + }, + { + name: 'lytics', + description: 'Test 5', + feature: 'processor', + module: 'destination', + version: 'v0', + input: { + request: { + body: [ + { + message: { + anonymousId: '4eb021e9-a2af-4926-ae82-fe996d12f3c5', + channel: 'web', + context: { + app: { + build: '1.0.0', + name: 'RudderLabs JavaScript SDK', + namespace: 'com.rudderlabs.javascript', + version: '1.1.6', + }, + library: { name: 'RudderLabs JavaScript SDK', version: '1.1.6' }, + locale: 'en-GB', + os: { name: '', version: '' }, + page: { + path: '/testing/script-test.html', + referrer: '', + search: '', + title: '', + url: 'http://localhost:3243/testing/script-test.html', + }, + screen: { density: 2 }, + traits: { + company: { id: 'abc123' }, + createdAt: 'Thu Mar 24 2016 17:46:45 GMT+0000 (UTC)', + email: 'rudderTest@gmail.com', + name: 'Rudder Test', + plan: 'Enterprise', + }, + userAgent: + 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.80 Safari/537.36', + }, + integrations: { All: true }, + messageId: '9eb2f7c0-d896-494e-b105-60f604ce2906', + originalTimestamp: '2020-10-16T09:09:31.465Z', + receivedAt: '2020-10-16T14:39:31.468+05:30', + request_ip: '[::1]', + sentAt: '2020-10-16T09:09:31.466Z', + timestamp: '2020-10-16T14:39:31.467+05:30', + type: 'identify', + userId: 'rudder123', + }, + destination: { + DestinationDefinition: { Config: { cdkEnabled: true } }, + Config: { apiKey: 'dummyApiKey', stream: 'default' }, + Enabled: true, + Transformations: [], + IsProcessorEnabled: true, + }, + }, + ], + method: 'POST', + }, + pathSuffix: '', + }, + output: { + response: { + status: 200, + body: [ + { + output: { + version: '1', + type: 'REST', + method: 'POST', + endpoint: 'https://api.lytics.io/collect/json/default?access_token=dummyApiKey', + headers: { 'Content-Type': 'application/json' }, + params: {}, + body: { + JSON: { + user_id: 'rudder123', + 'company.id': 'abc123', + createdAt: 'Thu Mar 24 2016 17:46:45 GMT+0000 (UTC)', + email: 'rudderTest@gmail.com', + name: 'Rudder Test', + plan: 'Enterprise', + }, + XML: {}, + JSON_ARRAY: {}, + FORM: {}, + }, + files: {}, + userId: '', + }, + statusCode: 200, + }, + ], + }, + }, + }, + { + name: 'lytics', + description: 'Test 6', + feature: 'processor', + module: 'destination', + version: 'v0', + input: { + request: { + body: [ + { + message: { + anonymousId: '4eb021e9-a2af-4926-ae82-fe996d12f3c5', + channel: 'web', + context: { + app: { + build: '1.0.0', + name: 'RudderLabs JavaScript SDK', + namespace: 'com.rudderlabs.javascript', + version: '1.1.6', + }, + library: { name: 'RudderLabs JavaScript SDK', version: '1.1.6' }, + locale: 'en-GB', + os: { name: '', version: '' }, + page: { + path: '/testing/script-test.html', + referrer: '', + search: '', + title: '', + url: 'http://localhost:3243/testing/script-test.html', + }, + screen: { density: 2 }, + traits: { + company: { id: 'abc123' }, + createdAt: 'Thu Mar 24 2016 17:46:45 GMT+0000 (UTC)', + email: 'rudderTest@gmail.com', + name: 'Rudder Test', + plan: 'Enterprise', + }, + userAgent: + 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.80 Safari/537.36', + }, + integrations: { All: true }, + messageId: '9eb2f7c0-d896-494e-b105-60f604ce2906', + originalTimestamp: '2020-10-16T09:09:31.465Z', + receivedAt: '2020-10-16T14:39:31.468+05:30', + request_ip: '[::1]', + sentAt: '2020-10-16T09:09:31.466Z', + timestamp: '2020-10-16T14:39:31.467+05:30', + userId: 'rudder123', + }, + metadata: { destinationID: 'ewksfdgDFSdvzsdmwsdfvcxj' }, + destination: { + DestinationDefinition: { Config: { cdkEnabled: true } }, + Config: { apiKey: 'dummyApiKey', stream: 'default' }, + Enabled: true, + Transformations: [], + IsProcessorEnabled: true, + }, + }, + ], + method: 'POST', + }, + pathSuffix: '', + }, + output: { + response: { + status: 200, + body: [ + { + error: + 'Unknown error occurred. Original error: "type" is a required field and it must be a string', + metadata: { destinationID: 'ewksfdgDFSdvzsdmwsdfvcxj' }, + statTags: { + destType: 'LYTICS', + errorCategory: 'transformation', + feature: 'processor', + implementation: 'cdkV1', + module: 'destination', + }, + statusCode: 400, + }, + ], + }, + }, + }, + { + name: 'lytics', + description: 'Test 7', + feature: 'processor', + module: 'destination', + version: 'v0', + input: { + request: { + body: [ + { + message: { + anonymousId: '4eb021e9-a2af-4926-ae82-fe996d12f3c5', + channel: 'web', + context: { + app: { + build: '1.0.0', + name: 'RudderLabs JavaScript SDK', + namespace: 'com.rudderlabs.javascript', + version: '1.1.6', + }, + library: { name: 'RudderLabs JavaScript SDK', version: '1.1.6' }, + locale: 'en-GB', + os: { name: '', version: '' }, + page: { + path: '/testing/script-test.html', + referrer: '', + search: '', + title: '', + url: 'http://localhost:3243/testing/script-test.html', + }, + screen: { density: 2 }, + traits: { + company: { id: 'abc123' }, + createdAt: 'Thu Mar 24 2016 17:46:45 GMT+0000 (UTC)', + email: 'rudderTest@gmail.com', + name: 'Rudder Test', + plan: 'Enterprise', + }, + userAgent: + 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.80 Safari/537.36', + }, + integrations: { All: true }, + messageId: '9eb2f7c0-d896-494e-b105-60f604ce2906', + originalTimestamp: '2020-10-16T09:09:31.465Z', + receivedAt: '2020-10-16T14:39:31.468+05:30', + request_ip: '[::1]', + sentAt: '2020-10-16T09:09:31.466Z', + timestamp: '2020-10-16T14:39:31.467+05:30', + type: 'gone', + userId: 'rudder123', + }, + metadata: { destinationID: 'ewksfdgDFSdvzsdmwsdfvcxj' }, + destination: { + DestinationDefinition: { Config: { cdkEnabled: true } }, + Config: { apiKey: 'dummyApiKey', stream: 'default' }, + Enabled: true, + Transformations: [], + IsProcessorEnabled: true, + }, + }, + ], + method: 'POST', + }, + pathSuffix: '', + }, + output: { + response: { + status: 200, + body: [ + { + error: 'Bad event. Original error: message type "gone" not supported for "lytics"', + metadata: { destinationID: 'ewksfdgDFSdvzsdmwsdfvcxj' }, + statTags: { + destType: 'LYTICS', + errorCategory: 'dataValidation', + errorType: 'instrumentation', + feature: 'processor', + implementation: 'cdkV1', + module: 'destination', + }, + statusCode: 400, + }, + ], + }, + }, + }, + { + name: 'lytics', + description: 'Test 8', + feature: 'processor', + module: 'destination', + version: 'v0', + input: { + request: { + body: [ + { + message: { + channel: 'web', + context: { + app: { + build: '1.0.0', + name: 'RudderLabs JavaScript SDK', + namespace: 'com.rudderlabs.javascript', + version: '1.1.6', + }, + library: { name: 'RudderLabs JavaScript SDK', version: '1.1.6' }, + locale: 'en-GB', + os: { name: '', version: '' }, + page: { + path: '/testing/script-test.html', + referrer: '', + search: '', + title: '', + url: 'http://localhost:3243/testing/script-test.html', + }, + screen: { density: 2 }, + traits: { + company: { id: 'abc123' }, + createdAt: 'Thu Mar 24 2016 17:46:45 GMT+0000 (UTC)', + email: 'rudderTest@gmail.com', + name: 'Rudder Test', + plan: 'Enterprise', + }, + userAgent: + 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.80 Safari/537.36', + }, + event: 'Order Completed', + integrations: { All: true }, + messageId: 'a0adfab9-baf7-4e09-a2ce-bbe2844c324a', + originalTimestamp: '2020-10-16T08:10:12.782Z', + properties: { + checkout_id: 'what is checkout id here??', + coupon: 'APPARELSALE', + currency: 'GBP', + order_id: 'transactionId', + products: [ + { + brand: '', + category: 'Merch', + currency: 'GBP', + image_url: 'https://www.example.com/product/bacon-jam.jpg', + name: 'Food/Drink', + position: 1, + price: 3, + product_id: 'product-bacon-jam', + quantity: 2, + sku: 'sku-1', + typeOfProduct: 'Food', + url: 'https://www.example.com/product/bacon-jam', + value: 6, + variant: 'Extra topped', + }, + { + brand: 'Levis', + category: 'Merch', + currency: 'GBP', + image_url: 'https://www.example.com/product/t-shirt.jpg', + name: 'T-Shirt', + position: 2, + price: 12.99, + product_id: 'product-t-shirt', + quantity: 1, + sku: 'sku-2', + typeOfProduct: 'Shirt', + url: 'https://www.example.com/product/t-shirt', + value: 12.99, + variant: 'White', + }, + { + brand: 'Levis', + category: 'Merch', + coupon: 'APPARELSALE', + currency: 'GBP', + image_url: 'https://www.example.com/product/offer-t-shirt.jpg', + name: 'T-Shirt-on-offer', + position: 1, + price: 12.99, + product_id: 'offer-t-shirt', + quantity: 1, + sku: 'sku-3', + typeOfProduct: 'Shirt', + url: 'https://www.example.com/product/offer-t-shirt', + value: 12.99, + variant: 'Black', + }, + ], + revenue: 31.98, + shipping: 4, + value: 31.98, + }, + receivedAt: '2020-10-16T13:40:12.792+05:30', + request_ip: '[::1]', + sentAt: '2020-10-16T08:10:12.783Z', + timestamp: '2020-10-16T13:40:12.791+05:30', + type: 'track', + userId: 'rudder123', + }, + destination: { + DestinationDefinition: { Config: { cdkEnabled: true } }, + Config: { apiKey: 'dummyApiKey', stream: 'default' }, + Enabled: true, + Transformations: [], + IsProcessorEnabled: true, + }, + }, + ], + method: 'POST', + }, + pathSuffix: '', + }, + output: { + response: { + status: 200, + body: [ + { + output: { + version: '1', + type: 'REST', + method: 'POST', + endpoint: 'https://api.lytics.io/collect/json/default?access_token=dummyApiKey', + headers: { 'Content-Type': 'application/json' }, + params: {}, + body: { + JSON: { + _e: 'Order Completed', + checkout_id: 'what is checkout id here??', + coupon: 'APPARELSALE', + currency: 'GBP', + order_id: 'transactionId', + 'products[0].brand': '', + 'products[0].category': 'Merch', + 'products[0].currency': 'GBP', + 'products[0].image_url': 'https://www.example.com/product/bacon-jam.jpg', + 'products[0].name': 'Food/Drink', + 'products[0].position': 1, + 'products[0].price': 3, + 'products[0].product_id': 'product-bacon-jam', + 'products[0].quantity': 2, + 'products[0].sku': 'sku-1', + 'products[0].typeOfProduct': 'Food', + 'products[0].url': 'https://www.example.com/product/bacon-jam', + 'products[0].value': 6, + 'products[0].variant': 'Extra topped', + 'products[1].brand': 'Levis', + 'products[1].category': 'Merch', + 'products[1].currency': 'GBP', + 'products[1].image_url': 'https://www.example.com/product/t-shirt.jpg', + 'products[1].name': 'T-Shirt', + 'products[1].position': 2, + 'products[1].price': 12.99, + 'products[1].product_id': 'product-t-shirt', + 'products[1].quantity': 1, + 'products[1].sku': 'sku-2', + 'products[1].typeOfProduct': 'Shirt', + 'products[1].url': 'https://www.example.com/product/t-shirt', + 'products[1].value': 12.99, + 'products[1].variant': 'White', + 'products[2].brand': 'Levis', + 'products[2].category': 'Merch', + 'products[2].coupon': 'APPARELSALE', + 'products[2].currency': 'GBP', + 'products[2].image_url': 'https://www.example.com/product/offer-t-shirt.jpg', + 'products[2].name': 'T-Shirt-on-offer', + 'products[2].position': 1, + 'products[2].price': 12.99, + 'products[2].product_id': 'offer-t-shirt', + 'products[2].quantity': 1, + 'products[2].sku': 'sku-3', + 'products[2].typeOfProduct': 'Shirt', + 'products[2].url': 'https://www.example.com/product/offer-t-shirt', + 'products[2].value': 12.99, + 'products[2].variant': 'Black', + revenue: 31.98, + shipping: 4, + value: 31.98, + }, + XML: {}, + JSON_ARRAY: {}, + FORM: {}, + }, + files: {}, + userId: '', + }, + statusCode: 200, + }, + ], + }, + }, + }, + { + name: 'lytics', + description: 'Test 9', + feature: 'processor', + module: 'destination', + version: 'v0', + input: { + request: { + body: [ + { + message: { + channel: 'web', + context: { + app: { + build: '1.0.0', + name: 'RudderLabs JavaScript SDK', + namespace: 'com.rudderlabs.javascript', + version: '1.0.0', + }, + traits: { + email: 'testhubspot2@email.com', + name: 'Test Hubspot', + anonymousId: '12345', + }, + library: { name: 'RudderLabs JavaScript SDK', version: '1.0.0' }, + userAgent: + 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.90 Safari/537.36', + locale: 'en-GB', + ip: '0.0.0.0', + os: { name: '', version: '' }, + screen: { density: 2 }, + }, + type: 'screen', + messageId: 'e8585d9a-7137-4223-b295-68ab1b17dad7', + originalTimestamp: '2019-10-15T09:35:31.289Z', + anonymousId: '00000000000000000000000000', + userId: '12345', + properties: { path: '', referrer: '', search: '', title: '', url: '' }, + integrations: { All: true }, + name: 'ApplicationLoaded', + sentAt: '2019-10-14T11:15:53.296Z', + destination_props: { AF: { af_uid: 'afUid' } }, + }, + destination: { + DestinationDefinition: { Config: { cdkEnabled: true } }, + Config: { apiKey: 'dummyApiKey', stream: 'default' }, + Enabled: true, + Transformations: [], + IsProcessorEnabled: true, + }, + }, + ], + method: 'POST', + }, + pathSuffix: '', + }, + output: { + response: { + status: 200, + body: [ + { + output: { + version: '1', + type: 'REST', + method: 'POST', + endpoint: 'https://api.lytics.io/collect/json/default?access_token=dummyApiKey', + headers: { 'Content-Type': 'application/json' }, + params: {}, + body: { + JSON: { + event: 'ApplicationLoaded', + path: '', + referrer: '', + search: '', + title: '', + url: '', + }, + XML: {}, + JSON_ARRAY: {}, + FORM: {}, + }, + files: {}, + userId: '', + }, + statusCode: 200, + }, + ], + }, + }, + }, + { + name: 'lytics', + description: 'Test 10', + feature: 'processor', + module: 'destination', + version: 'v0', + input: { + request: { + body: [ + { + message: { + channel: 'web', + context: { + app: { + build: '1.0.0', + name: 'RudderLabs JavaScript SDK', + namespace: 'com.rudderlabs.javascript', + version: '1.0.0', + }, + traits: { + email: 'testhubspot2@email.com', + name: 'Test Hubspot', + anonymousId: '12345', + }, + library: { name: 'RudderLabs JavaScript SDK', version: '1.0.0' }, + userAgent: + 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.90 Safari/537.36', + locale: 'en-GB', + ip: '0.0.0.0', + os: { name: '', version: '' }, + screen: { density: 2 }, + }, + type: 'page', + messageId: 'e8585d9a-7137-4223-b295-68ab1b17dad7', + originalTimestamp: '2019-10-15T09:35:31.289Z', + anonymousId: '00000000000000000000000000', + userId: '12345', + properties: { path: '', referrer: '', search: '', title: '', url: '' }, + integrations: { All: true }, + name: 'ApplicationLoaded', + sentAt: '2019-10-14T11:15:53.296Z', + destination_props: { AF: { af_uid: 'afUid' } }, + }, + destination: { + DestinationDefinition: { Config: { cdkEnabled: true } }, + Config: { apiKey: 'dummyApiKey', stream: 'default' }, + Enabled: true, + Transformations: [], + IsProcessorEnabled: true, + }, + }, + ], + method: 'POST', + }, + pathSuffix: '', + }, + output: { + response: { + status: 200, + body: [ + { + output: { + version: '1', + type: 'REST', + method: 'POST', + endpoint: 'https://api.lytics.io/collect/json/default?access_token=dummyApiKey', + headers: { 'Content-Type': 'application/json' }, + params: {}, + body: { + JSON: { + event: 'ApplicationLoaded', + path: '', + referrer: '', + search: '', + title: '', + url: '', + }, + XML: {}, + JSON_ARRAY: {}, + FORM: {}, + }, + files: {}, + userId: '', + }, + statusCode: 200, + }, + ], + }, + }, + }, + { + name: 'lytics', + description: 'Test 11', + feature: 'processor', + module: 'destination', + version: 'v0', + input: { + request: { + body: [ + { + message: { + anonymousId: '4eb021e9-a2af-4926-ae82-fe996d12f3c5', + channel: 'web', + context: { + app: { + build: '1.0.0', + name: 'RudderLabs JavaScript SDK', + namespace: 'com.rudderlabs.javascript', + version: '1.1.6', + }, + library: { name: 'RudderLabs JavaScript SDK', version: '1.1.6' }, + locale: 'en-GB', + os: { name: '', version: '' }, + page: { + path: '/testing/script-test.html', + referrer: '', + search: '', + title: '', + url: 'http://localhost:3243/testing/script-test.html', + }, + screen: { density: 2 }, + traits: { + company: { id: 'abc123' }, + createdAt: 'Thu Mar 24 2016 17:46:45 GMT+0000 (UTC)', + email: 'rudderTest@gmail.com', + name: 'Rudder Test', + plan: 'Enterprise', + firstName: 'Rudderstack', + lastname: 'Test', + }, + userAgent: + 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.80 Safari/537.36', + }, + integrations: { All: true }, + messageId: 'e108eb05-f6cd-4624-ba8c-568f2e2b3f92', + originalTimestamp: '2020-10-16T08:26:14.938Z', + receivedAt: '2020-10-16T13:56:14.945+05:30', + request_ip: '[::1]', + sentAt: '2020-10-16T08:26:14.939Z', + timestamp: '2020-10-16T13:56:14.944+05:30', + type: 'identify', + userId: 'rudder123', + }, + destination: { + DestinationDefinition: { Config: { cdkEnabled: true } }, + Config: { apiKey: 'dummyApiKey', stream: 'default' }, + Enabled: true, + Transformations: [], + IsProcessorEnabled: true, + }, + }, + ], + method: 'POST', + }, + pathSuffix: '', + }, + output: { + response: { + status: 200, + body: [ + { + output: { + version: '1', + type: 'REST', + method: 'POST', + endpoint: 'https://api.lytics.io/collect/json/default?access_token=dummyApiKey', + headers: { 'Content-Type': 'application/json' }, + params: {}, + body: { + JSON: { + user_id: 'rudder123', + 'company.id': 'abc123', + createdAt: 'Thu Mar 24 2016 17:46:45 GMT+0000 (UTC)', + email: 'rudderTest@gmail.com', + name: 'Rudder Test', + plan: 'Enterprise', + first_name: 'Rudderstack', + last_name: 'Test', + }, + JSON_ARRAY: {}, + XML: {}, + FORM: {}, + }, + files: {}, + userId: '', + }, + statusCode: 200, + }, + ], + }, + }, + }, +]; diff --git a/test/integrations/destinations/lytics/router/data.ts b/test/integrations/destinations/lytics/router/data.ts new file mode 100644 index 0000000000..98aded20bf --- /dev/null +++ b/test/integrations/destinations/lytics/router/data.ts @@ -0,0 +1,351 @@ +export const data = [ + { + name: 'lytics', + description: 'Test 0', + feature: 'router', + module: 'destination', + version: 'v0', + input: { + request: { + body: { + input: [ + { + message: { + anonymousId: '4eb021e9-a2af-4926-ae82-fe996d12f3c5', + channel: 'web', + context: { + app: { + build: '1.0.0', + name: 'RudderLabs JavaScript SDK', + namespace: 'com.rudderlabs.javascript', + version: '1.1.6', + }, + library: { + name: 'RudderLabs JavaScript SDK', + version: '1.1.6', + }, + locale: 'en-GB', + os: { + name: '', + version: '', + }, + page: { + path: '/testing/script-test.html', + referrer: '', + search: '', + title: '', + url: 'http://localhost:3243/testing/script-test.html', + }, + screen: { + density: 2, + }, + traits: { + company: { + id: 'abc123', + }, + createdAt: 'Thu Mar 24 2016 17:46:45 GMT+0000 (UTC)', + email: 'rudderTest@gmail.com', + name: 'Rudder Test', + plan: 'Enterprise', + }, + userAgent: + 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.80 Safari/537.36', + }, + event: 'Order Completed', + integrations: { + All: true, + }, + messageId: 'a0adfab9-baf7-4e09-a2ce-bbe2844c324a', + timestamp: '2020-10-16T08:10:12.782Z', + properties: { + checkout_id: 'what is checkout id here??', + coupon: 'APPARELSALE', + currency: 'GBP', + order_id: 'transactionId', + products: [ + { + brand: '', + category: 'Merch', + currency: 'GBP', + image_url: 'https://www.example.com/product/bacon-jam.jpg', + name: 'Food/Drink', + position: 1, + price: 3, + product_id: 'product-bacon-jam', + quantity: 2, + sku: 'sku-1', + typeOfProduct: 'Food', + url: 'https://www.example.com/product/bacon-jam', + value: 6, + variant: 'Extra topped', + }, + { + brand: 'Levis', + category: 'Merch', + currency: 'GBP', + image_url: 'https://www.example.com/product/t-shirt.jpg', + name: 'T-Shirt', + position: 2, + price: 12.99, + product_id: 'product-t-shirt', + quantity: 1, + sku: 'sku-2', + typeOfProduct: 'Shirt', + url: 'https://www.example.com/product/t-shirt', + value: 12.99, + variant: 'White', + }, + { + brand: 'Levis', + category: 'Merch', + coupon: 'APPARELSALE', + currency: 'GBP', + image_url: 'https://www.example.com/product/offer-t-shirt.jpg', + name: 'T-Shirt-on-offer', + position: 1, + price: 12.99, + product_id: 'offer-t-shirt', + quantity: 1, + sku: 'sku-3', + typeOfProduct: 'Shirt', + url: 'https://www.example.com/product/offer-t-shirt', + value: 12.99, + variant: 'Black', + }, + ], + revenue: 31.98, + shipping: 4, + value: 31.98, + }, + receivedAt: '2020-10-16T13:40:12.792+05:30', + request_ip: '[::1]', + sentAt: '2020-10-16T08:10:12.783Z', + type: 'track', + userId: 'rudder123', + }, + metadata: { + jobId: 1, + }, + destination: { + Config: { + apiKey: 'dummyApiKey', + stream: 'default', + }, + Enabled: true, + Transformations: [], + IsProcessorEnabled: true, + }, + }, + { + message: { + anonymousId: '4eb021e9-a2af-4926-ae82-fe996d12f3c5', + channel: 'web', + context: { + app: { + build: '1.0.0', + name: 'RudderLabs JavaScript SDK', + namespace: 'com.rudderlabs.javascript', + version: '1.1.6', + }, + library: { + name: 'RudderLabs JavaScript SDK', + version: '1.1.6', + }, + locale: 'en-GB', + os: { + name: '', + version: '', + }, + page: { + path: '/testing/script-test.html', + referrer: '', + search: '', + title: '', + url: 'http://localhost:3243/testing/script-test.html', + }, + screen: { + density: 2, + }, + traits: { + company: { + id: 'abc123', + }, + createdAt: 'Thu Mar 24 2016 17:46:45 GMT+0000 (UTC)', + email: 'rudderTest@gmail.com', + name: 'Rudder Test', + plan: 'Enterprise', + }, + userAgent: + 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.80 Safari/537.36', + }, + integrations: { + All: true, + }, + messageId: 'e108eb05-f6cd-4624-ba8c-568f2e2b3f92', + originalTimestamp: '2020-10-16T08:26:14.938Z', + receivedAt: '2020-10-16T13:56:14.945+05:30', + request_ip: '[::1]', + sentAt: '2020-10-16T08:26:14.939Z', + timestamp: '2020-10-16T13:56:14.944+05:30', + type: 'identify', + userId: 'rudder123', + }, + metadata: { + jobId: 2, + }, + destination: { + Config: { + apiKey: 'dummyApiKey', + stream: 'default', + }, + Enabled: true, + Transformations: [], + IsProcessorEnabled: true, + }, + }, + ], + destType: 'lytics', + }, + method: 'POST', + }, + }, + output: { + response: { + status: 200, + body: { + output: [ + { + batchedRequest: { + version: '1', + type: 'REST', + method: 'POST', + endpoint: 'https://api.lytics.io/collect/json/default?access_token=dummyApiKey', + headers: { + 'Content-Type': 'application/json', + }, + params: {}, + body: { + JSON: { + _e: 'Order Completed', + checkout_id: 'what is checkout id here??', + coupon: 'APPARELSALE', + currency: 'GBP', + order_id: 'transactionId', + 'products[0].brand': '', + 'products[0].category': 'Merch', + 'products[0].currency': 'GBP', + 'products[0].image_url': 'https://www.example.com/product/bacon-jam.jpg', + 'products[0].name': 'Food/Drink', + 'products[0].position': 1, + 'products[0].price': 3, + 'products[0].product_id': 'product-bacon-jam', + 'products[0].quantity': 2, + 'products[0].sku': 'sku-1', + 'products[0].typeOfProduct': 'Food', + 'products[0].url': 'https://www.example.com/product/bacon-jam', + 'products[0].value': 6, + 'products[0].variant': 'Extra topped', + 'products[1].brand': 'Levis', + 'products[1].category': 'Merch', + 'products[1].currency': 'GBP', + 'products[1].image_url': 'https://www.example.com/product/t-shirt.jpg', + 'products[1].name': 'T-Shirt', + 'products[1].position': 2, + 'products[1].price': 12.99, + 'products[1].product_id': 'product-t-shirt', + 'products[1].quantity': 1, + 'products[1].sku': 'sku-2', + 'products[1].typeOfProduct': 'Shirt', + 'products[1].url': 'https://www.example.com/product/t-shirt', + 'products[1].value': 12.99, + 'products[1].variant': 'White', + 'products[2].brand': 'Levis', + 'products[2].category': 'Merch', + 'products[2].coupon': 'APPARELSALE', + 'products[2].currency': 'GBP', + 'products[2].image_url': 'https://www.example.com/product/offer-t-shirt.jpg', + 'products[2].name': 'T-Shirt-on-offer', + 'products[2].position': 1, + 'products[2].price': 12.99, + 'products[2].product_id': 'offer-t-shirt', + 'products[2].quantity': 1, + 'products[2].sku': 'sku-3', + 'products[2].typeOfProduct': 'Shirt', + 'products[2].url': 'https://www.example.com/product/offer-t-shirt', + 'products[2].value': 12.99, + 'products[2].variant': 'Black', + revenue: 31.98, + shipping: 4, + value: 31.98, + }, + XML: {}, + JSON_ARRAY: {}, + FORM: {}, + }, + files: {}, + }, + metadata: [ + { + jobId: 1, + }, + ], + batched: false, + statusCode: 200, + destination: { + Config: { + apiKey: 'dummyApiKey', + stream: 'default', + }, + Enabled: true, + Transformations: [], + IsProcessorEnabled: true, + }, + }, + { + batchedRequest: { + version: '1', + type: 'REST', + method: 'POST', + endpoint: 'https://api.lytics.io/collect/json/default?access_token=dummyApiKey', + headers: { + 'Content-Type': 'application/json', + }, + params: {}, + body: { + JSON: { + user_id: 'rudder123', + 'company.id': 'abc123', + createdAt: 'Thu Mar 24 2016 17:46:45 GMT+0000 (UTC)', + email: 'rudderTest@gmail.com', + name: 'Rudder Test', + plan: 'Enterprise', + }, + XML: {}, + JSON_ARRAY: {}, + FORM: {}, + }, + files: {}, + }, + metadata: [ + { + jobId: 2, + }, + ], + batched: false, + statusCode: 200, + destination: { + Config: { + apiKey: 'dummyApiKey', + stream: 'default', + }, + Enabled: true, + Transformations: [], + IsProcessorEnabled: true, + }, + }, + ], + }, + }, + }, + }, +]; diff --git a/test/integrations/destinations/mailjet/processor/data.ts b/test/integrations/destinations/mailjet/processor/data.ts new file mode 100644 index 0000000000..71e06dc14e --- /dev/null +++ b/test/integrations/destinations/mailjet/processor/data.ts @@ -0,0 +1,229 @@ +export const data = [ + { + name: 'mailjet', + description: 'No Message type', + feature: 'processor', + module: 'destination', + version: 'v0', + input: { + request: { + body: [ + { + message: { + userId: 'test@123', + context: { + traits: { + email: 'test@rudderstack.com', + username: 'Samle_putUserName', + firstName: 'uday', + }, + }, + integrations: { All: true, 'user.com': { lookup: 'email' } }, + }, + destination: { Config: { apiKey: 'dummyApiKey', apiSecret: 'dummyApiSecret' } }, + }, + ], + method: 'POST', + }, + pathSuffix: '', + }, + output: { + response: { + status: 200, + body: [ + { + error: 'Event type is required', + statTags: { + destType: 'MAILJET', + errorCategory: 'dataValidation', + errorType: 'instrumentation', + feature: 'processor', + implementation: 'native', + module: 'destination', + }, + statusCode: 400, + }, + ], + }, + }, + }, + { + name: 'mailjet', + description: 'Unsupported Type', + feature: 'processor', + module: 'destination', + version: 'v0', + input: { + request: { + body: [ + { + message: { + userId: 'test@123', + type: 'trackUser', + context: { + traits: { + email: 'test@rudderstack.com', + firstName: 'test', + lastName: 'rudderstack', + age: 15, + gender: 'male', + status: 'user', + city: 'Kalkata', + country: 'india', + tags: ['productuser'], + phone: '9225467887', + }, + }, + }, + destination: { Config: { apiKey: 'dummyApiKey', apiSecret: 'dummyApiSecret' } }, + }, + ], + method: 'POST', + }, + pathSuffix: '', + }, + output: { + response: { + status: 200, + body: [ + { + error: 'Event type "trackuser" is not supported', + statTags: { + destType: 'MAILJET', + errorCategory: 'dataValidation', + errorType: 'instrumentation', + feature: 'processor', + implementation: 'native', + module: 'destination', + }, + statusCode: 400, + }, + ], + }, + }, + }, + { + name: 'mailjet', + description: 'MailJet identify call without an email', + feature: 'processor', + module: 'destination', + version: 'v0', + input: { + request: { + body: [ + { + message: { + userId: 'test@123', + type: 'identify', + context: { + traits: { + firstName: 'test', + lastName: 'rudderstack', + age: 15, + gender: 'male', + status: 'user', + city: 'Kalkata', + country: 'india', + tags: ['productuser'], + phone: '9225467887', + }, + }, + }, + destination: { Config: { apiKey: 'dummyApiKey', apiSecret: 'dummyApiSecret' } }, + }, + ], + method: 'POST', + }, + pathSuffix: '', + }, + output: { + response: { + status: 200, + body: [ + { + error: 'Missing required value from "email"', + statTags: { + destType: 'MAILJET', + errorCategory: 'dataValidation', + errorType: 'instrumentation', + feature: 'processor', + implementation: 'native', + module: 'destination', + }, + statusCode: 400, + }, + ], + }, + }, + }, + { + name: 'mailjet', + description: 'Mailjet identify call without batching', + feature: 'processor', + module: 'destination', + version: 'v0', + input: { + request: { + body: [ + { + message: { + userId: 'user@45', + type: 'identify', + context: { + traits: { + age: '30', + email: 'test@user.com', + phone: '7267286346802347827', + userId: 'sajal', + city: 'gondal', + userCountry: 'india', + lastName: 'dev', + username: 'Samle_putUserName', + firstName: 'rudderlabs', + }, + }, + }, + destination: { + Config: { + apiKey: 'dummyApiKey', + apiSecret: 'dummyApiSecret', + listId: '58578', + contactPropertiesMapping: [{ from: 'userCountry', to: 'country' }], + }, + }, + }, + ], + method: 'POST', + }, + pathSuffix: '', + }, + output: { + response: { + status: 200, + body: [ + { + output: { + version: '1', + type: 'REST', + method: 'POST', + endpoint: '', + headers: {}, + params: {}, + body: { + JSON: { email: 'test@user.com', properties: { country: 'india' } }, + JSON_ARRAY: {}, + XML: {}, + FORM: {}, + }, + files: {}, + listId: '58578', + action: 'addnoforce', + userId: '', + }, + statusCode: 200, + }, + ], + }, + }, + }, +]; diff --git a/test/integrations/destinations/mailjet/router/data.ts b/test/integrations/destinations/mailjet/router/data.ts new file mode 100644 index 0000000000..85c96629ff --- /dev/null +++ b/test/integrations/destinations/mailjet/router/data.ts @@ -0,0 +1,106 @@ +export const data = [ + { + name: 'mailjet', + description: 'Test 0', + feature: 'router', + module: 'destination', + version: 'v0', + input: { + request: { + body: { + input: [ + { + destination: { + Config: { + apiKey: 'dummyApiKey', + apiSecret: 'dummyApiSecret', + listId: '58578', + contactPropertiesMapping: [{ from: 'userCountry', to: 'country' }], + }, + }, + metadata: { + jobId: 1, + }, + message: { + userId: 'user@45', + type: 'identify', + context: { + traits: { + age: '30', + email: 'test@user.com', + phone: '7267286346802347827', + userId: 'sajal', + city: 'gondal', + userCountry: 'india', + lastName: 'dev', + username: 'Samle_putUserName', + firstName: 'rudderlabs', + }, + }, + }, + }, + ], + destType: 'mailjet', + }, + method: 'POST', + }, + }, + output: { + response: { + status: 200, + body: { + output: [ + { + batchedRequest: { + version: '1', + type: 'REST', + method: 'POST', + endpoint: 'https://api.mailjet.com/v3/REST/contactslist/58578/managemanycontacts', + headers: { + 'Content-Type': 'application/json', + Authorization: 'Basic ZHVtbXlBcGlLZXk6ZHVtbXlBcGlTZWNyZXQ=', + }, + params: {}, + body: { + FORM: {}, + JSON: { + Action: 'addnoforce', + Contacts: [ + { + email: 'test@user.com', + properties: { country: 'india' }, + }, + ], + }, + JSON_ARRAY: {}, + XML: {}, + }, + files: {}, + }, + metadata: [ + { + jobId: 1, + }, + ], + batched: true, + statusCode: 200, + destination: { + Config: { + apiKey: 'dummyApiKey', + apiSecret: 'dummyApiSecret', + listId: '58578', + contactPropertiesMapping: [ + { + from: 'userCountry', + to: 'country', + }, + ], + }, + }, + }, + ], + }, + }, + }, + }, +]; diff --git a/test/integrations/destinations/mailmodo/processor/data.ts b/test/integrations/destinations/mailmodo/processor/data.ts new file mode 100644 index 0000000000..45a14e2a52 --- /dev/null +++ b/test/integrations/destinations/mailmodo/processor/data.ts @@ -0,0 +1,648 @@ +export const data = [ + { + name: 'mailmodo', + description: 'Track call', + feature: 'processor', + module: 'destination', + version: 'v0', + input: { + request: { + body: [ + { + destination: { Config: { apiKey: 'dummyApiKey' } }, + message: { + event: 'trackevent', + type: 'track', + sentAt: '2022-01-20T13:39:21.033Z', + userId: 'user123456001', + channel: 'web', + context: { + os: { name: '', version: '' }, + app: { + name: 'RudderLabs JavaScript SDK', + build: '1.0.0', + version: '1.2.20', + namespace: 'com.rudderlabs.javascript', + }, + page: { + url: 'http://127.0.0.1:7307/Testing/App_for_LaunchDarkly/ourSdk.html', + path: '/Testing/App_for_LaunchDarkly/ourSdk.html', + title: 'Document', + search: '', + tab_url: 'http://127.0.0.1:7307/Testing/App_for_LaunchDarkly/ourSdk.html', + referrer: 'http://127.0.0.1:7307/Testing/App_for_LaunchDarkly/', + initial_referrer: '$direct', + referring_domain: '127.0.0.1:7307', + initial_referring_domain: '', + }, + locale: 'en-US', + screen: { width: 1440, height: 900, density: 2, innerWidth: 536, innerHeight: 689 }, + traits: { + city: 'Pune', + name: 'First User', + email: 'firstUser@testmail.com', + title: 'VP', + gender: 'female', + avatar: 'https://i.pravatar.cc/300', + }, + library: { name: 'RudderLabs JavaScript SDK', version: '1.2.20' }, + campaign: {}, + userAgent: + 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.71 Safari/537.36', + }, + rudderId: '553b5522-c575-40a7-8072-9741c5f9a647', + messageId: '831f1fa5-de84-4f22-880a-4c3f23fc3f04', + anonymousId: 'bf412108-0357-4330-b119-7305e767823c', + integrations: { All: true }, + originalTimestamp: '2022-01-20T13:39:21.032Z', + }, + }, + ], + method: 'POST', + }, + pathSuffix: '', + }, + output: { + response: { + status: 200, + body: [ + { + output: { + version: '1', + type: 'REST', + method: 'POST', + endpoint: 'https://api.mailmodo.com/api/v1/addEvent', + headers: { mmApiKey: 'dummyApiKey', 'Content-Type': 'application/json' }, + params: {}, + body: { + JSON: { email: 'firstUser@testmail.com', event_name: 'trackevent' }, + JSON_ARRAY: {}, + XML: {}, + FORM: {}, + }, + files: {}, + userId: '', + }, + statusCode: 200, + }, + ], + }, + }, + }, + { + name: 'mailmodo', + description: 'Providing empty API Key', + feature: 'processor', + module: 'destination', + version: 'v0', + input: { + request: { + body: [ + { + destination: { Config: { apiKey: '' } }, + message: { + event: 'trackevent', + type: 'track', + sentAt: '2022-01-20T13:39:21.033Z', + userId: 'user123456001', + channel: 'web', + context: { + os: { name: '', version: '' }, + app: { + name: 'RudderLabs JavaScript SDK', + build: '1.0.0', + version: '1.2.20', + namespace: 'com.rudderlabs.javascript', + }, + page: { + url: 'http://127.0.0.1:7307/Testing/App_for_LaunchDarkly/ourSdk.html', + path: '/Testing/App_for_LaunchDarkly/ourSdk.html', + title: 'Document', + search: '', + tab_url: 'http://127.0.0.1:7307/Testing/App_for_LaunchDarkly/ourSdk.html', + referrer: 'http://127.0.0.1:7307/Testing/App_for_LaunchDarkly/', + initial_referrer: '$direct', + referring_domain: '127.0.0.1:7307', + initial_referring_domain: '', + }, + locale: 'en-US', + screen: { width: 1440, height: 900, density: 2, innerWidth: 536, innerHeight: 689 }, + traits: { + city: 'Pune', + name: 'First User', + email: 'firstUser@testmail.com', + title: 'VP', + gender: 'female', + avatar: 'https://i.pravatar.cc/300', + }, + library: { name: 'RudderLabs JavaScript SDK', version: '1.2.20' }, + campaign: {}, + userAgent: + 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.71 Safari/537.36', + }, + rudderId: '553b5522-c575-40a7-8072-9741c5f9a647', + messageId: '831f1fa5-de84-4f22-880a-4c3f23fc3f04', + anonymousId: 'bf412108-0357-4330-b119-7305e767823c', + integrations: { All: true }, + originalTimestamp: '2022-01-20T13:39:21.032Z', + }, + }, + ], + method: 'POST', + }, + pathSuffix: '', + }, + output: { + response: { + status: 200, + body: [ + { + error: 'API Key is not present, Aborting event', + statTags: { + destType: 'MAILMODO', + errorCategory: 'dataValidation', + errorType: 'configuration', + feature: 'processor', + implementation: 'native', + module: 'destination', + }, + statusCode: 400, + }, + ], + }, + }, + }, + { + name: 'mailmodo', + description: 'Not providing event type', + feature: 'processor', + module: 'destination', + version: 'v0', + input: { + request: { + body: [ + { + destination: { Config: { apiKey: 'ahj' } }, + message: { + event: 'trackevent', + sentAt: '2022-01-20T13:39:21.033Z', + userId: 'user123456001', + channel: 'web', + context: { + os: { name: '', version: '' }, + app: { + name: 'RudderLabs JavaScript SDK', + build: '1.0.0', + version: '1.2.20', + namespace: 'com.rudderlabs.javascript', + }, + page: { + url: 'http://127.0.0.1:7307/Testing/App_for_LaunchDarkly/ourSdk.html', + path: '/Testing/App_for_LaunchDarkly/ourSdk.html', + title: 'Document', + search: '', + tab_url: 'http://127.0.0.1:7307/Testing/App_for_LaunchDarkly/ourSdk.html', + referrer: 'http://127.0.0.1:7307/Testing/App_for_LaunchDarkly/', + initial_referrer: '$direct', + referring_domain: '127.0.0.1:7307', + initial_referring_domain: '', + }, + locale: 'en-US', + screen: { width: 1440, height: 900, density: 2, innerWidth: 536, innerHeight: 689 }, + traits: { + city: 'Pune', + name: 'First User', + email: 'firstUser@testmail.com', + title: 'VP', + gender: 'female', + avatar: 'https://i.pravatar.cc/300', + }, + library: { name: 'RudderLabs JavaScript SDK', version: '1.2.20' }, + campaign: {}, + userAgent: + 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.71 Safari/537.36', + }, + rudderId: '553b5522-c575-40a7-8072-9741c5f9a647', + messageId: '831f1fa5-de84-4f22-880a-4c3f23fc3f04', + anonymousId: 'bf412108-0357-4330-b119-7305e767823c', + integrations: { All: true }, + originalTimestamp: '2022-01-20T13:39:21.032Z', + }, + }, + ], + method: 'POST', + }, + pathSuffix: '', + }, + output: { + response: { + status: 200, + body: [ + { + error: 'Event type is required', + statTags: { + destType: 'MAILMODO', + errorCategory: 'dataValidation', + errorType: 'instrumentation', + feature: 'processor', + implementation: 'native', + module: 'destination', + }, + statusCode: 400, + }, + ], + }, + }, + }, + { + name: 'mailmodo', + description: 'Page call- not supported', + feature: 'processor', + module: 'destination', + version: 'v0', + input: { + request: { + body: [ + { + destination: { Config: { apiKey: 'dummyApiKey', listName: 'abcdef' } }, + message: { + type: 'page', + event: 'Email Opened', + sentAt: '2020-08-28T16:26:16.473Z', + context: { library: { name: 'analytics-node', version: '0.0.3' } }, + _metadata: { nodeVersion: '10.22.0' }, + messageId: + 'node-570110489d3e99b234b18af9a9eca9d4-6009779e-82d7-469d-aaeb-5ccf162b0453', + properties: { + subject: 'resume validate', + sendtime: '2020-01-01', + sendlocation: 'akashdeep@gmail.com', + }, + anonymousId: 'abcdeeeeeeeexxxx102', + originalTimestamp: '2020-08-28T16:26:06.468Z', + }, + }, + ], + method: 'POST', + }, + pathSuffix: '', + }, + output: { + response: { + status: 200, + body: [ + { + error: 'Event type page is not supported', + statTags: { + destType: 'MAILMODO', + errorCategory: 'dataValidation', + errorType: 'instrumentation', + feature: 'processor', + implementation: 'native', + module: 'destination', + }, + statusCode: 400, + }, + ], + }, + }, + }, + { + name: 'mailmodo', + description: 'Identify call- with empty listName', + feature: 'processor', + module: 'destination', + version: 'v0', + input: { + request: { + body: [ + { + destination: { Config: { apiKey: 'dummyApiKey', listName: '' } }, + message: { + type: 'identify', + event: 'Email Opened', + sentAt: '2020-08-28T16:26:16.473Z', + context: { library: { name: 'analytics-node', version: '0.0.3' } }, + _metadata: { nodeVersion: '10.22.0' }, + messageId: + 'node-570110489d3e99b234b18af9a9eca9d4-6009779e-82d7-469d-aaeb-5ccf162b0453', + properties: { + email: 'test3@abc.com', + subject: 'resume validate', + sendtime: '2020-01-01', + sendlocation: 'akashdeep@gmail.com', + }, + anonymousId: 'abcdeeeeeeeexxxx102', + originalTimestamp: '2020-08-28T16:26:06.468Z', + }, + }, + ], + method: 'POST', + }, + pathSuffix: '', + }, + output: { + response: { + status: 200, + body: [ + { + output: { + version: '1', + type: 'REST', + method: 'POST', + endpoint: 'https://api.mailmodo.com/api/v1/addToList/batch', + headers: { mmApiKey: 'dummyApiKey', 'Content-Type': 'application/json' }, + params: {}, + body: { + JSON: { listName: 'Rudderstack', values: [{ email: 'test3@abc.com' }] }, + JSON_ARRAY: {}, + XML: {}, + FORM: {}, + }, + files: {}, + userId: '', + }, + statusCode: 200, + }, + ], + }, + }, + }, + { + name: 'mailmodo', + description: 'Identify call- with listName', + feature: 'processor', + module: 'destination', + version: 'v0', + input: { + request: { + body: [ + { + destination: { Config: { apiKey: 'dummyApiKey', listName: 'abcdef' } }, + message: { + type: 'identify', + event: 'Email Opened', + sentAt: '2020-08-28T16:26:16.473Z', + context: { library: { name: 'analytics-node', version: '0.0.3' } }, + _metadata: { nodeVersion: '10.22.0' }, + messageId: + 'node-570110489d3e99b234b18af9a9eca9d4-6009779e-82d7-469d-aaeb-5ccf162b0453', + properties: { + email: 'test3@abc.com', + subject: 'resume validate', + sendtime: '2020-01-01', + sendlocation: 'akashdeep@gmail.com', + }, + anonymousId: 'abcdeeeeeeeexxxx102', + originalTimestamp: '2020-08-28T16:26:06.468Z', + }, + }, + ], + method: 'POST', + }, + pathSuffix: '', + }, + output: { + response: { + status: 200, + body: [ + { + output: { + version: '1', + type: 'REST', + method: 'POST', + endpoint: 'https://api.mailmodo.com/api/v1/addToList/batch', + headers: { mmApiKey: 'dummyApiKey', 'Content-Type': 'application/json' }, + params: {}, + body: { + JSON: { listName: 'abcdef', values: [{ email: 'test3@abc.com' }] }, + JSON_ARRAY: {}, + XML: {}, + FORM: {}, + }, + files: {}, + userId: '', + }, + statusCode: 200, + }, + ], + }, + }, + }, + { + name: 'mailmodo', + description: 'Identify call- without email', + feature: 'processor', + module: 'destination', + version: 'v0', + input: { + request: { + body: [ + { + destination: { Config: { apiKey: 'dummyApiKey', listName: 'abcdef' } }, + message: { + type: 'identify', + event: 'Email Opened', + sentAt: '2020-08-28T16:26:16.473Z', + context: { library: { name: 'analytics-node', version: '0.0.3' } }, + _metadata: { nodeVersion: '10.22.0' }, + messageId: + 'node-570110489d3e99b234b18af9a9eca9d4-6009779e-82d7-469d-aaeb-5ccf162b0453', + properties: { + subject: 'resume validate', + sendtime: '2020-01-01', + sendlocation: 'akashdeep@gmail.com', + }, + anonymousId: 'abcdeeeeeeeexxxx102', + originalTimestamp: '2020-08-28T16:26:06.468Z', + }, + }, + ], + method: 'POST', + }, + pathSuffix: '', + }, + output: { + response: { + status: 200, + body: [ + { + error: + 'Missing required value from ["traits.email","context.traits.email","properties.email"]', + statTags: { + destType: 'MAILMODO', + errorCategory: 'dataValidation', + errorType: 'instrumentation', + feature: 'processor', + implementation: 'native', + module: 'destination', + }, + statusCode: 400, + }, + ], + }, + }, + }, + { + name: 'mailmodo', + description: 'Identify call- with user properties(address as an object)', + feature: 'processor', + module: 'destination', + version: 'v0', + input: { + request: { + body: [ + { + destination: { Config: { apiKey: 'dummyApiKey', listName: 'abcdef' } }, + message: { + type: 'identify', + userId: 'identified user id', + anonymousId: 'anon-id-new', + context: { + traits: { trait1: 'new-val' }, + ip: '14.5.67.21', + library: { name: 'http' }, + }, + traits: { + email: 'testabc2@abcd.com', + name: 'Rudder Test', + firstName: 'Test', + lastName: 'Rudderlabs', + age: 21, + phone: '9876543210', + address: { street: 'A street', city: 'Vijayawada', country: 'India' }, + }, + timestamp: '2020-02-02T00:23:09.544Z', + }, + }, + ], + method: 'POST', + }, + pathSuffix: '', + }, + output: { + response: { + status: 200, + body: [ + { + output: { + version: '1', + type: 'REST', + method: 'POST', + endpoint: 'https://api.mailmodo.com/api/v1/addToList/batch', + headers: { mmApiKey: 'dummyApiKey', 'Content-Type': 'application/json' }, + params: {}, + body: { + JSON: { + listName: 'abcdef', + values: [ + { + email: 'testabc2@abcd.com', + data: { + age: 21, + first_name: 'Test', + last_name: 'Rudderlabs', + name: 'Rudder Test', + phone: '9876543210', + trait1: 'new-val', + city: 'Vijayawada', + country: 'India', + address1: 'A street Vijayawada India ', + }, + }, + ], + }, + JSON_ARRAY: {}, + XML: {}, + FORM: {}, + }, + files: {}, + userId: '', + }, + statusCode: 200, + }, + ], + }, + }, + }, + { + name: 'mailmodo', + description: 'Identify call- with user properties(address as a string)', + feature: 'processor', + module: 'destination', + version: 'v0', + input: { + request: { + body: [ + { + destination: { Config: { apiKey: 'dummyApiKey', listName: 'abcdef' } }, + message: { + type: 'identify', + userId: 'identified user id', + anonymousId: 'anon-id-new', + context: { + traits: { trait1: 'new-val' }, + ip: '14.5.67.21', + library: { name: 'http' }, + }, + traits: { + email: 'testabc2@abcd.com', + name: 'Rudder Test', + firstName: 'Test', + lastName: 'Rudderlabs', + age: 21, + phone: '9876543210', + address: 'welcome to home', + }, + timestamp: '2020-02-02T00:23:09.544Z', + }, + }, + ], + method: 'POST', + }, + pathSuffix: '', + }, + output: { + response: { + status: 200, + body: [ + { + output: { + version: '1', + type: 'REST', + method: 'POST', + endpoint: 'https://api.mailmodo.com/api/v1/addToList/batch', + headers: { mmApiKey: 'dummyApiKey', 'Content-Type': 'application/json' }, + params: {}, + body: { + JSON: { + listName: 'abcdef', + values: [ + { + email: 'testabc2@abcd.com', + data: { + age: 21, + first_name: 'Test', + last_name: 'Rudderlabs', + name: 'Rudder Test', + phone: '9876543210', + trait1: 'new-val', + address1: 'welcome to home', + }, + }, + ], + }, + JSON_ARRAY: {}, + XML: {}, + FORM: {}, + }, + files: {}, + userId: '', + }, + statusCode: 200, + }, + ], + }, + }, + }, +]; diff --git a/test/integrations/destinations/mailmodo/router/data.ts b/test/integrations/destinations/mailmodo/router/data.ts new file mode 100644 index 0000000000..c341259bbe --- /dev/null +++ b/test/integrations/destinations/mailmodo/router/data.ts @@ -0,0 +1,294 @@ +export const data = [ + { + name: 'mailmodo', + description: 'Test 0', + feature: 'router', + module: 'destination', + version: 'v0', + input: { + request: { + body: { + input: [ + { + message: { + type: 'identify', + event: 'Email Opened', + sentAt: '2020-08-28T16:26:16.473Z', + context: { + library: { + name: 'analytics-node', + version: '0.0.3', + }, + }, + _metadata: { + nodeVersion: '10.22.0', + }, + messageId: + 'node-570110489d3e99b234b18af9a9eca9d4-6009779e-82d7-469d-aaeb-5ccf162b0453', + properties: { + email: 'test@abc.com', + subject: 'resume validate', + sendtime: '2020-01-01', + sendlocation: 'akashdeep@gmail.com', + }, + anonymousId: 'abcdeeeeeeeexxxx102', + originalTimestamp: '2020-08-28T16:26:06.468Z', + }, + metadata: { + jobId: 2, + }, + destination: { + Config: { + apiKey: 'dummyApiKey', + listName: 'abc', + }, + Enabled: true, + }, + }, + { + message: { + type: 'track', + event: 'Email Opened', + sentAt: '2020-08-28T16:26:16.473Z', + context: { + library: { + name: 'analytics-node', + version: '0.0.3', + }, + }, + _metadata: { + nodeVersion: '10.22.0', + }, + messageId: + 'node-570110489d3e99b234b18af9a9eca9d4-6009779e-82d7-469d-aaeb-5ccf162b0453', + properties: { + email: 'test@abc.com', + subject: 'resume validate', + sendtime: '2020-01-01', + sendlocation: 'akashdeep@gmail.com', + }, + anonymousId: 'abcdeeeeeeeexxxx102', + originalTimestamp: '2020-08-28T16:26:06.468Z', + }, + metadata: { + jobId: 3, + }, + destination: { + Config: { + apiKey: 'dummyApiKey', + listName: 'abc', + }, + Enabled: true, + }, + }, + { + message: { + type: 'identify', + userId: 'identified user id', + anonymousId: 'anon-id-new', + context: { + traits: { + trait1: 'new-val', + }, + ip: '14.5.67.21', + library: { + name: 'http', + }, + }, + traits: { + email: 'test@abc.com', + name: 'Rudder Test', + firstName: 'Test', + lastName: 'Rudderlabs', + age: 21, + phone: '9876543210', + }, + timestamp: '2020-02-02T00:23:09.544Z', + }, + metadata: { + jobId: 4, + }, + destination: { + Config: { + apiKey: 'dummyApiKey', + listName: 'abc', + }, + Enabled: true, + }, + }, + { + message: { + type: 'identify', + event: 'Email Opened', + sentAt: '2020-08-28T16:26:16.473Z', + context: { + library: { + name: 'analytics-node', + version: '0.0.3', + }, + }, + _metadata: { + nodeVersion: '10.22.0', + }, + messageId: + 'node-570110489d3e99b234b18af9a9eca9d4-6009779e-82d7-469d-aaeb-5ccf162b0453', + properties: { + subject: 'resume validate', + sendtime: '2020-01-01', + sendlocation: 'akashdeep@gmail.com', + }, + anonymousId: 'abcdeeeeeeeexxxx102', + originalTimestamp: '2020-08-28T16:26:06.468Z', + }, + metadata: { + jobId: 5, + }, + destination: { + Config: { + apiKey: 'dummyApiKey', + listName: '', + }, + Enabled: true, + }, + }, + ], + destType: 'mailmodo', + }, + method: 'POST', + }, + }, + output: { + response: { + status: 200, + body: { + output: [ + { + batchedRequest: { + body: { + XML: {}, + JSON_ARRAY: {}, + FORM: {}, + JSON: { + listName: 'abc', + values: [ + { + email: 'test@abc.com', + }, + { + email: 'test@abc.com', + data: { + name: 'Rudder Test', + first_name: 'Test', + last_name: 'Rudderlabs', + age: 21, + phone: '9876543210', + trait1: 'new-val', + }, + }, + ], + }, + }, + type: 'REST', + files: {}, + method: 'POST', + params: {}, + headers: { + mmApiKey: 'dummyApiKey', + 'Content-Type': 'application/json', + }, + version: '1', + endpoint: 'https://api.mailmodo.com/api/v1/addToList/batch', + }, + metadata: [ + { + jobId: 2, + }, + { + jobId: 4, + }, + ], + batched: true, + statusCode: 200, + destination: { + Config: { + apiKey: 'dummyApiKey', + listName: 'abc', + }, + Enabled: true, + }, + }, + { + batchedRequest: { + body: { + XML: {}, + JSON_ARRAY: {}, + FORM: {}, + JSON: { + email: 'test@abc.com', + event_name: 'Email Opened', + event_properties: { + email: 'test@abc.com', + sendlocation: 'akashdeep@gmail.com', + sendtime: '2020-01-01', + subject: 'resume validate', + }, + }, + }, + type: 'REST', + files: {}, + method: 'POST', + params: {}, + headers: { + mmApiKey: 'dummyApiKey', + 'Content-Type': 'application/json', + }, + version: '1', + endpoint: 'https://api.mailmodo.com/api/v1/addEvent', + }, + metadata: [ + { + jobId: 3, + }, + ], + batched: false, + statusCode: 200, + destination: { + Config: { + apiKey: 'dummyApiKey', + listName: 'abc', + }, + Enabled: true, + }, + }, + { + batched: false, + error: + 'Missing required value from ["traits.email","context.traits.email","properties.email"]', + metadata: [ + { + jobId: 5, + }, + ], + statTags: { + destType: 'MAILMODO', + errorCategory: 'dataValidation', + errorType: 'instrumentation', + feature: 'router', + implementation: 'native', + module: 'destination', + }, + statusCode: 400, + destination: { + Config: { + apiKey: 'dummyApiKey', + listName: '', + }, + Enabled: true, + }, + }, + ], + }, + }, + }, + }, +]; diff --git a/test/integrations/destinations/marketo_static_list/processor/data.ts b/test/integrations/destinations/marketo_static_list/processor/data.ts new file mode 100644 index 0000000000..51e4e87824 --- /dev/null +++ b/test/integrations/destinations/marketo_static_list/processor/data.ts @@ -0,0 +1,1194 @@ +export const data = [ + { + name: 'marketo_static_list', + description: 'adding and removing users and getting staticListId from externalId', + feature: 'processor', + module: 'destination', + version: 'v0', + input: { + request: { + body: [ + { + destination: { + ID: '1zia9wKshXt80YksLmUdJnr7IHI', + Name: 'test_marketo', + DestinationDefinition: { + ID: '1iVQvTRMsPPyJzwol0ifH93QTQ6', + Name: 'MARKETO', + DisplayName: 'Marketo', + transformAt: 'processor', + transformAtV1: 'processor', + }, + Config: { + clientId: 'marketo_client_id_success', + clientSecret: 'marketo_client_secret_success', + accountId: 'marketo_acct_id_success', + staticListId: 3421, + }, + Enabled: true, + Transformations: [], + IsProcessorEnabled: true, + }, + message: { + userId: 'user 1', + anonymousId: 'anon-id-new', + event: 'event1', + type: 'audiencelist', + properties: { + listData: { + add: [{ id: 1 }, { id: 2 }, { id: 3 }], + remove: [{ id: 4 }, { id: 5 }, { id: 6 }], + }, + enablePartialFailure: true, + }, + context: { + ip: '14.5.67.21', + library: { name: 'http' }, + externalId: [{ type: 'marketoStaticListId', id: 1234 }], + }, + timestamp: '2020-02-02T00:23:09.544Z', + }, + }, + ], + method: 'POST', + }, + pathSuffix: '', + }, + output: { + response: { + status: 200, + body: [ + { + output: { + version: '1', + type: 'REST', + method: 'POST', + endpoint: + 'https://marketo_acct_id_success.mktorest.com/rest/v1/lists/1234/leads.json?id=1&id=2&id=3', + headers: { + Authorization: 'Bearer access_token_success', + 'Content-Type': 'application/json', + }, + params: {}, + body: { JSON: {}, JSON_ARRAY: {}, XML: {}, FORM: {} }, + files: {}, + userId: '', + }, + statusCode: 200, + }, + { + output: { + version: '1', + type: 'REST', + method: 'DELETE', + endpoint: + 'https://marketo_acct_id_success.mktorest.com/rest/v1/lists/1234/leads.json?id=4&id=5&id=6', + headers: { + Authorization: 'Bearer access_token_success', + 'Content-Type': 'application/json', + }, + params: {}, + body: { JSON: {}, JSON_ARRAY: {}, XML: {}, FORM: {} }, + files: {}, + userId: '', + }, + statusCode: 200, + }, + ], + }, + }, + }, + { + name: 'marketo_static_list', + description: 'adding more than max limit users', + feature: 'processor', + module: 'destination', + version: 'v0', + input: { + request: { + body: [ + { + destination: { + ID: '1zia9wKshXt80YksLmUdJnr7IHI', + Name: 'test_marketo', + DestinationDefinition: { + ID: '1iVQvTRMsPPyJzwol0ifH93QTQ6', + Name: 'MARKETO', + DisplayName: 'Marketo', + transformAt: 'processor', + transformAtV1: 'processor', + }, + Config: { + clientId: 'marketo_client_id_success', + clientSecret: 'marketo_client_secret_success', + accountId: 'marketo_acct_id_success', + staticListId: 1234, + }, + Enabled: true, + Transformations: [], + IsProcessorEnabled: true, + }, + message: { + userId: 'user 1', + anonymousId: 'anon-id-new', + event: 'event1', + type: 'audiencelist', + properties: { + listData: { + add: [ + { id: 0 }, + { id: 1 }, + { id: 2 }, + { id: 3 }, + { id: 4 }, + { id: 5 }, + { id: 6 }, + { id: 7 }, + { id: 8 }, + { id: 9 }, + { id: 10 }, + { id: 11 }, + { id: 12 }, + { id: 13 }, + { id: 14 }, + { id: 15 }, + { id: 16 }, + { id: 17 }, + { id: 18 }, + { id: 19 }, + { id: 20 }, + { id: 21 }, + { id: 22 }, + { id: 23 }, + { id: 24 }, + { id: 25 }, + { id: 26 }, + { id: 27 }, + { id: 28 }, + { id: 29 }, + { id: 30 }, + { id: 31 }, + { id: 32 }, + { id: 33 }, + { id: 34 }, + { id: 35 }, + { id: 36 }, + { id: 37 }, + { id: 38 }, + { id: 39 }, + { id: 40 }, + { id: 41 }, + { id: 42 }, + { id: 43 }, + { id: 44 }, + { id: 45 }, + { id: 46 }, + { id: 47 }, + { id: 48 }, + { id: 49 }, + { id: 50 }, + { id: 51 }, + { id: 52 }, + { id: 53 }, + { id: 54 }, + { id: 55 }, + { id: 56 }, + { id: 57 }, + { id: 58 }, + { id: 59 }, + { id: 60 }, + { id: 61 }, + { id: 62 }, + { id: 63 }, + { id: 64 }, + { id: 65 }, + { id: 66 }, + { id: 67 }, + { id: 68 }, + { id: 69 }, + { id: 70 }, + { id: 71 }, + { id: 72 }, + { id: 73 }, + { id: 74 }, + { id: 75 }, + { id: 76 }, + { id: 77 }, + { id: 78 }, + { id: 79 }, + { id: 80 }, + { id: 81 }, + { id: 82 }, + { id: 83 }, + { id: 84 }, + { id: 85 }, + { id: 86 }, + { id: 87 }, + { id: 88 }, + { id: 89 }, + { id: 90 }, + { id: 91 }, + { id: 92 }, + { id: 93 }, + { id: 94 }, + { id: 95 }, + { id: 96 }, + { id: 97 }, + { id: 98 }, + { id: 99 }, + { id: 100 }, + { id: 101 }, + { id: 102 }, + { id: 103 }, + { id: 104 }, + { id: 105 }, + { id: 106 }, + { id: 107 }, + { id: 108 }, + { id: 109 }, + { id: 110 }, + { id: 111 }, + { id: 112 }, + { id: 113 }, + { id: 114 }, + { id: 115 }, + { id: 116 }, + { id: 117 }, + { id: 118 }, + { id: 119 }, + { id: 120 }, + { id: 121 }, + { id: 122 }, + { id: 123 }, + { id: 124 }, + { id: 125 }, + { id: 126 }, + { id: 127 }, + { id: 128 }, + { id: 129 }, + { id: 130 }, + { id: 131 }, + { id: 132 }, + { id: 133 }, + { id: 134 }, + { id: 135 }, + { id: 136 }, + { id: 137 }, + { id: 138 }, + { id: 139 }, + { id: 140 }, + { id: 141 }, + { id: 142 }, + { id: 143 }, + { id: 144 }, + { id: 145 }, + { id: 146 }, + { id: 147 }, + { id: 148 }, + { id: 149 }, + { id: 150 }, + { id: 151 }, + { id: 152 }, + { id: 153 }, + { id: 154 }, + { id: 155 }, + { id: 156 }, + { id: 157 }, + { id: 158 }, + { id: 159 }, + { id: 160 }, + { id: 161 }, + { id: 162 }, + { id: 163 }, + { id: 164 }, + { id: 165 }, + { id: 166 }, + { id: 167 }, + { id: 168 }, + { id: 169 }, + { id: 170 }, + { id: 171 }, + { id: 172 }, + { id: 173 }, + { id: 174 }, + { id: 175 }, + { id: 176 }, + { id: 177 }, + { id: 178 }, + { id: 179 }, + { id: 180 }, + { id: 181 }, + { id: 182 }, + { id: 183 }, + { id: 184 }, + { id: 185 }, + { id: 186 }, + { id: 187 }, + { id: 188 }, + { id: 189 }, + { id: 190 }, + { id: 191 }, + { id: 192 }, + { id: 193 }, + { id: 194 }, + { id: 195 }, + { id: 196 }, + { id: 197 }, + { id: 198 }, + { id: 199 }, + { id: 200 }, + { id: 201 }, + { id: 202 }, + { id: 203 }, + { id: 204 }, + { id: 205 }, + { id: 206 }, + { id: 207 }, + { id: 208 }, + { id: 209 }, + { id: 210 }, + { id: 211 }, + { id: 212 }, + { id: 213 }, + { id: 214 }, + { id: 215 }, + { id: 216 }, + { id: 217 }, + { id: 218 }, + { id: 219 }, + { id: 220 }, + { id: 221 }, + { id: 222 }, + { id: 223 }, + { id: 224 }, + { id: 225 }, + { id: 226 }, + { id: 227 }, + { id: 228 }, + { id: 229 }, + { id: 230 }, + { id: 231 }, + { id: 232 }, + { id: 233 }, + { id: 234 }, + { id: 235 }, + { id: 236 }, + { id: 237 }, + { id: 238 }, + { id: 239 }, + { id: 240 }, + { id: 241 }, + { id: 242 }, + { id: 243 }, + { id: 244 }, + { id: 245 }, + { id: 246 }, + { id: 247 }, + { id: 248 }, + { id: 249 }, + { id: 250 }, + { id: 251 }, + { id: 252 }, + { id: 253 }, + { id: 254 }, + { id: 255 }, + { id: 256 }, + { id: 257 }, + { id: 258 }, + { id: 259 }, + { id: 260 }, + { id: 261 }, + { id: 262 }, + { id: 263 }, + { id: 264 }, + { id: 265 }, + { id: 266 }, + { id: 267 }, + { id: 268 }, + { id: 269 }, + { id: 270 }, + { id: 271 }, + { id: 272 }, + { id: 273 }, + { id: 274 }, + { id: 275 }, + { id: 276 }, + { id: 277 }, + { id: 278 }, + { id: 279 }, + { id: 280 }, + { id: 281 }, + { id: 282 }, + { id: 283 }, + { id: 284 }, + { id: 285 }, + { id: 286 }, + { id: 287 }, + { id: 288 }, + { id: 289 }, + { id: 290 }, + { id: 291 }, + { id: 292 }, + { id: 293 }, + { id: 294 }, + { id: 295 }, + { id: 296 }, + { id: 297 }, + { id: 298 }, + { id: 299 }, + { id: 300 }, + { id: 301 }, + { id: 302 }, + { id: 303 }, + { id: 304 }, + { id: 305 }, + { id: 306 }, + { id: 307 }, + { id: 308 }, + { id: 309 }, + { id: 310 }, + { id: 311 }, + { id: 312 }, + { id: 313 }, + { id: 314 }, + { id: 315 }, + { id: 316 }, + { id: 317 }, + { id: 318 }, + { id: 319 }, + { id: 320 }, + { id: 321 }, + { id: 322 }, + { id: 323 }, + { id: 324 }, + { id: 325 }, + { id: 326 }, + { id: 327 }, + { id: 328 }, + { id: 329 }, + { id: 330 }, + { id: 331 }, + { id: 332 }, + { id: 333 }, + { id: 334 }, + { id: 335 }, + { id: 336 }, + { id: 337 }, + { id: 338 }, + { id: 339 }, + { id: 340 }, + { id: 341 }, + { id: 342 }, + { id: 343 }, + { id: 344 }, + { id: 345 }, + { id: 346 }, + { id: 347 }, + { id: 348 }, + { id: 349 }, + { id: 350 }, + ], + }, + enablePartialFailure: true, + }, + context: { ip: '14.5.67.21', library: { name: 'http' } }, + timestamp: '2020-02-02T00:23:09.544Z', + }, + }, + ], + method: 'POST', + }, + pathSuffix: '', + }, + output: { + response: { + status: 200, + body: [ + { + output: { + version: '1', + type: 'REST', + method: 'POST', + endpoint: + 'https://marketo_acct_id_success.mktorest.com/rest/v1/lists/1234/leads.json?id=0&id=1&id=2&id=3&id=4&id=5&id=6&id=7&id=8&id=9&id=10&id=11&id=12&id=13&id=14&id=15&id=16&id=17&id=18&id=19&id=20&id=21&id=22&id=23&id=24&id=25&id=26&id=27&id=28&id=29&id=30&id=31&id=32&id=33&id=34&id=35&id=36&id=37&id=38&id=39&id=40&id=41&id=42&id=43&id=44&id=45&id=46&id=47&id=48&id=49&id=50&id=51&id=52&id=53&id=54&id=55&id=56&id=57&id=58&id=59&id=60&id=61&id=62&id=63&id=64&id=65&id=66&id=67&id=68&id=69&id=70&id=71&id=72&id=73&id=74&id=75&id=76&id=77&id=78&id=79&id=80&id=81&id=82&id=83&id=84&id=85&id=86&id=87&id=88&id=89&id=90&id=91&id=92&id=93&id=94&id=95&id=96&id=97&id=98&id=99&id=100&id=101&id=102&id=103&id=104&id=105&id=106&id=107&id=108&id=109&id=110&id=111&id=112&id=113&id=114&id=115&id=116&id=117&id=118&id=119&id=120&id=121&id=122&id=123&id=124&id=125&id=126&id=127&id=128&id=129&id=130&id=131&id=132&id=133&id=134&id=135&id=136&id=137&id=138&id=139&id=140&id=141&id=142&id=143&id=144&id=145&id=146&id=147&id=148&id=149&id=150&id=151&id=152&id=153&id=154&id=155&id=156&id=157&id=158&id=159&id=160&id=161&id=162&id=163&id=164&id=165&id=166&id=167&id=168&id=169&id=170&id=171&id=172&id=173&id=174&id=175&id=176&id=177&id=178&id=179&id=180&id=181&id=182&id=183&id=184&id=185&id=186&id=187&id=188&id=189&id=190&id=191&id=192&id=193&id=194&id=195&id=196&id=197&id=198&id=199&id=200&id=201&id=202&id=203&id=204&id=205&id=206&id=207&id=208&id=209&id=210&id=211&id=212&id=213&id=214&id=215&id=216&id=217&id=218&id=219&id=220&id=221&id=222&id=223&id=224&id=225&id=226&id=227&id=228&id=229&id=230&id=231&id=232&id=233&id=234&id=235&id=236&id=237&id=238&id=239&id=240&id=241&id=242&id=243&id=244&id=245&id=246&id=247&id=248&id=249&id=250&id=251&id=252&id=253&id=254&id=255&id=256&id=257&id=258&id=259&id=260&id=261&id=262&id=263&id=264&id=265&id=266&id=267&id=268&id=269&id=270&id=271&id=272&id=273&id=274&id=275&id=276&id=277&id=278&id=279&id=280&id=281&id=282&id=283&id=284&id=285&id=286&id=287&id=288&id=289&id=290&id=291&id=292&id=293&id=294&id=295&id=296&id=297&id=298&id=299', + headers: { + Authorization: 'Bearer access_token_success', + 'Content-Type': 'application/json', + }, + params: {}, + body: { JSON: {}, JSON_ARRAY: {}, XML: {}, FORM: {} }, + files: {}, + userId: '', + }, + statusCode: 200, + }, + { + output: { + version: '1', + type: 'REST', + method: 'POST', + endpoint: + 'https://marketo_acct_id_success.mktorest.com/rest/v1/lists/1234/leads.json?id=300&id=301&id=302&id=303&id=304&id=305&id=306&id=307&id=308&id=309&id=310&id=311&id=312&id=313&id=314&id=315&id=316&id=317&id=318&id=319&id=320&id=321&id=322&id=323&id=324&id=325&id=326&id=327&id=328&id=329&id=330&id=331&id=332&id=333&id=334&id=335&id=336&id=337&id=338&id=339&id=340&id=341&id=342&id=343&id=344&id=345&id=346&id=347&id=348&id=349&id=350', + headers: { + Authorization: 'Bearer access_token_success', + 'Content-Type': 'application/json', + }, + params: {}, + body: { JSON: {}, JSON_ARRAY: {}, XML: {}, FORM: {} }, + files: {}, + userId: '', + }, + statusCode: 200, + }, + ], + }, + }, + }, + { + name: 'marketo_static_list', + description: 'removing more than max limit users', + feature: 'processor', + module: 'destination', + version: 'v0', + input: { + request: { + body: [ + { + destination: { + ID: '1zia9wKshXt80YksLmUdJnr7IHI', + Name: 'test_marketo', + DestinationDefinition: { + ID: '1iVQvTRMsPPyJzwol0ifH93QTQ6', + Name: 'MARKETO', + DisplayName: 'Marketo', + transformAt: 'processor', + transformAtV1: 'processor', + }, + Config: { + clientId: 'marketo_client_id_success', + clientSecret: 'marketo_client_secret_success', + accountId: 'marketo_acct_id_success', + staticListId: 1234, + }, + Enabled: true, + Transformations: [], + IsProcessorEnabled: true, + }, + message: { + userId: 'user 1', + anonymousId: 'anon-id-new', + event: 'event1', + type: 'audiencelist', + properties: { + listData: { + remove: [ + { id: 0 }, + { id: 1 }, + { id: 2 }, + { id: 3 }, + { id: 4 }, + { id: 5 }, + { id: 6 }, + { id: 7 }, + { id: 8 }, + { id: 9 }, + { id: 10 }, + { id: 11 }, + { id: 12 }, + { id: 13 }, + { id: 14 }, + { id: 15 }, + { id: 16 }, + { id: 17 }, + { id: 18 }, + { id: 19 }, + { id: 20 }, + { id: 21 }, + { id: 22 }, + { id: 23 }, + { id: 24 }, + { id: 25 }, + { id: 26 }, + { id: 27 }, + { id: 28 }, + { id: 29 }, + { id: 30 }, + { id: 31 }, + { id: 32 }, + { id: 33 }, + { id: 34 }, + { id: 35 }, + { id: 36 }, + { id: 37 }, + { id: 38 }, + { id: 39 }, + { id: 40 }, + { id: 41 }, + { id: 42 }, + { id: 43 }, + { id: 44 }, + { id: 45 }, + { id: 46 }, + { id: 47 }, + { id: 48 }, + { id: 49 }, + { id: 50 }, + { id: 51 }, + { id: 52 }, + { id: 53 }, + { id: 54 }, + { id: 55 }, + { id: 56 }, + { id: 57 }, + { id: 58 }, + { id: 59 }, + { id: 60 }, + { id: 61 }, + { id: 62 }, + { id: 63 }, + { id: 64 }, + { id: 65 }, + { id: 66 }, + { id: 67 }, + { id: 68 }, + { id: 69 }, + { id: 70 }, + { id: 71 }, + { id: 72 }, + { id: 73 }, + { id: 74 }, + { id: 75 }, + { id: 76 }, + { id: 77 }, + { id: 78 }, + { id: 79 }, + { id: 80 }, + { id: 81 }, + { id: 82 }, + { id: 83 }, + { id: 84 }, + { id: 85 }, + { id: 86 }, + { id: 87 }, + { id: 88 }, + { id: 89 }, + { id: 90 }, + { id: 91 }, + { id: 92 }, + { id: 93 }, + { id: 94 }, + { id: 95 }, + { id: 96 }, + { id: 97 }, + { id: 98 }, + { id: 99 }, + { id: 100 }, + { id: 101 }, + { id: 102 }, + { id: 103 }, + { id: 104 }, + { id: 105 }, + { id: 106 }, + { id: 107 }, + { id: 108 }, + { id: 109 }, + { id: 110 }, + { id: 111 }, + { id: 112 }, + { id: 113 }, + { id: 114 }, + { id: 115 }, + { id: 116 }, + { id: 117 }, + { id: 118 }, + { id: 119 }, + { id: 120 }, + { id: 121 }, + { id: 122 }, + { id: 123 }, + { id: 124 }, + { id: 125 }, + { id: 126 }, + { id: 127 }, + { id: 128 }, + { id: 129 }, + { id: 130 }, + { id: 131 }, + { id: 132 }, + { id: 133 }, + { id: 134 }, + { id: 135 }, + { id: 136 }, + { id: 137 }, + { id: 138 }, + { id: 139 }, + { id: 140 }, + { id: 141 }, + { id: 142 }, + { id: 143 }, + { id: 144 }, + { id: 145 }, + { id: 146 }, + { id: 147 }, + { id: 148 }, + { id: 149 }, + { id: 150 }, + { id: 151 }, + { id: 152 }, + { id: 153 }, + { id: 154 }, + { id: 155 }, + { id: 156 }, + { id: 157 }, + { id: 158 }, + { id: 159 }, + { id: 160 }, + { id: 161 }, + { id: 162 }, + { id: 163 }, + { id: 164 }, + { id: 165 }, + { id: 166 }, + { id: 167 }, + { id: 168 }, + { id: 169 }, + { id: 170 }, + { id: 171 }, + { id: 172 }, + { id: 173 }, + { id: 174 }, + { id: 175 }, + { id: 176 }, + { id: 177 }, + { id: 178 }, + { id: 179 }, + { id: 180 }, + { id: 181 }, + { id: 182 }, + { id: 183 }, + { id: 184 }, + { id: 185 }, + { id: 186 }, + { id: 187 }, + { id: 188 }, + { id: 189 }, + { id: 190 }, + { id: 191 }, + { id: 192 }, + { id: 193 }, + { id: 194 }, + { id: 195 }, + { id: 196 }, + { id: 197 }, + { id: 198 }, + { id: 199 }, + { id: 200 }, + { id: 201 }, + { id: 202 }, + { id: 203 }, + { id: 204 }, + { id: 205 }, + { id: 206 }, + { id: 207 }, + { id: 208 }, + { id: 209 }, + { id: 210 }, + { id: 211 }, + { id: 212 }, + { id: 213 }, + { id: 214 }, + { id: 215 }, + { id: 216 }, + { id: 217 }, + { id: 218 }, + { id: 219 }, + { id: 220 }, + { id: 221 }, + { id: 222 }, + { id: 223 }, + { id: 224 }, + { id: 225 }, + { id: 226 }, + { id: 227 }, + { id: 228 }, + { id: 229 }, + { id: 230 }, + { id: 231 }, + { id: 232 }, + { id: 233 }, + { id: 234 }, + { id: 235 }, + { id: 236 }, + { id: 237 }, + { id: 238 }, + { id: 239 }, + { id: 240 }, + { id: 241 }, + { id: 242 }, + { id: 243 }, + { id: 244 }, + { id: 245 }, + { id: 246 }, + { id: 247 }, + { id: 248 }, + { id: 249 }, + { id: 250 }, + { id: 251 }, + { id: 252 }, + { id: 253 }, + { id: 254 }, + { id: 255 }, + { id: 256 }, + { id: 257 }, + { id: 258 }, + { id: 259 }, + { id: 260 }, + { id: 261 }, + { id: 262 }, + { id: 263 }, + { id: 264 }, + { id: 265 }, + { id: 266 }, + { id: 267 }, + { id: 268 }, + { id: 269 }, + { id: 270 }, + { id: 271 }, + { id: 272 }, + { id: 273 }, + { id: 274 }, + { id: 275 }, + { id: 276 }, + { id: 277 }, + { id: 278 }, + { id: 279 }, + { id: 280 }, + { id: 281 }, + { id: 282 }, + { id: 283 }, + { id: 284 }, + { id: 285 }, + { id: 286 }, + { id: 287 }, + { id: 288 }, + { id: 289 }, + { id: 290 }, + { id: 291 }, + { id: 292 }, + { id: 293 }, + { id: 294 }, + { id: 295 }, + { id: 296 }, + { id: 297 }, + { id: 298 }, + { id: 299 }, + { id: 300 }, + { id: 301 }, + { id: 302 }, + { id: 303 }, + { id: 304 }, + { id: 305 }, + { id: 306 }, + { id: 307 }, + { id: 308 }, + { id: 309 }, + { id: 310 }, + { id: 311 }, + { id: 312 }, + { id: 313 }, + { id: 314 }, + { id: 315 }, + { id: 316 }, + { id: 317 }, + { id: 318 }, + { id: 319 }, + { id: 320 }, + { id: 321 }, + { id: 322 }, + { id: 323 }, + { id: 324 }, + { id: 325 }, + { id: 326 }, + { id: 327 }, + { id: 328 }, + { id: 329 }, + { id: 330 }, + { id: 331 }, + { id: 332 }, + { id: 333 }, + { id: 334 }, + { id: 335 }, + { id: 336 }, + { id: 337 }, + { id: 338 }, + { id: 339 }, + { id: 340 }, + { id: 341 }, + { id: 342 }, + { id: 343 }, + { id: 344 }, + { id: 345 }, + { id: 346 }, + { id: 347 }, + { id: 348 }, + { id: 349 }, + { id: 350 }, + ], + }, + enablePartialFailure: true, + }, + context: { ip: '14.5.67.21', library: { name: 'http' } }, + timestamp: '2020-02-02T00:23:09.544Z', + }, + }, + ], + method: 'POST', + }, + pathSuffix: '', + }, + output: { + response: { + status: 200, + body: [ + { + output: { + version: '1', + type: 'REST', + method: 'DELETE', + endpoint: + 'https://marketo_acct_id_success.mktorest.com/rest/v1/lists/1234/leads.json?id=0&id=1&id=2&id=3&id=4&id=5&id=6&id=7&id=8&id=9&id=10&id=11&id=12&id=13&id=14&id=15&id=16&id=17&id=18&id=19&id=20&id=21&id=22&id=23&id=24&id=25&id=26&id=27&id=28&id=29&id=30&id=31&id=32&id=33&id=34&id=35&id=36&id=37&id=38&id=39&id=40&id=41&id=42&id=43&id=44&id=45&id=46&id=47&id=48&id=49&id=50&id=51&id=52&id=53&id=54&id=55&id=56&id=57&id=58&id=59&id=60&id=61&id=62&id=63&id=64&id=65&id=66&id=67&id=68&id=69&id=70&id=71&id=72&id=73&id=74&id=75&id=76&id=77&id=78&id=79&id=80&id=81&id=82&id=83&id=84&id=85&id=86&id=87&id=88&id=89&id=90&id=91&id=92&id=93&id=94&id=95&id=96&id=97&id=98&id=99&id=100&id=101&id=102&id=103&id=104&id=105&id=106&id=107&id=108&id=109&id=110&id=111&id=112&id=113&id=114&id=115&id=116&id=117&id=118&id=119&id=120&id=121&id=122&id=123&id=124&id=125&id=126&id=127&id=128&id=129&id=130&id=131&id=132&id=133&id=134&id=135&id=136&id=137&id=138&id=139&id=140&id=141&id=142&id=143&id=144&id=145&id=146&id=147&id=148&id=149&id=150&id=151&id=152&id=153&id=154&id=155&id=156&id=157&id=158&id=159&id=160&id=161&id=162&id=163&id=164&id=165&id=166&id=167&id=168&id=169&id=170&id=171&id=172&id=173&id=174&id=175&id=176&id=177&id=178&id=179&id=180&id=181&id=182&id=183&id=184&id=185&id=186&id=187&id=188&id=189&id=190&id=191&id=192&id=193&id=194&id=195&id=196&id=197&id=198&id=199&id=200&id=201&id=202&id=203&id=204&id=205&id=206&id=207&id=208&id=209&id=210&id=211&id=212&id=213&id=214&id=215&id=216&id=217&id=218&id=219&id=220&id=221&id=222&id=223&id=224&id=225&id=226&id=227&id=228&id=229&id=230&id=231&id=232&id=233&id=234&id=235&id=236&id=237&id=238&id=239&id=240&id=241&id=242&id=243&id=244&id=245&id=246&id=247&id=248&id=249&id=250&id=251&id=252&id=253&id=254&id=255&id=256&id=257&id=258&id=259&id=260&id=261&id=262&id=263&id=264&id=265&id=266&id=267&id=268&id=269&id=270&id=271&id=272&id=273&id=274&id=275&id=276&id=277&id=278&id=279&id=280&id=281&id=282&id=283&id=284&id=285&id=286&id=287&id=288&id=289&id=290&id=291&id=292&id=293&id=294&id=295&id=296&id=297&id=298&id=299', + headers: { + Authorization: 'Bearer access_token_success', + 'Content-Type': 'application/json', + }, + params: {}, + body: { JSON: {}, JSON_ARRAY: {}, XML: {}, FORM: {} }, + files: {}, + userId: '', + }, + statusCode: 200, + }, + { + output: { + version: '1', + type: 'REST', + method: 'DELETE', + endpoint: + 'https://marketo_acct_id_success.mktorest.com/rest/v1/lists/1234/leads.json?id=300&id=301&id=302&id=303&id=304&id=305&id=306&id=307&id=308&id=309&id=310&id=311&id=312&id=313&id=314&id=315&id=316&id=317&id=318&id=319&id=320&id=321&id=322&id=323&id=324&id=325&id=326&id=327&id=328&id=329&id=330&id=331&id=332&id=333&id=334&id=335&id=336&id=337&id=338&id=339&id=340&id=341&id=342&id=343&id=344&id=345&id=346&id=347&id=348&id=349&id=350', + headers: { + Authorization: 'Bearer access_token_success', + 'Content-Type': 'application/json', + }, + params: {}, + body: { JSON: {}, JSON_ARRAY: {}, XML: {}, FORM: {} }, + files: {}, + userId: '', + }, + statusCode: 200, + }, + ], + }, + }, + }, + { + name: 'marketo_static_list', + description: 'unsupported message Type', + feature: 'processor', + module: 'destination', + version: 'v0', + input: { + request: { + body: [ + { + destination: { + ID: '1zia9wKshXt80YksLmUdJnr7IHI', + Name: 'test_marketo', + DestinationDefinition: { + ID: '1iVQvTRMsPPyJzwol0ifH93QTQ6', + Name: 'MARKETO', + DisplayName: 'Marketo', + transformAt: 'processor', + transformAtV1: 'processor', + }, + Config: { + clientId: 'marketo_client_id_success', + clientSecret: 'marketo_client_secret_success', + accountId: 'marketo_acct_id_success', + staticListId: 1234, + }, + Enabled: true, + Transformations: [], + IsProcessorEnabled: true, + }, + message: { + userId: 'user 1', + anonymousId: 'anon-id-new', + event: 'event1', + type: 'track', + properties: { listData: { remove: [1] }, enablePartialFailure: true }, + context: { ip: '14.5.67.21', library: { name: 'http' } }, + timestamp: '2020-02-02T00:23:09.544Z', + }, + }, + ], + method: 'POST', + }, + pathSuffix: '', + }, + output: { + response: { + status: 200, + body: [ + { + error: 'Event type track is not supported', + statTags: { + destType: 'MARKETO_STATIC_LIST', + errorCategory: 'dataValidation', + errorType: 'instrumentation', + feature: 'processor', + implementation: 'native', + module: 'destination', + }, + statusCode: 400, + }, + ], + }, + }, + }, + { + name: 'marketo_static_list', + description: 'Invalid leadIds format ', + feature: 'processor', + module: 'destination', + version: 'v0', + input: { + request: { + body: [ + { + destination: { + ID: '1zia9wKshXt80YksLmUdJnr7IHI', + Name: 'test_marketo', + DestinationDefinition: { + ID: '1iVQvTRMsPPyJzwol0ifH93QTQ6', + Name: 'MARKETO', + DisplayName: 'Marketo', + transformAt: 'processor', + transformAtV1: 'processor', + }, + Config: { + clientId: 'marketo_client_id_success', + clientSecret: 'marketo_client_secret_success', + accountId: 'marketo_acct_id_success', + staticListId: 1234, + }, + Enabled: true, + Transformations: [], + IsProcessorEnabled: true, + }, + message: { + userId: 'user 1', + anonymousId: 'anon-id-new', + event: 'event1', + type: 'audiencelist', + properties: { listData: { remove: 1 }, enablePartialFailure: true }, + context: { ip: '14.5.67.21', library: { name: 'http' } }, + timestamp: '2020-02-02T00:23:09.544Z', + }, + }, + ], + method: 'POST', + }, + pathSuffix: '', + }, + output: { + response: { + status: 200, + body: [ + { + error: 'Invalid leadIds format or no leadIds found neither to add nor to remove', + statTags: { + destType: 'MARKETO_STATIC_LIST', + errorCategory: 'dataValidation', + errorType: 'instrumentation', + feature: 'processor', + implementation: 'native', + module: 'destination', + }, + statusCode: 400, + }, + ], + }, + }, + }, + { + name: 'marketo_static_list', + description: 'Only adding with remove not an array', + feature: 'processor', + module: 'destination', + version: 'v0', + input: { + request: { + body: [ + { + destination: { + ID: '1zia9wKshXt80YksLmUdJnr7IHI', + Name: 'test_marketo', + DestinationDefinition: { + ID: '1iVQvTRMsPPyJzwol0ifH93QTQ6', + Name: 'MARKETO', + DisplayName: 'Marketo', + transformAt: 'processor', + transformAtV1: 'processor', + }, + Config: { + clientId: 'marketo_client_id_success', + clientSecret: 'marketo_client_secret_success', + accountId: 'marketo_acct_id_success', + staticListId: 1234, + }, + Enabled: true, + Transformations: [], + IsProcessorEnabled: true, + }, + message: { + userId: 'user 1', + anonymousId: 'anon-id-new', + event: 'event1', + type: 'audiencelist', + properties: { listData: { add: [{ id: 1 }], remove: 2 }, enablePartialFailure: true }, + context: { ip: '14.5.67.21', library: { name: 'http' } }, + timestamp: '2020-02-02T00:23:09.544Z', + }, + }, + ], + method: 'POST', + }, + pathSuffix: '', + }, + output: { + response: { + status: 200, + body: [ + { + output: { + version: '1', + type: 'REST', + method: 'POST', + endpoint: + 'https://marketo_acct_id_success.mktorest.com/rest/v1/lists/1234/leads.json?id=1', + headers: { + Authorization: 'Bearer access_token_success', + 'Content-Type': 'application/json', + }, + params: {}, + body: { JSON: {}, JSON_ARRAY: {}, XML: {}, FORM: {} }, + files: {}, + userId: '', + }, + statusCode: 200, + }, + ], + }, + }, + }, +]; diff --git a/test/integrations/destinations/marketo_static_list/router/data.ts b/test/integrations/destinations/marketo_static_list/router/data.ts new file mode 100644 index 0000000000..23b2ea8ea3 --- /dev/null +++ b/test/integrations/destinations/marketo_static_list/router/data.ts @@ -0,0 +1,1416 @@ +export const data = [ + { + name: 'marketo_static_list', + description: 'Test 0', + feature: 'router', + module: 'destination', + version: 'v0', + input: { + request: { + body: { + input: [ + { + destination: { + ID: '1zia9wKshXt80YksLmUdJnr7IHI', + Name: 'test_marketo', + DestinationDefinition: { + ID: '1iVQvTRMsPPyJzwol0ifH93QTQ6', + Name: 'MARKETO', + DisplayName: 'Marketo', + transformAt: 'processor', + transformAtV1: 'processor', + }, + Config: { + clientId: 'marketo_client_id_success', + clientSecret: 'marketo_client_secret_success', + accountId: 'marketo_acct_id_success', + staticListId: 1234, + }, + Enabled: true, + Transformations: [], + IsProcessorEnabled: true, + }, + message: { + userId: 'user 1', + anonymousId: 'anon-id-new', + event: 'event1', + type: 'audiencelist', + properties: { + listData: { + add: [ + { + id: 1, + }, + { + id: 2, + }, + { + id: 3, + }, + ], + remove: [ + { + id: 4, + }, + { + id: 5, + }, + { + id: 6, + }, + ], + }, + enablePartialFailure: true, + }, + context: { + ip: '14.5.67.21', + library: { + name: 'http', + }, + }, + timestamp: '2020-02-02T00:23:09.544Z', + }, + metadata: { + jobId: 1, + }, + }, + { + destination: { + ID: '1zia9wKshXt80YksLmUdJnr7IHI', + Name: 'test_marketo', + DestinationDefinition: { + ID: '1iVQvTRMsPPyJzwol0ifH93QTQ6', + Name: 'MARKETO', + DisplayName: 'Marketo', + transformAt: 'processor', + transformAtV1: 'processor', + }, + Config: { + clientId: 'marketo_client_id_success', + clientSecret: 'marketo_client_secret_success', + accountId: 'marketo_acct_id_success', + staticListId: 1234, + }, + Enabled: true, + Transformations: [], + IsProcessorEnabled: true, + }, + message: { + userId: 'user 1', + anonymousId: 'anon-id-new', + event: 'event1', + type: 'audiencelist', + properties: { + listData: { + add: [ + { + id: 0, + }, + { + id: 1, + }, + { + id: 2, + }, + { + id: 3, + }, + { + id: 4, + }, + { + id: 5, + }, + { + id: 6, + }, + { + id: 7, + }, + { + id: 8, + }, + { + id: 9, + }, + { + id: 10, + }, + { + id: 11, + }, + { + id: 12, + }, + { + id: 13, + }, + { + id: 14, + }, + { + id: 15, + }, + { + id: 16, + }, + { + id: 17, + }, + { + id: 18, + }, + { + id: 19, + }, + { + id: 20, + }, + { + id: 21, + }, + { + id: 22, + }, + { + id: 23, + }, + { + id: 24, + }, + { + id: 25, + }, + { + id: 26, + }, + { + id: 27, + }, + { + id: 28, + }, + { + id: 29, + }, + { + id: 30, + }, + { + id: 31, + }, + { + id: 32, + }, + { + id: 33, + }, + { + id: 34, + }, + { + id: 35, + }, + { + id: 36, + }, + { + id: 37, + }, + { + id: 38, + }, + { + id: 39, + }, + { + id: 40, + }, + { + id: 41, + }, + { + id: 42, + }, + { + id: 43, + }, + { + id: 44, + }, + { + id: 45, + }, + { + id: 46, + }, + { + id: 47, + }, + { + id: 48, + }, + { + id: 49, + }, + { + id: 50, + }, + { + id: 51, + }, + { + id: 52, + }, + { + id: 53, + }, + { + id: 54, + }, + { + id: 55, + }, + { + id: 56, + }, + { + id: 57, + }, + { + id: 58, + }, + { + id: 59, + }, + { + id: 60, + }, + { + id: 61, + }, + { + id: 62, + }, + { + id: 63, + }, + { + id: 64, + }, + { + id: 65, + }, + { + id: 66, + }, + { + id: 67, + }, + { + id: 68, + }, + { + id: 69, + }, + { + id: 70, + }, + { + id: 71, + }, + { + id: 72, + }, + { + id: 73, + }, + { + id: 74, + }, + { + id: 75, + }, + { + id: 76, + }, + { + id: 77, + }, + { + id: 78, + }, + { + id: 79, + }, + { + id: 80, + }, + { + id: 81, + }, + { + id: 82, + }, + { + id: 83, + }, + { + id: 84, + }, + { + id: 85, + }, + { + id: 86, + }, + { + id: 87, + }, + { + id: 88, + }, + { + id: 89, + }, + { + id: 90, + }, + { + id: 91, + }, + { + id: 92, + }, + { + id: 93, + }, + { + id: 94, + }, + { + id: 95, + }, + { + id: 96, + }, + { + id: 97, + }, + { + id: 98, + }, + { + id: 99, + }, + { + id: 100, + }, + { + id: 101, + }, + { + id: 102, + }, + { + id: 103, + }, + { + id: 104, + }, + { + id: 105, + }, + { + id: 106, + }, + { + id: 107, + }, + { + id: 108, + }, + { + id: 109, + }, + { + id: 110, + }, + { + id: 111, + }, + { + id: 112, + }, + { + id: 113, + }, + { + id: 114, + }, + { + id: 115, + }, + { + id: 116, + }, + { + id: 117, + }, + { + id: 118, + }, + { + id: 119, + }, + { + id: 120, + }, + { + id: 121, + }, + { + id: 122, + }, + { + id: 123, + }, + { + id: 124, + }, + { + id: 125, + }, + { + id: 126, + }, + { + id: 127, + }, + { + id: 128, + }, + { + id: 129, + }, + { + id: 130, + }, + { + id: 131, + }, + { + id: 132, + }, + { + id: 133, + }, + { + id: 134, + }, + { + id: 135, + }, + { + id: 136, + }, + { + id: 137, + }, + { + id: 138, + }, + { + id: 139, + }, + { + id: 140, + }, + { + id: 141, + }, + { + id: 142, + }, + { + id: 143, + }, + { + id: 144, + }, + { + id: 145, + }, + { + id: 146, + }, + { + id: 147, + }, + { + id: 148, + }, + { + id: 149, + }, + { + id: 150, + }, + { + id: 151, + }, + { + id: 152, + }, + { + id: 153, + }, + { + id: 154, + }, + { + id: 155, + }, + { + id: 156, + }, + { + id: 157, + }, + { + id: 158, + }, + { + id: 159, + }, + { + id: 160, + }, + { + id: 161, + }, + { + id: 162, + }, + { + id: 163, + }, + { + id: 164, + }, + { + id: 165, + }, + { + id: 166, + }, + { + id: 167, + }, + { + id: 168, + }, + { + id: 169, + }, + { + id: 170, + }, + { + id: 171, + }, + { + id: 172, + }, + { + id: 173, + }, + { + id: 174, + }, + { + id: 175, + }, + { + id: 176, + }, + { + id: 177, + }, + { + id: 178, + }, + { + id: 179, + }, + { + id: 180, + }, + { + id: 181, + }, + { + id: 182, + }, + { + id: 183, + }, + { + id: 184, + }, + { + id: 185, + }, + { + id: 186, + }, + { + id: 187, + }, + { + id: 188, + }, + { + id: 189, + }, + { + id: 190, + }, + { + id: 191, + }, + { + id: 192, + }, + { + id: 193, + }, + { + id: 194, + }, + { + id: 195, + }, + { + id: 196, + }, + { + id: 197, + }, + { + id: 198, + }, + { + id: 199, + }, + { + id: 200, + }, + { + id: 201, + }, + { + id: 202, + }, + { + id: 203, + }, + { + id: 204, + }, + { + id: 205, + }, + { + id: 206, + }, + { + id: 207, + }, + { + id: 208, + }, + { + id: 209, + }, + { + id: 210, + }, + { + id: 211, + }, + { + id: 212, + }, + { + id: 213, + }, + { + id: 214, + }, + { + id: 215, + }, + { + id: 216, + }, + { + id: 217, + }, + { + id: 218, + }, + { + id: 219, + }, + { + id: 220, + }, + { + id: 221, + }, + { + id: 222, + }, + { + id: 223, + }, + { + id: 224, + }, + { + id: 225, + }, + { + id: 226, + }, + { + id: 227, + }, + { + id: 228, + }, + { + id: 229, + }, + { + id: 230, + }, + { + id: 231, + }, + { + id: 232, + }, + { + id: 233, + }, + { + id: 234, + }, + { + id: 235, + }, + { + id: 236, + }, + { + id: 237, + }, + { + id: 238, + }, + { + id: 239, + }, + { + id: 240, + }, + { + id: 241, + }, + { + id: 242, + }, + { + id: 243, + }, + { + id: 244, + }, + { + id: 245, + }, + { + id: 246, + }, + { + id: 247, + }, + { + id: 248, + }, + { + id: 249, + }, + { + id: 250, + }, + { + id: 251, + }, + { + id: 252, + }, + { + id: 253, + }, + { + id: 254, + }, + { + id: 255, + }, + { + id: 256, + }, + { + id: 257, + }, + { + id: 258, + }, + { + id: 259, + }, + { + id: 260, + }, + { + id: 261, + }, + { + id: 262, + }, + { + id: 263, + }, + { + id: 264, + }, + { + id: 265, + }, + { + id: 266, + }, + { + id: 267, + }, + { + id: 268, + }, + { + id: 269, + }, + { + id: 270, + }, + { + id: 271, + }, + { + id: 272, + }, + { + id: 273, + }, + { + id: 274, + }, + { + id: 275, + }, + { + id: 276, + }, + { + id: 277, + }, + { + id: 278, + }, + { + id: 279, + }, + { + id: 280, + }, + { + id: 281, + }, + { + id: 282, + }, + { + id: 283, + }, + { + id: 284, + }, + { + id: 285, + }, + { + id: 286, + }, + { + id: 287, + }, + { + id: 288, + }, + { + id: 289, + }, + { + id: 290, + }, + { + id: 291, + }, + { + id: 292, + }, + { + id: 293, + }, + { + id: 294, + }, + { + id: 295, + }, + { + id: 296, + }, + { + id: 297, + }, + { + id: 298, + }, + { + id: 299, + }, + { + id: 300, + }, + { + id: 301, + }, + { + id: 302, + }, + { + id: 303, + }, + { + id: 304, + }, + { + id: 305, + }, + { + id: 306, + }, + { + id: 307, + }, + { + id: 308, + }, + { + id: 309, + }, + { + id: 310, + }, + { + id: 311, + }, + { + id: 312, + }, + { + id: 313, + }, + { + id: 314, + }, + { + id: 315, + }, + { + id: 316, + }, + { + id: 317, + }, + { + id: 318, + }, + { + id: 319, + }, + { + id: 320, + }, + { + id: 321, + }, + { + id: 322, + }, + { + id: 323, + }, + { + id: 324, + }, + { + id: 325, + }, + { + id: 326, + }, + { + id: 327, + }, + { + id: 328, + }, + { + id: 329, + }, + { + id: 330, + }, + { + id: 331, + }, + { + id: 332, + }, + { + id: 333, + }, + { + id: 334, + }, + { + id: 335, + }, + { + id: 336, + }, + { + id: 337, + }, + { + id: 338, + }, + { + id: 339, + }, + { + id: 340, + }, + { + id: 341, + }, + { + id: 342, + }, + { + id: 343, + }, + { + id: 344, + }, + { + id: 345, + }, + { + id: 346, + }, + { + id: 347, + }, + { + id: 348, + }, + { + id: 349, + }, + { + id: 350, + }, + ], + }, + enablePartialFailure: true, + }, + context: { + ip: '14.5.67.21', + library: { + name: 'http', + }, + }, + timestamp: '2020-02-02T00:23:09.544Z', + }, + metadata: { + jobId: 2, + }, + }, + { + destination: { + ID: '1zia9wKshXt80YksLmUdJnr7IHI', + Name: 'test_marketo', + DestinationDefinition: { + ID: '1iVQvTRMsPPyJzwol0ifH93QTQ6', + Name: 'MARKETO', + DisplayName: 'Marketo', + transformAt: 'processor', + transformAtV1: 'processor', + }, + Config: { + clientId: 'marketo_client_id_success', + clientSecret: 'marketo_client_secret_success', + accountId: 'marketo_acct_id_success', + staticListId: 1234, + }, + Enabled: true, + Transformations: [], + IsProcessorEnabled: true, + }, + message: { + userId: 'user 1', + anonymousId: 'anon-id-new', + event: 'event1', + type: 'track', + properties: { + listData: { + remove: [1], + }, + enablePartialFailure: true, + }, + context: { + ip: '14.5.67.21', + library: { + name: 'http', + }, + }, + timestamp: '2020-02-02T00:23:09.544Z', + }, + metadata: { + jobId: 3, + }, + }, + ], + destType: 'marketo_static_list', + }, + method: 'POST', + }, + }, + output: { + response: { + status: 200, + body: { + output: [ + { + batchedRequest: [ + { + version: '1', + type: 'REST', + method: 'POST', + endpoint: + 'https://marketo_acct_id_success.mktorest.com/rest/v1/lists/1234/leads.json?id=1&id=2&id=3', + headers: { + Authorization: 'Bearer access_token_success', + 'Content-Type': 'application/json', + }, + params: {}, + body: { + JSON: {}, + JSON_ARRAY: {}, + XML: {}, + FORM: {}, + }, + files: {}, + }, + { + version: '1', + type: 'REST', + method: 'DELETE', + endpoint: + 'https://marketo_acct_id_success.mktorest.com/rest/v1/lists/1234/leads.json?id=4&id=5&id=6', + headers: { + Authorization: 'Bearer access_token_success', + 'Content-Type': 'application/json', + }, + params: {}, + body: { + JSON: {}, + JSON_ARRAY: {}, + XML: {}, + FORM: {}, + }, + files: {}, + }, + ], + metadata: [ + { + destInfo: { + authKey: '1zia9wKshXt80YksLmUdJnr7IHI', + }, + jobId: 1, + }, + ], + batched: false, + statusCode: 200, + destination: { + ID: '1zia9wKshXt80YksLmUdJnr7IHI', + Name: 'test_marketo', + DestinationDefinition: { + ID: '1iVQvTRMsPPyJzwol0ifH93QTQ6', + Name: 'MARKETO', + DisplayName: 'Marketo', + transformAt: 'processor', + transformAtV1: 'processor', + }, + Config: { + clientId: 'marketo_client_id_success', + clientSecret: 'marketo_client_secret_success', + accountId: 'marketo_acct_id_success', + staticListId: 1234, + }, + Enabled: true, + Transformations: [], + IsProcessorEnabled: true, + }, + }, + { + batchedRequest: [ + { + version: '1', + type: 'REST', + method: 'POST', + endpoint: + 'https://marketo_acct_id_success.mktorest.com/rest/v1/lists/1234/leads.json?id=0&id=1&id=2&id=3&id=4&id=5&id=6&id=7&id=8&id=9&id=10&id=11&id=12&id=13&id=14&id=15&id=16&id=17&id=18&id=19&id=20&id=21&id=22&id=23&id=24&id=25&id=26&id=27&id=28&id=29&id=30&id=31&id=32&id=33&id=34&id=35&id=36&id=37&id=38&id=39&id=40&id=41&id=42&id=43&id=44&id=45&id=46&id=47&id=48&id=49&id=50&id=51&id=52&id=53&id=54&id=55&id=56&id=57&id=58&id=59&id=60&id=61&id=62&id=63&id=64&id=65&id=66&id=67&id=68&id=69&id=70&id=71&id=72&id=73&id=74&id=75&id=76&id=77&id=78&id=79&id=80&id=81&id=82&id=83&id=84&id=85&id=86&id=87&id=88&id=89&id=90&id=91&id=92&id=93&id=94&id=95&id=96&id=97&id=98&id=99&id=100&id=101&id=102&id=103&id=104&id=105&id=106&id=107&id=108&id=109&id=110&id=111&id=112&id=113&id=114&id=115&id=116&id=117&id=118&id=119&id=120&id=121&id=122&id=123&id=124&id=125&id=126&id=127&id=128&id=129&id=130&id=131&id=132&id=133&id=134&id=135&id=136&id=137&id=138&id=139&id=140&id=141&id=142&id=143&id=144&id=145&id=146&id=147&id=148&id=149&id=150&id=151&id=152&id=153&id=154&id=155&id=156&id=157&id=158&id=159&id=160&id=161&id=162&id=163&id=164&id=165&id=166&id=167&id=168&id=169&id=170&id=171&id=172&id=173&id=174&id=175&id=176&id=177&id=178&id=179&id=180&id=181&id=182&id=183&id=184&id=185&id=186&id=187&id=188&id=189&id=190&id=191&id=192&id=193&id=194&id=195&id=196&id=197&id=198&id=199&id=200&id=201&id=202&id=203&id=204&id=205&id=206&id=207&id=208&id=209&id=210&id=211&id=212&id=213&id=214&id=215&id=216&id=217&id=218&id=219&id=220&id=221&id=222&id=223&id=224&id=225&id=226&id=227&id=228&id=229&id=230&id=231&id=232&id=233&id=234&id=235&id=236&id=237&id=238&id=239&id=240&id=241&id=242&id=243&id=244&id=245&id=246&id=247&id=248&id=249&id=250&id=251&id=252&id=253&id=254&id=255&id=256&id=257&id=258&id=259&id=260&id=261&id=262&id=263&id=264&id=265&id=266&id=267&id=268&id=269&id=270&id=271&id=272&id=273&id=274&id=275&id=276&id=277&id=278&id=279&id=280&id=281&id=282&id=283&id=284&id=285&id=286&id=287&id=288&id=289&id=290&id=291&id=292&id=293&id=294&id=295&id=296&id=297&id=298&id=299', + headers: { + Authorization: 'Bearer access_token_success', + 'Content-Type': 'application/json', + }, + params: {}, + body: { + JSON: {}, + JSON_ARRAY: {}, + XML: {}, + FORM: {}, + }, + files: {}, + }, + { + version: '1', + type: 'REST', + method: 'POST', + endpoint: + 'https://marketo_acct_id_success.mktorest.com/rest/v1/lists/1234/leads.json?id=300&id=301&id=302&id=303&id=304&id=305&id=306&id=307&id=308&id=309&id=310&id=311&id=312&id=313&id=314&id=315&id=316&id=317&id=318&id=319&id=320&id=321&id=322&id=323&id=324&id=325&id=326&id=327&id=328&id=329&id=330&id=331&id=332&id=333&id=334&id=335&id=336&id=337&id=338&id=339&id=340&id=341&id=342&id=343&id=344&id=345&id=346&id=347&id=348&id=349&id=350', + headers: { + Authorization: 'Bearer access_token_success', + 'Content-Type': 'application/json', + }, + params: {}, + body: { + JSON: {}, + JSON_ARRAY: {}, + XML: {}, + FORM: {}, + }, + files: {}, + }, + ], + metadata: [ + { + destInfo: { + authKey: '1zia9wKshXt80YksLmUdJnr7IHI', + }, + jobId: 2, + }, + ], + batched: false, + statusCode: 200, + destination: { + ID: '1zia9wKshXt80YksLmUdJnr7IHI', + Name: 'test_marketo', + DestinationDefinition: { + ID: '1iVQvTRMsPPyJzwol0ifH93QTQ6', + Name: 'MARKETO', + DisplayName: 'Marketo', + transformAt: 'processor', + transformAtV1: 'processor', + }, + Config: { + clientId: 'marketo_client_id_success', + clientSecret: 'marketo_client_secret_success', + accountId: 'marketo_acct_id_success', + staticListId: 1234, + }, + Enabled: true, + Transformations: [], + IsProcessorEnabled: true, + }, + }, + { + metadata: [ + { + destInfo: { + authKey: '1zia9wKshXt80YksLmUdJnr7IHI', + }, + jobId: 3, + }, + ], + destination: { + ID: '1zia9wKshXt80YksLmUdJnr7IHI', + Name: 'test_marketo', + DestinationDefinition: { + ID: '1iVQvTRMsPPyJzwol0ifH93QTQ6', + Name: 'MARKETO', + DisplayName: 'Marketo', + transformAt: 'processor', + transformAtV1: 'processor', + }, + Config: { + clientId: 'marketo_client_id_success', + clientSecret: 'marketo_client_secret_success', + accountId: 'marketo_acct_id_success', + staticListId: 1234, + }, + Enabled: true, + Transformations: [], + IsProcessorEnabled: true, + }, + batched: false, + statusCode: 400, + error: 'Event type track is not supported', + statTags: { + errorCategory: 'dataValidation', + errorType: 'instrumentation', + }, + }, + ], + }, + }, + }, + }, +]; diff --git a/test/integrations/destinations/moengage/processor/data.ts b/test/integrations/destinations/moengage/processor/data.ts new file mode 100644 index 0000000000..50b0361381 --- /dev/null +++ b/test/integrations/destinations/moengage/processor/data.ts @@ -0,0 +1,2780 @@ +export const data = [ + { + name: 'moengage', + description: 'Test 0', + feature: 'processor', + module: 'destination', + version: 'v0', + input: { + request: { + body: [ + { + message: { + anonymousId: '4eb021e9-a2af-4926-ae82-fe996d12f3c5', + channel: 'web', + context: { + timezone: 'Asia/Tokyo', + app: { + build: '1.0.0', + name: 'RudderLabs JavaScript SDK', + namespace: 'com.rudderlabs.javascript', + version: '1.1.6', + }, + library: { name: 'RudderLabs JavaScript SDK', version: '1.1.6' }, + locale: 'en-GB', + os: { name: '', version: '' }, + page: { + path: '/testing/script-test.html', + referrer: '', + search: '', + title: '', + url: 'http://localhost:3243/testing/script-test.html', + }, + screen: { density: 2 }, + traits: { + company: { id: 'abc123' }, + createdAt: 'Thu Mar 24 2016 17:46:45 GMT+0000 (UTC)', + email: 'rudderTest@gmail.com', + name: 'Rudder Test', + plan: 'Enterprise', + }, + userAgent: + 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.80 Safari/537.36', + }, + event: 'Order Completed', + integrations: { All: true }, + messageId: 'a0adfab9-baf7-4e09-a2ce-bbe2844c324a', + originalTimestamp: '2020-10-16T08:10:12.782Z', + properties: { + checkout_id: 'what is checkout id here??', + coupon: 'APPARELSALE', + currency: 'GBP', + order_id: 'transactionId', + category: 'some category', + originalArray: [ + { nested_field: 'nested value', tags: ['tag_1', 'tag_2', 'tag_3'] }, + { nested_field: 'nested value', tags: ['tag_1', 'tag_2', 'tag_3'] }, + { nested_field: 'nested value', tags: ['tag_1', 'tag_2', 'tag_3'] }, + { nested_field: 'nested value', tags: ['tag_1', 'tag_2', 'tag_3'] }, + { nested_field: 'nested value', tags: ['tag_1', 'tag_2', 'tag_3'] }, + { nested_field: 'nested value', tags: ['tag_1', 'tag_2', 'tag_3'] }, + { nested_field: 'nested value', tags: ['tag_1', 'tag_2', 'tag_3'] }, + { nested_field: 'nested value', tags: ['tag_1', 'tag_2', 'tag_3'] }, + { nested_field: 'nested value', tags: ['tag_1', 'tag_2', 'tag_3'] }, + ], + products: [ + { + brand: '', + category: 'Merch', + currency: 'GBP', + image_url: 'https://www.example.com/product/bacon-jam.jpg', + name: 'Food/Drink', + position: 1, + price: 3, + product_id: 'product-bacon-jam', + quantity: 2, + sku: 'sku-1', + typeOfProduct: 'Food', + url: 'https://www.example.com/product/bacon-jam', + value: 6, + variant: 'Extra topped', + }, + { + brand: 'Levis', + category: 'Merch', + currency: 'GBP', + image_url: 'https://www.example.com/product/t-shirt.jpg', + name: 'T-Shirt', + position: 2, + price: 12.99, + product_id: 'product-t-shirt', + quantity: 1, + sku: 'sku-2', + typeOfProduct: 'Shirt', + url: 'https://www.example.com/product/t-shirt', + value: 12.99, + variant: 'White', + }, + { + brand: 'Levis', + category: 'Merch', + coupon: 'APPARELSALE', + currency: 'GBP', + image_url: 'https://www.example.com/product/offer-t-shirt.jpg', + name: 'T-Shirt-on-offer', + position: 1, + price: 12.99, + product_id: 'offer-t-shirt', + quantity: 1, + sku: 'sku-3', + typeOfProduct: 'Shirt', + url: 'https://www.example.com/product/offer-t-shirt', + value: 12.99, + variant: 'Black', + }, + ], + revenue: 31.98, + shipping: 4, + value: 31.98, + }, + receivedAt: '2020-10-16T13:40:12.792+05:30', + request_ip: '[::1]', + sentAt: '2020-10-16T08:10:12.783Z', + timestamp: '2020-10-16T13:40:12.791+05:30', + type: 'track', + userId: 'rudder123', + }, + destination: { + ID: '1iuTZs6eEZVMm6GjRBe6bNShaL3', + Name: 'MoEngage Testing', + DestinationDefinition: { + ID: '1iu4802Tx27kNC4KNYYou6D8jzL', + Name: 'MOENGAGE', + DisplayName: 'MoEngage', + Config: { + destConfig: { defaultConfig: ['apiId', 'apiKey', 'region'] }, + excludeKeys: [], + includeKeys: [], + supportedSourceTypes: [ + 'android', + 'ios', + 'web', + 'unity', + 'amp', + 'cloud', + 'reactnative', + ], + }, + }, + Config: { + apiId: 'W0ZHNMPI2O4KHJ48ZILZACRA', + apiKey: 'dummyApiKey', + eventDelivery: false, + eventDeliveryTS: 1602757086384, + region: 'US', + }, + Enabled: true, + Transformations: [], + IsProcessorEnabled: true, + }, + }, + ], + method: 'POST', + }, + pathSuffix: '', + }, + output: { + response: { + status: 200, + body: [ + { + output: { + version: '1', + type: 'REST', + method: 'POST', + endpoint: 'https://api-01.moengage.com/v1/event/W0ZHNMPI2O4KHJ48ZILZACRA', + headers: { + 'Content-Type': 'application/json', + 'MOE-APPKEY': 'W0ZHNMPI2O4KHJ48ZILZACRA', + Authorization: 'Basic VzBaSE5NUEkyTzRLSEo0OFpJTFpBQ1JBOmR1bW15QXBpS2V5', + }, + params: {}, + body: { + JSON: { + customer_id: 'rudder123', + type: 'event', + actions: [ + { + action: 'Order Completed', + attributes: { + category: 'some category', + 'originalArray[0].nested_field': 'nested value', + 'originalArray[0].tags[0]': 'tag_1', + 'originalArray[0].tags[1]': 'tag_2', + 'originalArray[0].tags[2]': 'tag_3', + 'originalArray[1].nested_field': 'nested value', + 'originalArray[1].tags[0]': 'tag_1', + 'originalArray[1].tags[1]': 'tag_2', + 'originalArray[1].tags[2]': 'tag_3', + 'originalArray[2].nested_field': 'nested value', + 'originalArray[2].tags[0]': 'tag_1', + 'originalArray[2].tags[1]': 'tag_2', + 'originalArray[2].tags[2]': 'tag_3', + 'originalArray[3].nested_field': 'nested value', + 'originalArray[3].tags[0]': 'tag_1', + 'originalArray[3].tags[1]': 'tag_2', + 'originalArray[3].tags[2]': 'tag_3', + 'originalArray[4].nested_field': 'nested value', + 'originalArray[4].tags[0]': 'tag_1', + 'originalArray[4].tags[1]': 'tag_2', + 'originalArray[4].tags[2]': 'tag_3', + 'originalArray[5].nested_field': 'nested value', + 'originalArray[5].tags[0]': 'tag_1', + 'originalArray[5].tags[1]': 'tag_2', + 'originalArray[5].tags[2]': 'tag_3', + 'originalArray[6].nested_field': 'nested value', + 'originalArray[6].tags[0]': 'tag_1', + 'originalArray[6].tags[1]': 'tag_2', + 'originalArray[6].tags[2]': 'tag_3', + 'originalArray[7].nested_field': 'nested value', + 'originalArray[7].tags[0]': 'tag_1', + 'originalArray[7].tags[1]': 'tag_2', + 'originalArray[7].tags[2]': 'tag_3', + 'originalArray[8].nested_field': 'nested value', + 'originalArray[8].tags[0]': 'tag_1', + 'originalArray[8].tags[1]': 'tag_2', + 'originalArray[8].tags[2]': 'tag_3', + checkout_id: 'what is checkout id here??', + coupon: 'APPARELSALE', + currency: 'GBP', + order_id: 'transactionId', + 'products[0].brand': '', + 'products[0].category': 'Merch', + 'products[0].currency': 'GBP', + 'products[0].image_url': 'https://www.example.com/product/bacon-jam.jpg', + 'products[0].name': 'Food/Drink', + 'products[0].position': 1, + 'products[0].price': 3, + 'products[0].product_id': 'product-bacon-jam', + 'products[0].quantity': 2, + 'products[0].sku': 'sku-1', + 'products[0].typeOfProduct': 'Food', + 'products[0].url': 'https://www.example.com/product/bacon-jam', + 'products[0].value': 6, + 'products[0].variant': 'Extra topped', + 'products[1].brand': 'Levis', + 'products[1].category': 'Merch', + 'products[1].currency': 'GBP', + 'products[1].image_url': 'https://www.example.com/product/t-shirt.jpg', + 'products[1].name': 'T-Shirt', + 'products[1].position': 2, + 'products[1].price': 12.99, + 'products[1].product_id': 'product-t-shirt', + 'products[1].quantity': 1, + 'products[1].sku': 'sku-2', + 'products[1].typeOfProduct': 'Shirt', + 'products[1].url': 'https://www.example.com/product/t-shirt', + 'products[1].value': 12.99, + 'products[1].variant': 'White', + 'products[2].brand': 'Levis', + 'products[2].category': 'Merch', + 'products[2].coupon': 'APPARELSALE', + 'products[2].currency': 'GBP', + 'products[2].image_url': + 'https://www.example.com/product/offer-t-shirt.jpg', + 'products[2].name': 'T-Shirt-on-offer', + 'products[2].position': 1, + 'products[2].price': 12.99, + 'products[2].product_id': 'offer-t-shirt', + 'products[2].quantity': 1, + 'products[2].sku': 'sku-3', + 'products[2].typeOfProduct': 'Shirt', + 'products[2].url': 'https://www.example.com/product/offer-t-shirt', + 'products[2].value': 12.99, + 'products[2].variant': 'Black', + revenue: 31.98, + shipping: 4, + value: 31.98, + }, + app_version: '1.1.6', + current_time: '2020-10-16T13:40:12.791+05:30', + user_timezone_offset: 32400, + platform: 'web', + }, + ], + }, + XML: {}, + JSON_ARRAY: {}, + FORM: {}, + }, + files: {}, + userId: '4eb021e9-a2af-4926-ae82-fe996d12f3c5', + }, + statusCode: 200, + }, + ], + }, + }, + }, + { + name: 'moengage', + description: 'Test 1', + feature: 'processor', + module: 'destination', + version: 'v0', + input: { + request: { + body: [ + { + message: { + anonymousId: '4eb021e9-a2af-4926-ae82-fe996d12f3c5', + channel: 'web', + context: { + app: { + build: '1.0.0', + name: 'RudderLabs JavaScript SDK', + namespace: 'com.rudderlabs.javascript', + version: '1.1.6', + }, + library: { name: 'RudderLabs JavaScript SDK', version: '1.1.6' }, + locale: 'en-GB', + os: { name: '', version: '' }, + page: { + path: '/testing/script-test.html', + referrer: '', + search: '', + title: '', + url: 'http://localhost:3243/testing/script-test.html', + }, + screen: { density: 2 }, + traits: { + company: { id: 'abc123' }, + createdAt: 'Thu Mar 24 2016 17:46:45 GMT+0000 (UTC)', + email: 'rudderTest@gmail.com', + name: 'Rudder Test', + plan: 'Enterprise', + }, + userAgent: + 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.80 Safari/537.36', + }, + integrations: { All: true }, + messageId: 'e108eb05-f6cd-4624-ba8c-568f2e2b3f92', + originalTimestamp: '2020-10-16T08:26:14.938Z', + receivedAt: '2020-10-16T13:56:14.945+05:30', + request_ip: '[::1]', + sentAt: '2020-10-16T08:26:14.939Z', + timestamp: '2020-10-16T13:56:14.944+05:30', + type: 'identify', + userId: 'rudder123', + }, + destination: { + ID: '1iuTZs6eEZVMm6GjRBe6bNShaL3', + Name: 'MoEngage Testing', + DestinationDefinition: { + ID: '1iu4802Tx27kNC4KNYYou6D8jzL', + Name: 'MOENGAGE', + DisplayName: 'MoEngage', + Config: { + destConfig: { defaultConfig: ['apiId', 'apiKey', 'region'] }, + excludeKeys: [], + includeKeys: [], + supportedSourceTypes: [ + 'android', + 'ios', + 'web', + 'unity', + 'amp', + 'cloud', + 'reactnative', + ], + }, + }, + Config: { + apiId: 'W0ZHNMPI2O4KHJ48ZILZACRA', + apiKey: 'dummyApiKey', + eventDelivery: false, + eventDeliveryTS: 1602757086384, + region: 'US', + }, + Enabled: true, + Transformations: [], + IsProcessorEnabled: true, + }, + }, + ], + method: 'POST', + }, + pathSuffix: '', + }, + output: { + response: { + status: 200, + body: [ + { + output: { + body: { + XML: {}, + JSON_ARRAY: {}, + FORM: {}, + JSON: { + type: 'customer', + attributes: { + name: 'Rudder Test', + plan: 'Enterprise', + email: 'rudderTest@gmail.com', + createdAt: 'Thu Mar 24 2016 17:46:45 GMT+0000 (UTC)', + 'company.id': 'abc123', + created_time: 'Thu Mar 24 2016 17:46:45 GMT+0000 (UTC)', + }, + customer_id: 'rudder123', + }, + }, + type: 'REST', + files: {}, + method: 'POST', + params: {}, + userId: '4eb021e9-a2af-4926-ae82-fe996d12f3c5', + headers: { + 'MOE-APPKEY': 'W0ZHNMPI2O4KHJ48ZILZACRA', + 'Content-Type': 'application/json', + Authorization: 'Basic VzBaSE5NUEkyTzRLSEo0OFpJTFpBQ1JBOmR1bW15QXBpS2V5', + }, + version: '1', + endpoint: 'https://api-01.moengage.com/v1/customer/W0ZHNMPI2O4KHJ48ZILZACRA', + }, + statusCode: 200, + }, + ], + }, + }, + }, + { + name: 'moengage', + description: 'Test 2', + feature: 'processor', + module: 'destination', + version: 'v0', + input: { + request: { + body: [ + { + message: { + anonymousId: '4eb021e9-a2af-4926-ae82-fe996d12f3c5', + channel: 'web', + context: { + app: { + build: '1.0.0', + name: 'RudderLabs JavaScript SDK', + namespace: 'com.rudderlabs.javascript', + version: '1.1.6', + }, + library: { name: 'RudderLabs JavaScript SDK', version: '1.1.6' }, + locale: 'en-GB', + os: { name: '', version: '' }, + page: { + path: '/testing/script-test.html', + referrer: '', + search: '', + title: '', + url: 'http://localhost:3243/testing/script-test.html', + }, + screen: { density: 2 }, + userAgent: + 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.80 Safari/537.36', + }, + integrations: { All: true }, + traits: { + CID: '4eb021e9-a2af-4926-ae82-fe996d12f3c5', + RC_DATE: '2021-03-22T12:36:34Z', + RC_NO_OF_SKUS: 1, + RC_PN_SKU_LIST: '9317', + }, + messageId: 'e108eb05-f6cd-4624-ba8c-568f2e2b3f92', + originalTimestamp: '2020-10-16T08:26:14.938Z', + receivedAt: '2020-10-16T13:56:14.945+05:30', + request_ip: '[::1]', + sentAt: '2020-10-16T08:26:14.939Z', + timestamp: '2020-10-16T13:56:14.944+05:30', + type: 'identify', + }, + destination: { + ID: '1iuTZs6eEZVMm6GjRBe6bNShaL3', + Name: 'MoEngage Testing', + DestinationDefinition: { + ID: '1iu4802Tx27kNC4KNYYou6D8jzL', + Name: 'MOENGAGE', + DisplayName: 'MoEngage', + Config: { + destConfig: { defaultConfig: ['apiId', 'apiKey', 'region'] }, + excludeKeys: [], + includeKeys: [], + supportedSourceTypes: [ + 'android', + 'ios', + 'web', + 'unity', + 'amp', + 'cloud', + 'reactnative', + ], + }, + }, + Config: { + apiId: 'W0ZHNMPI2O4KHJ48ZILZACRA', + apiKey: 'dummyApiKey', + eventDelivery: false, + eventDeliveryTS: 1602757086384, + region: 'US', + }, + Enabled: true, + Transformations: [], + IsProcessorEnabled: true, + }, + }, + ], + method: 'POST', + }, + pathSuffix: '', + }, + output: { + response: { + status: 200, + body: [ + { + output: { + body: { + XML: {}, + JSON_ARRAY: {}, + FORM: {}, + JSON: { + type: 'customer', + attributes: { + CID: '4eb021e9-a2af-4926-ae82-fe996d12f3c5', + RC_DATE: '2021-03-22T12:36:34Z', + RC_NO_OF_SKUS: 1, + RC_PN_SKU_LIST: '9317', + }, + customer_id: '4eb021e9-a2af-4926-ae82-fe996d12f3c5', + }, + }, + type: 'REST', + files: {}, + method: 'POST', + params: {}, + userId: '4eb021e9-a2af-4926-ae82-fe996d12f3c5', + headers: { + 'MOE-APPKEY': 'W0ZHNMPI2O4KHJ48ZILZACRA', + 'Content-Type': 'application/json', + Authorization: 'Basic VzBaSE5NUEkyTzRLSEo0OFpJTFpBQ1JBOmR1bW15QXBpS2V5', + }, + version: '1', + endpoint: 'https://api-01.moengage.com/v1/customer/W0ZHNMPI2O4KHJ48ZILZACRA', + }, + statusCode: 200, + }, + ], + }, + }, + }, + { + name: 'moengage', + description: 'Test 3', + feature: 'processor', + module: 'destination', + version: 'v0', + input: { + request: { + body: [ + { + message: { + anonymousId: '4eb021e9-a2af-4926-ae82-fe996d12f3c5', + channel: 'web', + context: { + app: { + build: '1.0.0', + name: 'RudderLabs JavaScript SDK', + namespace: 'com.rudderlabs.javascript', + version: '1.1.6', + }, + device: { + id: '7e32188a4dab669f', + manufacturer: 'Google', + model: 'Android SDK built for x86', + name: 'generic_x86', + token: 'desuhere', + type: 'android', + }, + library: { name: 'RudderLabs JavaScript SDK', version: '1.1.6' }, + locale: 'en-GB', + os: { name: '', version: '' }, + page: { + path: '/testing/script-test.html', + referrer: '', + search: '', + title: '', + url: 'http://localhost:3243/testing/script-test.html', + }, + screen: { density: 2 }, + traits: { + company: { id: 'abc123' }, + createdAt: 'Thu Mar 24 2016 17:46:45 GMT+0000 (UTC)', + email: 'rudderTest@gmail.com', + name: 'Rudder Test', + plan: 'Enterprise', + }, + userAgent: + 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.80 Safari/537.36', + }, + integrations: { All: true }, + messageId: '531e3507-1ef5-4a06-b83c-cb521ff34f0c', + originalTimestamp: '2020-10-16T08:53:29.386Z', + receivedAt: '2020-10-16T14:23:29.402+05:30', + request_ip: '[::1]', + sentAt: '2020-10-16T08:53:29.387Z', + timestamp: '2020-10-16T14:23:29.401+05:30', + type: 'identify', + userId: 'rudder123', + }, + destination: { + ID: '1iuTZs6eEZVMm6GjRBe6bNShaL3', + Name: 'MoEngage Testing', + DestinationDefinition: { + ID: '1iu4802Tx27kNC4KNYYou6D8jzL', + Name: 'MOENGAGE', + DisplayName: 'MoEngage', + Config: { + destConfig: { defaultConfig: ['apiId', 'apiKey', 'region'] }, + excludeKeys: [], + includeKeys: [], + supportedSourceTypes: [ + 'android', + 'ios', + 'web', + 'unity', + 'amp', + 'cloud', + 'reactnative', + ], + }, + }, + Config: { + apiId: 'W0ZHNMPI2O4KHJ48ZILZACRA', + apiKey: 'dummyApiKey', + eventDelivery: false, + eventDeliveryTS: 1602757086384, + region: 'US', + }, + Enabled: true, + Transformations: [], + IsProcessorEnabled: true, + }, + }, + ], + method: 'POST', + }, + pathSuffix: '', + }, + output: { + response: { + status: 200, + body: [ + { + output: { + body: { + XML: {}, + JSON_ARRAY: {}, + FORM: {}, + JSON: { + type: 'customer', + attributes: { + name: 'Rudder Test', + plan: 'Enterprise', + email: 'rudderTest@gmail.com', + createdAt: 'Thu Mar 24 2016 17:46:45 GMT+0000 (UTC)', + 'company.id': 'abc123', + created_time: 'Thu Mar 24 2016 17:46:45 GMT+0000 (UTC)', + }, + customer_id: 'rudder123', + }, + }, + type: 'REST', + files: {}, + method: 'POST', + params: {}, + userId: '4eb021e9-a2af-4926-ae82-fe996d12f3c5', + headers: { + 'MOE-APPKEY': 'W0ZHNMPI2O4KHJ48ZILZACRA', + 'Content-Type': 'application/json', + Authorization: 'Basic VzBaSE5NUEkyTzRLSEo0OFpJTFpBQ1JBOmR1bW15QXBpS2V5', + }, + version: '1', + endpoint: 'https://api-01.moengage.com/v1/customer/W0ZHNMPI2O4KHJ48ZILZACRA', + }, + statusCode: 200, + }, + { + output: { + body: { + XML: {}, + JSON_ARRAY: {}, + FORM: {}, + JSON: { + type: 'device', + device_id: '7e32188a4dab669f', + attributes: { + model: 'Android SDK built for x86', + push_id: 'desuhere', + platform: 'android', + app_version: '1.1.6', + }, + customer_id: 'rudder123', + }, + }, + type: 'REST', + files: {}, + method: 'POST', + params: {}, + userId: '4eb021e9-a2af-4926-ae82-fe996d12f3c5', + headers: { + 'MOE-APPKEY': 'W0ZHNMPI2O4KHJ48ZILZACRA', + 'Content-Type': 'application/json', + Authorization: 'Basic VzBaSE5NUEkyTzRLSEo0OFpJTFpBQ1JBOmR1bW15QXBpS2V5', + }, + version: '1', + endpoint: 'https://api-01.moengage.com/v1/device/W0ZHNMPI2O4KHJ48ZILZACRA', + }, + statusCode: 200, + }, + ], + }, + }, + }, + { + name: 'moengage', + description: 'Test 4', + feature: 'processor', + module: 'destination', + version: 'v0', + input: { + request: { + body: [ + { + message: { + anonymousId: '4eb021e9-a2af-4926-ae82-fe996d12f3c5', + channel: 'web', + context: { + app: { + build: '1.0.0', + name: 'RudderLabs JavaScript SDK', + namespace: 'com.rudderlabs.javascript', + version: '1.1.6', + }, + library: { name: 'RudderLabs JavaScript SDK', version: '1.1.6' }, + locale: 'en-GB', + os: { name: '', version: '' }, + page: { + path: '/testing/script-test.html', + referrer: '', + search: '', + title: '', + url: 'http://localhost:3243/testing/script-test.html', + }, + screen: { density: 2 }, + traits: { + company: { id: 'abc123' }, + createdAt: 'Thu Mar 24 2016 17:46:45 GMT+0000 (UTC)', + email: 'rudderTest@gmail.com', + name: 'Rudder Test', + plan: 'Enterprise', + }, + userAgent: + 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.80 Safari/537.36', + }, + integrations: { All: true }, + messageId: 'a61357dd-e29e-4033-b1af-029625947fec', + originalTimestamp: '2020-10-16T09:05:11.001Z', + receivedAt: '2020-10-16T14:35:11.014+05:30', + request_ip: '[::1]', + sentAt: '2020-10-16T09:05:11.002Z', + timestamp: '2020-10-16T14:35:11.013+05:30', + type: 'identify', + userId: 'rudder123', + }, + destination: { + ID: '1iuTZs6eEZVMm6GjRBe6bNShaL3', + Name: 'MoEngage Testing', + DestinationDefinition: { + ID: '1iu4802Tx27kNC4KNYYou6D8jzL', + Name: 'MOENGAGE', + DisplayName: 'MoEngage', + Config: { + destConfig: { defaultConfig: ['apiId', 'apiKey', 'region'] }, + excludeKeys: [], + includeKeys: [], + supportedSourceTypes: [ + 'android', + 'ios', + 'web', + 'unity', + 'amp', + 'cloud', + 'reactnative', + ], + }, + }, + Config: { + apiId: 'W0ZHNMPI2O4KHJ48ZILZACRA', + apiKey: 'dummyApiKey', + eventDelivery: false, + eventDeliveryTS: 1602757086384, + region: 'EU', + }, + Enabled: true, + Transformations: [], + IsProcessorEnabled: true, + }, + }, + ], + method: 'POST', + }, + pathSuffix: '', + }, + output: { + response: { + status: 200, + body: [ + { + output: { + body: { + XML: {}, + JSON_ARRAY: {}, + FORM: {}, + JSON: { + type: 'customer', + attributes: { + name: 'Rudder Test', + plan: 'Enterprise', + email: 'rudderTest@gmail.com', + createdAt: 'Thu Mar 24 2016 17:46:45 GMT+0000 (UTC)', + 'company.id': 'abc123', + created_time: 'Thu Mar 24 2016 17:46:45 GMT+0000 (UTC)', + }, + customer_id: 'rudder123', + }, + }, + type: 'REST', + files: {}, + method: 'POST', + params: {}, + userId: '4eb021e9-a2af-4926-ae82-fe996d12f3c5', + headers: { + 'MOE-APPKEY': 'W0ZHNMPI2O4KHJ48ZILZACRA', + 'Content-Type': 'application/json', + Authorization: 'Basic VzBaSE5NUEkyTzRLSEo0OFpJTFpBQ1JBOmR1bW15QXBpS2V5', + }, + version: '1', + endpoint: 'https://api-02.moengage.com/v1/customer/W0ZHNMPI2O4KHJ48ZILZACRA', + }, + statusCode: 200, + }, + ], + }, + }, + }, + { + name: 'moengage', + description: 'Test 5', + feature: 'processor', + module: 'destination', + version: 'v0', + input: { + request: { + body: [ + { + message: { + anonymousId: '4eb021e9-a2af-4926-ae82-fe996d12f3c5', + channel: 'web', + context: { + app: { + build: '1.0.0', + name: 'RudderLabs JavaScript SDK', + namespace: 'com.rudderlabs.javascript', + version: '1.1.6', + }, + library: { name: 'RudderLabs JavaScript SDK', version: '1.1.6' }, + locale: 'en-GB', + os: { name: '', version: '' }, + page: { + path: '/testing/script-test.html', + referrer: '', + search: '', + title: '', + url: 'http://localhost:3243/testing/script-test.html', + }, + screen: { density: 2 }, + traits: { + company: { id: 'abc123' }, + createdAt: 'Thu Mar 24 2016 17:46:45 GMT+0000 (UTC)', + email: 'rudderTest@gmail.com', + name: 'Rudder Test', + plan: 'Enterprise', + }, + userAgent: + 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.80 Safari/537.36', + }, + integrations: { All: true }, + messageId: '9eb2f7c0-d896-494e-b105-60f604ce2906', + originalTimestamp: '2020-10-16T09:09:31.465Z', + receivedAt: '2020-10-16T14:39:31.468+05:30', + request_ip: '[::1]', + sentAt: '2020-10-16T09:09:31.466Z', + timestamp: '2020-10-16T14:39:31.467+05:30', + type: 'identify', + userId: 'rudder123', + }, + destination: { + ID: '1iuTZs6eEZVMm6GjRBe6bNShaL3', + Name: 'MoEngage Testing', + DestinationDefinition: { + ID: '1iu4802Tx27kNC4KNYYou6D8jzL', + Name: 'MOENGAGE', + DisplayName: 'MoEngage', + Config: { + destConfig: { defaultConfig: ['apiId', 'apiKey', 'region'] }, + excludeKeys: [], + includeKeys: [], + supportedSourceTypes: [ + 'android', + 'ios', + 'web', + 'unity', + 'amp', + 'cloud', + 'reactnative', + ], + }, + }, + Config: { + apiId: 'W0ZHNMPI2O4KHJ48ZILZACRA', + apiKey: 'dummyApiKey', + eventDelivery: false, + eventDeliveryTS: 1602757086384, + region: 'IND', + }, + Enabled: true, + Transformations: [], + IsProcessorEnabled: true, + }, + }, + ], + method: 'POST', + }, + pathSuffix: '', + }, + output: { + response: { + status: 200, + body: [ + { + output: { + body: { + XML: {}, + JSON_ARRAY: {}, + FORM: {}, + JSON: { + type: 'customer', + attributes: { + name: 'Rudder Test', + plan: 'Enterprise', + email: 'rudderTest@gmail.com', + createdAt: 'Thu Mar 24 2016 17:46:45 GMT+0000 (UTC)', + 'company.id': 'abc123', + created_time: 'Thu Mar 24 2016 17:46:45 GMT+0000 (UTC)', + }, + customer_id: 'rudder123', + }, + }, + type: 'REST', + files: {}, + method: 'POST', + params: {}, + userId: '4eb021e9-a2af-4926-ae82-fe996d12f3c5', + headers: { + 'MOE-APPKEY': 'W0ZHNMPI2O4KHJ48ZILZACRA', + 'Content-Type': 'application/json', + Authorization: 'Basic VzBaSE5NUEkyTzRLSEo0OFpJTFpBQ1JBOmR1bW15QXBpS2V5', + }, + version: '1', + endpoint: 'https://api-03.moengage.com/v1/customer/W0ZHNMPI2O4KHJ48ZILZACRA', + }, + statusCode: 200, + }, + ], + }, + }, + }, + { + name: 'moengage', + description: 'Test 6', + feature: 'processor', + module: 'destination', + version: 'v0', + input: { + request: { + body: [ + { + message: { + anonymousId: '4eb021e9-a2af-4926-ae82-fe996d12f3c5', + channel: 'web', + context: { + app: { + build: '1.0.0', + name: 'RudderLabs JavaScript SDK', + namespace: 'com.rudderlabs.javascript', + version: '1.1.6', + }, + library: { name: 'RudderLabs JavaScript SDK', version: '1.1.6' }, + locale: 'en-GB', + os: { name: '', version: '' }, + page: { + path: '/testing/script-test.html', + referrer: '', + search: '', + title: '', + url: 'http://localhost:3243/testing/script-test.html', + }, + screen: { density: 2 }, + traits: { + company: { id: 'abc123' }, + createdAt: 'Thu Mar 24 2016 17:46:45 GMT+0000 (UTC)', + email: 'rudderTest@gmail.com', + name: 'Rudder Test', + plan: 'Enterprise', + }, + userAgent: + 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.80 Safari/537.36', + }, + integrations: { All: true }, + messageId: '9eb2f7c0-d896-494e-b105-60f604ce2906', + originalTimestamp: '2020-10-16T09:09:31.465Z', + receivedAt: '2020-10-16T14:39:31.468+05:30', + request_ip: '[::1]', + sentAt: '2020-10-16T09:09:31.466Z', + timestamp: '2020-10-16T14:39:31.467+05:30', + type: 'identify', + userId: 'rudder123', + }, + destination: { + ID: '1iuTZs6eEZVMm6GjRBe6bNShaL3', + Name: 'MoEngage Testing', + DestinationDefinition: { + ID: '1iu4802Tx27kNC4KNYYou6D8jzL', + Name: 'MOENGAGE', + DisplayName: 'MoEngage', + Config: { + destConfig: { defaultConfig: ['apiId', 'apiKey', 'region'] }, + excludeKeys: [], + includeKeys: [], + supportedSourceTypes: [ + 'android', + 'ios', + 'web', + 'unity', + 'amp', + 'cloud', + 'reactnative', + ], + }, + }, + Config: { + apiId: 'W0ZHNMPI2O4KHJ48ZILZACRA', + apiKey: 'dummyApiKey', + eventDelivery: false, + eventDeliveryTS: 1602757086384, + region: 'AMA', + }, + Enabled: true, + Transformations: [], + IsProcessorEnabled: true, + }, + }, + ], + method: 'POST', + }, + pathSuffix: '', + }, + output: { + response: { + status: 200, + body: [ + { + error: 'The region is not valid', + statTags: { + destType: 'MOENGAGE', + errorCategory: 'dataValidation', + errorType: 'configuration', + feature: 'processor', + implementation: 'native', + module: 'destination', + }, + statusCode: 400, + }, + ], + }, + }, + }, + { + name: 'moengage', + description: 'Test 7', + feature: 'processor', + module: 'destination', + version: 'v0', + input: { + request: { + body: [ + { + message: { + anonymousId: '4eb021e9-a2af-4926-ae82-fe996d12f3c5', + channel: 'web', + context: { + app: { + build: '1.0.0', + name: 'RudderLabs JavaScript SDK', + namespace: 'com.rudderlabs.javascript', + version: '1.1.6', + }, + library: { name: 'RudderLabs JavaScript SDK', version: '1.1.6' }, + locale: 'en-GB', + os: { name: '', version: '' }, + page: { + path: '/testing/script-test.html', + referrer: '', + search: '', + title: '', + url: 'http://localhost:3243/testing/script-test.html', + }, + screen: { density: 2 }, + traits: { + company: { id: 'abc123' }, + createdAt: 'Thu Mar 24 2016 17:46:45 GMT+0000 (UTC)', + email: 'rudderTest@gmail.com', + name: 'Rudder Test', + plan: 'Enterprise', + }, + userAgent: + 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.80 Safari/537.36', + }, + integrations: { All: true }, + messageId: '9eb2f7c0-d896-494e-b105-60f604ce2906', + originalTimestamp: '2020-10-16T09:09:31.465Z', + receivedAt: '2020-10-16T14:39:31.468+05:30', + request_ip: '[::1]', + sentAt: '2020-10-16T09:09:31.466Z', + timestamp: '2020-10-16T14:39:31.467+05:30', + userId: 'rudder123', + }, + destination: { + ID: '1iuTZs6eEZVMm6GjRBe6bNShaL3', + Name: 'MoEngage Testing', + DestinationDefinition: { + ID: '1iu4802Tx27kNC4KNYYou6D8jzL', + Name: 'MOENGAGE', + DisplayName: 'MoEngage', + Config: { + destConfig: { defaultConfig: ['apiId', 'apiKey', 'region'] }, + excludeKeys: [], + includeKeys: [], + supportedSourceTypes: [ + 'android', + 'ios', + 'web', + 'unity', + 'amp', + 'cloud', + 'reactnative', + ], + }, + }, + Config: { + apiId: 'W0ZHNMPI2O4KHJ48ZILZACRA', + apiKey: 'dummyApiKey', + eventDelivery: false, + eventDeliveryTS: 1602757086384, + region: 'IND', + }, + Enabled: true, + Transformations: [], + IsProcessorEnabled: true, + }, + }, + ], + method: 'POST', + }, + pathSuffix: '', + }, + output: { + response: { + status: 200, + body: [ + { + error: 'Event type is required', + statTags: { + destType: 'MOENGAGE', + errorCategory: 'dataValidation', + errorType: 'instrumentation', + feature: 'processor', + implementation: 'native', + module: 'destination', + }, + statusCode: 400, + }, + ], + }, + }, + }, + { + name: 'moengage', + description: 'Test 8', + feature: 'processor', + module: 'destination', + version: 'v0', + input: { + request: { + body: [ + { + message: { + anonymousId: '4eb021e9-a2af-4926-ae82-fe996d12f3c5', + channel: 'web', + context: { + app: { + build: '1.0.0', + name: 'RudderLabs JavaScript SDK', + namespace: 'com.rudderlabs.javascript', + version: '1.1.6', + }, + library: { name: 'RudderLabs JavaScript SDK', version: '1.1.6' }, + locale: 'en-GB', + os: { name: '', version: '' }, + page: { + path: '/testing/script-test.html', + referrer: '', + search: '', + title: '', + url: 'http://localhost:3243/testing/script-test.html', + }, + screen: { density: 2 }, + traits: { + company: { id: 'abc123' }, + createdAt: 'Thu Mar 24 2016 17:46:45 GMT+0000 (UTC)', + email: 'rudderTest@gmail.com', + name: 'Rudder Test', + plan: 'Enterprise', + }, + userAgent: + 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.80 Safari/537.36', + }, + integrations: { All: true }, + messageId: '9eb2f7c0-d896-494e-b105-60f604ce2906', + originalTimestamp: '2020-10-16T09:09:31.465Z', + receivedAt: '2020-10-16T14:39:31.468+05:30', + request_ip: '[::1]', + sentAt: '2020-10-16T09:09:31.466Z', + timestamp: '2020-10-16T14:39:31.467+05:30', + type: 'gone', + userId: 'rudder123', + }, + destination: { + ID: '1iuTZs6eEZVMm6GjRBe6bNShaL3', + Name: 'MoEngage Testing', + DestinationDefinition: { + ID: '1iu4802Tx27kNC4KNYYou6D8jzL', + Name: 'MOENGAGE', + DisplayName: 'MoEngage', + Config: { + destConfig: { defaultConfig: ['apiId', 'apiKey', 'region'] }, + excludeKeys: [], + includeKeys: [], + supportedSourceTypes: [ + 'android', + 'ios', + 'web', + 'unity', + 'amp', + 'cloud', + 'reactnative', + ], + }, + }, + Config: { + apiId: 'W0ZHNMPI2O4KHJ48ZILZACRA', + apiKey: 'dummyApiKey', + eventDelivery: false, + eventDeliveryTS: 1602757086384, + region: 'IND', + }, + Enabled: true, + Transformations: [], + IsProcessorEnabled: true, + }, + }, + ], + method: 'POST', + }, + pathSuffix: '', + }, + output: { + response: { + status: 200, + body: [ + { + error: 'Event type gone is not supported', + statTags: { + destType: 'MOENGAGE', + errorCategory: 'dataValidation', + errorType: 'instrumentation', + feature: 'processor', + implementation: 'native', + module: 'destination', + }, + statusCode: 400, + }, + ], + }, + }, + }, + { + name: 'moengage', + description: 'Test 9', + feature: 'processor', + module: 'destination', + version: 'v0', + input: { + request: { + body: [ + { + message: { + channel: 'web', + context: { + timezone: 'Asia/Kolkata', + app: { + build: '1.0.0', + name: 'RudderLabs JavaScript SDK', + namespace: 'com.rudderlabs.javascript', + version: '1.1.6', + }, + library: { name: 'RudderLabs JavaScript SDK', version: '1.1.6' }, + locale: 'en-GB', + os: { name: '', version: '' }, + page: { + path: '/testing/script-test.html', + referrer: '', + search: '', + title: '', + url: 'http://localhost:3243/testing/script-test.html', + }, + screen: { density: 2 }, + traits: { + company: { id: 'abc123' }, + createdAt: 'Thu Mar 24 2016 17:46:45 GMT+0000 (UTC)', + email: 'rudderTest@gmail.com', + name: 'Rudder Test', + plan: 'Enterprise', + }, + userAgent: + 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.80 Safari/537.36', + }, + event: 'Order Completed', + integrations: { All: true }, + messageId: 'a0adfab9-baf7-4e09-a2ce-bbe2844c324a', + originalTimestamp: '2020-10-16T08:10:12.782Z', + properties: { + category: 'some category', + originalArray: [ + { nested_field: 'nested value', tags: ['tag_1', 'tag_2', 'tag_3'] }, + { nested_field: 'nested value', tags: ['tag_1', 'tag_2', 'tag_3'] }, + { nested_field: 'nested value', tags: ['tag_1', 'tag_2', 'tag_3'] }, + { nested_field: 'nested value', tags: ['tag_1', 'tag_2', 'tag_3'] }, + { nested_field: 'nested value', tags: ['tag_1', 'tag_2', 'tag_3'] }, + { nested_field: 'nested value', tags: ['tag_1', 'tag_2', 'tag_3'] }, + { nested_field: 'nested value', tags: ['tag_1', 'tag_2', 'tag_3'] }, + { + nested_field: 'nested value', + tags: ['tag_1', 'tag_2', 'tag_3', 'tag_1', 'tag_2', 'tag_3'], + }, + { + nested_field: 'nested value', + tags: ['tag_1', 'tag_2', 'tag_3', 'tag_1', 'tag_2', 'tag_3'], + }, + ], + checkout_id: 'what is checkout id here??', + coupon: 'APPARELSALE', + currency: 'GBP', + order_id: 'transactionId', + products: [ + { + brand: '', + category: 'Merch', + currency: 'GBP', + image_url: 'https://www.example.com/product/bacon-jam.jpg', + name: 'Food/Drink', + position: 1, + price: 3, + product_id: 'product-bacon-jam', + quantity: 2, + sku: 'sku-1', + typeOfProduct: 'Food', + url: 'https://www.example.com/product/bacon-jam', + value: 6, + variant: 'Extra topped', + }, + { + brand: 'Levis', + category: 'Merch', + currency: 'GBP', + image_url: 'https://www.example.com/product/t-shirt.jpg', + name: 'T-Shirt', + position: 2, + price: 12.99, + product_id: 'product-t-shirt', + quantity: 1, + sku: 'sku-2', + typeOfProduct: 'Shirt', + url: 'https://www.example.com/product/t-shirt', + value: 12.99, + variant: 'White', + }, + { + brand: 'Levis', + category: 'Merch', + coupon: 'APPARELSALE', + currency: 'GBP', + image_url: 'https://www.example.com/product/offer-t-shirt.jpg', + name: 'T-Shirt-on-offer', + position: 1, + price: 12.99, + product_id: 'offer-t-shirt', + quantity: 1, + sku: 'sku-3', + typeOfProduct: 'Shirt', + url: 'https://www.example.com/product/offer-t-shirt', + value: 12.99, + variant: 'Black', + }, + ], + revenue: 31.98, + shipping: 4, + value: 31.98, + }, + receivedAt: '2020-10-16T13:40:12.792+05:30', + request_ip: '[::1]', + sentAt: '2020-10-16T08:10:12.783Z', + timestamp: '2020-10-16T13:40:12.791+05:30', + type: 'track', + userId: 'rudder123', + }, + destination: { + ID: '1iuTZs6eEZVMm6GjRBe6bNShaL3', + Name: 'MoEngage Testing', + DestinationDefinition: { + ID: '1iu4802Tx27kNC4KNYYou6D8jzL', + Name: 'MOENGAGE', + DisplayName: 'MoEngage', + Config: { + destConfig: { defaultConfig: ['apiId', 'apiKey', 'region'] }, + excludeKeys: [], + includeKeys: [], + supportedSourceTypes: [ + 'android', + 'ios', + 'web', + 'unity', + 'amp', + 'cloud', + 'reactnative', + ], + }, + }, + Config: { + apiId: 'W0ZHNMPI2O4KHJ48ZILZACRA', + apiKey: 'dummyApiKey', + eventDelivery: false, + eventDeliveryTS: 1602757086384, + region: 'US', + }, + Enabled: true, + Transformations: [], + IsProcessorEnabled: true, + }, + }, + ], + method: 'POST', + }, + pathSuffix: '', + }, + output: { + response: { + status: 200, + body: [ + { + output: { + version: '1', + type: 'REST', + method: 'POST', + endpoint: 'https://api-01.moengage.com/v1/event/W0ZHNMPI2O4KHJ48ZILZACRA', + headers: { + 'Content-Type': 'application/json', + 'MOE-APPKEY': 'W0ZHNMPI2O4KHJ48ZILZACRA', + Authorization: 'Basic VzBaSE5NUEkyTzRLSEo0OFpJTFpBQ1JBOmR1bW15QXBpS2V5', + }, + params: {}, + body: { + JSON: { + customer_id: 'rudder123', + type: 'event', + actions: [ + { + action: 'Order Completed', + attributes: { + checkout_id: 'what is checkout id here??', + coupon: 'APPARELSALE', + currency: 'GBP', + order_id: 'transactionId', + category: 'some category', + 'originalArray[0].nested_field': 'nested value', + 'originalArray[0].tags[0]': 'tag_1', + 'originalArray[0].tags[1]': 'tag_2', + 'originalArray[0].tags[2]': 'tag_3', + 'originalArray[1].nested_field': 'nested value', + 'originalArray[1].tags[0]': 'tag_1', + 'originalArray[1].tags[1]': 'tag_2', + 'originalArray[1].tags[2]': 'tag_3', + 'originalArray[2].nested_field': 'nested value', + 'originalArray[2].tags[0]': 'tag_1', + 'originalArray[2].tags[1]': 'tag_2', + 'originalArray[2].tags[2]': 'tag_3', + 'originalArray[3].nested_field': 'nested value', + 'originalArray[3].tags[0]': 'tag_1', + 'originalArray[3].tags[1]': 'tag_2', + 'originalArray[3].tags[2]': 'tag_3', + 'originalArray[4].nested_field': 'nested value', + 'originalArray[4].tags[0]': 'tag_1', + 'originalArray[4].tags[1]': 'tag_2', + 'originalArray[4].tags[2]': 'tag_3', + 'originalArray[5].nested_field': 'nested value', + 'originalArray[5].tags[0]': 'tag_1', + 'originalArray[5].tags[1]': 'tag_2', + 'originalArray[5].tags[2]': 'tag_3', + 'originalArray[6].nested_field': 'nested value', + 'originalArray[6].tags[0]': 'tag_1', + 'originalArray[6].tags[1]': 'tag_2', + 'originalArray[6].tags[2]': 'tag_3', + 'originalArray[7].nested_field': 'nested value', + 'originalArray[7].tags[0]': 'tag_1', + 'originalArray[7].tags[1]': 'tag_2', + 'originalArray[7].tags[2]': 'tag_3', + 'originalArray[7].tags[3]': 'tag_1', + 'originalArray[7].tags[4]': 'tag_2', + 'originalArray[7].tags[5]': 'tag_3', + 'originalArray[8].nested_field': 'nested value', + 'originalArray[8].tags[0]': 'tag_1', + 'originalArray[8].tags[1]': 'tag_2', + 'originalArray[8].tags[2]': 'tag_3', + 'originalArray[8].tags[3]': 'tag_1', + 'originalArray[8].tags[4]': 'tag_2', + 'originalArray[8].tags[5]': 'tag_3', + 'products[0].brand': '', + 'products[0].category': 'Merch', + 'products[0].currency': 'GBP', + 'products[0].image_url': 'https://www.example.com/product/bacon-jam.jpg', + 'products[0].name': 'Food/Drink', + 'products[0].position': 1, + 'products[0].price': 3, + 'products[0].product_id': 'product-bacon-jam', + 'products[0].quantity': 2, + 'products[0].sku': 'sku-1', + 'products[0].typeOfProduct': 'Food', + 'products[0].url': 'https://www.example.com/product/bacon-jam', + 'products[0].value': 6, + 'products[0].variant': 'Extra topped', + 'products[1].brand': 'Levis', + 'products[1].category': 'Merch', + 'products[1].currency': 'GBP', + 'products[1].image_url': 'https://www.example.com/product/t-shirt.jpg', + 'products[1].name': 'T-Shirt', + 'products[1].position': 2, + 'products[1].price': 12.99, + 'products[1].product_id': 'product-t-shirt', + 'products[1].quantity': 1, + 'products[1].sku': 'sku-2', + 'products[1].typeOfProduct': 'Shirt', + 'products[1].url': 'https://www.example.com/product/t-shirt', + 'products[1].value': 12.99, + 'products[1].variant': 'White', + 'products[2].brand': 'Levis', + 'products[2].category': 'Merch', + 'products[2].coupon': 'APPARELSALE', + 'products[2].currency': 'GBP', + 'products[2].image_url': + 'https://www.example.com/product/offer-t-shirt.jpg', + 'products[2].name': 'T-Shirt-on-offer', + 'products[2].position': 1, + 'products[2].price': 12.99, + 'products[2].product_id': 'offer-t-shirt', + 'products[2].quantity': 1, + 'products[2].sku': 'sku-3', + 'products[2].typeOfProduct': 'Shirt', + 'products[2].url': 'https://www.example.com/product/offer-t-shirt', + 'products[2].value': 12.99, + 'products[2].variant': 'Black', + revenue: 31.98, + shipping: 4, + value: 31.98, + }, + app_version: '1.1.6', + current_time: '2020-10-16T13:40:12.791+05:30', + user_timezone_offset: 19800, + platform: 'web', + }, + ], + }, + XML: {}, + JSON_ARRAY: {}, + FORM: {}, + }, + files: {}, + userId: 'rudder123', + }, + statusCode: 200, + }, + ], + }, + }, + }, + { + name: 'moengage', + description: 'Test 10', + feature: 'processor', + module: 'destination', + version: 'v0', + input: { + request: { + body: [ + { + message: { + anonymousId: '4eb021e9-a2af-4926-ae82-fe996d12f3c5', + channel: 'web', + context: { + timezone: 'Wrong/Timezone', + app: { + build: '1.0.0', + name: 'RudderLabs JavaScript SDK', + namespace: 'com.rudderlabs.javascript', + version: '1.1.6', + }, + library: { name: 'RudderLabs JavaScript SDK', version: '1.1.6' }, + locale: 'en-GB', + os: { name: '', version: '' }, + page: { + path: '/testing/script-test.html', + referrer: '', + search: '', + title: '', + url: 'http://localhost:3243/testing/script-test.html', + }, + screen: { density: 2 }, + traits: { + company: { id: 'abc123' }, + createdAt: 'Thu Mar 24 2016 17:46:45 GMT+0000 (UTC)', + email: 'rudderTest@gmail.com', + name: 'Rudder Test', + plan: 'Enterprise', + }, + userAgent: + 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.80 Safari/537.36', + }, + event: 'Order Completed', + integrations: { All: true }, + messageId: 'a0adfab9-baf7-4e09-a2ce-bbe2844c324a', + originalTimestamp: '2020-10-16T08:10:12.782Z', + properties: { + checkout_id: 'what is checkout id here??', + coupon: 'APPARELSALE', + currency: 'GBP', + order_id: 'transactionId', + products: [ + { + brand: '', + category: 'Merch', + currency: 'GBP', + image_url: 'https://www.example.com/product/bacon-jam.jpg', + name: 'Food/Drink', + position: 1, + price: 3, + product_id: 'product-bacon-jam', + quantity: 2, + sku: 'sku-1', + typeOfProduct: 'Food', + url: 'https://www.example.com/product/bacon-jam', + value: 6, + variant: 'Extra topped', + }, + { + brand: 'Levis', + category: 'Merch', + currency: 'GBP', + image_url: 'https://www.example.com/product/t-shirt.jpg', + name: 'T-Shirt', + position: 2, + price: 12.99, + product_id: 'product-t-shirt', + quantity: 1, + sku: 'sku-2', + typeOfProduct: 'Shirt', + url: 'https://www.example.com/product/t-shirt', + value: 12.99, + variant: 'White', + }, + { + brand: 'Levis', + category: 'Merch', + coupon: 'APPARELSALE', + currency: 'GBP', + image_url: 'https://www.example.com/product/offer-t-shirt.jpg', + name: 'T-Shirt-on-offer', + position: 1, + price: 12.99, + product_id: 'offer-t-shirt', + quantity: 1, + sku: 'sku-3', + typeOfProduct: 'Shirt', + url: 'https://www.example.com/product/offer-t-shirt', + value: 12.99, + variant: 'Black', + }, + ], + revenue: 31.98, + shipping: 4, + value: 31.98, + }, + receivedAt: '2020-10-16T13:40:12.792+05:30', + request_ip: '[::1]', + sentAt: '2020-10-16T08:10:12.783Z', + timestamp: '2020-10-16T13:40:12.791+05:30', + type: 'track', + userId: 'rudder123', + }, + destination: { + ID: '1iuTZs6eEZVMm6GjRBe6bNShaL3', + Name: 'MoEngage Testing', + DestinationDefinition: { + ID: '1iu4802Tx27kNC4KNYYou6D8jzL', + Name: 'MOENGAGE', + DisplayName: 'MoEngage', + Config: { + destConfig: { defaultConfig: ['apiId', 'apiKey', 'region'] }, + excludeKeys: [], + includeKeys: [], + supportedSourceTypes: [ + 'android', + 'ios', + 'web', + 'unity', + 'amp', + 'cloud', + 'reactnative', + ], + }, + }, + Config: { + apiId: 'W0ZHNMPI2O4KHJ48ZILZACRA', + apiKey: 'dummyApiKey', + eventDelivery: false, + eventDeliveryTS: 1602757086384, + region: 'US', + }, + Enabled: true, + Transformations: [], + IsProcessorEnabled: true, + }, + }, + ], + method: 'POST', + }, + pathSuffix: '', + }, + output: { + response: { + status: 200, + body: [ + { + output: { + version: '1', + type: 'REST', + method: 'POST', + endpoint: 'https://api-01.moengage.com/v1/event/W0ZHNMPI2O4KHJ48ZILZACRA', + headers: { + 'Content-Type': 'application/json', + 'MOE-APPKEY': 'W0ZHNMPI2O4KHJ48ZILZACRA', + Authorization: 'Basic VzBaSE5NUEkyTzRLSEo0OFpJTFpBQ1JBOmR1bW15QXBpS2V5', + }, + params: {}, + body: { + JSON: { + customer_id: 'rudder123', + type: 'event', + actions: [ + { + action: 'Order Completed', + attributes: { + checkout_id: 'what is checkout id here??', + coupon: 'APPARELSALE', + currency: 'GBP', + order_id: 'transactionId', + 'products[0].brand': '', + 'products[0].category': 'Merch', + 'products[0].currency': 'GBP', + 'products[0].image_url': 'https://www.example.com/product/bacon-jam.jpg', + 'products[0].name': 'Food/Drink', + 'products[0].position': 1, + 'products[0].price': 3, + 'products[0].product_id': 'product-bacon-jam', + 'products[0].quantity': 2, + 'products[0].sku': 'sku-1', + 'products[0].typeOfProduct': 'Food', + 'products[0].url': 'https://www.example.com/product/bacon-jam', + 'products[0].value': 6, + 'products[0].variant': 'Extra topped', + 'products[1].brand': 'Levis', + 'products[1].category': 'Merch', + 'products[1].currency': 'GBP', + 'products[1].image_url': 'https://www.example.com/product/t-shirt.jpg', + 'products[1].name': 'T-Shirt', + 'products[1].position': 2, + 'products[1].price': 12.99, + 'products[1].product_id': 'product-t-shirt', + 'products[1].quantity': 1, + 'products[1].sku': 'sku-2', + 'products[1].typeOfProduct': 'Shirt', + 'products[1].url': 'https://www.example.com/product/t-shirt', + 'products[1].value': 12.99, + 'products[1].variant': 'White', + 'products[2].brand': 'Levis', + 'products[2].category': 'Merch', + 'products[2].coupon': 'APPARELSALE', + 'products[2].currency': 'GBP', + 'products[2].image_url': + 'https://www.example.com/product/offer-t-shirt.jpg', + 'products[2].name': 'T-Shirt-on-offer', + 'products[2].position': 1, + 'products[2].price': 12.99, + 'products[2].product_id': 'offer-t-shirt', + 'products[2].quantity': 1, + 'products[2].sku': 'sku-3', + 'products[2].typeOfProduct': 'Shirt', + 'products[2].url': 'https://www.example.com/product/offer-t-shirt', + 'products[2].value': 12.99, + 'products[2].variant': 'Black', + revenue: 31.98, + shipping: 4, + value: 31.98, + }, + app_version: '1.1.6', + current_time: '2020-10-16T13:40:12.791+05:30', + platform: 'web', + }, + ], + }, + XML: {}, + JSON_ARRAY: {}, + FORM: {}, + }, + files: {}, + userId: '4eb021e9-a2af-4926-ae82-fe996d12f3c5', + }, + statusCode: 200, + }, + ], + }, + }, + }, + { + name: 'moengage', + description: 'Test 11', + feature: 'processor', + module: 'destination', + version: 'v0', + input: { + request: { + body: [ + { + message: { + anonymousId: '4eb021e9-a2af-4926-ae82-fe996d12f3c5', + channel: 'web', + context: { + app: { + build: '1.0.0', + name: 'RudderLabs JavaScript SDK', + namespace: 'com.rudderlabs.javascript', + version: '1.1.6', + }, + device: { + id: '7e32188a4dab669f', + manufacturer: 'Google', + model: 'AOSP on IA Emulator', + name: 'generic_x86_arm', + token: 'desuhere', + type: 'ipados', + }, + library: { name: 'RudderLabs JavaScript SDK', version: '1.1.6' }, + locale: 'en-GB', + os: { name: '', version: '' }, + page: { + path: '/testing/script-test.html', + referrer: '', + search: '', + title: '', + url: 'http://localhost:3243/testing/script-test.html', + }, + screen: { density: 2 }, + traits: { + company: { id: 'abc123' }, + createdAt: 'Thu Mar 24 2016 17:46:45 GMT+0000 (UTC)', + email: 'rudderTest@gmail.com', + name: 'Rudder Test', + plan: 'Enterprise', + }, + userAgent: + 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.80 Safari/537.36', + }, + integrations: { All: true }, + messageId: '531e3507-1ef5-4a06-b83c-cb521ff34f0c', + originalTimestamp: '2020-10-16T08:53:29.386Z', + receivedAt: '2020-10-16T14:23:29.402+05:30', + request_ip: '[::1]', + sentAt: '2020-10-16T08:53:29.387Z', + timestamp: '2020-10-16T14:23:29.401+05:30', + type: 'identify', + userId: 'rudder123', + }, + destination: { + ID: '1iuTZs6eEZVMm6GjRBe6bNShaL3', + Name: 'MoEngage Testing', + DestinationDefinition: { + ID: '1iu4802Tx27kNC4KNYYou6D8jzL', + Name: 'MOENGAGE', + DisplayName: 'MoEngage', + Config: { + destConfig: { defaultConfig: ['apiId', 'apiKey', 'region'] }, + excludeKeys: [], + includeKeys: [], + supportedSourceTypes: [ + 'android', + 'ios', + 'web', + 'unity', + 'amp', + 'cloud', + 'reactnative', + ], + }, + }, + Config: { + apiId: 'W0ZHNMPI2O4KHJ48ZILZACRA', + apiKey: 'dummyApiKey', + eventDelivery: false, + eventDeliveryTS: 1602757086384, + region: 'US', + }, + Enabled: true, + Transformations: [], + IsProcessorEnabled: true, + }, + }, + ], + method: 'POST', + }, + pathSuffix: '', + }, + output: { + response: { + status: 200, + body: [ + { + output: { + body: { + XML: {}, + JSON_ARRAY: {}, + FORM: {}, + JSON: { + type: 'customer', + attributes: { + name: 'Rudder Test', + plan: 'Enterprise', + email: 'rudderTest@gmail.com', + createdAt: 'Thu Mar 24 2016 17:46:45 GMT+0000 (UTC)', + 'company.id': 'abc123', + created_time: 'Thu Mar 24 2016 17:46:45 GMT+0000 (UTC)', + }, + customer_id: 'rudder123', + }, + }, + type: 'REST', + files: {}, + method: 'POST', + params: {}, + userId: '4eb021e9-a2af-4926-ae82-fe996d12f3c5', + headers: { + 'MOE-APPKEY': 'W0ZHNMPI2O4KHJ48ZILZACRA', + 'Content-Type': 'application/json', + Authorization: 'Basic VzBaSE5NUEkyTzRLSEo0OFpJTFpBQ1JBOmR1bW15QXBpS2V5', + }, + version: '1', + endpoint: 'https://api-01.moengage.com/v1/customer/W0ZHNMPI2O4KHJ48ZILZACRA', + }, + statusCode: 200, + }, + { + output: { + body: { + XML: {}, + JSON_ARRAY: {}, + FORM: {}, + JSON: { + type: 'device', + device_id: '7e32188a4dab669f', + attributes: { + model: 'AOSP on IA Emulator', + push_id: 'desuhere', + platform: 'iOS', + app_version: '1.1.6', + }, + customer_id: 'rudder123', + }, + }, + type: 'REST', + files: {}, + method: 'POST', + params: {}, + userId: '4eb021e9-a2af-4926-ae82-fe996d12f3c5', + headers: { + 'MOE-APPKEY': 'W0ZHNMPI2O4KHJ48ZILZACRA', + 'Content-Type': 'application/json', + Authorization: 'Basic VzBaSE5NUEkyTzRLSEo0OFpJTFpBQ1JBOmR1bW15QXBpS2V5', + }, + version: '1', + endpoint: 'https://api-01.moengage.com/v1/device/W0ZHNMPI2O4KHJ48ZILZACRA', + }, + statusCode: 200, + }, + ], + }, + }, + }, + { + name: 'moengage', + description: 'Test 12', + feature: 'processor', + module: 'destination', + version: 'v0', + input: { + request: { + body: [ + { + message: { + anonymousId: '4eb021e9-a2af-4926-ae82-fe996d12f3c5', + channel: 'web', + context: { + timezone: 'Wrong/Timezone', + app: { + build: '1.0.0', + name: 'RudderLabs JavaScript SDK', + namespace: 'com.rudderlabs.javascript', + version: '1.1.6', + }, + library: { name: 'RudderLabs JavaScript SDK', version: '1.1.6' }, + locale: 'en-GB', + os: { name: '', version: '' }, + device: { + id: '7e32188a4dab669f', + manufacturer: 'Google', + model: 'AOSP on IA Emulator', + name: 'generic_x86_arm', + token: 'desuhere', + type: 'ipados', + }, + page: { + path: '/testing/script-test.html', + referrer: '', + search: '', + title: '', + url: 'http://localhost:3243/testing/script-test.html', + }, + screen: { density: 2 }, + traits: { + company: { id: 'abc123' }, + createdAt: 'Thu Mar 24 2016 17:46:45 GMT+0000 (UTC)', + email: 'rudderTest@gmail.com', + name: 'Rudder Test', + plan: 'Enterprise', + }, + userAgent: + 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.80 Safari/537.36', + }, + event: 'Order Completed', + integrations: { All: true }, + messageId: 'a0adfab9-baf7-4e09-a2ce-bbe2844c324a', + originalTimestamp: '2020-10-16T08:10:12.782Z', + properties: { + checkout_id: 'what is checkout id here??', + coupon: 'APPARELSALE', + currency: 'GBP', + order_id: 'transactionId', + products: [ + { + brand: '', + category: 'Merch', + currency: 'GBP', + image_url: 'https://www.example.com/product/bacon-jam.jpg', + name: 'Food/Drink', + position: 1, + price: 3, + product_id: 'product-bacon-jam', + quantity: 2, + sku: 'sku-1', + typeOfProduct: 'Food', + url: 'https://www.example.com/product/bacon-jam', + value: 6, + variant: 'Extra topped', + }, + { + brand: 'Levis', + category: 'Merch', + currency: 'GBP', + image_url: 'https://www.example.com/product/t-shirt.jpg', + name: 'T-Shirt', + position: 2, + price: 12.99, + product_id: 'product-t-shirt', + quantity: 1, + sku: 'sku-2', + typeOfProduct: 'Shirt', + url: 'https://www.example.com/product/t-shirt', + value: 12.99, + variant: 'White', + }, + { + brand: 'Levis', + category: 'Merch', + coupon: 'APPARELSALE', + currency: 'GBP', + image_url: 'https://www.example.com/product/offer-t-shirt.jpg', + name: 'T-Shirt-on-offer', + position: 1, + price: 12.99, + product_id: 'offer-t-shirt', + quantity: 1, + sku: 'sku-3', + typeOfProduct: 'Shirt', + url: 'https://www.example.com/product/offer-t-shirt', + value: 12.99, + variant: 'Black', + }, + ], + category: 'some category', + originalArray: [ + { nested_field: 'nested value', tags: ['tag_1', 'tag_2', 'tag_3'] }, + { nested_field: 'nested value', tags: ['tag_1'] }, + { nested_field: 'nested value' }, + ], + revenue: 31.98, + shipping: 4, + value: 31.98, + }, + receivedAt: '2020-10-16T13:40:12.792+05:30', + request_ip: '[::1]', + sentAt: '2020-10-16T08:10:12.783Z', + timestamp: '2020-10-16T13:40:12.791+05:30', + type: 'track', + userId: 'rudder123', + }, + destination: { + ID: '1iuTZs6eEZVMm6GjRBe6bNShaL3', + Name: 'MoEngage Testing', + DestinationDefinition: { + ID: '1iu4802Tx27kNC4KNYYou6D8jzL', + Name: 'MOENGAGE', + DisplayName: 'MoEngage', + Config: { + destConfig: { defaultConfig: ['apiId', 'apiKey', 'region'] }, + excludeKeys: [], + includeKeys: [], + supportedSourceTypes: [ + 'android', + 'ios', + 'web', + 'unity', + 'amp', + 'cloud', + 'reactnative', + ], + }, + }, + Config: { + apiId: 'W0ZHNMPI2O4KHJ48ZILZACRA', + apiKey: 'dummyApiKey', + eventDelivery: false, + eventDeliveryTS: 1602757086384, + region: 'US', + }, + Enabled: true, + Transformations: [], + IsProcessorEnabled: true, + }, + }, + ], + method: 'POST', + }, + pathSuffix: '', + }, + output: { + response: { + status: 200, + body: [ + { + output: { + version: '1', + type: 'REST', + method: 'POST', + endpoint: 'https://api-01.moengage.com/v1/event/W0ZHNMPI2O4KHJ48ZILZACRA', + headers: { + 'Content-Type': 'application/json', + 'MOE-APPKEY': 'W0ZHNMPI2O4KHJ48ZILZACRA', + Authorization: 'Basic VzBaSE5NUEkyTzRLSEo0OFpJTFpBQ1JBOmR1bW15QXBpS2V5', + }, + params: {}, + body: { + JSON: { + customer_id: 'rudder123', + device_id: '7e32188a4dab669f', + type: 'event', + actions: [ + { + action: 'Order Completed', + attributes: { + checkout_id: 'what is checkout id here??', + coupon: 'APPARELSALE', + currency: 'GBP', + order_id: 'transactionId', + 'products[0].brand': '', + 'products[0].category': 'Merch', + 'products[0].currency': 'GBP', + 'products[0].image_url': 'https://www.example.com/product/bacon-jam.jpg', + 'products[0].name': 'Food/Drink', + 'products[0].position': 1, + 'products[0].price': 3, + 'products[0].product_id': 'product-bacon-jam', + 'products[0].quantity': 2, + 'products[0].sku': 'sku-1', + 'products[0].typeOfProduct': 'Food', + 'products[0].url': 'https://www.example.com/product/bacon-jam', + 'products[0].value': 6, + 'products[0].variant': 'Extra topped', + 'products[1].brand': 'Levis', + 'products[1].category': 'Merch', + 'products[1].currency': 'GBP', + 'products[1].image_url': 'https://www.example.com/product/t-shirt.jpg', + 'products[1].name': 'T-Shirt', + 'products[1].position': 2, + 'products[1].price': 12.99, + 'products[1].product_id': 'product-t-shirt', + 'products[1].quantity': 1, + 'products[1].sku': 'sku-2', + 'products[1].typeOfProduct': 'Shirt', + 'products[1].url': 'https://www.example.com/product/t-shirt', + 'products[1].value': 12.99, + 'products[1].variant': 'White', + 'products[2].brand': 'Levis', + 'products[2].category': 'Merch', + 'products[2].coupon': 'APPARELSALE', + 'products[2].currency': 'GBP', + 'products[2].image_url': + 'https://www.example.com/product/offer-t-shirt.jpg', + 'products[2].name': 'T-Shirt-on-offer', + 'products[2].position': 1, + 'products[2].price': 12.99, + 'products[2].product_id': 'offer-t-shirt', + 'products[2].quantity': 1, + 'products[2].sku': 'sku-3', + 'products[2].typeOfProduct': 'Shirt', + 'products[2].url': 'https://www.example.com/product/offer-t-shirt', + 'products[2].value': 12.99, + 'products[2].variant': 'Black', + revenue: 31.98, + shipping: 4, + value: 31.98, + 'originalArray[0].nested_field': 'nested value', + 'originalArray[0].tags[0]': 'tag_1', + 'originalArray[0].tags[1]': 'tag_2', + 'originalArray[0].tags[2]': 'tag_3', + 'originalArray[1].nested_field': 'nested value', + 'originalArray[1].tags[0]': 'tag_1', + 'originalArray[2].nested_field': 'nested value', + category: 'some category', + }, + platform: 'iOS', + app_version: '1.1.6', + current_time: '2020-10-16T13:40:12.791+05:30', + }, + ], + }, + JSON_ARRAY: {}, + XML: {}, + FORM: {}, + }, + files: {}, + userId: '4eb021e9-a2af-4926-ae82-fe996d12f3c5', + }, + statusCode: 200, + }, + ], + }, + }, + }, + { + name: 'moengage', + description: 'Test 13', + feature: 'processor', + module: 'destination', + version: 'v0', + input: { + request: { + body: [ + { + message: { + anonymousId: '4eb021e9-a2af-4926-ae82-fe996d12f3c5', + channel: 'web', + context: { + timezone: 'Wrong/Timezone', + app: { + build: '1.0.0', + name: 'RudderLabs JavaScript SDK', + namespace: 'com.rudderlabs.javascript', + version: '1.1.6', + }, + library: { name: 'RudderLabs JavaScript SDK', version: '1.1.6' }, + locale: 'en-GB', + os: { name: '', version: '' }, + device: { + id: '7e32188a4dab669f', + manufacturer: 'Google', + model: 'AOSP on IA Emulator', + name: 'generic_x86_arm', + token: 'desuhere', + type: 'ipados', + }, + page: { + path: '/testing/script-test.html', + referrer: '', + search: '', + title: '', + url: 'http://localhost:3243/testing/script-test.html', + }, + screen: { density: 2 }, + traits: { + company: { id: 'abc123' }, + createdAt: 'Thu Mar 24 2016 17:46:45 GMT+0000 (UTC)', + email: 'rudderTest@gmail.com', + name: 'Rudder Test', + plan: 'Enterprise', + }, + userAgent: + 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.80 Safari/537.36', + }, + event: 'Order Completed', + integrations: { All: true }, + messageId: 'a0adfab9-baf7-4e09-a2ce-bbe2844c324a', + originalTimestamp: '2020-10-16T08:10:12.782Z', + properties: { + checkout_id: 'what is checkout id here??', + coupon: 'APPARELSALE', + currency: 'GBP', + order_id: 'transactionId', + products: [ + { + brand: '', + category: 'Merch', + currency: 'GBP', + image_url: 'https://www.example.com/product/bacon-jam.jpg', + name: 'Food/Drink', + position: 1, + price: 3, + product_id: 'product-bacon-jam', + quantity: 2, + sku: 'sku-1', + typeOfProduct: 'Food', + url: 'https://www.example.com/product/bacon-jam', + value: 6, + variant: 'Extra topped', + }, + { + brand: 'Levis', + category: 'Merch', + currency: 'GBP', + image_url: 'https://www.example.com/product/t-shirt.jpg', + name: 'T-Shirt', + position: 2, + price: 12.99, + product_id: 'product-t-shirt', + quantity: 1, + sku: 'sku-2', + typeOfProduct: 'Shirt', + url: 'https://www.example.com/product/t-shirt', + value: 12.99, + variant: 'White', + }, + { + brand: 'Levis', + category: 'Merch', + coupon: 'APPARELSALE', + currency: 'GBP', + image_url: 'https://www.example.com/product/offer-t-shirt.jpg', + name: 'T-Shirt-on-offer', + position: 1, + price: 12.99, + product_id: 'offer-t-shirt', + quantity: 1, + sku: 'sku-3', + typeOfProduct: 'Shirt', + url: 'https://www.example.com/product/offer-t-shirt', + value: 12.99, + variant: 'Black', + }, + ], + category: 'some category', + originalArray: { + nested_field: 'nested value', + tags: ['tag_1', 'tag_2', 'tag_3'], + key1: { + nested_field: 'nested value', + key11: 'val11', + key12: 'val12', + key13: { k1: 'v1', k2: 'v2' }, + key2: {}, + key3: [], + }, + }, + revenue: 31.98, + shipping: 4, + value: 31.98, + }, + receivedAt: '2020-10-16T13:40:12.792+05:30', + request_ip: '[::1]', + sentAt: '2020-10-16T08:10:12.783Z', + timestamp: '2020-10-16T13:40:12.791+05:30', + type: 'track', + userId: 'rudder123', + }, + destination: { + ID: '1iuTZs6eEZVMm6GjRBe6bNShaL3', + Name: 'MoEngage Testing', + DestinationDefinition: { + ID: '1iu4802Tx27kNC4KNYYou6D8jzL', + Name: 'MOENGAGE', + DisplayName: 'MoEngage', + Config: { + destConfig: { defaultConfig: ['apiId', 'apiKey', 'region'] }, + excludeKeys: [], + includeKeys: [], + supportedSourceTypes: [ + 'android', + 'ios', + 'web', + 'unity', + 'amp', + 'cloud', + 'reactnative', + ], + }, + }, + Config: { + apiId: 'W0ZHNMPI2O4KHJ48ZILZACRA', + apiKey: 'dummyApiKey', + eventDelivery: false, + eventDeliveryTS: 1602757086384, + region: 'US', + }, + Enabled: true, + Transformations: [], + IsProcessorEnabled: true, + }, + }, + ], + method: 'POST', + }, + pathSuffix: '', + }, + output: { + response: { + status: 200, + body: [ + { + output: { + version: '1', + type: 'REST', + method: 'POST', + endpoint: 'https://api-01.moengage.com/v1/event/W0ZHNMPI2O4KHJ48ZILZACRA', + headers: { + 'Content-Type': 'application/json', + 'MOE-APPKEY': 'W0ZHNMPI2O4KHJ48ZILZACRA', + Authorization: 'Basic VzBaSE5NUEkyTzRLSEo0OFpJTFpBQ1JBOmR1bW15QXBpS2V5', + }, + params: {}, + body: { + JSON: { + customer_id: 'rudder123', + device_id: '7e32188a4dab669f', + type: 'event', + actions: [ + { + action: 'Order Completed', + attributes: { + checkout_id: 'what is checkout id here??', + coupon: 'APPARELSALE', + currency: 'GBP', + order_id: 'transactionId', + 'products[0].brand': '', + 'products[0].category': 'Merch', + 'products[0].currency': 'GBP', + 'products[0].image_url': 'https://www.example.com/product/bacon-jam.jpg', + 'products[0].name': 'Food/Drink', + 'products[0].position': 1, + 'products[0].price': 3, + 'products[0].product_id': 'product-bacon-jam', + 'products[0].quantity': 2, + 'products[0].sku': 'sku-1', + 'products[0].typeOfProduct': 'Food', + 'products[0].url': 'https://www.example.com/product/bacon-jam', + 'products[0].value': 6, + 'products[0].variant': 'Extra topped', + 'products[1].brand': 'Levis', + 'products[1].category': 'Merch', + 'products[1].currency': 'GBP', + 'products[1].image_url': 'https://www.example.com/product/t-shirt.jpg', + 'products[1].name': 'T-Shirt', + 'products[1].position': 2, + 'products[1].price': 12.99, + 'products[1].product_id': 'product-t-shirt', + 'products[1].quantity': 1, + 'products[1].sku': 'sku-2', + 'products[1].typeOfProduct': 'Shirt', + 'products[1].url': 'https://www.example.com/product/t-shirt', + 'products[1].value': 12.99, + 'products[1].variant': 'White', + 'products[2].brand': 'Levis', + 'products[2].category': 'Merch', + 'products[2].coupon': 'APPARELSALE', + 'products[2].currency': 'GBP', + 'products[2].image_url': + 'https://www.example.com/product/offer-t-shirt.jpg', + 'products[2].name': 'T-Shirt-on-offer', + 'products[2].position': 1, + 'products[2].price': 12.99, + 'products[2].product_id': 'offer-t-shirt', + 'products[2].quantity': 1, + 'products[2].sku': 'sku-3', + 'products[2].typeOfProduct': 'Shirt', + 'products[2].url': 'https://www.example.com/product/offer-t-shirt', + 'products[2].value': 12.99, + 'products[2].variant': 'Black', + revenue: 31.98, + shipping: 4, + value: 31.98, + 'originalArray.key1.key11': 'val11', + 'originalArray.key1.key12': 'val12', + 'originalArray.key1.key13.k1': 'v1', + 'originalArray.key1.key13.k2': 'v2', + 'originalArray.key1.nested_field': 'nested value', + 'originalArray.nested_field': 'nested value', + 'originalArray.tags[0]': 'tag_1', + 'originalArray.tags[1]': 'tag_2', + 'originalArray.tags[2]': 'tag_3', + 'originalArray.key1.key2': {}, + 'originalArray.key1.key3': [], + category: 'some category', + }, + platform: 'iOS', + app_version: '1.1.6', + current_time: '2020-10-16T13:40:12.791+05:30', + }, + ], + }, + JSON_ARRAY: {}, + XML: {}, + FORM: {}, + }, + files: {}, + userId: '4eb021e9-a2af-4926-ae82-fe996d12f3c5', + }, + statusCode: 200, + }, + ], + }, + }, + }, + { + name: 'moengage', + description: 'Test 14', + feature: 'processor', + module: 'destination', + version: 'v0', + input: { + request: { + body: [ + { + message: { + messageId: 'adc7c2d0-0ebf-4593-b878-a0eb75932820', + originalTimestamp: '2023-03-09T00:09:53.235+05:30', + previousId: '4eb021e9-a2af-4926-ae82-fe996d12f3c5', + receivedAt: '2023-03-09T00:09:51.292+05:30', + request_ip: '[::1]', + rudderId: '1703da0d-2472-459c-9bf0-4e7b66b4673a', + sentAt: '2023-03-09T00:09:53.235+05:30', + timestamp: '2023-03-09T00:09:51.291+05:30', + type: 'alias', + userId: '12345', + }, + destination: { + ID: '1iuTZs6eEZVMm6GjRBe6bNShaL3', + Name: 'MoEngage Testing', + DestinationDefinition: { + ID: '1iu4802Tx27kNC4KNYYou6D8jzL', + Name: 'MOENGAGE', + DisplayName: 'MoEngage', + Config: { + destConfig: { defaultConfig: ['apiId', 'apiKey', 'region'] }, + excludeKeys: [], + includeKeys: [], + supportedSourceTypes: [ + 'android', + 'ios', + 'web', + 'unity', + 'amp', + 'cloud', + 'reactnative', + ], + }, + }, + Config: { + apiId: 'W0ZHNMPI2O4KHJ48ZILZACRA', + apiKey: 'dummyApiKey', + eventDelivery: false, + eventDeliveryTS: 1602757086384, + region: 'US', + }, + Enabled: true, + Transformations: [], + IsProcessorEnabled: true, + }, + }, + ], + method: 'POST', + }, + pathSuffix: '', + }, + output: { + response: { + status: 200, + body: [ + { + output: { + body: { + XML: {}, + FORM: {}, + JSON: { + merge_data: [ + { merged_user: '4eb021e9-a2af-4926-ae82-fe996d12f3c5', retained_user: '12345' }, + ], + }, + JSON_ARRAY: {}, + }, + type: 'REST', + files: {}, + method: 'POST', + userId: '12345', + params: {}, + headers: { + 'Content-Type': 'application/json', + Authorization: 'Basic VzBaSE5NUEkyTzRLSEo0OFpJTFpBQ1JBOmR1bW15QXBpS2V5', + }, + version: '1', + endpoint: + 'https://api-01.moengage.com/v1/customer/merge?app_id=W0ZHNMPI2O4KHJ48ZILZACRA', + }, + statusCode: 200, + }, + ], + }, + }, + }, + { + name: 'moengage', + description: 'Test 15', + feature: 'processor', + module: 'destination', + version: 'v0', + input: { + request: { + body: [ + { + message: { + messageId: 'adc7c2d0-0ebf-4593-b878-a0eb75932820', + originalTimestamp: '2023-03-09T00:09:53.235+05:30', + receivedAt: '2023-03-09T00:09:51.292+05:30', + request_ip: '[::1]', + rudderId: '1703da0d-2472-459c-9bf0-4e7b66b4673a', + sentAt: '2023-03-09T00:09:53.235+05:30', + timestamp: '2023-03-09T00:09:51.291+05:30', + type: 'alias', + userId: '12345', + }, + destination: { + ID: '1iuTZs6eEZVMm6GjRBe6bNShaL3', + Name: 'MoEngage Testing', + DestinationDefinition: { + ID: '1iu4802Tx27kNC4KNYYou6D8jzL', + Name: 'MOENGAGE', + DisplayName: 'MoEngage', + Config: { + destConfig: { defaultConfig: ['apiId', 'apiKey', 'region'] }, + excludeKeys: [], + includeKeys: [], + supportedSourceTypes: [ + 'android', + 'ios', + 'web', + 'unity', + 'amp', + 'cloud', + 'reactnative', + ], + }, + }, + Config: { + apiId: 'W0ZHNMPI2O4KHJ48ZILZACRA', + apiKey: 'dummyApiKey', + eventDelivery: false, + eventDeliveryTS: 1602757086384, + region: 'US', + }, + Enabled: true, + Transformations: [], + IsProcessorEnabled: true, + }, + }, + ], + method: 'POST', + }, + pathSuffix: '', + }, + output: { + response: { + status: 200, + body: [ + { + error: 'Missing required value from "previousId"', + statTags: { + destType: 'MOENGAGE', + errorCategory: 'dataValidation', + errorType: 'instrumentation', + feature: 'processor', + implementation: 'native', + module: 'destination', + }, + statusCode: 400, + }, + ], + }, + }, + }, +]; diff --git a/test/integrations/destinations/moengage/router/data.ts b/test/integrations/destinations/moengage/router/data.ts new file mode 100644 index 0000000000..a5664906e5 --- /dev/null +++ b/test/integrations/destinations/moengage/router/data.ts @@ -0,0 +1,480 @@ +export const data = [ + { + name: 'moengage', + description: 'Test 0', + feature: 'router', + module: 'destination', + version: 'v0', + input: { + request: { + body: { + input: [ + { + message: { + anonymousId: '4eb021e9-a2af-4926-ae82-fe996d12f3c5', + channel: 'web', + context: { + timezone: 'Asia/Tokyo', + app: { + build: '1.0.0', + name: 'RudderLabs JavaScript SDK', + namespace: 'com.rudderlabs.javascript', + version: '1.1.6', + }, + library: { + name: 'RudderLabs JavaScript SDK', + version: '1.1.6', + }, + locale: 'en-GB', + os: { + name: '', + version: '', + }, + page: { + path: '/testing/script-test.html', + referrer: '', + search: '', + title: '', + url: 'http://localhost:3243/testing/script-test.html', + }, + screen: { + density: 2, + }, + traits: { + company: { + id: 'abc123', + }, + createdAt: 'Thu Mar 24 2016 17:46:45 GMT+0000 (UTC)', + email: 'rudderTest@gmail.com', + name: 'Rudder Test', + plan: 'Enterprise', + }, + userAgent: + 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.80 Safari/537.36', + }, + event: 'Order Completed', + integrations: { + All: true, + }, + messageId: 'a0adfab9-baf7-4e09-a2ce-bbe2844c324a', + originalTimestamp: '2020-10-16T08:10:12.782Z', + properties: { + checkout_id: 'what is checkout id here??', + coupon: 'APPARELSALE', + currency: 'GBP', + order_id: 'transactionId', + products: [ + { + brand: '', + category: 'Merch', + currency: 'GBP', + image_url: 'https://www.example.com/product/bacon-jam.jpg', + name: 'Food/Drink', + position: 1, + price: 3, + product_id: 'product-bacon-jam', + quantity: 2, + sku: 'sku-1', + typeOfProduct: 'Food', + url: 'https://www.example.com/product/bacon-jam', + value: 6, + variant: 'Extra topped', + }, + { + brand: 'Levis', + category: 'Merch', + currency: 'GBP', + image_url: 'https://www.example.com/product/t-shirt.jpg', + name: 'T-Shirt', + position: 2, + price: 12.99, + product_id: 'product-t-shirt', + quantity: 1, + sku: 'sku-2', + typeOfProduct: 'Shirt', + url: 'https://www.example.com/product/t-shirt', + value: 12.99, + variant: 'White', + }, + { + brand: 'Levis', + category: 'Merch', + coupon: 'APPARELSALE', + currency: 'GBP', + image_url: 'https://www.example.com/product/offer-t-shirt.jpg', + name: 'T-Shirt-on-offer', + position: 1, + price: 12.99, + product_id: 'offer-t-shirt', + quantity: 1, + sku: 'sku-3', + typeOfProduct: 'Shirt', + url: 'https://www.example.com/product/offer-t-shirt', + value: 12.99, + variant: 'Black', + }, + ], + revenue: 31.98, + shipping: 4, + value: 31.98, + }, + receivedAt: '2020-10-16T13:40:12.792+05:30', + request_ip: '[::1]', + sentAt: '2020-10-16T08:10:12.783Z', + timestamp: '2020-10-16T13:40:12.791+05:30', + type: 'track', + userId: 'rudder123', + }, + metadata: { + jobId: 1, + }, + destination: { + ID: '1iuTZs6eEZVMm6GjRBe6bNShaL3', + Name: 'MoEngage Testing', + DestinationDefinition: { + ID: '1iu4802Tx27kNC4KNYYou6D8jzL', + Name: 'MOENGAGE', + DisplayName: 'MoEngage', + Config: { + destConfig: { + defaultConfig: ['apiId', 'apiKey', 'region'], + }, + excludeKeys: [], + includeKeys: [], + supportedSourceTypes: [ + 'android', + 'ios', + 'web', + 'unity', + 'amp', + 'cloud', + 'reactnative', + ], + }, + }, + Config: { + apiId: 'W0ZHNMPI2O4KHJ48ZILZACRA', + apiKey: 'dummyApiKey', + eventDelivery: false, + eventDeliveryTS: 1602757086384, + region: 'US', + }, + Enabled: true, + Transformations: [], + IsProcessorEnabled: true, + }, + }, + { + message: { + anonymousId: '4eb021e9-a2af-4926-ae82-fe996d12f3c5', + channel: 'web', + context: { + app: { + build: '1.0.0', + name: 'RudderLabs JavaScript SDK', + namespace: 'com.rudderlabs.javascript', + version: '1.1.6', + }, + library: { + name: 'RudderLabs JavaScript SDK', + version: '1.1.6', + }, + locale: 'en-GB', + os: { + name: '', + version: '', + }, + page: { + path: '/testing/script-test.html', + referrer: '', + search: '', + title: '', + url: 'http://localhost:3243/testing/script-test.html', + }, + screen: { + density: 2, + }, + traits: { + company: { + id: 'abc123', + }, + createdAt: 'Thu Mar 24 2016 17:46:45 GMT+0000 (UTC)', + email: 'rudderTest@gmail.com', + name: 'Rudder Test', + plan: 'Enterprise', + }, + userAgent: + 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.80 Safari/537.36', + }, + integrations: { + All: true, + }, + messageId: 'e108eb05-f6cd-4624-ba8c-568f2e2b3f92', + originalTimestamp: '2020-10-16T08:26:14.938Z', + receivedAt: '2020-10-16T13:56:14.945+05:30', + request_ip: '[::1]', + sentAt: '2020-10-16T08:26:14.939Z', + timestamp: '2020-10-16T13:56:14.944+05:30', + type: 'identify', + userId: 'rudder123', + }, + metadata: { + jobId: 2, + }, + destination: { + ID: '1iuTZs6eEZVMm6GjRBe6bNShaL3', + Name: 'MoEngage Testing', + DestinationDefinition: { + ID: '1iu4802Tx27kNC4KNYYou6D8jzL', + Name: 'MOENGAGE', + DisplayName: 'MoEngage', + Config: { + destConfig: { + defaultConfig: ['apiId', 'apiKey', 'region'], + }, + excludeKeys: [], + includeKeys: [], + supportedSourceTypes: [ + 'android', + 'ios', + 'web', + 'unity', + 'amp', + 'cloud', + 'reactnative', + ], + }, + }, + Config: { + apiId: 'W0ZHNMPI2O4KHJ48ZILZACRA', + apiKey: 'dummyApiKey', + eventDelivery: false, + eventDeliveryTS: 1602757086384, + region: 'US', + }, + Enabled: true, + Transformations: [], + IsProcessorEnabled: true, + }, + }, + ], + destType: 'moengage', + }, + method: 'POST', + }, + }, + output: { + response: { + status: 200, + body: { + output: [ + { + batchedRequest: { + version: '1', + type: 'REST', + method: 'POST', + endpoint: 'https://api-01.moengage.com/v1/event/W0ZHNMPI2O4KHJ48ZILZACRA', + headers: { + 'Content-Type': 'application/json', + 'MOE-APPKEY': 'W0ZHNMPI2O4KHJ48ZILZACRA', + Authorization: 'Basic VzBaSE5NUEkyTzRLSEo0OFpJTFpBQ1JBOmR1bW15QXBpS2V5', + }, + params: {}, + body: { + JSON: { + customer_id: 'rudder123', + type: 'event', + actions: [ + { + action: 'Order Completed', + attributes: { + checkout_id: 'what is checkout id here??', + coupon: 'APPARELSALE', + currency: 'GBP', + order_id: 'transactionId', + 'products[0].brand': '', + 'products[0].category': 'Merch', + 'products[0].currency': 'GBP', + 'products[0].image_url': 'https://www.example.com/product/bacon-jam.jpg', + 'products[0].name': 'Food/Drink', + 'products[0].position': 1, + 'products[0].price': 3, + 'products[0].product_id': 'product-bacon-jam', + 'products[0].quantity': 2, + 'products[0].sku': 'sku-1', + 'products[0].typeOfProduct': 'Food', + 'products[0].url': 'https://www.example.com/product/bacon-jam', + 'products[0].value': 6, + 'products[0].variant': 'Extra topped', + 'products[1].brand': 'Levis', + 'products[1].category': 'Merch', + 'products[1].currency': 'GBP', + 'products[1].image_url': 'https://www.example.com/product/t-shirt.jpg', + 'products[1].name': 'T-Shirt', + 'products[1].position': 2, + 'products[1].price': 12.99, + 'products[1].product_id': 'product-t-shirt', + 'products[1].quantity': 1, + 'products[1].sku': 'sku-2', + 'products[1].typeOfProduct': 'Shirt', + 'products[1].url': 'https://www.example.com/product/t-shirt', + 'products[1].value': 12.99, + 'products[1].variant': 'White', + 'products[2].brand': 'Levis', + 'products[2].category': 'Merch', + 'products[2].coupon': 'APPARELSALE', + 'products[2].currency': 'GBP', + 'products[2].image_url': + 'https://www.example.com/product/offer-t-shirt.jpg', + 'products[2].name': 'T-Shirt-on-offer', + 'products[2].position': 1, + 'products[2].price': 12.99, + 'products[2].product_id': 'offer-t-shirt', + 'products[2].quantity': 1, + 'products[2].sku': 'sku-3', + 'products[2].typeOfProduct': 'Shirt', + 'products[2].url': 'https://www.example.com/product/offer-t-shirt', + 'products[2].value': 12.99, + 'products[2].variant': 'Black', + revenue: 31.98, + shipping: 4, + value: 31.98, + }, + platform: 'web', + app_version: '1.1.6', + current_time: '2020-10-16T13:40:12.791+05:30', + user_timezone_offset: 32400, + }, + ], + }, + JSON_ARRAY: {}, + XML: {}, + FORM: {}, + }, + files: {}, + userId: '4eb021e9-a2af-4926-ae82-fe996d12f3c5', + }, + metadata: [ + { + jobId: 1, + }, + ], + batched: false, + statusCode: 200, + destination: { + ID: '1iuTZs6eEZVMm6GjRBe6bNShaL3', + Name: 'MoEngage Testing', + DestinationDefinition: { + ID: '1iu4802Tx27kNC4KNYYou6D8jzL', + Name: 'MOENGAGE', + DisplayName: 'MoEngage', + Config: { + destConfig: { + defaultConfig: ['apiId', 'apiKey', 'region'], + }, + excludeKeys: [], + includeKeys: [], + supportedSourceTypes: [ + 'android', + 'ios', + 'web', + 'unity', + 'amp', + 'cloud', + 'reactnative', + ], + }, + }, + Config: { + apiId: 'W0ZHNMPI2O4KHJ48ZILZACRA', + apiKey: 'dummyApiKey', + eventDelivery: false, + eventDeliveryTS: 1602757086384, + region: 'US', + }, + Enabled: true, + Transformations: [], + IsProcessorEnabled: true, + }, + }, + { + batchedRequest: { + version: '1', + type: 'REST', + method: 'POST', + endpoint: 'https://api-01.moengage.com/v1/customer/W0ZHNMPI2O4KHJ48ZILZACRA', + headers: { + 'Content-Type': 'application/json', + 'MOE-APPKEY': 'W0ZHNMPI2O4KHJ48ZILZACRA', + Authorization: 'Basic VzBaSE5NUEkyTzRLSEo0OFpJTFpBQ1JBOmR1bW15QXBpS2V5', + }, + params: {}, + body: { + JSON: { + customer_id: 'rudder123', + type: 'customer', + attributes: { + name: 'Rudder Test', + email: 'rudderTest@gmail.com', + created_time: 'Thu Mar 24 2016 17:46:45 GMT+0000 (UTC)', + 'company.id': 'abc123', + createdAt: 'Thu Mar 24 2016 17:46:45 GMT+0000 (UTC)', + plan: 'Enterprise', + }, + }, + JSON_ARRAY: {}, + XML: {}, + FORM: {}, + }, + files: {}, + userId: '4eb021e9-a2af-4926-ae82-fe996d12f3c5', + }, + metadata: [ + { + jobId: 2, + }, + ], + batched: false, + statusCode: 200, + destination: { + ID: '1iuTZs6eEZVMm6GjRBe6bNShaL3', + Name: 'MoEngage Testing', + DestinationDefinition: { + ID: '1iu4802Tx27kNC4KNYYou6D8jzL', + Name: 'MOENGAGE', + DisplayName: 'MoEngage', + Config: { + destConfig: { + defaultConfig: ['apiId', 'apiKey', 'region'], + }, + excludeKeys: [], + includeKeys: [], + supportedSourceTypes: [ + 'android', + 'ios', + 'web', + 'unity', + 'amp', + 'cloud', + 'reactnative', + ], + }, + }, + Config: { + apiId: 'W0ZHNMPI2O4KHJ48ZILZACRA', + apiKey: 'dummyApiKey', + eventDelivery: false, + eventDeliveryTS: 1602757086384, + region: 'US', + }, + Enabled: true, + Transformations: [], + IsProcessorEnabled: true, + }, + }, + ], + }, + }, + }, + }, +]; diff --git a/test/integrations/destinations/monetate/processor/data.ts b/test/integrations/destinations/monetate/processor/data.ts new file mode 100644 index 0000000000..2202ab2b25 --- /dev/null +++ b/test/integrations/destinations/monetate/processor/data.ts @@ -0,0 +1,2796 @@ +export const data = [ + { + name: 'monetate', + description: 'Test 0', + feature: 'processor', + module: 'destination', + version: 'v0', + input: { + request: { + body: [ + { + message: { + anonymousId: 'c82cbdff-e5be-4009-ac78-cdeea09ab4b1', + context: { + screen: { height: 22, width: 11 }, + device: { + id: 'df16bffa-5c3d-4fbb-9bce-3bab098129a7R', + manufacturer: 'Xiaomi', + model: 'Redmi 6', + name: 'xiaomi', + }, + network: { carrier: 'Banglalink' }, + os: { name: 'android', version: '8.1.0' }, + traits: { + address: { city: 'Dhaka', country: 'Bangladesh' }, + anonymousId: 'c82cbdff-e5be-4009-ac78-cdeea09ab4b1', + }, + ip: '0.0.0.0', + }, + traits: { address: { city: 'Kol', country: 'Ind' } }, + event: 'Product Viewed', + integrations: { All: true }, + message_id: 'a80f82be-9bdc-4a9f-b2a5-15621ee41df8', + properties: { monetateId: '1234', product_id: 'prodId' }, + timestamp: '2019-09-01T15:46:51.693229+05:30', + type: 'track', + userId: 'newUser', + }, + destination: { + Config: { + monetateChannel: 'channel', + retailerShortName: 'retailer', + apiKey: 'api-key', + }, + }, + }, + ], + method: 'POST', + }, + pathSuffix: '', + }, + output: { + response: { + status: 200, + body: [ + { + output: { + version: '1', + type: 'REST', + method: 'POST', + endpoint: 'https://engine.monetate.net/api/engine/v1/decide/retailer', + headers: { 'Content-Type': 'application/json' }, + params: {}, + body: { + JSON: { + monetateId: '1234', + events: [ + { eventType: 'monetate:context:IpAddress', ipAddress: '0.0.0.0' }, + { eventType: 'monetate:context:ScreenSize', height: 22, width: 11 }, + { + eventType: 'monetate:context:ProductDetailView', + products: [{ productId: 'prodId', sku: '' }], + }, + ], + customerId: 'newUser', + channel: 'channel', + }, + XML: {}, + JSON_ARRAY: {}, + FORM: {}, + }, + files: {}, + userId: '', + }, + statusCode: 200, + }, + ], + }, + }, + }, + { + name: 'monetate', + description: 'Test 1', + feature: 'processor', + module: 'destination', + version: 'v0', + input: { + request: { + body: [ + { + message: { + anonymousId: 'c82cbdff-e5be-4009-ac78-cdeea09ab4b1', + context: { + screen: { height: 22, width: 11 }, + device: { + id: 'df16bffa-5c3d-4fbb-9bce-3bab098129a7R', + manufacturer: 'Xiaomi', + model: 'Redmi 6', + name: 'xiaomi', + }, + network: { carrier: 'Banglalink' }, + os: { name: 'android', version: '8.1.0' }, + traits: { + address: { city: 'Dhaka', country: 'Bangladesh' }, + anonymousId: 'c82cbdff-e5be-4009-ac78-cdeea09ab4b1', + }, + ip: '0.0.0.0', + }, + traits: { address: { city: 'Kol', country: 'Ind' } }, + event: 'Product Viewed', + integrations: { All: true }, + message_id: 'a80f82be-9bdc-4a9f-b2a5-15621ee41df8', + properties: { monetateId: '1234' }, + timestamp: '2019-09-01T15:46:51.693229+05:30', + type: 'track', + userId: 'newUser', + }, + destination: { + Config: { + monetateChannel: 'channel', + retailerShortName: 'retailer', + apiKey: 'api-key', + }, + }, + }, + ], + method: 'POST', + }, + pathSuffix: '', + }, + output: { + response: { + status: 200, + body: [ + { + error: "'product_id' is a required field for Product Viewed", + statTags: { + destType: 'MONETATE', + errorCategory: 'dataValidation', + errorType: 'instrumentation', + feature: 'processor', + implementation: 'native', + module: 'destination', + }, + statusCode: 400, + }, + ], + }, + }, + }, + { + name: 'monetate', + description: 'Test 2', + feature: 'processor', + module: 'destination', + version: 'v0', + input: { + request: { + body: [ + { + message: { + anonymousId: 'c82cbdff-e5be-4009-ac78-cdeea09ab4b1', + context: { + screen: { height: 22, width: 11 }, + device: { + id: 'df16bffa-5c3d-4fbb-9bce-3bab098129a7R', + manufacturer: 'Xiaomi', + model: 'Redmi 6', + name: 'xiaomi', + }, + network: { carrier: 'Banglalink' }, + os: { name: 'android', version: '8.1.0' }, + traits: { + address: { city: 'Dhaka', country: 'Bangladesh' }, + anonymousId: 'c82cbdff-e5be-4009-ac78-cdeea09ab4b1', + }, + ip: '0.0.0.0', + }, + traits: { address: { city: 'Kol', country: 'Ind' } }, + event: 'Product List Viewed', + integrations: { All: true }, + message_id: 'a80f82be-9bdc-4a9f-b2a5-15621ee41df8', + properties: { monetateId: '1234', products: [{ product_id: 1 }, { product_id: 2 }] }, + timestamp: '2019-09-01T15:46:51.693229+05:30', + type: 'track', + userId: 'newUser', + }, + destination: { + Config: { + monetateChannel: 'channel', + retailerShortName: 'retailer', + apiKey: 'api-key', + }, + }, + }, + ], + method: 'POST', + }, + pathSuffix: '', + }, + output: { + response: { + status: 200, + body: [ + { + output: { + version: '1', + type: 'REST', + method: 'POST', + endpoint: 'https://engine.monetate.net/api/engine/v1/decide/retailer', + headers: { 'Content-Type': 'application/json' }, + params: {}, + body: { + JSON: { + monetateId: '1234', + events: [ + { eventType: 'monetate:context:IpAddress', ipAddress: '0.0.0.0' }, + { eventType: 'monetate:context:ScreenSize', height: 22, width: 11 }, + { eventType: 'monetate:context:ProductThumbnailView', products: ['1', '2'] }, + ], + customerId: 'newUser', + channel: 'channel', + }, + XML: {}, + JSON_ARRAY: {}, + FORM: {}, + }, + files: {}, + userId: '', + }, + statusCode: 200, + }, + ], + }, + }, + }, + { + name: 'monetate', + description: 'Test 3', + feature: 'processor', + module: 'destination', + version: 'v0', + input: { + request: { + body: [ + { + message: { + anonymousId: 'c82cbdff-e5be-4009-ac78-cdeea09ab4b1', + context: { + screen: { height: 22, width: 11 }, + device: { + id: 'df16bffa-5c3d-4fbb-9bce-3bab098129a7R', + manufacturer: 'Xiaomi', + model: 'Redmi 6', + name: 'xiaomi', + }, + network: { carrier: 'Banglalink' }, + os: { name: 'android', version: '8.1.0' }, + traits: { + address: { city: 'Dhaka', country: 'Bangladesh' }, + anonymousId: 'c82cbdff-e5be-4009-ac78-cdeea09ab4b1', + }, + ip: '0.0.0.0', + }, + traits: { address: { city: 'Kol', country: 'Ind' } }, + event: 'Product Added', + integrations: { All: true }, + message_id: 'a80f82be-9bdc-4a9f-b2a5-15621ee41df8', + properties: { + monetateId: '1234', + currency: 'INR', + product_id: 1, + quantity: 1, + cart_value: 250, + sku: 'sku', + }, + timestamp: '2019-09-01T15:46:51.693229+05:30', + type: 'track', + userId: 'newUser', + }, + destination: { + Config: { + monetateChannel: 'channel', + retailerShortName: 'retailer', + apiKey: 'api-key', + }, + }, + }, + ], + method: 'POST', + }, + pathSuffix: '', + }, + output: { + response: { + status: 200, + body: [ + { + output: { + version: '1', + type: 'REST', + method: 'POST', + endpoint: 'https://engine.monetate.net/api/engine/v1/decide/retailer', + headers: { 'Content-Type': 'application/json' }, + params: {}, + body: { + JSON: { + monetateId: '1234', + events: [ + { eventType: 'monetate:context:IpAddress', ipAddress: '0.0.0.0' }, + { eventType: 'monetate:context:ScreenSize', height: 22, width: 11 }, + { + eventType: 'monetate:context:Cart', + cartLines: [ + { pid: '1', sku: 'sku', quantity: 1, value: '250', currency: 'INR' }, + ], + }, + ], + customerId: 'newUser', + channel: 'channel', + }, + XML: {}, + JSON_ARRAY: {}, + FORM: {}, + }, + files: {}, + userId: '', + }, + statusCode: 200, + }, + ], + }, + }, + }, + { + name: 'monetate', + description: 'Test 4', + feature: 'processor', + module: 'destination', + version: 'v0', + input: { + request: { + body: [ + { + message: { + anonymousId: 'c82cbdff-e5be-4009-ac78-cdeea09ab4b1', + context: { + screen: { height: 22, width: 11 }, + device: { + id: 'df16bffa-5c3d-4fbb-9bce-3bab098129a7R', + manufacturer: 'Xiaomi', + model: 'Redmi 6', + name: 'xiaomi', + }, + network: { carrier: 'Banglalink' }, + os: { name: 'android', version: '8.1.0' }, + traits: { + address: { city: 'Dhaka', country: 'Bangladesh' }, + anonymousId: 'c82cbdff-e5be-4009-ac78-cdeea09ab4b1', + }, + ip: '0.0.0.0', + }, + traits: { address: { city: 'Kol', country: 'Ind' } }, + event: 'Signed Up', + integrations: { All: true }, + message_id: 'a80f82be-9bdc-4a9f-b2a5-15621ee41df8', + properties: { plan: 'trial', source: 'social' }, + timestamp: '2019-09-01T15:46:51.693229+05:30', + type: 'track', + userId: 'newUser', + }, + destination: { + Config: { + monetateChannel: 'channel', + retailerShortName: 'retailer', + apiKey: 'api-key', + }, + }, + }, + ], + method: 'POST', + }, + pathSuffix: '', + }, + output: { + response: { + status: 200, + body: [ + { + output: { + version: '1', + type: 'REST', + method: 'POST', + endpoint: 'https://engine.monetate.net/api/engine/v1/decide/retailer', + headers: { 'Content-Type': 'application/json' }, + params: {}, + body: { + JSON: { + events: [ + { eventType: 'monetate:context:IpAddress', ipAddress: '0.0.0.0' }, + { eventType: 'monetate:context:ScreenSize', height: 22, width: 11 }, + ], + customerId: 'newUser', + channel: 'channel', + }, + XML: {}, + JSON_ARRAY: {}, + FORM: {}, + }, + files: {}, + userId: '', + }, + statusCode: 200, + }, + ], + }, + }, + }, + { + name: 'monetate', + description: 'Test 5', + feature: 'processor', + module: 'destination', + version: 'v0', + input: { + request: { + body: [ + { + message: { + anonymousId: 'c82cbdff-e5be-4009-ac78-cdeea09ab4b1', + context: { + screen: { height: 22, width: 11 }, + device: { + id: 'df16bffa-5c3d-4fbb-9bce-3bab098129a7R', + manufacturer: 'Xiaomi', + model: 'Redmi 6', + name: 'xiaomi', + }, + network: { carrier: 'Banglalink' }, + os: { name: 'android', version: '8.1.0' }, + traits: { + address: { city: 'Dhaka', country: 'Bangladesh' }, + anonymousId: 'c82cbdff-e5be-4009-ac78-cdeea09ab4b1', + }, + ip: '0.0.0.0', + }, + traits: { address: { city: 'Kol', country: 'Ind' } }, + name: 'Homepage', + integrations: { All: true }, + message_id: 'a80f82be-9bdc-4a9f-b2a5-15621ee41df8', + properties: { + page: { + url: 'https://example.com/homepage', + path: '/homepage', + referrer: 'https://google.com', + }, + }, + timestamp: '2019-09-01T15:46:51.693229+05:30', + type: 'screen', + userId: 'newUser', + }, + destination: { + Config: { + monetateChannel: 'channel', + retailerShortName: 'retailer', + apiKey: 'api-key', + }, + }, + }, + ], + method: 'POST', + }, + pathSuffix: '', + }, + output: { + response: { + status: 200, + body: [ + { + output: { + version: '1', + type: 'REST', + method: 'POST', + endpoint: 'https://engine.monetate.net/api/engine/v1/decide/retailer', + headers: { 'Content-Type': 'application/json' }, + params: {}, + body: { + JSON: { + events: [{ eventType: 'monetate:context:ScreenSize', height: 22, width: 11 }], + channel: 'channel', + }, + XML: {}, + JSON_ARRAY: {}, + FORM: {}, + }, + files: {}, + userId: '', + }, + statusCode: 200, + }, + ], + }, + }, + }, + { + name: 'monetate', + description: 'Test 6', + feature: 'processor', + module: 'destination', + version: 'v0', + input: { + request: { + body: [ + { + message: { + anonymousId: 'c82cbdff-e5be-4009-ac78-cdeea09ab4b1', + context: { + screen: { height: 22, width: 11 }, + device: { + id: 'df16bffa-5c3d-4fbb-9bce-3bab098129a7R', + manufacturer: 'Xiaomi', + model: 'Redmi 6', + name: 'xiaomi', + }, + network: { carrier: 'Banglalink' }, + os: { name: 'android', version: '8.1.0' }, + traits: { + address: { city: 'Dhaka', country: 'Bangladesh' }, + anonymousId: 'c82cbdff-e5be-4009-ac78-cdeea09ab4b1', + }, + ip: '0.0.0.0', + }, + traits: { address: { city: 'Kol', country: 'Ind' } }, + name: 'Homepage', + integrations: { All: true }, + message_id: 'a80f82be-9bdc-4a9f-b2a5-15621ee41df8', + properties: { + page: { + url: 'https://example.com/homepage', + path: '/homepage', + referrer: 'https://google.com', + category: 'category', + }, + }, + timestamp: '2019-09-01T15:46:51.693229+05:30', + type: 'page', + userId: 'newUser', + }, + destination: { + Config: { + monetateChannel: 'channel', + retailerShortName: 'retailer', + apiKey: 'api-key', + }, + }, + }, + ], + method: 'POST', + }, + pathSuffix: '', + }, + output: { + response: { + status: 200, + body: [ + { + output: { + version: '1', + type: 'REST', + method: 'POST', + endpoint: 'https://engine.monetate.net/api/engine/v1/decide/retailer', + headers: { 'Content-Type': 'application/json' }, + params: {}, + body: { + JSON: { + events: [ + { + eventType: 'monetate:context:PageView', + url: 'https://example.com/homepage', + path: '/homepage', + categories: ['category'], + }, + { eventType: 'monetate:context:Referrer', referrer: 'https://google.com' }, + ], + channel: 'channel', + }, + XML: {}, + JSON_ARRAY: {}, + FORM: {}, + }, + files: {}, + userId: '', + }, + statusCode: 200, + }, + ], + }, + }, + }, + { + name: 'monetate', + description: 'Test 7', + feature: 'processor', + module: 'destination', + version: 'v0', + input: { + request: { + body: [ + { + message: { + anonymousId: 'c82cbdff-e5be-4009-ac78-cdeea09ab4b1', + context: { + screen: { height: 22, width: 11 }, + device: { + id: 'df16bffa-5c3d-4fbb-9bce-3bab098129a7R', + manufacturer: 'Xiaomi', + model: 'Redmi 6', + name: 'xiaomi', + }, + network: { carrier: 'Banglalink' }, + os: { name: 'android', version: '8.1.0' }, + traits: { + address: { city: 'Dhaka', country: 'Bangladesh' }, + anonymousId: 'c82cbdff-e5be-4009-ac78-cdeea09ab4b1', + }, + page: { url: 'https://example.com/homepage', referrer: 'https://google.com' }, + ip: '0.0.0.0', + }, + traits: { address: { city: 'Kol', country: 'Ind' } }, + name: 'Homepage', + integrations: { All: true }, + message_id: 'a80f82be-9bdc-4a9f-b2a5-15621ee41df8', + properties: { + path: '/homepage', + referrer: 'https://google.com', + url: 'https://example.com/homepage', + }, + timestamp: '2019-09-01T15:46:51.693229+05:30', + type: 'page', + userId: 'newUser', + }, + destination: { + Config: { + monetateChannel: 'channel', + retailerShortName: 'retailer', + apiKey: 'api-key', + }, + }, + }, + ], + method: 'POST', + }, + pathSuffix: '', + }, + output: { + response: { + status: 200, + body: [ + { + output: { + version: '1', + type: 'REST', + method: 'POST', + endpoint: 'https://engine.monetate.net/api/engine/v1/decide/retailer', + headers: { 'Content-Type': 'application/json' }, + params: {}, + body: { + JSON: { + events: [ + { eventType: 'monetate:context:PageView', url: 'https://example.com/homepage' }, + { eventType: 'monetate:context:Referrer', referrer: 'https://google.com' }, + ], + channel: 'channel', + }, + XML: {}, + JSON_ARRAY: {}, + FORM: {}, + }, + files: {}, + userId: '', + }, + statusCode: 200, + }, + ], + }, + }, + }, + { + name: 'monetate', + description: 'Test 8', + feature: 'processor', + module: 'destination', + version: 'v0', + input: { + request: { + body: [ + { + message: { + anonymousId: 'c82cbdff-e5be-4009-ac78-cdeea09ab4b1', + context: { + screen: { height: 22, width: 11 }, + device: { + id: 'df16bffa-5c3d-4fbb-9bce-3bab098129a7R', + manufacturer: 'Xiaomi', + model: 'Redmi 6', + name: 'xiaomi', + }, + network: { carrier: 'Banglalink' }, + os: { name: 'android', version: '8.1.0' }, + traits: { + address: { city: 'Dhaka', country: 'Bangladesh' }, + anonymousId: 'c82cbdff-e5be-4009-ac78-cdeea09ab4b1', + }, + ip: '0.0.0.0', + }, + traits: { address: { city: 'Kol', country: 'Ind' } }, + event: 'Product Added', + integrations: { All: true }, + message_id: 'a80f82be-9bdc-4a9f-b2a5-15621ee41df8', + properties: { + currency: 'INR', + product_id: 1, + quantity: 1, + cart_value: 250, + page: { + url: 'url', + path: 'path', + category: 'category', + breadcrumbs: 'breadcrumbs', + }, + }, + timestamp: '2019-09-01T15:46:51.693229+05:30', + type: 'track', + userId: 'newUser', + }, + destination: { Config: { retailerShortName: 'retailer', apiKey: 'api-key' } }, + }, + ], + method: 'POST', + }, + pathSuffix: '', + }, + output: { + response: { + status: 200, + body: [ + { + output: { + version: '1', + type: 'REST', + method: 'POST', + endpoint: 'https://engine.monetate.net/api/engine/v1/decide/retailer', + headers: { 'Content-Type': 'application/json' }, + params: {}, + body: { + JSON: { + events: [ + { eventType: 'monetate:context:IpAddress', ipAddress: '0.0.0.0' }, + { + eventType: 'monetate:context:PageView', + url: 'url', + path: 'path', + categories: ['category'], + breadcrumbs: ['breadcrumbs'], + }, + { eventType: 'monetate:context:ScreenSize', height: 22, width: 11 }, + { + eventType: 'monetate:context:Cart', + cartLines: [ + { pid: '1', sku: '', quantity: 1, value: '250', currency: 'INR' }, + ], + }, + ], + customerId: 'newUser', + }, + XML: {}, + JSON_ARRAY: {}, + FORM: {}, + }, + files: {}, + userId: '', + }, + statusCode: 200, + }, + ], + }, + }, + }, + { + name: 'monetate', + description: 'Test 9', + feature: 'processor', + module: 'destination', + version: 'v0', + input: { + request: { + body: [ + { + message: { + type: 'identify', + sentAt: '2020-09-03T05:48:50.813Z', + userId: 'user101', + channel: 'web', + context: { + os: { name: '', version: '' }, + app: { + name: 'RudderLabs JavaScript SDK', + build: '1.0.0', + version: '1.1.3', + namespace: 'com.rudderlabs.javascript', + }, + page: { + url: 'http://localhost:1111/monetateRudder.html', + path: '/monetateRudder.html', + title: 'MIxpanel Test', + search: '', + referrer: 'http://localhost:1111/', + }, + locale: 'en-GB', + screen: { density: 2.5 }, + traits: { city: 'Bangalore', name: 'Manashi', country: 'India' }, + library: { name: 'RudderLabs JavaScript SDK', version: '1.1.3' }, + userAgent: + 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.83 Safari/537.36', + }, + messageId: 'ab1bb13b-037e-4269-b7ce-79262fbfd964', + anonymousId: + 'RudderEncrypt:U2FsdGVkX19Iqki3tnJjjeUzFWOegZjPY3iYQOPJJSQaTUxTWedGBeEOyFE/hfddGtmaZJnf/HBtc/EDoRjKEA==', + integrations: { All: true }, + originalTimestamp: '2020-09-03T05:48:50.813Z', + }, + destination: { + Config: { + monetateChannel: 'channel', + retailerShortName: 'retailer', + apiKey: 'api-key', + }, + }, + }, + ], + method: 'POST', + }, + pathSuffix: '', + }, + output: { + response: { + status: 200, + body: [ + { + error: 'Event type identify is not supported', + statTags: { + destType: 'MONETATE', + errorCategory: 'dataValidation', + errorType: 'instrumentation', + feature: 'processor', + implementation: 'native', + module: 'destination', + }, + statusCode: 400, + }, + ], + }, + }, + }, + { + name: 'monetate', + description: 'Test 10', + feature: 'processor', + module: 'destination', + version: 'v0', + input: { + request: { + body: [ + { + message: { + type: 'track', + event: 'Product Added', + sentAt: '2020-09-03T05:48:50.815Z', + userId: 'user101', + channel: 'web', + context: { + ip: '11.0.0.0', + os: { name: '', version: '' }, + app: { + name: 'RudderLabs JavaScript SDK', + build: '1.0.0', + version: '1.1.3', + namespace: 'com.rudderlabs.javascript', + }, + page: { + url: 'http://localhost:1111/monetateRudder.html', + path: '/monetateRudder.html', + title: 'MIxpanel Test', + search: '', + referrer: 'http://localhost:1111/', + }, + locale: 'en-GB', + screen: { density: 2.5 }, + traits: { city: 'Bangalore', name: 'Manashi', country: 'India' }, + library: { name: 'RudderLabs JavaScript SDK', version: '1.1.3' }, + userAgent: + 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.83 Safari/537.36', + }, + messageId: '0189ef26-5b64-47af-bd4a-f369155b74b0', + properties: { cart_value: 30, product_id: 'pp10001900011', user_actual_id: 12345 }, + anonymousId: 'anony11111111', + integrations: { All: true }, + originalTimestamp: '2020-09-03T05:48:50.814Z', + }, + destination: { + Config: { + monetateChannel: 'channel', + retailerShortName: 'retailer', + apiKey: 'api-key', + }, + }, + }, + ], + method: 'POST', + }, + pathSuffix: '', + }, + output: { + response: { + status: 200, + body: [ + { + error: + "'product_id', 'quantity', 'cart_value' are required fields and 'quantity' should be a number for Product Added", + statTags: { + destType: 'MONETATE', + errorCategory: 'dataValidation', + errorType: 'instrumentation', + feature: 'processor', + implementation: 'native', + module: 'destination', + }, + statusCode: 400, + }, + ], + }, + }, + }, + { + name: 'monetate', + description: 'Test 11', + feature: 'processor', + module: 'destination', + version: 'v0', + input: { + request: { + body: [ + { + message: { + name: 'Home Page', + type: 'page', + sentAt: '2020-09-03T05:48:50.816Z', + userId: 'user101', + channel: 'web', + context: { + os: { name: '', version: '' }, + app: { + name: 'RudderLabs JavaScript SDK', + build: '1.0.0', + version: '1.1.3', + namespace: 'com.rudderlabs.javascript', + }, + page: { + url: 'https://google.com', + path: 'https://google.com', + title: 'MIxpanel Test', + search: '', + referrer: 'google', + }, + locale: 'en-GB', + screen: { density: 2.5 }, + traits: { city: 'Bangalore', name: 'Manashi', country: 'India' }, + library: { name: 'RudderLabs JavaScript SDK', version: '1.1.3' }, + userAgent: + 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.83 Safari/537.36', + }, + messageId: '1d263f9b-d5e9-4a3b-ae4a-403129ef9b7c', + properties: { + url: 'https://google.com', + name: 'Home Page', + path: 'https://google.com', + title: 'MIxpanel Test', + search: '', + referrer: 'google', + }, + anonymousId: + 'RudderEncrypt:U2FsdGVkX19Iqki3tnJjjeUzFWOegZjPY3iYQOPJJSQaTUxTWedGBeEOyFE/hfddGtmaZJnf/HBtc/EDoRjKEA==', + integrations: { All: true }, + originalTimestamp: '2020-09-03T05:48:50.816Z', + }, + destination: { + Config: { + monetateChannel: 'channel', + retailerShortName: 'retailer', + apiKey: 'api-key', + }, + }, + }, + ], + method: 'POST', + }, + pathSuffix: '', + }, + output: { + response: { + status: 200, + body: [ + { + output: { + version: '1', + type: 'REST', + method: 'POST', + endpoint: 'https://engine.monetate.net/api/engine/v1/decide/retailer', + headers: { 'Content-Type': 'application/json' }, + params: {}, + body: { + JSON: { + events: [ + { + eventType: 'monetate:context:PageView', + url: 'https://google.com', + path: 'https://google.com', + }, + { eventType: 'monetate:context:Referrer', referrer: 'google' }, + ], + channel: 'channel', + }, + XML: {}, + JSON_ARRAY: {}, + FORM: {}, + }, + files: {}, + userId: '', + }, + statusCode: 200, + }, + ], + }, + }, + }, + { + name: 'monetate', + description: 'Test 12', + feature: 'processor', + module: 'destination', + version: 'v0', + input: { + request: { + body: [ + { + message: { + name: 'Login Page Name', + type: 'page', + sentAt: '2020-09-03T05:48:50.820Z', + userId: 'user202', + channel: 'web', + context: { + ip: '22.0.0.0', + os: { name: '', version: '' }, + app: { + name: 'RudderLabs JavaScript SDK', + build: '1.0.0', + version: '1.1.3', + namespace: 'com.rudderlabs.javascript', + }, + page: { + url: 'https://geeks.com', + path: 'https://geeks.com', + title: 'LOGIN PAGE OF GEEKSFORGEEKS', + search: '', + referrer: 'geeksforgeeks', + }, + locale: 'en-GB', + screen: { density: 2.5 }, + traits: { email: 'rudder@mysite.com' }, + userId: 'user202', + library: { name: 'RudderLabs JavaScript SDK', version: '1.1.3' }, + userAgent: + 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.83 Safari/537.36', + }, + category: 'Login Category', + messageId: '8073f133-14cc-4b6b-8043-9e5bb8d17698', + properties: { + url: 'https://geeks.com', + name: 'Login Page Name', + path: 'https://geeks.com', + title: 'LOGIN PAGE OF GEEKSFORGEEKS', + search: '', + category: 'Login Category', + referrer: 'geeksforgeeks', + }, + anonymousId: + 'RudderEncrypt:U2FsdGVkX19Iqki3tnJjjeUzFWOegZjPY3iYQOPJJSQaTUxTWedGBeEOyFE/hfddGtmaZJnf/HBtc/EDoRjKEA==', + integrations: { All: true }, + originalTimestamp: '2020-09-03T05:48:50.819Z', + }, + destination: { + Config: { + monetateChannel: 'channel', + retailerShortName: 'retailer', + apiKey: 'api-key', + }, + }, + }, + ], + method: 'POST', + }, + pathSuffix: '', + }, + output: { + response: { + status: 200, + body: [ + { + output: { + version: '1', + type: 'REST', + method: 'POST', + endpoint: 'https://engine.monetate.net/api/engine/v1/decide/retailer', + headers: { 'Content-Type': 'application/json' }, + params: {}, + body: { + JSON: { + events: [ + { + eventType: 'monetate:context:PageView', + url: 'https://geeks.com', + path: 'https://geeks.com', + }, + { eventType: 'monetate:context:Referrer', referrer: 'geeksforgeeks' }, + ], + channel: 'channel', + }, + XML: {}, + JSON_ARRAY: {}, + FORM: {}, + }, + files: {}, + userId: '', + }, + statusCode: 200, + }, + ], + }, + }, + }, + { + name: 'monetate', + description: 'Test 13', + feature: 'processor', + module: 'destination', + version: 'v0', + input: { + request: { + body: [ + { + message: { + type: 'track', + event: 'Cart Viewed', + sentAt: '2020-09-03T05:48:50.820Z', + userId: 'user202', + channel: 'web', + context: { + ip: '22.0.0.0', + os: { name: '', version: '' }, + app: { + name: 'RudderLabs JavaScript SDK', + build: '1.0.0', + version: '1.1.3', + namespace: 'com.rudderlabs.javascript', + }, + page: { + url: 'http://localhost:1111/monetateRudder.html', + path: '/monetateRudder.html', + title: 'MIxpanel Test', + search: '', + referrer: 'http://localhost:1111/', + }, + locale: 'en-GB', + screen: { density: 2.5 }, + traits: { email: 'rudder@mysite.com' }, + library: { name: 'RudderLabs JavaScript SDK', version: '1.1.3' }, + userAgent: + 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.83 Safari/537.36', + }, + messageId: '21e78620-748a-4c1c-8570-385206fc61d6', + properties: { + products: [ + { + details: 'Apple iphone 7', + currency: 'INR', + quantity: '1', + product_id: 'p2022222', + }, + { price: '90', details: 'Apple iphone 8', quantity: '2', product_id: 'p201111' }, + ], + }, + anonymousId: 'anony222222222', + integrations: { All: true }, + originalTimestamp: '2020-09-03T05:48:50.820Z', + }, + destination: { + Config: { + monetateChannel: 'channel', + retailerShortName: 'retailer', + apiKey: 'api-key', + }, + }, + }, + ], + method: 'POST', + }, + pathSuffix: '', + }, + output: { + response: { + status: 200, + body: [ + { + error: + "'quantity', 'price' and 'product_id' are required fields and 'quantity' and 'price' should be a number for all products for Cart Viewed", + statTags: { + destType: 'MONETATE', + errorCategory: 'dataValidation', + errorType: 'instrumentation', + feature: 'processor', + implementation: 'native', + module: 'destination', + }, + statusCode: 400, + }, + ], + }, + }, + }, + { + name: 'monetate', + description: 'Test 14', + feature: 'processor', + module: 'destination', + version: 'v0', + input: { + request: { + body: [ + { + message: { + type: 'track', + event: 'cutom event track call', + sentAt: '2020-09-03T05:48:50.821Z', + userId: 'user202', + channel: 'web', + context: { + ip: '11.0.0.0', + os: { name: '', version: '' }, + app: { + name: 'RudderLabs JavaScript SDK', + build: '1.0.0', + version: '1.1.3', + namespace: 'com.rudderlabs.javascript', + }, + page: { + url: 'http://localhost:1111/monetateRudder.html', + path: '/monetateRudder.html', + title: 'MIxpanel Test', + search: '', + referrer: 'http://localhost:1111/', + }, + locale: 'en-GB', + screen: { density: 2.5 }, + traits: { email: 'rudder@mysite.com' }, + userId: 'user101', + library: { name: 'RudderLabs JavaScript SDK', version: '1.1.3' }, + userAgent: + 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.83 Safari/537.36', + }, + messageId: 'be896347-8e93-4e11-8d0a-67f08b33d969', + properties: { details: 'this is custom trackl call' }, + anonymousId: + 'RudderEncrypt:U2FsdGVkX19Iqki3tnJjjeUzFWOegZjPY3iYQOPJJSQaTUxTWedGBeEOyFE/hfddGtmaZJnf/HBtc/EDoRjKEA==', + integrations: { All: true }, + originalTimestamp: '2020-09-03T05:48:50.821Z', + }, + destination: { + Config: { + monetateChannel: 'channel', + retailerShortName: 'retailer', + apiKey: 'api-key', + }, + }, + }, + ], + method: 'POST', + }, + pathSuffix: '', + }, + output: { + response: { + status: 200, + body: [ + { + output: { + version: '1', + type: 'REST', + method: 'POST', + endpoint: 'https://engine.monetate.net/api/engine/v1/decide/retailer', + headers: { 'Content-Type': 'application/json' }, + params: {}, + body: { + JSON: { + events: [ + { eventType: 'monetate:context:IpAddress', ipAddress: '11.0.0.0' }, + { + eventType: 'monetate:context:PageView', + url: 'http://localhost:1111/monetateRudder.html', + path: '/monetateRudder.html', + }, + { + eventType: 'monetate:context:UserAgent', + userAgent: + 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.83 Safari/537.36', + }, + ], + customerId: 'user202', + channel: 'channel', + }, + XML: {}, + JSON_ARRAY: {}, + FORM: {}, + }, + files: {}, + userId: '', + }, + statusCode: 200, + }, + ], + }, + }, + }, + { + name: 'monetate', + description: 'Test 15', + feature: 'processor', + module: 'destination', + version: 'v0', + input: { + request: { + body: [ + { + message: { + name: 'My orders Page Name', + type: 'page', + sentAt: '2020-09-03T05:48:50.822Z', + userId: 'user202', + channel: 'web', + context: { + ip: '33.0.0.0', + os: { name: '', version: '' }, + app: { + name: 'RudderLabs JavaScript SDK', + build: '1.0.0', + version: '1.1.3', + namespace: 'com.rudderlabs.javascript', + }, + page: { + url: 'http://localhost:1111/monetateRudder.html', + path: 'https://geeks.com', + title: 'MIxpanel Test', + search: '', + referrer: 'geeksforgeeks', + }, + locale: 'en-GB', + screen: { density: 2.5 }, + traits: { email: 'rudder@mysite.com' }, + library: { name: 'RudderLabs JavaScript SDK', version: '1.1.3' }, + userAgent: + 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.83 Safari/537.36', + }, + messageId: 'e142299a-e819-4590-b99f-9f74d30d6354', + properties: { + url: 'http://localhost:1111/monetateRudder.html', + name: 'My orders Page Name', + path: 'https://geeks.com', + title: 'MIxpanel Test', + search: '', + referrer: 'geeksforgeeks', + }, + anonymousId: 'anony33333333', + integrations: { All: true }, + originalTimestamp: '2020-09-03T05:48:50.821Z', + }, + destination: { + Config: { + monetateChannel: 'channel', + retailerShortName: 'retailer', + apiKey: 'api-key', + }, + }, + }, + ], + method: 'POST', + }, + pathSuffix: '', + }, + output: { + response: { + status: 200, + body: [ + { + output: { + version: '1', + type: 'REST', + method: 'POST', + endpoint: 'https://engine.monetate.net/api/engine/v1/decide/retailer', + headers: { 'Content-Type': 'application/json' }, + params: {}, + body: { + JSON: { + events: [ + { + eventType: 'monetate:context:PageView', + url: 'http://localhost:1111/monetateRudder.html', + path: 'https://geeks.com', + }, + { eventType: 'monetate:context:Referrer', referrer: 'geeksforgeeks' }, + ], + channel: 'channel', + }, + XML: {}, + JSON_ARRAY: {}, + FORM: {}, + }, + files: {}, + userId: '', + }, + statusCode: 200, + }, + ], + }, + }, + }, + { + name: 'monetate', + description: 'Test 16', + feature: 'processor', + module: 'destination', + version: 'v0', + input: { + request: { + body: [ + { + message: { + type: 'track', + event: 'Product Viewed', + sentAt: '2020-09-03T05:48:50.823Z', + userId: 'user202', + channel: 'web', + context: { + os: { name: '', version: '' }, + app: { + name: 'RudderLabs JavaScript SDK', + build: '1.0.0', + version: '1.1.3', + namespace: 'com.rudderlabs.javascript', + }, + page: { + url: 'http://localhost:1111/monetateRudder.html', + path: '/monetateRudder.html', + title: 'MIxpanel Test', + search: '', + referrer: 'http://localhost:1111/', + }, + locale: 'en-GB', + screen: { density: 2.5 }, + traits: { email: 'rudder@mysite.com' }, + userId: 'user101', + library: { name: 'RudderLabs JavaScript SDK', version: '1.1.3' }, + userAgent: + 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.83 Safari/537.36', + }, + messageId: '5fc62a0d-835b-45c9-bfea-f2f5e57340db', + properties: { + sku: '123', + products: [{ product_id: 'p1234678' }], + product_id: 'P303333333', + }, + anonymousId: + 'RudderEncrypt:U2FsdGVkX19Iqki3tnJjjeUzFWOegZjPY3iYQOPJJSQaTUxTWedGBeEOyFE/hfddGtmaZJnf/HBtc/EDoRjKEA==', + integrations: { All: true }, + originalTimestamp: '2020-09-03T05:48:50.822Z', + }, + destination: { + Config: { + monetateChannel: 'channel', + retailerShortName: 'retailer', + apiKey: 'api-key', + }, + }, + }, + ], + method: 'POST', + }, + pathSuffix: '', + }, + output: { + response: { + status: 200, + body: [ + { + output: { + version: '1', + type: 'REST', + method: 'POST', + endpoint: 'https://engine.monetate.net/api/engine/v1/decide/retailer', + headers: { 'Content-Type': 'application/json' }, + params: {}, + body: { + JSON: { + events: [ + { + eventType: 'monetate:context:PageView', + url: 'http://localhost:1111/monetateRudder.html', + path: '/monetateRudder.html', + }, + { + eventType: 'monetate:context:UserAgent', + userAgent: + 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.83 Safari/537.36', + }, + { + eventType: 'monetate:context:ProductDetailView', + products: [{ productId: 'P303333333', sku: '123' }], + }, + ], + customerId: 'user202', + channel: 'channel', + }, + XML: {}, + JSON_ARRAY: {}, + FORM: {}, + }, + files: {}, + userId: '', + }, + statusCode: 200, + }, + ], + }, + }, + }, + { + name: 'monetate', + description: 'Test 17', + feature: 'processor', + module: 'destination', + version: 'v0', + input: { + request: { + body: [ + { + message: { + name: 'ONly page name', + type: 'page', + sentAt: '2020-09-03T05:48:50.823Z', + userId: 'user202', + channel: 'web', + context: { + os: { name: '', version: '' }, + app: { + name: 'RudderLabs JavaScript SDK', + build: '1.0.0', + version: '1.1.3', + namespace: 'com.rudderlabs.javascript', + }, + page: { + url: 'http://localhost:1111/monetateRudder.html', + path: '/monetateRudder.html', + title: 'MIxpanel Test', + search: '', + referrer: 'http://localhost:1111/', + }, + locale: 'en-GB', + screen: { density: 2.5 }, + traits: { email: 'rudder@mysite.com' }, + library: { name: 'RudderLabs JavaScript SDK', version: '1.1.3' }, + userAgent: + 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.83 Safari/537.36', + }, + messageId: '1aca7c68-148e-4ef3-a828-d89daf403632', + properties: { + url: 'http://localhost:1111/monetateRudder.html', + name: 'ONly page name', + path: '/monetateRudder.html', + title: 'MIxpanel Test', + search: '', + referrer: 'http://localhost:1111/', + }, + anonymousId: + 'RudderEncrypt:U2FsdGVkX19Iqki3tnJjjeUzFWOegZjPY3iYQOPJJSQaTUxTWedGBeEOyFE/hfddGtmaZJnf/HBtc/EDoRjKEA==', + integrations: { All: true }, + originalTimestamp: '2020-09-03T05:48:50.823Z', + }, + destination: { + Config: { + monetateChannel: 'channel', + retailerShortName: 'retailer', + apiKey: 'api-key', + }, + }, + }, + ], + method: 'POST', + }, + pathSuffix: '', + }, + output: { + response: { + status: 200, + body: [ + { + output: { + version: '1', + type: 'REST', + method: 'POST', + endpoint: 'https://engine.monetate.net/api/engine/v1/decide/retailer', + headers: { 'Content-Type': 'application/json' }, + params: {}, + body: { + JSON: { + events: [ + { + eventType: 'monetate:context:PageView', + url: 'http://localhost:1111/monetateRudder.html', + path: '/monetateRudder.html', + }, + { eventType: 'monetate:context:Referrer', referrer: 'http://localhost:1111/' }, + ], + channel: 'channel', + }, + XML: {}, + JSON_ARRAY: {}, + FORM: {}, + }, + files: {}, + userId: '', + }, + statusCode: 200, + }, + ], + }, + }, + }, + { + name: 'monetate', + description: 'Test 18', + feature: 'processor', + module: 'destination', + version: 'v0', + input: { + request: { + body: [ + { + message: { + type: 'track', + event: 'Order Completed', + sentAt: '2020-09-03T05:48:50.824Z', + userId: 'user202', + channel: 'web', + context: { + ip: '11.0.0.0', + os: { name: '', version: '' }, + app: { + name: 'RudderLabs JavaScript SDK', + build: '1.0.0', + version: '1.1.3', + namespace: 'com.rudderlabs.javascript', + }, + page: { + url: 'http://localhost:1111/monetateRudder.html', + path: '/monetateRudder.html', + title: 'MIxpanel Test', + search: '', + referrer: 'http://localhost:1111/', + }, + locale: 'en-GB', + screen: { density: 2.5 }, + traits: { email: 'rudder@mysite.com' }, + library: { name: 'RudderLabs JavaScript SDK', version: '1.1.3' }, + moneateId: 'Monetate10111111', + userAgent: + 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.83 Safari/537.36', + }, + messageId: '19ef9a4e-fb49-42f2-8eba-b0bb7c934289', + properties: { + order_id: 'orderCompleted101', + products: [ + { + sku: 'sku 1 for order completed', + price: 8900, + currency: 'INR', + quantity: 1, + product_id: 'p2022222', + }, + { + sku: 'sku 2 for order completed', + price: 90, + quantity: 2, + product_id: 'p201111', + }, + ], + }, + anonymousId: 'anony11111111', + integrations: { All: true }, + originalTimestamp: '2020-09-03T05:48:50.824Z', + }, + destination: { + Config: { + monetateChannel: 'channel', + retailerShortName: 'retailer', + apiKey: 'api-key', + }, + }, + }, + ], + method: 'POST', + }, + pathSuffix: '', + }, + output: { + response: { + status: 200, + body: [ + { + output: { + version: '1', + type: 'REST', + method: 'POST', + endpoint: 'https://engine.monetate.net/api/engine/v1/decide/retailer', + headers: { 'Content-Type': 'application/json' }, + params: {}, + body: { + JSON: { + events: [ + { eventType: 'monetate:context:IpAddress', ipAddress: '11.0.0.0' }, + { + eventType: 'monetate:context:PageView', + url: 'http://localhost:1111/monetateRudder.html', + path: '/monetateRudder.html', + }, + { + eventType: 'monetate:context:UserAgent', + userAgent: + 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.83 Safari/537.36', + }, + { + eventType: 'monetate:context:Purchase', + purchaseId: 'orderCompleted101', + purchaseLines: [ + { + pid: 'p2022222', + sku: 'sku 1 for order completed', + quantity: 1, + value: '8900.00', + currency: 'INR', + }, + { + pid: 'p201111', + sku: 'sku 2 for order completed', + quantity: 2, + value: '180.00', + currency: 'USD', + }, + ], + }, + ], + customerId: 'user202', + channel: 'channel', + }, + XML: {}, + JSON_ARRAY: {}, + FORM: {}, + }, + files: {}, + userId: '', + }, + statusCode: 200, + }, + ], + }, + }, + }, + { + name: 'monetate', + description: 'Test 19', + feature: 'processor', + module: 'destination', + version: 'v0', + input: { + request: { + body: [ + { + message: { + type: 'track', + event: 'Order Completed', + sentAt: '2020-09-03T05:48:50.824Z', + channel: 'web', + context: { + ip: '11.0.0.0', + os: { name: '', version: '' }, + app: { + name: 'RudderLabs JavaScript SDK', + build: '1.0.0', + version: '1.1.3', + namespace: 'com.rudderlabs.javascript', + }, + page: { + url: 'http://localhost:1111/monetateRudder.html', + path: '/monetateRudder.html', + title: 'MIxpanel Test', + search: '', + referrer: 'http://localhost:1111/', + }, + locale: 'en-GB', + screen: { density: 2.5 }, + traits: { email: 'rudder@mysite.com' }, + library: { name: 'RudderLabs JavaScript SDK', version: '1.1.3' }, + moneateId: 'Monetate10111111', + userAgent: + 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.83 Safari/537.36', + }, + messageId: '19ef9a4e-fb49-42f2-8eba-b0bb7c934289', + properties: { + order_id: 'orderCompleted101', + products: [ + { + sku: 'sku 1 for order completed', + price: 8900, + currency: 'INR', + quantity: 1, + product_id: 'p2022222', + }, + { + sku: 'sku 2 for order completed', + price: 90, + quantity: 2, + product_id: 'p201111', + }, + ], + }, + anonymousId: 'anony11111111', + integrations: { All: true }, + originalTimestamp: '2020-09-03T05:48:50.824Z', + }, + destination: { + Config: { + monetateChannel: 'channel', + retailerShortName: 'retailer', + apiKey: 'api-key', + }, + }, + }, + ], + method: 'POST', + }, + pathSuffix: '', + }, + output: { + response: { + status: 200, + body: [ + { + output: { + version: '1', + type: 'REST', + method: 'POST', + endpoint: 'https://engine.monetate.net/api/engine/v1/decide/retailer', + headers: { 'Content-Type': 'application/json' }, + params: {}, + body: { + JSON: { + events: [ + { eventType: 'monetate:context:IpAddress', ipAddress: '11.0.0.0' }, + { + eventType: 'monetate:context:PageView', + url: 'http://localhost:1111/monetateRudder.html', + path: '/monetateRudder.html', + }, + { + eventType: 'monetate:context:UserAgent', + userAgent: + 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.83 Safari/537.36', + }, + { + eventType: 'monetate:context:Purchase', + purchaseId: 'orderCompleted101', + purchaseLines: [ + { + pid: 'p2022222', + sku: 'sku 1 for order completed', + quantity: 1, + value: '8900.00', + currency: 'INR', + }, + { + pid: 'p201111', + sku: 'sku 2 for order completed', + quantity: 2, + value: '180.00', + currency: 'USD', + }, + ], + }, + ], + deviceId: 'anony11111111', + channel: 'channel', + }, + XML: {}, + JSON_ARRAY: {}, + FORM: {}, + }, + files: {}, + userId: '', + }, + statusCode: 200, + }, + ], + }, + }, + }, + { + name: 'monetate', + description: 'Test 20', + feature: 'processor', + module: 'destination', + version: 'v0', + input: { + request: { + body: [ + { + message: { + name: 'ip check page name', + type: 'page', + sentAt: '2020-09-03T05:48:50.825Z', + userId: 'user202', + channel: 'web', + context: { + os: { name: '', version: '' }, + app: { + name: 'RudderLabs JavaScript SDK', + build: '1.0.0', + version: '1.1.3', + namespace: 'com.rudderlabs.javascript', + }, + page: { + url: 'https://facebook.com', + path: '/monetateRudder.html', + title: 'MIxpanel Test', + search: '', + referrer: 'http://localhost:1111/', + }, + locale: 'en-GB', + screen: { density: 2.5 }, + traits: { city: 'Sydney', phone: '909077777', country: 'Australia' }, + userId: 'user606', + library: { name: 'RudderLabs JavaScript SDK', version: '1.1.3' }, + userAgent: + 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.83 Safari/537.36', + }, + category: 'ip check page category', + messageId: 'd6aeaf93-d28b-4a60-b8af-2376bebc4094', + properties: { + url: 'https://facebook.com', + name: 'ip check page name', + path: '/monetateRudder.html', + title: 'MIxpanel Test', + search: '', + category: 'ip check page category', + referrer: 'http://localhost:1111/', + }, + anonymousId: + 'RudderEncrypt:U2FsdGVkX19Iqki3tnJjjeUzFWOegZjPY3iYQOPJJSQaTUxTWedGBeEOyFE/hfddGtmaZJnf/HBtc/EDoRjKEA==', + integrations: { All: true }, + originalTimestamp: '2020-09-03T05:48:50.825Z', + }, + destination: { + Config: { + monetateChannel: 'channel', + retailerShortName: 'retailer', + apiKey: 'api-key', + }, + }, + }, + ], + method: 'POST', + }, + pathSuffix: '', + }, + output: { + response: { + status: 200, + body: [ + { + output: { + version: '1', + type: 'REST', + method: 'POST', + endpoint: 'https://engine.monetate.net/api/engine/v1/decide/retailer', + headers: { 'Content-Type': 'application/json' }, + params: {}, + body: { + JSON: { + events: [ + { + eventType: 'monetate:context:PageView', + url: 'https://facebook.com', + path: '/monetateRudder.html', + }, + { eventType: 'monetate:context:Referrer', referrer: 'http://localhost:1111/' }, + ], + channel: 'channel', + }, + XML: {}, + JSON_ARRAY: {}, + FORM: {}, + }, + files: {}, + userId: '', + }, + statusCode: 200, + }, + ], + }, + }, + }, + { + name: 'monetate', + description: 'Test 21', + feature: 'processor', + module: 'destination', + version: 'v0', + input: { + request: { + body: [ + { + message: { + type: 'identify', + sentAt: '2020-09-04T08:59:41.568Z', + userId: 'user202', + channel: 'web', + context: { + os: { name: '', version: '' }, + app: { + name: 'RudderLabs JavaScript SDK', + build: '1.0.0', + version: '1.1.3', + namespace: 'com.rudderlabs.javascript', + }, + page: { + url: 'http://localhost:1111/monetateRudder.html', + path: '/monetateRudder.html', + title: 'MIxpanel Test', + search: '', + referrer: 'http://localhost:1111/', + }, + locale: 'en-GB', + screen: { density: 2.5 }, + traits: { + city: 'Bangalore', + name: 'Manashi', + email: 'rudder@mysite.com', + country: 'India', + }, + library: { name: 'RudderLabs JavaScript SDK', version: '1.1.3' }, + userAgent: + 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.83 Safari/537.36', + }, + messageId: '6debe993-9b1e-40ca-b2de-9054e86bcdd0', + anonymousId: + 'RudderEncrypt:U2FsdGVkX19Iqki3tnJjjeUzFWOegZjPY3iYQOPJJSQaTUxTWedGBeEOyFE/hfddGtmaZJnf/HBtc/EDoRjKEA==', + integrations: { All: true }, + originalTimestamp: '2020-09-04T08:59:41.567Z', + }, + destination: { + Config: { + monetateChannel: 'channel', + retailerShortName: 'retailer', + apiKey: 'api-key', + }, + }, + }, + ], + method: 'POST', + }, + pathSuffix: '', + }, + output: { + response: { + status: 200, + body: [ + { + error: 'Event type identify is not supported', + statTags: { + destType: 'MONETATE', + errorCategory: 'dataValidation', + errorType: 'instrumentation', + feature: 'processor', + implementation: 'native', + module: 'destination', + }, + statusCode: 400, + }, + ], + }, + }, + }, + { + name: 'monetate', + description: 'Test 22', + feature: 'processor', + module: 'destination', + version: 'v0', + input: { + request: { + body: [ + { + message: { + sentAt: '2020-09-04T08:59:41.568Z', + userId: 'user202', + channel: 'web', + context: { + os: { name: '', version: '' }, + app: { + name: 'RudderLabs JavaScript SDK', + build: '1.0.0', + version: '1.1.3', + namespace: 'com.rudderlabs.javascript', + }, + page: { + url: 'http://localhost:1111/monetateRudder.html', + path: '/monetateRudder.html', + title: 'MIxpanel Test', + search: '', + referrer: 'http://localhost:1111/', + }, + locale: 'en-GB', + screen: { density: 2.5 }, + traits: { + city: 'Bangalore', + name: 'Manashi', + email: 'rudder@mysite.com', + country: 'India', + }, + library: { name: 'RudderLabs JavaScript SDK', version: '1.1.3' }, + userAgent: + 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.83 Safari/537.36', + }, + messageId: '6debe993-9b1e-40ca-b2de-9054e86bcdd0', + anonymousId: + 'RudderEncrypt:U2FsdGVkX19Iqki3tnJjjeUzFWOegZjPY3iYQOPJJSQaTUxTWedGBeEOyFE/hfddGtmaZJnf/HBtc/EDoRjKEA==', + integrations: { All: true }, + originalTimestamp: '2020-09-04T08:59:41.567Z', + }, + destination: { + Config: { + monetateChannel: 'channel', + retailerShortName: 'retailer', + apiKey: 'api-key', + }, + }, + }, + ], + method: 'POST', + }, + pathSuffix: '', + }, + output: { + response: { + status: 200, + body: [ + { + error: 'Event type is required', + statTags: { + destType: 'MONETATE', + errorCategory: 'dataValidation', + errorType: 'instrumentation', + feature: 'processor', + implementation: 'native', + module: 'destination', + }, + statusCode: 400, + }, + ], + }, + }, + }, + { + name: 'monetate', + description: 'Test 23', + feature: 'processor', + module: 'destination', + version: 'v0', + input: { + request: { + body: [ + { + message: { + anonymousId: 'c82cbdff-e5be-4009-ac78-cdeea09ab4b1', + context: { + screen: { density: 2 }, + device: { + id: 'df16bffa-5c3d-4fbb-9bce-3bab098129a7R', + manufacturer: 'Xiaomi', + model: 'Redmi 6', + name: 'xiaomi', + }, + network: { carrier: 'Banglalink' }, + os: { name: 'android', version: '8.1.0' }, + traits: { + address: { city: 'Dhaka', country: 'Bangladesh' }, + anonymousId: 'c82cbdff-e5be-4009-ac78-cdeea09ab4b1', + }, + ip: '0.0.0.0', + }, + traits: { address: { city: 'Kol', country: 'Ind' } }, + name: 'Homepage', + integrations: { All: true }, + message_id: 'a80f82be-9bdc-4a9f-b2a5-15621ee41df8', + properties: { + page: { + url: 'https://example.com/homepage', + path: '/homepage', + referrer: 'https://google.com', + }, + }, + timestamp: '2019-09-01T15:46:51.693229+05:30', + type: 'screen', + userId: 'newUser', + }, + destination: { + Config: { + monetateChannel: 'channel', + retailerShortName: 'retailer', + apiKey: 'api-key', + }, + }, + }, + ], + method: 'POST', + }, + pathSuffix: '', + }, + output: { + response: { + status: 200, + body: [ + { + output: { + version: '1', + type: 'REST', + method: 'POST', + endpoint: 'https://engine.monetate.net/api/engine/v1/decide/retailer', + headers: { 'Content-Type': 'application/json' }, + params: {}, + body: { JSON: { events: [], channel: 'channel' }, XML: {}, JSON_ARRAY: {}, FORM: {} }, + files: {}, + userId: '', + }, + statusCode: 200, + }, + ], + }, + }, + }, + { + name: 'monetate', + description: 'Test 24', + feature: 'processor', + module: 'destination', + version: 'v0', + input: { + request: { + body: [ + { + message: { + type: 'track', + event: 'Order Completed', + sentAt: '2020-09-03T05:48:50.824Z', + userId: 'user202', + channel: 'web', + context: { + ip: '11.0.0.0', + os: { name: '', version: '' }, + app: { + name: 'RudderLabs JavaScript SDK', + build: '1.0.0', + version: '1.1.3', + namespace: 'com.rudderlabs.javascript', + }, + page: { + url: 'http://localhost:1111/monetateRudder.html', + path: '/monetateRudder.html', + title: 'MIxpanel Test', + search: '', + referrer: 'http://localhost:1111/', + }, + locale: 'en-GB', + screen: { density: 2.5 }, + traits: { email: 'rudder@mysite.com' }, + library: { name: 'RudderLabs JavaScript SDK', version: '1.1.3' }, + moneateId: 'Monetate10111111', + userAgent: + 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.83 Safari/537.36', + }, + messageId: '19ef9a4e-fb49-42f2-8eba-b0bb7c934289', + properties: { + order_id: 'orderCompleted101', + products: [ + { + sku: 'sku 1 for order completed', + price: '8900', + currency: 'INR', + quantity: '1', + }, + { + sku: 'sku 2 for order completed', + price: '90', + quantity: '2', + product_id: 'p201111', + }, + ], + }, + anonymousId: 'anony11111111', + integrations: { All: true }, + originalTimestamp: '2020-09-03T05:48:50.824Z', + }, + destination: { + Config: { + monetateChannel: 'channel', + retailerShortName: 'retailer', + apiKey: 'api-key', + }, + }, + }, + ], + method: 'POST', + }, + pathSuffix: '', + }, + output: { + response: { + status: 200, + body: [ + { + error: + "'quantity', 'price' and 'product_id' are required fields and 'quantity' and 'price' should be a number for all products for Order Completed", + statTags: { + destType: 'MONETATE', + errorCategory: 'dataValidation', + errorType: 'instrumentation', + feature: 'processor', + implementation: 'native', + module: 'destination', + }, + statusCode: 400, + }, + ], + }, + }, + }, + { + name: 'monetate', + description: 'Test 25', + feature: 'processor', + module: 'destination', + version: 'v0', + input: { + request: { + body: [ + { + message: { + type: 'track', + event: 'Cart Viewed', + sentAt: '2020-09-03T05:48:50.820Z', + userId: 'user202', + channel: 'web', + context: { + ip: '22.0.0.0', + os: { name: '', version: '' }, + app: { + name: 'RudderLabs JavaScript SDK', + build: '1.0.0', + version: '1.1.3', + namespace: 'com.rudderlabs.javascript', + }, + page: { + url: 'http://localhost:1111/monetateRudder.html', + path: '/monetateRudder.html', + title: 'MIxpanel Test', + search: '', + referrer: 'http://localhost:1111/', + }, + locale: 'en-GB', + screen: { density: 2.5 }, + traits: { email: 'rudder@mysite.com' }, + library: { name: 'RudderLabs JavaScript SDK', version: '1.1.3' }, + userAgent: + 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.83 Safari/537.36', + }, + messageId: '21e78620-748a-4c1c-8570-385206fc61d6', + properties: { + products: [ + { + details: 'Apple iphone 7', + currency: 'INR', + quantity: 1, + price: 2345, + product_id: 'p2022222', + }, + { price: 90, details: 'Apple iphone 8', quantity: 2, product_id: 'p201111' }, + ], + }, + anonymousId: 'anony222222222', + integrations: { All: true }, + originalTimestamp: '2020-09-03T05:48:50.820Z', + }, + destination: { + Config: { + monetateChannel: 'channel', + retailerShortName: 'retailer', + apiKey: 'api-key', + }, + }, + }, + ], + method: 'POST', + }, + pathSuffix: '', + }, + output: { + response: { + status: 200, + body: [ + { + output: { + version: '1', + type: 'REST', + method: 'POST', + endpoint: 'https://engine.monetate.net/api/engine/v1/decide/retailer', + headers: { 'Content-Type': 'application/json' }, + params: {}, + body: { + JSON: { + events: [ + { eventType: 'monetate:context:IpAddress', ipAddress: '22.0.0.0' }, + { + eventType: 'monetate:context:PageView', + url: 'http://localhost:1111/monetateRudder.html', + path: '/monetateRudder.html', + }, + { + eventType: 'monetate:context:UserAgent', + userAgent: + 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.83 Safari/537.36', + }, + { + eventType: 'monetate:context:Cart', + cartLines: [ + { + pid: 'p2022222', + sku: '', + quantity: 1, + value: '2345.00', + currency: 'INR', + }, + { pid: 'p201111', sku: '', quantity: 2, value: '180.00', currency: 'USD' }, + ], + }, + ], + customerId: 'user202', + channel: 'channel', + }, + XML: {}, + JSON_ARRAY: {}, + FORM: {}, + }, + files: {}, + userId: '', + }, + statusCode: 200, + }, + ], + }, + }, + }, + { + name: 'monetate', + description: 'Test 26', + feature: 'processor', + module: 'destination', + version: 'v0', + input: { + request: { + body: [ + { + message: { + anonymousId: 'c82cbdff-e5be-4009-ac78-cdeea09ab4b1', + context: { + screen: { height: 22, width: 11 }, + device: { + id: 'df16bffa-5c3d-4fbb-9bce-3bab098129a7R', + manufacturer: 'Xiaomi', + model: 'Redmi 6', + name: 'xiaomi', + }, + network: { carrier: 'Banglalink' }, + os: { name: 'android', version: '8.1.0' }, + traits: { + address: { city: 'Dhaka', country: 'Bangladesh' }, + anonymousId: 'c82cbdff-e5be-4009-ac78-cdeea09ab4b1', + }, + ip: '0.0.0.0', + }, + traits: { address: { city: 'Kol', country: 'Ind' } }, + event: 'Product Added', + integrations: { All: true }, + message_id: 'a80f82be-9bdc-4a9f-b2a5-15621ee41df8', + properties: { + monetateId: '1234', + currency: 'INR', + quantity: 1, + cart_value: 250, + sku: 'sku', + }, + timestamp: '2019-09-01T15:46:51.693229+05:30', + type: 'track', + userId: 'newUser', + }, + destination: { + Config: { + monetateChannel: 'channel', + retailerShortName: 'retailer', + apiKey: 'api-key', + }, + }, + }, + ], + method: 'POST', + }, + pathSuffix: '', + }, + output: { + response: { + status: 200, + body: [ + { + error: + "'product_id', 'quantity', 'cart_value' are required fields and 'quantity' should be a number for Product Added", + statTags: { + destType: 'MONETATE', + errorCategory: 'dataValidation', + errorType: 'instrumentation', + feature: 'processor', + implementation: 'native', + module: 'destination', + }, + statusCode: 400, + }, + ], + }, + }, + }, + { + name: 'monetate', + description: 'Test 27', + feature: 'processor', + module: 'destination', + version: 'v0', + input: { + request: { + body: [ + { + message: { + anonymousId: 'c82cbdff-e5be-4009-ac78-cdeea09ab4b1', + context: { + screen: { height: 22, width: 11 }, + device: { + id: 'df16bffa-5c3d-4fbb-9bce-3bab098129a7R', + manufacturer: 'Xiaomi', + model: 'Redmi 6', + name: 'xiaomi', + }, + network: { carrier: 'Banglalink' }, + os: { name: 'android', version: '8.1.0' }, + traits: { + address: { city: 'Dhaka', country: 'Bangladesh' }, + anonymousId: 'c82cbdff-e5be-4009-ac78-cdeea09ab4b1', + }, + ip: '0.0.0.0', + }, + traits: { address: { city: 'Kol', country: 'Ind' } }, + event: 'Product List Viewed', + integrations: { All: true }, + message_id: 'a80f82be-9bdc-4a9f-b2a5-15621ee41df8', + properties: { monetateId: '1234', products: [{}, { product_id: 2 }] }, + timestamp: '2019-09-01T15:46:51.693229+05:30', + type: 'track', + userId: 'newUser', + }, + destination: { + Config: { + monetateChannel: 'channel', + retailerShortName: 'retailer', + apiKey: 'api-key', + }, + }, + }, + ], + method: 'POST', + }, + pathSuffix: '', + }, + output: { + response: { + status: 200, + body: [ + { + error: "'product_id' is a required field for all products for Product List Viewed", + statTags: { + destType: 'MONETATE', + errorCategory: 'dataValidation', + errorType: 'instrumentation', + feature: 'processor', + implementation: 'native', + module: 'destination', + }, + statusCode: 400, + }, + ], + }, + }, + }, + { + name: 'monetate', + description: 'Test 28', + feature: 'processor', + module: 'destination', + version: 'v0', + input: { + request: { + body: [ + { + message: { + anonymousId: 'c82cbdff-e5be-4009-ac78-cdeea09ab4b1', + context: { + screen: { height: 22, width: 11 }, + device: { + id: 'df16bffa-5c3d-4fbb-9bce-3bab098129a7R', + manufacturer: 'Xiaomi', + model: 'Redmi 6', + name: 'xiaomi', + }, + network: { carrier: 'Banglalink' }, + os: { name: 'android', version: '8.1.0' }, + traits: { + address: { city: 'Dhaka', country: 'Bangladesh' }, + anonymousId: 'c82cbdff-e5be-4009-ac78-cdeea09ab4b1', + }, + ip: '0.0.0.0', + }, + traits: { address: { city: 'Kol', country: 'Ind' } }, + event: 'Product Viewed', + integrations: { All: true }, + message_id: 'a80f82be-9bdc-4a9f-b2a5-15621ee41df8', + properties: { monetateId: '1234' }, + timestamp: '2019-09-01T15:46:51.693229+05:30', + type: 'track', + userId: 'newUser', + }, + destination: { + Config: { + monetateChannel: 'channel', + retailerShortName: 'retailer', + apiKey: 'api-key', + }, + }, + }, + ], + method: 'POST', + }, + pathSuffix: '', + }, + output: { + response: { + status: 200, + body: [ + { + error: "'product_id' is a required field for Product Viewed", + statTags: { + destType: 'MONETATE', + errorCategory: 'dataValidation', + errorType: 'instrumentation', + feature: 'processor', + implementation: 'native', + module: 'destination', + }, + statusCode: 400, + }, + ], + }, + }, + }, + { + name: 'monetate', + description: 'Test 29', + feature: 'processor', + module: 'destination', + version: 'v0', + input: { + request: { + body: [ + { + message: { + anonymousId: 'c82cbdff-e5be-4009-ac78-cdeea09ab4b1', + context: { + screen: { height: 22, width: 11 }, + device: { + id: 'df16bffa-5c3d-4fbb-9bce-3bab098129a7R', + manufacturer: 'Xiaomi', + model: 'Redmi 6', + name: 'xiaomi', + }, + network: { carrier: 'Banglalink' }, + os: { name: 'android', version: '8.1.0' }, + traits: { + address: { city: 'Dhaka', country: 'Bangladesh' }, + anonymousId: 'c82cbdff-e5be-4009-ac78-cdeea09ab4b1', + }, + ip: '0.0.0.0', + }, + traits: { address: { city: 'Kol', country: 'Ind' } }, + event: 'Product List Viewed', + integrations: { All: true }, + message_id: 'a80f82be-9bdc-4a9f-b2a5-15621ee41df8', + properties: { monetateId: '1234', products: { product_id: '1' } }, + timestamp: '2019-09-01T15:46:51.693229+05:30', + type: 'track', + userId: 'newUser', + }, + destination: { + Config: { + monetateChannel: 'channel', + retailerShortName: 'retailer', + apiKey: 'api-key', + }, + }, + }, + ], + method: 'POST', + }, + pathSuffix: '', + }, + output: { + response: { + status: 200, + body: [ + { + error: "'products' missing or not array in Product List Viewed", + statTags: { + destType: 'MONETATE', + errorCategory: 'dataValidation', + errorType: 'instrumentation', + feature: 'processor', + implementation: 'native', + module: 'destination', + }, + statusCode: 400, + }, + ], + }, + }, + }, +]; diff --git a/test/integrations/destinations/monetate/router/data.ts b/test/integrations/destinations/monetate/router/data.ts new file mode 100644 index 0000000000..09a7f8073d --- /dev/null +++ b/test/integrations/destinations/monetate/router/data.ts @@ -0,0 +1,264 @@ +export const data = [ + { + name: 'monetate', + description: 'Test 0', + feature: 'router', + module: 'destination', + version: 'v0', + input: { + request: { + body: { + input: [ + { + message: { + anonymousId: 'c82cbdff-e5be-4009-ac78-cdeea09ab4b1', + context: { + screen: { + height: 22, + width: 11, + }, + device: { + id: 'df16bffa-5c3d-4fbb-9bce-3bab098129a7R', + manufacturer: 'Xiaomi', + model: 'Redmi 6', + name: 'xiaomi', + }, + network: { + carrier: 'Banglalink', + }, + os: { + name: 'android', + version: '8.1.0', + }, + traits: { + address: { + city: 'Dhaka', + country: 'Bangladesh', + }, + anonymousId: 'c82cbdff-e5be-4009-ac78-cdeea09ab4b1', + }, + ip: '0.0.0.0', + }, + traits: { + address: { + city: 'Kol', + country: 'Ind', + }, + }, + event: 'Product Viewed', + integrations: { + All: true, + }, + message_id: 'a80f82be-9bdc-4a9f-b2a5-15621ee41df8', + properties: { + monetateId: '1234', + product_id: 'prodId', + }, + timestamp: '2019-09-01T15:46:51.693229+05:30', + type: 'track', + userId: 'newUser', + }, + metadata: { + jobId: 1, + }, + destination: { + Config: { + monetateChannel: 'channel', + retailerShortName: 'retailer', + apiKey: 'api-key', + }, + }, + }, + { + message: { + anonymousId: 'c82cbdff-e5be-4009-ac78-cdeea09ab4b1', + context: { + screen: { + height: 22, + width: 11, + }, + device: { + id: 'df16bffa-5c3d-4fbb-9bce-3bab098129a7R', + manufacturer: 'Xiaomi', + model: 'Redmi 6', + name: 'xiaomi', + }, + network: { + carrier: 'Banglalink', + }, + os: { + name: 'android', + version: '8.1.0', + }, + traits: { + address: { + city: 'Dhaka', + country: 'Bangladesh', + }, + anonymousId: 'c82cbdff-e5be-4009-ac78-cdeea09ab4b1', + }, + ip: '0.0.0.0', + }, + traits: { + address: { + city: 'Kol', + country: 'Ind', + }, + }, + event: 'Product List Viewed', + integrations: { + All: true, + }, + message_id: 'a80f82be-9bdc-4a9f-b2a5-15621ee41df8', + properties: { + monetateId: '1234', + products: [ + { + product_id: 1, + }, + { + product_id: 2, + }, + ], + }, + timestamp: '2019-09-01T15:46:51.693229+05:30', + type: 'track', + userId: 'newUser', + }, + metadata: { + jobId: 2, + }, + destination: { + Config: { + monetateChannel: 'channel', + retailerShortName: 'retailer', + apiKey: 'api-key', + }, + }, + }, + ], + destType: 'monetate', + }, + method: 'POST', + }, + }, + output: { + response: { + status: 200, + body: { + output: [ + { + batchedRequest: { + version: '1', + type: 'REST', + method: 'POST', + endpoint: 'https://engine.monetate.net/api/engine/v1/decide/retailer', + headers: { + 'Content-Type': 'application/json', + }, + params: {}, + body: { + JSON: { + monetateId: '1234', + events: [ + { + eventType: 'monetate:context:IpAddress', + ipAddress: '0.0.0.0', + }, + { + eventType: 'monetate:context:ScreenSize', + height: 22, + width: 11, + }, + { + eventType: 'monetate:context:ProductDetailView', + products: [ + { + productId: 'prodId', + sku: '', + }, + ], + }, + ], + customerId: 'newUser', + channel: 'channel', + }, + XML: {}, + JSON_ARRAY: {}, + FORM: {}, + }, + files: {}, + }, + metadata: [ + { + jobId: 1, + }, + ], + batched: false, + statusCode: 200, + destination: { + Config: { + monetateChannel: 'channel', + retailerShortName: 'retailer', + apiKey: 'api-key', + }, + }, + }, + { + batchedRequest: { + version: '1', + type: 'REST', + method: 'POST', + endpoint: 'https://engine.monetate.net/api/engine/v1/decide/retailer', + headers: { + 'Content-Type': 'application/json', + }, + params: {}, + body: { + JSON: { + monetateId: '1234', + events: [ + { + eventType: 'monetate:context:IpAddress', + ipAddress: '0.0.0.0', + }, + { + eventType: 'monetate:context:ScreenSize', + height: 22, + width: 11, + }, + { + eventType: 'monetate:context:ProductThumbnailView', + products: ['1', '2'], + }, + ], + customerId: 'newUser', + channel: 'channel', + }, + XML: {}, + JSON_ARRAY: {}, + FORM: {}, + }, + files: {}, + }, + metadata: [ + { + jobId: 2, + }, + ], + batched: false, + statusCode: 200, + destination: { + Config: { + monetateChannel: 'channel', + retailerShortName: 'retailer', + apiKey: 'api-key', + }, + }, + }, + ], + }, + }, + }, + }, +]; diff --git a/test/integrations/destinations/ometria/processor/data.ts b/test/integrations/destinations/ometria/processor/data.ts new file mode 100644 index 0000000000..c28854c9fd --- /dev/null +++ b/test/integrations/destinations/ometria/processor/data.ts @@ -0,0 +1,1078 @@ +export const data = [ + { + name: 'ometria', + description: 'Test 0', + feature: 'processor', + module: 'destination', + version: 'v0', + input: { + request: { + body: [ + { + message: { + channel: 'web', + context: { + app: { + build: '1.0.0', + name: 'RudderLabs JavaScript SDK', + namespace: 'com.rudderlabs.javascript', + version: '1.0.0', + }, + traits: { + listingId: 'test1', + email: 'testone@gmail.com', + firstName: 'test', + lastName: 'one', + field1: 'val1', + ip: '0.0.0.0', + }, + library: { name: 'RudderLabs JavaScript SDK', version: '1.0.0' }, + userAgent: + 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.90 Safari/537.36', + locale: 'en-US', + ip: '0.0.0.0', + os: { name: '', version: '' }, + screen: { density: 2 }, + page: { + path: '/destinations/ometria', + referrer: '', + search: '', + title: '', + url: 'https://docs.rudderstack.com/destinations/ometria', + category: 'destination', + initial_referrer: 'https://docs.rudderstack.com', + initial_referring_domain: 'docs.rudderstack.com', + }, + }, + type: 'identify', + messageId: '84e26acc-56a5-4835-8233-591137fca468', + session_id: '3049dc4c-5a95-4ccd-a3e7-d74a7e411f22', + originalTimestamp: '2019-10-14T09:03:17.562Z', + anonymousId: '123456', + userId: 'userId1', + integrations: { Ometria: { listingId: 'test1' } }, + sentAt: '2019-10-14T09:03:22.563Z', + }, + destination: { + Config: { + apiKey: 'dummyApiKey', + allowMarketing: false, + allowTransactional: false, + marketingOptin: 'EXPLICITLY_OPTEDOUT', + }, + }, + }, + ], + method: 'POST', + }, + pathSuffix: '', + }, + output: { + response: { + status: 200, + body: [ + { + output: { + version: '1', + type: 'REST', + method: 'POST', + endpoint: 'https://api.ometria.com/v2/push', + headers: { 'X-Ometria-Auth': 'dummyApiKey' }, + params: {}, + body: { + JSON: {}, + JSON_ARRAY: { + batch: + '[{"email":"testone@gmail.com","id":"test1","customer_id":"userId1","firstname":"test","lastname":"one","@type":"contact","properties":{"field1":"val1","ip":"0.0.0.0"},"marketing_optin":"EXPLICITLY_OPTEDOUT","channels":{"sms":{"allow_marketing":false,"allow_transactional":false}}}]', + }, + XML: {}, + FORM: {}, + }, + files: {}, + userId: '', + }, + statusCode: 200, + }, + ], + }, + }, + }, + { + name: 'ometria', + description: 'Test 1', + feature: 'processor', + module: 'destination', + version: 'v0', + input: { + request: { + body: [ + { + message: { + channel: 'web', + context: { + app: { + build: '1.0.0', + name: 'RudderLabs JavaScript SDK', + namespace: 'com.rudderlabs.javascript', + version: '1.0.0', + }, + traits: { + listingId: 'test1', + email: 'testone@gmail.com', + firstName: 'test', + lastName: 'one', + field1: 'val1', + ip: '0.0.0.0', + }, + library: { name: 'RudderLabs JavaScript SDK', version: '1.0.0' }, + userAgent: + 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.90 Safari/537.36', + locale: 'en-US', + ip: '0.0.0.0', + os: { name: '', version: '' }, + screen: { density: 2 }, + page: { + path: '/destinations/ometria', + referrer: '', + search: '', + title: '', + url: 'https://docs.rudderstack.com/destinations/ometria', + category: 'destination', + initial_referrer: 'https://docs.rudderstack.com', + initial_referring_domain: 'docs.rudderstack.com', + }, + }, + type: 'identify', + messageId: '84e26acc-56a5-4835-8233-591137fca468', + session_id: '3049dc4c-5a95-4ccd-a3e7-d74a7e411f22', + originalTimestamp: '2019-10-14T09:03:17.562Z', + anonymousId: '123456', + userId: 'userId1', + integrations: { Ometria: { listingId: 'updatedId1', allowMarketing: true } }, + sentAt: '2019-10-14T09:03:22.563Z', + }, + destination: { + Config: { + apiKey: 'dummyApiKey', + allowMarketing: false, + allowTransactional: false, + marketingOptin: 'EXPLICITLY_OPTEDOUT', + }, + }, + }, + ], + method: 'POST', + }, + pathSuffix: '', + }, + output: { + response: { + status: 200, + body: [ + { + output: { + version: '1', + type: 'REST', + method: 'POST', + endpoint: 'https://api.ometria.com/v2/push', + headers: { 'X-Ometria-Auth': 'dummyApiKey' }, + params: {}, + body: { + JSON: {}, + JSON_ARRAY: { + batch: + '[{"email":"testone@gmail.com","id":"updatedId1","customer_id":"userId1","firstname":"test","lastname":"one","@type":"contact","properties":{"field1":"val1","ip":"0.0.0.0"},"marketing_optin":"EXPLICITLY_OPTEDOUT","channels":{"sms":{"allow_marketing":true,"allow_transactional":false}}}]', + }, + XML: {}, + FORM: {}, + }, + files: {}, + userId: '', + }, + statusCode: 200, + }, + ], + }, + }, + }, + { + name: 'ometria', + description: 'Test 2', + feature: 'processor', + module: 'destination', + version: 'v0', + input: { + request: { + body: [ + { + message: { + channel: 'web', + context: { + app: { + build: '1.0.0', + name: 'RudderLabs JavaScript SDK', + namespace: 'com.rudderlabs.javascript', + version: '1.0.0', + }, + traits: { + listingId: 'test1', + email: 'testone@gmail.com', + name: 'test one two', + field1: 'val1', + ip: '0.0.0.0', + }, + library: { name: 'RudderLabs JavaScript SDK', version: '1.0.0' }, + userAgent: + 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.90 Safari/537.36', + locale: 'en-US', + ip: '0.0.0.0', + os: { name: '', version: '' }, + screen: { density: 2 }, + page: { + path: '/destinations/ometria', + referrer: '', + search: '', + title: '', + url: 'https://docs.rudderstack.com/destinations/ometria', + category: 'destination', + initial_referrer: 'https://docs.rudderstack.com', + initial_referring_domain: 'docs.rudderstack.com', + }, + }, + type: 'identify', + messageId: '84e26acc-56a5-4835-8233-591137fca468', + session_id: '3049dc4c-5a95-4ccd-a3e7-d74a7e411f22', + originalTimestamp: '2019-10-14T09:03:17.562Z', + anonymousId: '123456', + userId: 'userId1', + integrations: { Ometria: { listingId: 'test1' } }, + sentAt: '2019-10-14T09:03:22.563Z', + }, + destination: { + Config: { + apiKey: 'dummyApiKey', + allowMarketing: false, + allowTransactional: false, + marketingOptin: 'EXPLICITLY_OPTEDOUT', + }, + }, + }, + ], + method: 'POST', + }, + pathSuffix: '', + }, + output: { + response: { + status: 200, + body: [ + { + output: { + version: '1', + type: 'REST', + method: 'POST', + endpoint: 'https://api.ometria.com/v2/push', + headers: { 'X-Ometria-Auth': 'dummyApiKey' }, + params: {}, + body: { + JSON: {}, + JSON_ARRAY: { + batch: + '[{"email":"testone@gmail.com","id":"test1","customer_id":"userId1","@type":"contact","properties":{"field1":"val1","ip":"0.0.0.0"},"marketing_optin":"EXPLICITLY_OPTEDOUT","channels":{"sms":{"allow_marketing":false,"allow_transactional":false}},"firstname":"test","middlename":"one","lastname":"two"}]', + }, + XML: {}, + FORM: {}, + }, + files: {}, + userId: '', + }, + statusCode: 200, + }, + ], + }, + }, + }, + { + name: 'ometria', + description: 'Test 3', + feature: 'processor', + module: 'destination', + version: 'v0', + input: { + request: { + body: [ + { + message: { + channel: 'web', + context: { + app: { + build: '1.0.0', + name: 'RudderLabs JavaScript SDK', + namespace: 'com.rudderlabs.javascript', + version: '1.0.0', + }, + traits: { + listingId: 'test1', + email: 'testone@gmail.com', + name: 'test one', + field1: 'val1', + marketinOptin: 'NOT_SPECIFIED', + phoneNumber: '+911234567890', + channels: { sms: {} }, + }, + library: { name: 'RudderLabs JavaScript SDK', version: '1.0.0' }, + userAgent: + 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.90 Safari/537.36', + locale: 'en-US', + ip: '0.0.0.0', + os: { name: '', version: '' }, + screen: { density: 2 }, + page: { + path: '/destinations/ometria', + referrer: '', + search: '', + title: '', + url: 'https://docs.rudderstack.com/destinations/ometria', + category: 'destination', + initial_referrer: 'https://docs.rudderstack.com', + initial_referring_domain: 'docs.rudderstack.com', + }, + }, + type: 'identify', + messageId: '84e26acc-56a5-4835-8233-591137fca468', + session_id: '3049dc4c-5a95-4ccd-a3e7-d74a7e411f22', + originalTimestamp: '2019-10-14T09:03:17.562Z', + anonymousId: '123456', + userId: 'userId1', + integrations: { Ometria: { listingId: 'test1' } }, + sentAt: '2019-10-14T09:03:22.563Z', + }, + destination: { + Config: { + apiKey: 'dummyApiKey', + allowMarketing: false, + allowTransactional: false, + marketingOptin: 'NOT_SPECIFIED', + }, + }, + }, + ], + method: 'POST', + }, + pathSuffix: '', + }, + output: { + response: { + status: 200, + body: [ + { + output: { + version: '1', + type: 'REST', + method: 'POST', + endpoint: 'https://api.ometria.com/v2/push', + headers: { 'X-Ometria-Auth': 'dummyApiKey' }, + params: {}, + body: { + JSON: {}, + JSON_ARRAY: { + batch: + '[{"email":"testone@gmail.com","id":"test1","phone_number":"+911234567890","customer_id":"userId1","@type":"contact","properties":{"field1":"val1"},"marketing_optin":"NOT_SPECIFIED","channels":{"sms":{"allow_marketing":false,"allow_transactional":false}},"firstname":"test","lastname":"one"}]', + }, + XML: {}, + FORM: {}, + }, + files: {}, + userId: '', + }, + statusCode: 200, + }, + ], + }, + }, + }, + { + name: 'ometria', + description: 'Test 4', + feature: 'processor', + module: 'destination', + version: 'v0', + input: { + request: { + body: [ + { + message: { + channel: 'web', + context: { + app: { + build: '1.0.0', + name: 'RudderLabs JavaScript SDK', + namespace: 'com.rudderlabs.javascript', + version: '1.0.0', + }, + traits: { + listingId: 'test1', + email: 'testone@gmail.com', + name: 'test one', + field1: 'val1', + marketinOptin: 'NOT_SPECIFIED', + phoneNumber: '+911234567890', + channels: { sms: {} }, + }, + library: { name: 'RudderLabs JavaScript SDK', version: '1.0.0' }, + userAgent: + 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.90 Safari/537.36', + locale: 'en-US', + ip: '0.0.0.0', + os: { name: '', version: '' }, + screen: { density: 2 }, + page: { + path: '/destinations/ometria', + referrer: '', + search: '', + title: '', + url: 'https://docs.rudderstack.com/destinations/ometria', + category: 'destination', + initial_referrer: 'https://docs.rudderstack.com', + initial_referring_domain: 'docs.rudderstack.com', + }, + }, + type: 'identify', + messageId: '84e26acc-56a5-4835-8233-591137fca468', + session_id: '3049dc4c-5a95-4ccd-a3e7-d74a7e411f22', + originalTimestamp: '2019-10-14T09:03:17.562Z', + anonymousId: '123456', + userId: 'userId1', + integrations: { + Ometria: { listingId: 'test1', allowMarketing: true, allowTransactional: true }, + }, + sentAt: '2019-10-14T09:03:22.563Z', + }, + destination: { + Config: { + apiKey: 'dummyApiKey', + allowMarketing: false, + allowTransactional: false, + marketingOptin: 'NOT_SPECIFIED', + }, + }, + }, + ], + method: 'POST', + }, + pathSuffix: '', + }, + output: { + response: { + status: 200, + body: [ + { + output: { + version: '1', + type: 'REST', + method: 'POST', + endpoint: 'https://api.ometria.com/v2/push', + headers: { 'X-Ometria-Auth': 'dummyApiKey' }, + params: {}, + body: { + JSON: {}, + JSON_ARRAY: { + batch: + '[{"email":"testone@gmail.com","id":"test1","phone_number":"+911234567890","customer_id":"userId1","@type":"contact","properties":{"field1":"val1"},"marketing_optin":"NOT_SPECIFIED","channels":{"sms":{"allow_marketing":true,"allow_transactional":true}},"firstname":"test","lastname":"one"}]', + }, + XML: {}, + FORM: {}, + }, + files: {}, + userId: '', + }, + statusCode: 200, + }, + ], + }, + }, + }, + { + name: 'ometria', + description: 'Test 5', + feature: 'processor', + module: 'destination', + version: 'v0', + input: { + request: { + body: [ + { + message: { + channel: 'web', + context: { + app: { + build: '1.0.0', + name: 'RudderLabs JavaScript SDK', + namespace: 'com.rudderlabs.javascript', + version: '1.0.0', + }, + traits: { email: 'testone@gmail.com', firstName: 'test', lastName: 'one' }, + library: { name: 'RudderLabs JavaScript SDK', version: '1.0.0' }, + userAgent: + 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.90 Safari/537.36', + locale: 'en-US', + ip: '0.0.0.0', + os: { name: '', version: '' }, + screen: { density: 2 }, + page: { + path: '/destinations/ometria', + referrer: '', + search: '', + title: '', + url: 'https://docs.rudderstack.com/destinations/ometria', + category: 'destination', + initial_referrer: 'https://docs.rudderstack.com', + initial_referring_domain: 'docs.rudderstack.com', + }, + }, + type: 'track', + messageId: '84e26acc-56a5-4835-8233-591137fca468', + session_id: '3049dc4c-5a95-4ccd-a3e7-d74a7e411f22', + originalTimestamp: '2019-10-14T09:03:17.562Z', + anonymousId: '123456', + userId: 'userId1', + event: 'event name', + properties: { + event_id: 'eventId1', + timestamp: '2017-05-01T14:00:00Z', + field1: 'val1', + }, + integrations: { All: true }, + sentAt: '2019-10-14T09:03:22.563Z', + }, + destination: { Config: { apiKey: 'dummyApiKey' } }, + }, + ], + method: 'POST', + }, + pathSuffix: '', + }, + output: { + response: { + status: 200, + body: [ + { + output: { + version: '1', + type: 'REST', + method: 'POST', + endpoint: 'https://api.ometria.com/v2/push', + headers: { 'X-Ometria-Auth': 'dummyApiKey' }, + params: {}, + body: { + JSON: {}, + JSON_ARRAY: { + batch: + '[{"id":"eventId1","timestamp":"2017-05-01T14:00:00Z","identity_email":"testone@gmail.com","identity_account_id":"userId1","@type":"custom_event","event_type":"event name","properties":{"field1":"val1"}}]', + }, + XML: {}, + FORM: {}, + }, + files: {}, + userId: '', + }, + statusCode: 200, + }, + ], + }, + }, + }, + { + name: 'ometria', + description: 'Test 6', + feature: 'processor', + module: 'destination', + version: 'v0', + input: { + request: { + body: [ + { + message: { + channel: 'web', + context: { + app: { + build: '1.0.0', + name: 'RudderLabs JavaScript SDK', + namespace: 'com.rudderlabs.javascript', + version: '1.0.0', + }, + traits: { email: 'testone@gmail.com', firstName: 'test', lastName: 'one' }, + library: { name: 'RudderLabs JavaScript SDK', version: '1.0.0' }, + userAgent: + 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.90 Safari/537.36', + locale: 'en-US', + ip: '0.0.0.0', + os: { name: '', version: '' }, + screen: { density: 2 }, + page: { + path: '/destinations/ometria', + referrer: '', + search: '', + title: '', + url: 'https://docs.rudderstack.com/destinations/ometria', + category: 'destination', + initial_referrer: 'https://docs.rudderstack.com', + initial_referring_domain: 'docs.rudderstack.com', + }, + }, + type: 'track', + messageId: '84e26acc-56a5-4835-8233-591137fca468', + session_id: '3049dc4c-5a95-4ccd-a3e7-d74a7e411f22', + originalTimestamp: '2019-10-14T09:03:17.562Z', + anonymousId: '123456', + userId: 'userId1', + event: 'order completed', + properties: { + order_id: 'orderId1', + timestamp: '2017-05-01T14:00:00Z', + grand_total: 1000, + currency: 'INR', + field1: 'val1', + }, + integrations: { All: true }, + sentAt: '2019-10-14T09:03:22.563Z', + }, + destination: { Config: { apiKey: 'dummyApiKey' } }, + }, + ], + method: 'POST', + }, + pathSuffix: '', + }, + output: { + response: { + status: 200, + body: [ + { + output: { + version: '1', + type: 'REST', + method: 'POST', + endpoint: 'https://api.ometria.com/v2/push', + headers: { 'X-Ometria-Auth': 'dummyApiKey' }, + params: {}, + body: { + JSON: {}, + JSON_ARRAY: { + batch: + '[{"id":"orderId1","timestamp":"2017-05-01T14:00:00Z","grand_total":1000,"currency":"INR","ip_address":"0.0.0.0","customer":{"id":"userId1","email":"testone@gmail.com","firstname":"test","lastname":"one"},"@type":"order","status":"complete","is_valid":true,"properties":{"field1":"val1"}}]', + }, + XML: {}, + FORM: {}, + }, + files: {}, + userId: '', + }, + statusCode: 200, + }, + ], + }, + }, + }, + { + name: 'ometria', + description: 'Test 7', + feature: 'processor', + module: 'destination', + version: 'v0', + input: { + request: { + body: [ + { + message: { + channel: 'web', + context: { + app: { + build: '1.0.0', + name: 'RudderLabs JavaScript SDK', + namespace: 'com.rudderlabs.javascript', + version: '1.0.0', + }, + traits: { email: 'testone@gmail.com', firstName: 'test', lastName: 'one' }, + library: { name: 'RudderLabs JavaScript SDK', version: '1.0.0' }, + userAgent: + 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.90 Safari/537.36', + locale: 'en-US', + ip: '0.0.0.0', + os: { name: '', version: '' }, + screen: { density: 2 }, + page: { + path: '/destinations/ometria', + referrer: '', + search: '', + title: '', + url: 'https://docs.rudderstack.com/destinations/ometria', + category: 'destination', + initial_referrer: 'https://docs.rudderstack.com', + initial_referring_domain: 'docs.rudderstack.com', + }, + }, + type: 'track', + messageId: '84e26acc-56a5-4835-8233-591137fca468', + session_id: '3049dc4c-5a95-4ccd-a3e7-d74a7e411f22', + originalTimestamp: '2019-10-14T09:03:17.562Z', + anonymousId: '123456', + userId: 'userId1', + event: 'order completed', + properties: { + order_id: 'orderId1', + timestamp: '2017-05-01T14:00:00Z', + grand_total: 1000, + currency: 'INR', + field1: 'val1', + products: [{ product_id: 'prod123', quantity: 4, subtotal: 10 }], + }, + integrations: { All: true }, + sentAt: '2019-10-14T09:03:22.563Z', + }, + destination: { Config: { apiKey: 'dummyApiKey' } }, + }, + ], + method: 'POST', + }, + pathSuffix: '', + }, + output: { + response: { + status: 200, + body: [ + { + output: { + version: '1', + type: 'REST', + method: 'POST', + endpoint: 'https://api.ometria.com/v2/push', + headers: { 'X-Ometria-Auth': 'dummyApiKey' }, + params: {}, + body: { + JSON: {}, + JSON_ARRAY: { + batch: + '[{"id":"orderId1","timestamp":"2017-05-01T14:00:00Z","grand_total":1000,"currency":"INR","ip_address":"0.0.0.0","customer":{"id":"userId1","email":"testone@gmail.com","firstname":"test","lastname":"one"},"@type":"order","status":"complete","is_valid":true,"properties":{"field1":"val1"},"lineitems":[{"product_id":"prod123","quantity":4,"subtotal":10}]}]', + }, + XML: {}, + FORM: {}, + }, + files: {}, + userId: '', + }, + statusCode: 200, + }, + ], + }, + }, + }, + { + name: 'ometria', + description: 'Test 8', + feature: 'processor', + module: 'destination', + version: 'v0', + input: { + request: { + body: [ + { + message: { + channel: 'web', + context: { + app: { + build: '1.0.0', + name: 'RudderLabs JavaScript SDK', + namespace: 'com.rudderlabs.javascript', + version: '1.0.0', + }, + traits: { email: 'testone@gmail.com', firstName: 'test', lastName: 'one' }, + library: { name: 'RudderLabs JavaScript SDK', version: '1.0.0' }, + userAgent: + 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.90 Safari/537.36', + locale: 'en-US', + ip: '0.0.0.0', + os: { name: '', version: '' }, + screen: { density: 2 }, + page: { + path: '/destinations/ometria', + referrer: '', + search: '', + title: '', + url: 'https://docs.rudderstack.com/destinations/ometria', + category: 'destination', + initial_referrer: 'https://docs.rudderstack.com', + initial_referring_domain: 'docs.rudderstack.com', + }, + }, + type: 'track', + messageId: '84e26acc-56a5-4835-8233-591137fca468', + session_id: '3049dc4c-5a95-4ccd-a3e7-d74a7e411f22', + originalTimestamp: '2019-10-14T09:03:17.562Z', + anonymousId: '123456', + userId: 'userId1', + event: 'order completed', + properties: { + order_id: 'orderId1', + timestamp: '2017-05-01T14:00:00Z', + grand_total: 1000, + currency: 'INR', + field1: 'val1', + products: [ + { + product_id: 'prod123', + quantity: 4, + subtotal: 10, + variant_options: [{ type: 'size', id: 'newid', label: '5' }], + }, + ], + }, + integrations: { All: true }, + sentAt: '2019-10-14T09:03:22.563Z', + }, + destination: { Config: { apiKey: 'dummyApiKey' } }, + }, + ], + method: 'POST', + }, + pathSuffix: '', + }, + output: { + response: { + status: 200, + body: [ + { + output: { + version: '1', + type: 'REST', + method: 'POST', + endpoint: 'https://api.ometria.com/v2/push', + headers: { 'X-Ometria-Auth': 'dummyApiKey' }, + params: {}, + body: { + JSON: {}, + JSON_ARRAY: { + batch: + '[{"id":"orderId1","timestamp":"2017-05-01T14:00:00Z","grand_total":1000,"currency":"INR","ip_address":"0.0.0.0","customer":{"id":"userId1","email":"testone@gmail.com","firstname":"test","lastname":"one"},"@type":"order","status":"complete","is_valid":true,"properties":{"field1":"val1"},"lineitems":[{"product_id":"prod123","quantity":4,"subtotal":10,"variant_options":[{"id":"newid","type":"size","label":"5"}]}]}]', + }, + XML: {}, + FORM: {}, + }, + files: {}, + userId: '', + }, + statusCode: 200, + }, + ], + }, + }, + }, + { + name: 'ometria', + description: 'Test 9', + feature: 'processor', + module: 'destination', + version: 'v0', + input: { + request: { + body: [ + { + message: { + channel: 'web', + context: { + app: { + build: '1.0.0', + name: 'RudderLabs JavaScript SDK', + namespace: 'com.rudderlabs.javascript', + version: '1.0.0', + }, + traits: { email: 'testone@gmail.com', firstName: 'test', lastName: 'one' }, + library: { name: 'RudderLabs JavaScript SDK', version: '1.0.0' }, + userAgent: + 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.90 Safari/537.36', + locale: 'en-US', + ip: '0.0.0.0', + os: { name: '', version: '' }, + screen: { density: 2 }, + page: { + path: '/destinations/ometria', + referrer: '', + search: '', + title: '', + url: 'https://docs.rudderstack.com/destinations/ometria', + category: 'destination', + initial_referrer: 'https://docs.rudderstack.com', + initial_referring_domain: 'docs.rudderstack.com', + }, + }, + type: 'track', + messageId: '84e26acc-56a5-4835-8233-591137fca468', + session_id: '3049dc4c-5a95-4ccd-a3e7-d74a7e411f22', + originalTimestamp: '2019-10-14T09:03:17.562Z', + anonymousId: '123456', + userId: 'userId1', + event: 'order completed', + properties: { + order_id: 'orderId1', + timestamp: '2017-05-01T14:00:00Z', + grand_total: 1000, + currency: 'INR', + field1: 'val1', + billing_address: 'Ba', + shipping_address: 'Sa', + products: [ + { + product_id: 'prod123', + quantity: 4, + subtotal: 10, + variant_options: [{ type: 'size', id: 'newid', label: '5' }], + }, + ], + }, + integrations: { All: true }, + sentAt: '2019-10-14T09:03:22.563Z', + }, + destination: { Config: { apiKey: 'dummyApiKey' } }, + }, + ], + method: 'POST', + }, + pathSuffix: '', + }, + output: { + response: { + status: 200, + body: [ + { + output: { + version: '1', + type: 'REST', + method: 'POST', + endpoint: 'https://api.ometria.com/v2/push', + headers: { 'X-Ometria-Auth': 'dummyApiKey' }, + params: {}, + body: { + JSON: {}, + JSON_ARRAY: { + batch: + '[{"id":"orderId1","timestamp":"2017-05-01T14:00:00Z","grand_total":1000,"currency":"INR","ip_address":"0.0.0.0","customer":{"id":"userId1","email":"testone@gmail.com","firstname":"test","lastname":"one"},"@type":"order","status":"complete","is_valid":true,"properties":{"field1":"val1"},"lineitems":[{"product_id":"prod123","quantity":4,"subtotal":10,"variant_options":[{"id":"newid","type":"size","label":"5"}]}]}]', + }, + XML: {}, + FORM: {}, + }, + files: {}, + userId: '', + }, + statusCode: 200, + }, + ], + }, + }, + }, + { + name: 'ometria', + description: 'Test 10', + feature: 'processor', + module: 'destination', + version: 'v0', + input: { + request: { + body: [ + { + message: { + channel: 'web', + context: { + app: { + build: '1.0.0', + name: 'RudderLabs JavaScript SDK', + namespace: 'com.rudderlabs.javascript', + version: '1.0.0', + }, + traits: { email: 'testone@gmail.com', firstName: 'test', lastName: 'one' }, + library: { name: 'RudderLabs JavaScript SDK', version: '1.0.0' }, + userAgent: + 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.90 Safari/537.36', + locale: 'en-US', + ip: '0.0.0.0', + os: { name: '', version: '' }, + screen: { density: 2 }, + page: { + path: '/destinations/ometria', + referrer: '', + search: '', + title: '', + url: 'https://docs.rudderstack.com/destinations/ometria', + category: 'destination', + initial_referrer: 'https://docs.rudderstack.com', + initial_referring_domain: 'docs.rudderstack.com', + }, + }, + type: 'track', + messageId: '84e26acc-56a5-4835-8233-591137fca468', + session_id: '3049dc4c-5a95-4ccd-a3e7-d74a7e411f22', + originalTimestamp: '2019-10-14T09:03:17.562Z', + anonymousId: '123456', + userId: 'userId1', + event: 'order completed', + properties: { + order_id: 'orderId1', + timestamp: '2017-05-01T14:00:00Z', + grand_total: 1000, + currency: 'INR', + field1: 'val1', + shipping_address: { + city: 'Kolkata', + state: 'West Bengal', + postcode: '700001', + country_code: 'IN', + }, + products: [ + { + product_id: 'prod123', + quantity: 4, + subtotal: 10, + variant_options: [{ type: 'size', id: 'newid', label: '5' }], + }, + ], + }, + integrations: { All: true }, + sentAt: '2019-10-14T09:03:22.563Z', + }, + destination: { Config: { apiKey: 'dummyApiKey' } }, + }, + ], + method: 'POST', + }, + pathSuffix: '', + }, + output: { + response: { + status: 200, + body: [ + { + output: { + version: '1', + type: 'REST', + method: 'POST', + endpoint: 'https://api.ometria.com/v2/push', + headers: { 'X-Ometria-Auth': 'dummyApiKey' }, + params: {}, + body: { + JSON: {}, + JSON_ARRAY: { + batch: + '[{"id":"orderId1","timestamp":"2017-05-01T14:00:00Z","grand_total":1000,"currency":"INR","ip_address":"0.0.0.0","shipping_address":{"city":"Kolkata","state":"West Bengal","country_code":"IN","postcode":"700001"},"customer":{"id":"userId1","email":"testone@gmail.com","firstname":"test","lastname":"one"},"@type":"order","status":"complete","is_valid":true,"properties":{"field1":"val1"},"lineitems":[{"product_id":"prod123","quantity":4,"subtotal":10,"variant_options":[{"id":"newid","type":"size","label":"5"}]}]}]', + }, + XML: {}, + FORM: {}, + }, + files: {}, + userId: '', + }, + statusCode: 200, + }, + ], + }, + }, + }, +]; diff --git a/test/integrations/destinations/ometria/router/data.ts b/test/integrations/destinations/ometria/router/data.ts new file mode 100644 index 0000000000..ef15eea586 --- /dev/null +++ b/test/integrations/destinations/ometria/router/data.ts @@ -0,0 +1,336 @@ +export const data = [ + { + name: 'ometria', + description: 'Test 0', + feature: 'router', + module: 'destination', + version: 'v0', + input: { + request: { + body: { + input: [ + { + message: { + type: 'identify', + sentAt: '2021-10-25T09:40:08.880Z', + userId: 'userId1', + channel: 'web', + context: { + os: { + name: '', + version: '', + }, + app: { + name: 'RudderLabs JavaScript SDK', + build: '1.0.0', + version: '1.2.1', + namespace: 'com.rudderlabs.javascript', + }, + page: { + url: 'http://127.0.0.1:5500/index.html', + path: '/index.html', + title: 'Test', + search: '', + tab_url: 'http://127.0.0.1:5500/index.html', + referrer: 'http://127.0.0.1:5500/index.html', + initial_referrer: 'http://127.0.0.1:5500/index.html', + referring_domain: '127.0.0.1:5500', + initial_referring_domain: '127.0.0.1:5500', + }, + locale: 'en-GB', + screen: { + width: 1440, + height: 900, + density: 2, + innerWidth: 1440, + innerHeight: 335, + }, + traits: { + listingId: 'test1', + email: 'testone@gmail.com', + firstName: 'test', + lastName: 'one', + field1: 'val1', + ip: '0.0.0.0', + }, + library: { + name: 'RudderLabs JavaScript SDK', + version: '1.2.1', + }, + campaign: {}, + userAgent: + 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.71 Safari/537.36', + }, + rudderId: 'e3e907f1-f79a-444b-b91d-da47488f8273', + messageId: '8cdd3d2e-5e07-42ec-abdc-9b6bd4333840', + timestamp: '2021-10-25T15:10:08.888+05:30', + receivedAt: '2021-10-25T15:10:08.889+05:30', + request_ip: '[::1]', + anonymousId: '7138f7d9-5dd2-4337-805d-ca17be59dc8e', + integrations: { + Ometria: { + listingId: 'test1', + }, + }, + originalTimestamp: '2021-10-25T09:40:08.879Z', + }, + metadata: { jobId: 1 }, + destination: { + ID: '1zzHtStW2ZPlullmz6L7DGnmk9V', + Name: 'ometria-dev', + DestinationDefinition: { + ID: '1zgVZhcj1Tij4qlKg7B1Jp16IrH', + Name: 'OMETRIA', + DisplayName: 'Ometria', + Config: { + transformAt: 'router', + transformAtV1: 'router', + saveDestinationResponse: true, + includeKeys: [], + excludeKeys: [], + supportedSourceTypes: [ + 'android', + 'ios', + 'web', + 'unity', + 'amp', + 'cloud', + 'reactnative', + 'flutter', + 'cordova', + ], + supportedMessageTypes: ['identify', 'track'], + destConfig: { + defaultConfig: [ + 'apiKey', + 'marketingOptin', + 'allowMarketing', + 'allowTransactional', + ], + }, + secretKeys: ['apiKey'], + }, + ResponseRules: {}, + }, + Config: { + apiKey: 'dummyApiKey', + allowMarketing: false, + allowTransactional: false, + marketingOptin: 'EXPLICITLY_OPTEDOUT', + }, + Enabled: true, + Transformations: [], + IsProcessorEnabled: true, + }, + }, + { + message: { + type: 'identify', + sentAt: '2021-10-25T09:40:08.880Z', + anonymousId: '123456', + userId: 'userId1', + channel: 'web', + context: { + os: { + name: '', + version: '', + }, + app: { + name: 'RudderLabs JavaScript SDK', + build: '1.0.0', + version: '1.2.1', + namespace: 'com.rudderlabs.javascript', + }, + page: { + url: 'http://127.0.0.1:5500/index.html', + path: '/index.html', + title: 'Test', + search: '', + tab_url: 'http://127.0.0.1:5500/index.html', + referrer: 'http://127.0.0.1:5500/index.html', + initial_referrer: 'http://127.0.0.1:5500/index.html', + referring_domain: '127.0.0.1:5500', + initial_referring_domain: '127.0.0.1:5500', + }, + locale: 'en-GB', + screen: { + width: 1440, + height: 900, + density: 2, + innerWidth: 1440, + innerHeight: 335, + }, + traits: { + listingId: 'test1', + email: 'testone@gmail.com', + firstName: 'test', + lastName: 'one', + field1: 'val1', + ip: '0.0.0.0', + }, + library: { + name: 'RudderLabs JavaScript SDK', + version: '1.2.1', + }, + campaign: {}, + userAgent: + 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.71 Safari/537.36', + }, + rudderId: 'e3e907f1-f79a-444b-b91d-da47488f8273', + messageId: '8cdd3d2e-5e07-42ec-abdc-9b6bd4333840', + timestamp: '2021-10-25T15:10:08.888+05:30', + receivedAt: '2021-10-25T15:10:08.889+05:30', + request_ip: '[::1]', + integrations: { + Ometria: { + listingId: 'updatedId1', + allowMarketing: true, + }, + }, + originalTimestamp: '2021-10-25T09:40:08.879Z', + }, + metadata: { jobId: 2 }, + destination: { + ID: '1zzHtStW2ZPlullmz6L7DGnmk9V', + Name: 'ometria-dev', + DestinationDefinition: { + ID: '1zgVZhcj1Tij4qlKg7B1Jp16IrH', + Name: 'OMETRIA', + DisplayName: 'Ometria', + Config: { + transformAt: 'router', + transformAtV1: 'router', + saveDestinationResponse: true, + includeKeys: [], + excludeKeys: [], + supportedSourceTypes: [ + 'android', + 'ios', + 'web', + 'unity', + 'amp', + 'cloud', + 'reactnative', + 'flutter', + 'cordova', + ], + supportedMessageTypes: ['identify', 'track'], + destConfig: { + defaultConfig: [ + 'apiKey', + 'marketingOptin', + 'allowMarketing', + 'allowTransactional', + ], + }, + secretKeys: ['apiKey'], + }, + ResponseRules: {}, + }, + Config: { + apiKey: 'dummyApiKey', + allowMarketing: false, + allowTransactional: false, + marketingOptin: 'EXPLICITLY_OPTEDOUT', + }, + Enabled: true, + Transformations: [], + IsProcessorEnabled: true, + }, + }, + ], + destType: 'ometria', + }, + method: 'POST', + }, + }, + output: { + response: { + status: 200, + body: { + output: [ + { + batchedRequest: { + version: '1', + type: 'REST', + method: 'POST', + endpoint: 'https://api.ometria.com/v2/push', + headers: { + 'X-Ometria-Auth': 'dummyApiKey', + }, + params: {}, + body: { + JSON: {}, + JSON_ARRAY: { + batch: + '[{"email":"testone@gmail.com","id":"test1","customer_id":"userId1","firstname":"test","lastname":"one","@type":"contact","properties":{"field1":"val1","ip":"0.0.0.0"},"marketing_optin":"EXPLICITLY_OPTEDOUT","channels":{"sms":{"allow_marketing":false,"allow_transactional":false}}},{"email":"testone@gmail.com","id":"updatedId1","customer_id":"userId1","firstname":"test","lastname":"one","@type":"contact","properties":{"field1":"val1","ip":"0.0.0.0"},"marketing_optin":"EXPLICITLY_OPTEDOUT","channels":{"sms":{"allow_marketing":true,"allow_transactional":false}}}]', + }, + XML: {}, + FORM: {}, + }, + files: {}, + }, + metadata: [ + { + jobId: 1, + }, + { + jobId: 2, + }, + ], + batched: true, + statusCode: 200, + destination: { + ID: '1zzHtStW2ZPlullmz6L7DGnmk9V', + Name: 'ometria-dev', + DestinationDefinition: { + ID: '1zgVZhcj1Tij4qlKg7B1Jp16IrH', + Name: 'OMETRIA', + DisplayName: 'Ometria', + Config: { + transformAt: 'router', + transformAtV1: 'router', + saveDestinationResponse: true, + includeKeys: [], + excludeKeys: [], + supportedSourceTypes: [ + 'android', + 'ios', + 'web', + 'unity', + 'amp', + 'cloud', + 'reactnative', + 'flutter', + 'cordova', + ], + supportedMessageTypes: ['identify', 'track'], + destConfig: { + defaultConfig: [ + 'apiKey', + 'marketingOptin', + 'allowMarketing', + 'allowTransactional', + ], + }, + secretKeys: ['apiKey'], + }, + ResponseRules: {}, + }, + Config: { + apiKey: 'dummyApiKey', + allowMarketing: false, + allowTransactional: false, + marketingOptin: 'EXPLICITLY_OPTEDOUT', + }, + Enabled: true, + Transformations: [], + IsProcessorEnabled: true, + }, + }, + ], + }, + }, + }, + }, +]; diff --git a/test/integrations/destinations/one_signal/processor/data.ts b/test/integrations/destinations/one_signal/processor/data.ts new file mode 100644 index 0000000000..7f244aa711 --- /dev/null +++ b/test/integrations/destinations/one_signal/processor/data.ts @@ -0,0 +1,1545 @@ +export const data = [ + { + name: 'one_signal', + description: + 'Identify call for creating new device (phone and playerId is not available in the payload). Integrations object is also not available.', + feature: 'processor', + module: 'destination', + version: 'v0', + input: { + request: { + body: [ + { + destination: { + Config: { + appId: 'random-818c-4a28-b98e-6cd8a994eb22', + emailDeviceType: true, + smsDeviceType: true, + eventAsTags: false, + allowedProperties: [], + }, + }, + message: { + type: 'identify', + sentAt: '2021-01-03T17:02:53.195Z', + userId: 'user@27', + channel: 'web', + context: { + os: { name: '', version: '1.12.3' }, + app: { + name: 'RudderLabs JavaScript SDK', + build: '1.0.0', + version: '1.1.11', + namespace: 'com.rudderlabs.javascript', + }, + traits: { + brand: 'John Players', + price: '15000', + firstName: 'Test', + email: 'test@rudderstack.com', + userId: 'user@27', + }, + locale: 'en-US', + device: { token: 'token', id: 'id', type: 'ios' }, + screen: { density: 2 }, + library: { name: 'RudderLabs JavaScript SDK', version: '1.1.11' }, + campaign: {}, + userAgent: + 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.16; rv:84.0) Gecko/20100101 Firefox/84.0', + }, + rudderId: '8f8fa6b5-8e24-489c-8e22-61f23f2e364f', + messageId: '2116ef8c-efc3-4ca4-851b-02ee60dad6ff', + anonymousId: '97c46c81-3140-456d-b2a9-690d70aaca35', + originalTimestamp: '2021-01-03T17:02:53.193Z', + }, + }, + ], + method: 'POST', + }, + pathSuffix: '', + }, + output: { + response: { + status: 200, + body: [ + { + output: { + version: '1', + type: 'REST', + method: 'POST', + endpoint: 'https://onesignal.com/api/v1/players', + headers: { Accept: 'application/json', 'Content-Type': 'application/json' }, + params: {}, + body: { + JSON: { + device_os: '1.12.3', + laguage: 'en-US', + created_at: 1609693373, + last_active: 1609693373, + external_user_id: 'user@27', + app_id: 'random-818c-4a28-b98e-6cd8a994eb22', + device_type: 11, + identifier: 'test@rudderstack.com', + tags: { + brand: 'John Players', + price: '15000', + firstName: 'Test', + email: 'test@rudderstack.com', + userId: 'user@27', + anonymousId: '97c46c81-3140-456d-b2a9-690d70aaca35', + }, + }, + JSON_ARRAY: {}, + XML: {}, + FORM: {}, + }, + files: {}, + userId: '', + }, + statusCode: 200, + }, + { + output: { + version: '1', + type: 'REST', + method: 'POST', + endpoint: 'https://onesignal.com/api/v1/players', + headers: { Accept: 'application/json', 'Content-Type': 'application/json' }, + params: {}, + body: { + JSON: { + device_os: '1.12.3', + laguage: 'en-US', + created_at: 1609693373, + last_active: 1609693373, + external_user_id: 'user@27', + app_id: 'random-818c-4a28-b98e-6cd8a994eb22', + device_type: 8, + identifier: '97c46c81-3140-456d-b2a9-690d70aaca35', + tags: { + brand: 'John Players', + price: '15000', + firstName: 'Test', + email: 'test@rudderstack.com', + userId: 'user@27', + anonymousId: '97c46c81-3140-456d-b2a9-690d70aaca35', + }, + }, + JSON_ARRAY: {}, + XML: {}, + FORM: {}, + }, + files: {}, + userId: '', + }, + statusCode: 200, + }, + ], + }, + }, + }, + { + name: 'one_signal', + description: + 'Identify call for creating new device (playerId is not available in the payload). Integrations object is also not available. Email and phone both are available in the payload.', + feature: 'processor', + module: 'destination', + version: 'v0', + input: { + request: { + body: [ + { + destination: { + Config: { + appId: 'random-818c-4a28-b98e-6cd8a994eb22', + emailDeviceType: true, + smsDeviceType: true, + eventAsTags: false, + allowedProperties: [], + }, + }, + message: { + type: 'identify', + sentAt: '2021-01-03T17:02:53.195Z', + userId: 'user@27', + channel: 'web', + context: { + os: { name: '', version: '1.12.3' }, + app: { + name: 'RudderLabs JavaScript SDK', + build: '1.0.0', + version: '1.1.11', + namespace: 'com.rudderlabs.javascript', + }, + traits: { + brand: 'John Players', + price: '15000', + firstName: 'Test', + email: 'test@rudderstack.com', + phone: '+917836362334', + userId: 'user@27', + }, + locale: 'en-US', + device: { token: 'token', id: 'id', type: 'ios' }, + screen: { density: 2 }, + library: { name: 'RudderLabs JavaScript SDK', version: '1.1.11' }, + campaign: {}, + userAgent: + 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.16; rv:84.0) Gecko/20100101 Firefox/84.0', + }, + rudderId: '8f8fa6b5-8e24-489c-8e22-61f23f2e364f', + messageId: '2116ef8c-efc3-4ca4-851b-02ee60dad6ff', + anonymousId: '97c46c81-3140-456d-b2a9-690d70aaca35', + originalTimestamp: '2021-01-03T17:02:53.193Z', + }, + }, + ], + method: 'POST', + }, + pathSuffix: '', + }, + output: { + response: { + status: 200, + body: [ + { + output: { + version: '1', + type: 'REST', + method: 'POST', + endpoint: 'https://onesignal.com/api/v1/players', + headers: { Accept: 'application/json', 'Content-Type': 'application/json' }, + params: {}, + body: { + JSON: { + device_os: '1.12.3', + laguage: 'en-US', + created_at: 1609693373, + last_active: 1609693373, + external_user_id: 'user@27', + app_id: 'random-818c-4a28-b98e-6cd8a994eb22', + device_type: 11, + identifier: 'test@rudderstack.com', + tags: { + brand: 'John Players', + price: '15000', + firstName: 'Test', + email: 'test@rudderstack.com', + phone: '+917836362334', + userId: 'user@27', + anonymousId: '97c46c81-3140-456d-b2a9-690d70aaca35', + }, + }, + JSON_ARRAY: {}, + XML: {}, + FORM: {}, + }, + files: {}, + userId: '', + }, + statusCode: 200, + }, + { + output: { + version: '1', + type: 'REST', + method: 'POST', + endpoint: 'https://onesignal.com/api/v1/players', + headers: { Accept: 'application/json', 'Content-Type': 'application/json' }, + params: {}, + body: { + JSON: { + device_os: '1.12.3', + laguage: 'en-US', + created_at: 1609693373, + last_active: 1609693373, + external_user_id: 'user@27', + app_id: 'random-818c-4a28-b98e-6cd8a994eb22', + device_type: 14, + identifier: '+917836362334', + tags: { + brand: 'John Players', + price: '15000', + firstName: 'Test', + email: 'test@rudderstack.com', + phone: '+917836362334', + userId: 'user@27', + anonymousId: '97c46c81-3140-456d-b2a9-690d70aaca35', + }, + }, + JSON_ARRAY: {}, + XML: {}, + FORM: {}, + }, + files: {}, + userId: '', + }, + statusCode: 200, + }, + { + output: { + version: '1', + type: 'REST', + method: 'POST', + endpoint: 'https://onesignal.com/api/v1/players', + headers: { Accept: 'application/json', 'Content-Type': 'application/json' }, + params: {}, + body: { + JSON: { + device_os: '1.12.3', + laguage: 'en-US', + created_at: 1609693373, + last_active: 1609693373, + external_user_id: 'user@27', + app_id: 'random-818c-4a28-b98e-6cd8a994eb22', + device_type: 8, + identifier: '97c46c81-3140-456d-b2a9-690d70aaca35', + tags: { + brand: 'John Players', + price: '15000', + firstName: 'Test', + email: 'test@rudderstack.com', + phone: '+917836362334', + userId: 'user@27', + anonymousId: '97c46c81-3140-456d-b2a9-690d70aaca35', + }, + }, + JSON_ARRAY: {}, + XML: {}, + FORM: {}, + }, + files: {}, + userId: '', + }, + statusCode: 200, + }, + ], + }, + }, + }, + { + name: 'one_signal', + description: + 'Identify call for creating a new device(deviceType and identifier is present in the integrations object, playerId not present)', + feature: 'processor', + module: 'destination', + version: 'v0', + input: { + request: { + body: [ + { + destination: { + Config: { + appId: 'random-818c-4a28-b98e-6cd8a994eb22', + emailDeviceType: false, + smsDeviceType: false, + eventAsTags: false, + allowedProperties: [], + }, + }, + message: { + type: 'identify', + sentAt: '2021-01-03T17:02:53.195Z', + userId: 'user@27', + channel: 'web', + context: { + os: { name: '', version: '1.12.3' }, + app: { + name: 'RudderLabs JavaScript SDK', + build: '1.0.0', + version: '1.1.11', + namespace: 'com.rudderlabs.javascript', + }, + traits: { + brand: 'John Players', + price: '15000', + firstName: 'Test', + email: 'test@rudderstack.com', + phone: '+917836362334', + userId: 'user@27', + }, + locale: 'en-US', + device: { token: 'token', id: 'id', type: 'ios' }, + screen: { density: 2 }, + library: { name: 'RudderLabs JavaScript SDK', version: '1.1.11' }, + campaign: {}, + userAgent: + 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.16; rv:84.0) Gecko/20100101 Firefox/84.0', + }, + integrations: { one_signal: { deviceType: '5', identifier: 'random_id' } }, + rudderId: '8f8fa6b5-8e24-489c-8e22-61f23f2e364f', + messageId: '2116ef8c-efc3-4ca4-851b-02ee60dad6ff', + anonymousId: '97c46c81-3140-456d-b2a9-690d70aaca35', + originalTimestamp: '2021-01-03T17:02:53.193Z', + }, + }, + ], + method: 'POST', + }, + pathSuffix: '', + }, + output: { + response: { + status: 200, + body: [ + { + output: { + version: '1', + type: 'REST', + method: 'POST', + endpoint: 'https://onesignal.com/api/v1/players', + headers: { Accept: 'application/json', 'Content-Type': 'application/json' }, + params: {}, + body: { + JSON: { + device_os: '1.12.3', + laguage: 'en-US', + created_at: 1609693373, + last_active: 1609693373, + external_user_id: 'user@27', + app_id: 'random-818c-4a28-b98e-6cd8a994eb22', + device_type: 5, + identifier: 'random_id', + tags: { + brand: 'John Players', + price: '15000', + firstName: 'Test', + email: 'test@rudderstack.com', + phone: '+917836362334', + userId: 'user@27', + anonymousId: '97c46c81-3140-456d-b2a9-690d70aaca35', + }, + }, + JSON_ARRAY: {}, + XML: {}, + FORM: {}, + }, + files: {}, + userId: '', + }, + statusCode: 200, + }, + ], + }, + }, + }, + { + name: 'one_signal', + description: + 'Identify call for creating a new device(channel is mobile and integrations object is not present, playerId not present)', + feature: 'processor', + module: 'destination', + version: 'v0', + input: { + request: { + body: [ + { + destination: { + Config: { + appId: 'random-818c-4a28-b98e-6cd8a994eb22', + emailDeviceType: false, + smsDeviceType: false, + eventAsTags: false, + allowedProperties: [], + }, + }, + message: { + type: 'identify', + sentAt: '2021-01-03T17:02:53.195Z', + userId: 'user@27', + channel: 'mobile', + context: { + os: { name: '', version: '1.12.3' }, + app: { + name: 'RudderLabs JavaScript SDK', + build: '1.0.0', + version: '1.1.11', + namespace: 'com.rudderlabs.javascript', + }, + traits: { + brand: 'John Players', + price: '15000', + firstName: 'Test', + email: 'test@rudderstack.com', + phone: '+917836362334', + userId: 'user@27', + }, + locale: 'en-US', + device: { token: 'token', id: 'id', type: 'android' }, + screen: { density: 2 }, + library: { name: 'RudderLabs JavaScript SDK', version: '1.1.11' }, + campaign: {}, + userAgent: + 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.16; rv:84.0) Gecko/20100101 Firefox/84.0', + }, + rudderId: '8f8fa6b5-8e24-489c-8e22-61f23f2e364f', + messageId: '2116ef8c-efc3-4ca4-851b-02ee60dad6ff', + anonymousId: '97c46c81-3140-456d-b2a9-690d70aaca35', + originalTimestamp: '2021-01-03T17:02:53.193Z', + }, + }, + ], + method: 'POST', + }, + pathSuffix: '', + }, + output: { + response: { + status: 200, + body: [ + { + output: { + version: '1', + type: 'REST', + method: 'POST', + endpoint: 'https://onesignal.com/api/v1/players', + headers: { Accept: 'application/json', 'Content-Type': 'application/json' }, + params: {}, + body: { + JSON: { + device_os: '1.12.3', + laguage: 'en-US', + created_at: 1609693373, + last_active: 1609693373, + external_user_id: 'user@27', + app_id: 'random-818c-4a28-b98e-6cd8a994eb22', + device_type: 1, + identifier: 'token', + tags: { + brand: 'John Players', + price: '15000', + firstName: 'Test', + email: 'test@rudderstack.com', + phone: '+917836362334', + userId: 'user@27', + anonymousId: '97c46c81-3140-456d-b2a9-690d70aaca35', + }, + }, + JSON_ARRAY: {}, + XML: {}, + FORM: {}, + }, + files: {}, + userId: '', + }, + statusCode: 200, + }, + ], + }, + }, + }, + { + name: 'one_signal', + description: 'Identify call for Editing a device using playerId', + feature: 'processor', + module: 'destination', + version: 'v0', + input: { + request: { + body: [ + { + destination: { + Config: { + appId: 'random-818c-4a28-b98e-6cd8a994eb22', + emailDeviceType: false, + smsDeviceType: false, + eventAsTags: false, + allowedProperties: [], + }, + }, + message: { + type: 'identify', + sentAt: '2021-01-03T17:02:53.195Z', + userId: 'user@27', + channel: 'mobile', + context: { + externalId: [{ type: 'playerId', id: '85be324d-6dab-4293-ad1f-42199d4c455b' }], + os: { name: '', version: '1.12.3' }, + app: { + name: 'RudderLabs JavaScript SDK', + build: '1.0.0', + version: '1.1.11', + namespace: 'com.rudderlabs.javascript', + }, + traits: { + brand: 'Raymonds', + price: '14000', + firstName: 'Test', + email: 'test@rudderstack.com', + phone: '+917836362334', + userId: 'user@27', + }, + locale: 'en-US', + device: { token: 'token', id: 'id', type: 'android' }, + screen: { density: 2 }, + library: { name: 'RudderLabs JavaScript SDK', version: '1.1.11' }, + campaign: {}, + userAgent: + 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.16; rv:84.0) Gecko/20100101 Firefox/84.0', + }, + rudderId: '8f8fa6b5-8e24-489c-8e22-61f23f2e364f', + messageId: '2116ef8c-efc3-4ca4-851b-02ee60dad6ff', + anonymousId: '97c46c81-3140-456d-b2a9-690d70aaca35', + originalTimestamp: '2021-01-03T17:02:53.193Z', + }, + }, + ], + method: 'POST', + }, + pathSuffix: '', + }, + output: { + response: { + status: 200, + body: [ + { + output: { + version: '1', + type: 'REST', + method: 'PUT', + endpoint: 'https://onesignal.com/api/v1/players/85be324d-6dab-4293-ad1f-42199d4c455b', + headers: { Accept: 'application/json', 'Content-Type': 'application/json' }, + params: {}, + body: { + JSON: { + device_os: '1.12.3', + laguage: 'en-US', + created_at: 1609693373, + last_active: 1609693373, + external_user_id: 'user@27', + app_id: 'random-818c-4a28-b98e-6cd8a994eb22', + tags: { + brand: 'Raymonds', + price: '14000', + firstName: 'Test', + email: 'test@rudderstack.com', + phone: '+917836362334', + userId: 'user@27', + anonymousId: '97c46c81-3140-456d-b2a9-690d70aaca35', + }, + }, + JSON_ARRAY: {}, + XML: {}, + FORM: {}, + }, + files: {}, + userId: '', + }, + statusCode: 200, + }, + ], + }, + }, + }, + { + name: 'one_signal', + description: 'Track call for updating tags using external_user_id', + feature: 'processor', + module: 'destination', + version: 'v0', + input: { + request: { + body: [ + { + destination: { + Config: { + appId: 'random-818c-4a28-b98e-6cd8a994eb22', + emailDeviceType: false, + smsDeviceType: false, + eventAsTags: false, + allowedProperties: [{ propertyName: 'brand' }, { propertyName: 'price' }], + }, + }, + message: { + event: 'add_to_Cart', + type: 'track', + sentAt: '2021-01-03T17:02:53.195Z', + userId: 'user@27', + channel: 'web', + properties: { brand: 'Zara', price: '12000' }, + context: { + os: { name: '', version: '' }, + app: { + name: 'RudderLabs JavaScript SDK', + build: '1.0.0', + version: '1.1.11', + namespace: 'com.rudderlabs.javascript', + }, + locale: 'en-US', + screen: { density: 2 }, + library: { name: 'RudderLabs JavaScript SDK', version: '1.1.11' }, + campaign: {}, + userAgent: + 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.16; rv:84.0) Gecko/20100101 Firefox/84.0', + }, + rudderId: '8f8fa6b5-8e24-489c-8e22-61f23f2e364f', + messageId: '2116ef8c-efc3-4ca4-851b-02ee60dad6ff', + anonymousId: '97c46c81-3140-456d-b2a9-690d70aaca35', + originalTimestamp: '2021-01-03T17:02:53.193Z', + }, + }, + ], + method: 'POST', + }, + pathSuffix: '', + }, + output: { + response: { + status: 200, + body: [ + { + output: { + body: { + XML: {}, + FORM: {}, + JSON: { tags: { brand: 'Zara', price: '12000', add_to_Cart: true } }, + JSON_ARRAY: {}, + }, + type: 'REST', + files: {}, + method: 'PUT', + params: {}, + headers: { Accept: 'application/json', 'Content-Type': 'application/json' }, + version: '1', + endpoint: + 'https://onesignal.com/api/v1/apps/random-818c-4a28-b98e-6cd8a994eb22/users/user@27', + userId: '', + }, + statusCode: 200, + }, + ], + }, + }, + }, + { + name: 'one_signal', + description: + 'Track call for updating tags using external_user_id (with concatenated event name)', + feature: 'processor', + module: 'destination', + version: 'v0', + input: { + request: { + body: [ + { + destination: { + Config: { + appId: 'random-818c-4a28-b98e-6cd8a994eb22', + emailDeviceType: false, + smsDeviceType: false, + eventAsTags: true, + allowedProperties: [{ propertyName: 'brand' }, { propertyName: 'price' }], + }, + }, + message: { + event: 'add_to_Cart', + type: 'track', + sentAt: '2021-01-03T17:02:53.195Z', + userId: 'user@27', + channel: 'web', + properties: { brand: 'Zara', price: '12000' }, + context: { + os: { name: '', version: '' }, + app: { + name: 'RudderLabs JavaScript SDK', + build: '1.0.0', + version: '1.1.11', + namespace: 'com.rudderlabs.javascript', + }, + locale: 'en-US', + screen: { density: 2 }, + library: { name: 'RudderLabs JavaScript SDK', version: '1.1.11' }, + campaign: {}, + userAgent: + 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.16; rv:84.0) Gecko/20100101 Firefox/84.0', + }, + rudderId: '8f8fa6b5-8e24-489c-8e22-61f23f2e364f', + messageId: '2116ef8c-efc3-4ca4-851b-02ee60dad6ff', + anonymousId: '97c46c81-3140-456d-b2a9-690d70aaca35', + originalTimestamp: '2021-01-03T17:02:53.193Z', + }, + }, + ], + method: 'POST', + }, + pathSuffix: '', + }, + output: { + response: { + status: 200, + body: [ + { + output: { + body: { + XML: {}, + FORM: {}, + JSON: { + tags: { + add_to_Cart: true, + add_to_Cart_brand: 'Zara', + add_to_Cart_price: '12000', + }, + }, + JSON_ARRAY: {}, + }, + type: 'REST', + files: {}, + method: 'PUT', + params: {}, + headers: { Accept: 'application/json', 'Content-Type': 'application/json' }, + version: '1', + endpoint: + 'https://onesignal.com/api/v1/apps/random-818c-4a28-b98e-6cd8a994eb22/users/user@27', + userId: '', + }, + statusCode: 200, + }, + ], + }, + }, + }, + { + name: 'one_signal', + description: + 'Track call with tags key having empty value( Output Behaviour: Those keys will be deleted)', + feature: 'processor', + module: 'destination', + version: 'v0', + input: { + request: { + body: [ + { + destination: { + Config: { + appId: 'random-818c-4a28-b98e-6cd8a994eb22', + emailDeviceType: false, + smsDeviceType: false, + eventAsTags: true, + allowedProperties: [{ propertyName: 'brand' }, { propertyName: 'price' }], + }, + }, + message: { + event: 'add_to_Cart', + type: 'track', + sentAt: '2021-01-03T17:02:53.195Z', + userId: 'user@27', + channel: 'web', + properties: { brand: '', price: '' }, + context: { + os: { name: '', version: '' }, + app: { + name: 'RudderLabs JavaScript SDK', + build: '1.0.0', + version: '1.1.11', + namespace: 'com.rudderlabs.javascript', + }, + locale: 'en-US', + screen: { density: 2 }, + library: { name: 'RudderLabs JavaScript SDK', version: '1.1.11' }, + campaign: {}, + userAgent: + 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.16; rv:84.0) Gecko/20100101 Firefox/84.0', + }, + rudderId: '8f8fa6b5-8e24-489c-8e22-61f23f2e364f', + messageId: '2116ef8c-efc3-4ca4-851b-02ee60dad6ff', + anonymousId: '97c46c81-3140-456d-b2a9-690d70aaca35', + originalTimestamp: '2021-01-03T17:02:53.193Z', + }, + }, + ], + method: 'POST', + }, + pathSuffix: '', + }, + output: { + response: { + status: 200, + body: [ + { + output: { + body: { + XML: {}, + FORM: {}, + JSON: { tags: { add_to_Cart: true, add_to_Cart_brand: '', add_to_Cart_price: '' } }, + JSON_ARRAY: {}, + }, + type: 'REST', + files: {}, + method: 'PUT', + params: {}, + headers: { Accept: 'application/json', 'Content-Type': 'application/json' }, + version: '1', + endpoint: + 'https://onesignal.com/api/v1/apps/random-818c-4a28-b98e-6cd8a994eb22/users/user@27', + userId: '', + }, + statusCode: 200, + }, + ], + }, + }, + }, + { + name: 'one_signal', + description: 'Track call having no allowed properties)', + feature: 'processor', + module: 'destination', + version: 'v0', + input: { + request: { + body: [ + { + destination: { + Config: { + appId: 'random-818c-4a28-b98e-6cd8a994eb22', + emailDeviceType: false, + smsDeviceType: false, + eventAsTags: false, + allowedProperties: [], + }, + }, + message: { + event: 'add_to_Cart', + type: 'track', + sentAt: '2021-01-03T17:02:53.195Z', + userId: 'user@27', + channel: 'web', + properties: { brand: 'zara', price: '10000' }, + context: { + os: { name: '', version: '' }, + app: { + name: 'RudderLabs JavaScript SDK', + build: '1.0.0', + version: '1.1.11', + namespace: 'com.rudderlabs.javascript', + }, + locale: 'en-US', + screen: { density: 2 }, + library: { name: 'RudderLabs JavaScript SDK', version: '1.1.11' }, + campaign: {}, + userAgent: + 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.16; rv:84.0) Gecko/20100101 Firefox/84.0', + }, + rudderId: '8f8fa6b5-8e24-489c-8e22-61f23f2e364f', + messageId: '2116ef8c-efc3-4ca4-851b-02ee60dad6ff', + anonymousId: '97c46c81-3140-456d-b2a9-690d70aaca35', + originalTimestamp: '2021-01-03T17:02:53.193Z', + }, + }, + ], + method: 'POST', + }, + pathSuffix: '', + }, + output: { + response: { + status: 200, + body: [ + { + output: { + body: { XML: {}, FORM: {}, JSON: { tags: { add_to_Cart: true } }, JSON_ARRAY: {} }, + type: 'REST', + files: {}, + method: 'PUT', + params: {}, + headers: { Accept: 'application/json', 'Content-Type': 'application/json' }, + version: '1', + endpoint: + 'https://onesignal.com/api/v1/apps/random-818c-4a28-b98e-6cd8a994eb22/users/user@27', + userId: '', + }, + statusCode: 200, + }, + ], + }, + }, + }, + { + name: 'one_signal', + description: 'Group call ', + feature: 'processor', + module: 'destination', + version: 'v0', + input: { + request: { + body: [ + { + destination: { + Config: { + appId: 'random-818c-4a28-b98e-6cd8a994eb22', + emailDeviceType: false, + smsDeviceType: false, + eventAsTags: true, + allowedProperties: [{ propertyName: 'brand' }, { propertyName: 'price' }], + }, + }, + message: { + type: 'group', + groupId: 'players111', + sentAt: '2021-01-03T17:02:53.195Z', + userId: 'user@27', + channel: 'web', + context: { + os: { name: '', version: '' }, + app: { + name: 'RudderLabs JavaScript SDK', + build: '1.0.0', + version: '1.1.11', + namespace: 'com.rudderlabs.javascript', + }, + traits: { brand: '', price: '10000' }, + locale: 'en-US', + screen: { density: 2 }, + library: { name: 'RudderLabs JavaScript SDK', version: '1.1.11' }, + campaign: {}, + userAgent: + 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.16; rv:84.0) Gecko/20100101 Firefox/84.0', + }, + rudderId: '8f8fa6b5-8e24-489c-8e22-61f23f2e364f', + messageId: '2116ef8c-efc3-4ca4-851b-02ee60dad6ff', + anonymousId: '97c46c81-3140-456d-b2a9-690d70aaca35', + originalTimestamp: '2021-01-03T17:02:53.193Z', + }, + }, + ], + method: 'POST', + }, + pathSuffix: '', + }, + output: { + response: { + status: 200, + body: [ + { + output: { + body: { + XML: {}, + FORM: {}, + JSON: { tags: { brand: '', price: '10000', groupId: 'players111' } }, + JSON_ARRAY: {}, + }, + type: 'REST', + files: {}, + method: 'PUT', + params: {}, + headers: { Accept: 'application/json', 'Content-Type': 'application/json' }, + version: '1', + endpoint: + 'https://onesignal.com/api/v1/apps/random-818c-4a28-b98e-6cd8a994eb22/users/user@27', + userId: '', + }, + statusCode: 200, + }, + ], + }, + }, + }, + { + name: 'one_signal', + description: 'Check for appId', + feature: 'processor', + module: 'destination', + version: 'v0', + input: { + request: { + body: [ + { + destination: { + Config: { + appId: '', + emailDeviceType: false, + smsDeviceType: false, + eventAsTags: true, + allowedProperties: [{ propertyName: 'brand' }, { propertyName: 'price' }], + }, + }, + message: { + type: 'group', + groupId: 'players111', + sentAt: '2021-01-03T17:02:53.195Z', + userId: 'user@27', + channel: 'web', + context: { + os: { name: '', version: '' }, + app: { + name: 'RudderLabs JavaScript SDK', + build: '1.0.0', + version: '1.1.11', + namespace: 'com.rudderlabs.javascript', + }, + traits: { brand: '', price: '10000' }, + locale: 'en-US', + screen: { density: 2 }, + library: { name: 'RudderLabs JavaScript SDK', version: '1.1.11' }, + campaign: {}, + userAgent: + 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.16; rv:84.0) Gecko/20100101 Firefox/84.0', + }, + rudderId: '8f8fa6b5-8e24-489c-8e22-61f23f2e364f', + messageId: '2116ef8c-efc3-4ca4-851b-02ee60dad6ff', + anonymousId: '97c46c81-3140-456d-b2a9-690d70aaca35', + originalTimestamp: '2021-01-03T17:02:53.193Z', + }, + }, + ], + method: 'POST', + }, + pathSuffix: '', + }, + output: { + response: { + status: 200, + body: [ + { + error: 'appId is a required field', + statTags: { + destType: 'ONE_SIGNAL', + errorCategory: 'dataValidation', + errorType: 'configuration', + feature: 'processor', + implementation: 'native', + module: 'destination', + }, + statusCode: 400, + }, + ], + }, + }, + }, + { + name: 'one_signal', + description: 'Check for message type', + feature: 'processor', + module: 'destination', + version: 'v0', + input: { + request: { + body: [ + { + destination: { + Config: { + appId: 'random-818c-4a28-b98e-6cd8a994eb22', + emailDeviceType: false, + smsDeviceType: false, + eventAsTags: true, + allowedProperties: [{ propertyName: 'brand' }, { propertyName: 'price' }], + }, + }, + message: { + type: 'page', + groupId: 'players111', + sentAt: '2021-01-03T17:02:53.195Z', + userId: 'user@27', + channel: 'web', + context: { + os: { name: '', version: '' }, + app: { + name: 'RudderLabs JavaScript SDK', + build: '1.0.0', + version: '1.1.11', + namespace: 'com.rudderlabs.javascript', + }, + traits: { brand: '', price: '10000' }, + locale: 'en-US', + screen: { density: 2 }, + library: { name: 'RudderLabs JavaScript SDK', version: '1.1.11' }, + campaign: {}, + userAgent: + 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.16; rv:84.0) Gecko/20100101 Firefox/84.0', + }, + rudderId: '8f8fa6b5-8e24-489c-8e22-61f23f2e364f', + messageId: '2116ef8c-efc3-4ca4-851b-02ee60dad6ff', + anonymousId: '97c46c81-3140-456d-b2a9-690d70aaca35', + originalTimestamp: '2021-01-03T17:02:53.193Z', + }, + }, + ], + method: 'POST', + }, + pathSuffix: '', + }, + output: { + response: { + status: 200, + body: [ + { + error: 'Message type page is not supported', + statTags: { + destType: 'ONE_SIGNAL', + errorCategory: 'dataValidation', + errorType: 'instrumentation', + feature: 'processor', + implementation: 'native', + module: 'destination', + }, + statusCode: 400, + }, + ], + }, + }, + }, + { + name: 'one_signal', + description: 'Validating deviceType', + feature: 'processor', + module: 'destination', + version: 'v0', + input: { + request: { + body: [ + { + destination: { + Config: { + appId: 'random-818c-4a28-b98e-6cd8a994eb22', + emailDeviceType: false, + smsDeviceType: false, + eventAsTags: false, + allowedProperties: [], + }, + }, + message: { + type: 'identify', + sentAt: '2021-01-03T17:02:53.195Z', + userId: 'user@27', + channel: 'web', + context: { + os: { name: '', version: '1.12.3' }, + app: { + name: 'RudderLabs JavaScript SDK', + build: '1.0.0', + version: '1.1.11', + namespace: 'com.rudderlabs.javascript', + }, + traits: { + brand: 'John Players', + price: '15000', + firstName: 'Test', + email: 'test@rudderstack.com', + phone: '+917836362334', + userId: 'user@27', + }, + locale: 'en-US', + device: { token: 'token', id: 'id', type: 'ios' }, + screen: { density: 2 }, + library: { name: 'RudderLabs JavaScript SDK', version: '1.1.11' }, + campaign: {}, + userAgent: + 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.16; rv:84.0) Gecko/20100101 Firefox/84.0', + }, + integrations: { one_signal: { deviceType: '15', identifier: 'random_id' } }, + rudderId: '8f8fa6b5-8e24-489c-8e22-61f23f2e364f', + messageId: '2116ef8c-efc3-4ca4-851b-02ee60dad6ff', + anonymousId: '97c46c81-3140-456d-b2a9-690d70aaca35', + originalTimestamp: '2021-01-03T17:02:53.193Z', + }, + }, + ], + method: 'POST', + }, + pathSuffix: '', + }, + output: { + response: { + status: 200, + body: [ + { + error: 'device_type 15 is not a valid device_type', + statTags: { + destType: 'ONE_SIGNAL', + errorCategory: 'dataValidation', + errorType: 'instrumentation', + feature: 'processor', + implementation: 'native', + module: 'destination', + }, + statusCode: 400, + }, + ], + }, + }, + }, + { + name: 'one_signal', + description: 'check for Message type not present', + feature: 'processor', + module: 'destination', + version: 'v0', + input: { + request: { + body: [ + { + destination: { + Config: { + appId: 'random-818c-4a28-b98e-6cd8a994eb22', + emailDeviceType: false, + smsDeviceType: false, + eventAsTags: false, + allowedProperties: [{ propertyName: 'brand' }, { propertyName: 'price' }], + }, + }, + message: { + event: 'add_to_Cart', + sentAt: '2021-01-03T17:02:53.195Z', + userId: 'user@27', + channel: 'web', + properties: { brand: 'Zara', price: '12000' }, + context: { + os: { name: '', version: '' }, + app: { + name: 'RudderLabs JavaScript SDK', + build: '1.0.0', + version: '1.1.11', + namespace: 'com.rudderlabs.javascript', + }, + locale: 'en-US', + screen: { density: 2 }, + library: { name: 'RudderLabs JavaScript SDK', version: '1.1.11' }, + campaign: {}, + userAgent: + 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.16; rv:84.0) Gecko/20100101 Firefox/84.0', + }, + rudderId: '8f8fa6b5-8e24-489c-8e22-61f23f2e364f', + messageId: '2116ef8c-efc3-4ca4-851b-02ee60dad6ff', + anonymousId: '97c46c81-3140-456d-b2a9-690d70aaca35', + originalTimestamp: '2021-01-03T17:02:53.193Z', + }, + }, + ], + method: 'POST', + }, + pathSuffix: '', + }, + output: { + response: { + status: 200, + body: [ + { + error: 'Event type is required', + statTags: { + destType: 'ONE_SIGNAL', + errorCategory: 'dataValidation', + errorType: 'instrumentation', + feature: 'processor', + implementation: 'native', + module: 'destination', + }, + statusCode: 400, + }, + ], + }, + }, + }, + { + name: 'one_signal', + description: 'Check for event name in the track call', + feature: 'processor', + module: 'destination', + version: 'v0', + input: { + request: { + body: [ + { + destination: { + Config: { + appId: 'random-818c-4a28-b98e-6cd8a994eb22', + emailDeviceType: false, + smsDeviceType: false, + eventAsTags: false, + allowedProperties: [{ propertyName: 'brand' }, { propertyName: 'price' }], + }, + }, + message: { + type: 'track', + sentAt: '2021-01-03T17:02:53.195Z', + userId: 'user@27', + channel: 'web', + properties: { brand: 'Zara', price: '12000' }, + context: { + os: { name: '', version: '' }, + app: { + name: 'RudderLabs JavaScript SDK', + build: '1.0.0', + version: '1.1.11', + namespace: 'com.rudderlabs.javascript', + }, + locale: 'en-US', + screen: { density: 2 }, + library: { name: 'RudderLabs JavaScript SDK', version: '1.1.11' }, + campaign: {}, + userAgent: + 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.16; rv:84.0) Gecko/20100101 Firefox/84.0', + }, + rudderId: '8f8fa6b5-8e24-489c-8e22-61f23f2e364f', + messageId: '2116ef8c-efc3-4ca4-851b-02ee60dad6ff', + anonymousId: '97c46c81-3140-456d-b2a9-690d70aaca35', + originalTimestamp: '2021-01-03T17:02:53.193Z', + }, + }, + ], + method: 'POST', + }, + pathSuffix: '', + }, + output: { + response: { + status: 200, + body: [ + { + error: 'Event is not present in the input payloads', + statTags: { + destType: 'ONE_SIGNAL', + errorCategory: 'dataValidation', + errorType: 'instrumentation', + feature: 'processor', + implementation: 'native', + module: 'destination', + }, + statusCode: 400, + }, + ], + }, + }, + }, + { + name: 'one_signal', + description: 'Check for groupId ', + feature: 'processor', + module: 'destination', + version: 'v0', + input: { + request: { + body: [ + { + destination: { + Config: { + appId: 'random-818c-4a28-b98e-6cd8a994eb22', + emailDeviceType: false, + smsDeviceType: false, + eventAsTags: true, + allowedProperties: [{ propertyName: 'brand' }, { propertyName: 'price' }], + }, + }, + message: { + type: 'group', + sentAt: '2021-01-03T17:02:53.195Z', + userId: 'user@27', + channel: 'web', + context: { + os: { name: '', version: '' }, + app: { + name: 'RudderLabs JavaScript SDK', + build: '1.0.0', + version: '1.1.11', + namespace: 'com.rudderlabs.javascript', + }, + traits: { brand: '', price: '10000' }, + locale: 'en-US', + screen: { density: 2 }, + library: { name: 'RudderLabs JavaScript SDK', version: '1.1.11' }, + campaign: {}, + userAgent: + 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.16; rv:84.0) Gecko/20100101 Firefox/84.0', + }, + rudderId: '8f8fa6b5-8e24-489c-8e22-61f23f2e364f', + messageId: '2116ef8c-efc3-4ca4-851b-02ee60dad6ff', + anonymousId: '97c46c81-3140-456d-b2a9-690d70aaca35', + originalTimestamp: '2021-01-03T17:02:53.193Z', + }, + }, + ], + method: 'POST', + }, + pathSuffix: '', + }, + output: { + response: { + status: 200, + body: [ + { + error: 'groupId is required for group events', + statTags: { + destType: 'ONE_SIGNAL', + errorCategory: 'dataValidation', + errorType: 'instrumentation', + feature: 'processor', + implementation: 'native', + module: 'destination', + }, + statusCode: 400, + }, + ], + }, + }, + }, + { + name: 'one_signal', + description: 'Check for user Id (required field to update the device) for track call', + feature: 'processor', + module: 'destination', + version: 'v0', + input: { + request: { + body: [ + { + destination: { + Config: { + appId: 'random-818c-4a28-b98e-6cd8a994eb22', + emailDeviceType: false, + smsDeviceType: false, + eventAsTags: false, + allowedProperties: [{ propertyName: 'brand' }, { propertyName: 'price' }], + }, + }, + message: { + event: 'add_to_Cart', + type: 'track', + sentAt: '2021-01-03T17:02:53.195Z', + channel: 'web', + properties: { brand: 'Zara', price: '12000' }, + context: { + os: { name: '', version: '' }, + app: { + name: 'RudderLabs JavaScript SDK', + build: '1.0.0', + version: '1.1.11', + namespace: 'com.rudderlabs.javascript', + }, + locale: 'en-US', + screen: { density: 2 }, + library: { name: 'RudderLabs JavaScript SDK', version: '1.1.11' }, + campaign: {}, + userAgent: + 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.16; rv:84.0) Gecko/20100101 Firefox/84.0', + }, + rudderId: '8f8fa6b5-8e24-489c-8e22-61f23f2e364f', + messageId: '2116ef8c-efc3-4ca4-851b-02ee60dad6ff', + anonymousId: '97c46c81-3140-456d-b2a9-690d70aaca35', + originalTimestamp: '2021-01-03T17:02:53.193Z', + }, + }, + ], + method: 'POST', + }, + pathSuffix: '', + }, + output: { + response: { + status: 200, + body: [ + { + error: 'userId is required for track events/updating a device', + statTags: { + destType: 'ONE_SIGNAL', + errorCategory: 'dataValidation', + errorType: 'instrumentation', + feature: 'processor', + implementation: 'native', + module: 'destination', + }, + statusCode: 400, + }, + ], + }, + }, + }, +]; diff --git a/test/integrations/destinations/one_signal/router/data.ts b/test/integrations/destinations/one_signal/router/data.ts new file mode 100644 index 0000000000..5f45d2e624 --- /dev/null +++ b/test/integrations/destinations/one_signal/router/data.ts @@ -0,0 +1,286 @@ +export const data = [ + { + name: 'one_signal', + description: 'Test 0', + feature: 'router', + module: 'destination', + version: 'v0', + input: { + request: { + body: { + input: [ + { + destination: { + Config: { + appId: 'random-818c-4a28-b98e-6cd8a994eb22', + emailDeviceType: true, + smsDeviceType: true, + eventAsTags: false, + allowedProperties: [], + }, + }, + metadata: { + jobId: 1, + }, + message: { + type: 'identify', + sentAt: '2021-01-03T17:02:53.195Z', + userId: 'user@27', + channel: 'web', + context: { + os: { + name: '', + version: '1.12.3', + }, + app: { + name: 'RudderLabs JavaScript SDK', + build: '1.0.0', + version: '1.1.11', + namespace: 'com.rudderlabs.javascript', + }, + traits: { + brand: 'John Players', + price: '15000', + firstName: 'Test', + email: 'test@rudderstack.com', + userId: 'user@27', + }, + locale: 'en-US', + device: { + token: 'token', + id: 'id', + type: 'ios', + }, + screen: { + density: 2, + }, + library: { + name: 'RudderLabs JavaScript SDK', + version: '1.1.11', + }, + campaign: {}, + userAgent: + 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.16; rv:84.0) Gecko/20100101 Firefox/84.0', + }, + rudderId: '8f8fa6b5-8e24-489c-8e22-61f23f2e364f', + messageId: '2116ef8c-efc3-4ca4-851b-02ee60dad6ff', + anonymousId: '97c46c81-3140-456d-b2a9-690d70aaca35', + originalTimestamp: '2021-01-03T17:02:53.193Z', + }, + }, + { + destination: { + Config: { + appId: 'random-818c-4a28-b98e-6cd8a994eb22', + emailDeviceType: false, + smsDeviceType: false, + eventAsTags: false, + allowedProperties: [ + { + propertyName: 'brand', + }, + { + propertyName: 'price', + }, + ], + }, + }, + metadata: { + jobId: 2, + }, + message: { + event: 'add_to_Cart', + type: 'track', + sentAt: '2021-01-03T17:02:53.195Z', + userId: 'user@27', + channel: 'web', + properties: { + brand: 'Zara', + price: '12000', + }, + context: { + os: { + name: '', + version: '', + }, + app: { + name: 'RudderLabs JavaScript SDK', + build: '1.0.0', + version: '1.1.11', + namespace: 'com.rudderlabs.javascript', + }, + locale: 'en-US', + screen: { + density: 2, + }, + library: { + name: 'RudderLabs JavaScript SDK', + version: '1.1.11', + }, + campaign: {}, + userAgent: + 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.16; rv:84.0) Gecko/20100101 Firefox/84.0', + }, + rudderId: '8f8fa6b5-8e24-489c-8e22-61f23f2e364f', + messageId: '2116ef8c-efc3-4ca4-851b-02ee60dad6ff', + anonymousId: '97c46c81-3140-456d-b2a9-690d70aaca35', + originalTimestamp: '2021-01-03T17:02:53.193Z', + }, + }, + ], + destType: 'one_signal', + }, + method: 'POST', + }, + }, + output: { + response: { + status: 200, + body: { + output: [ + { + batchedRequest: [ + { + version: '1', + type: 'REST', + method: 'POST', + endpoint: 'https://onesignal.com/api/v1/players', + headers: { + Accept: 'application/json', + 'Content-Type': 'application/json', + }, + params: {}, + body: { + JSON: { + device_os: '1.12.3', + laguage: 'en-US', + created_at: 1609693373, + last_active: 1609693373, + external_user_id: 'user@27', + app_id: 'random-818c-4a28-b98e-6cd8a994eb22', + device_type: 11, + identifier: 'test@rudderstack.com', + tags: { + brand: 'John Players', + price: '15000', + firstName: 'Test', + email: 'test@rudderstack.com', + userId: 'user@27', + anonymousId: '97c46c81-3140-456d-b2a9-690d70aaca35', + }, + }, + JSON_ARRAY: {}, + XML: {}, + FORM: {}, + }, + files: {}, + }, + { + version: '1', + type: 'REST', + method: 'POST', + endpoint: 'https://onesignal.com/api/v1/players', + headers: { + Accept: 'application/json', + 'Content-Type': 'application/json', + }, + params: {}, + body: { + JSON: { + device_os: '1.12.3', + laguage: 'en-US', + created_at: 1609693373, + last_active: 1609693373, + external_user_id: 'user@27', + app_id: 'random-818c-4a28-b98e-6cd8a994eb22', + device_type: 8, + identifier: '97c46c81-3140-456d-b2a9-690d70aaca35', + tags: { + brand: 'John Players', + price: '15000', + firstName: 'Test', + email: 'test@rudderstack.com', + userId: 'user@27', + anonymousId: '97c46c81-3140-456d-b2a9-690d70aaca35', + }, + }, + JSON_ARRAY: {}, + XML: {}, + FORM: {}, + }, + files: {}, + }, + ], + metadata: [ + { + jobId: 1, + }, + ], + batched: false, + statusCode: 200, + destination: { + Config: { + appId: 'random-818c-4a28-b98e-6cd8a994eb22', + emailDeviceType: true, + smsDeviceType: true, + eventAsTags: false, + allowedProperties: [], + }, + }, + }, + { + batchedRequest: { + body: { + XML: {}, + FORM: {}, + JSON: { + tags: { + brand: 'Zara', + price: '12000', + add_to_Cart: true, + }, + }, + JSON_ARRAY: {}, + }, + type: 'REST', + files: {}, + method: 'PUT', + params: {}, + headers: { + Accept: 'application/json', + 'Content-Type': 'application/json', + }, + version: '1', + endpoint: + 'https://onesignal.com/api/v1/apps/random-818c-4a28-b98e-6cd8a994eb22/users/user@27', + }, + metadata: [ + { + jobId: 2, + }, + ], + batched: false, + statusCode: 200, + destination: { + Config: { + appId: 'random-818c-4a28-b98e-6cd8a994eb22', + emailDeviceType: false, + smsDeviceType: false, + eventAsTags: false, + allowedProperties: [ + { + propertyName: 'brand', + }, + { + propertyName: 'price', + }, + ], + }, + }, + }, + ], + }, + }, + }, + }, +]; diff --git a/test/integrations/destinations/pagerduty/processor/data.ts b/test/integrations/destinations/pagerduty/processor/data.ts new file mode 100644 index 0000000000..97fe22daa0 --- /dev/null +++ b/test/integrations/destinations/pagerduty/processor/data.ts @@ -0,0 +1,782 @@ +export const data = [ + { + name: 'pagerduty', + description: 'No Message type', + feature: 'processor', + module: 'destination', + version: 'v0', + input: { + request: { + body: [ + { + message: { + sentAt: '2022-10-11T13:10:54.877+05:30', + userId: 'user@45', + rudderId: 'caae04c5-959f-467b-a293-86f6c62d59e6', + messageId: 'b6ce7f31-5d76-4240-94d2-3eea020ef791', + timestamp: '2022-10-11T13:10:52.137+05:30', + receivedAt: '2022-10-11T13:10:52.138+05:30', + request_ip: '[::1]', + originalTimestamp: '2022-10-11T13:10:54.877+05:30', + }, + destination: { Config: { routingKey: '9552b56325dc490bd0139be85f7b8fac' } }, + }, + ], + method: 'POST', + }, + pathSuffix: '', + }, + output: { + response: { + status: 200, + body: [ + { + error: 'Event type is required', + statTags: { + destType: 'PAGERDUTY', + errorCategory: 'dataValidation', + errorType: 'instrumentation', + feature: 'processor', + implementation: 'native', + module: 'destination', + }, + statusCode: 400, + }, + ], + }, + }, + }, + { + name: 'pagerduty', + description: 'Routing Key is not present', + feature: 'processor', + module: 'destination', + version: 'v0', + input: { + request: { + body: [ + { + message: { + sentAt: '2022-10-11T13:10:54.877+05:30', + userId: 'user@45', + context: {}, + rudderId: 'caae04c5-959f-467b-a293-86f6c62d59e6', + messageId: 'b6ce7f31-5d76-4240-94d2-3eea020ef791', + timestamp: '2022-10-11T13:10:52.137+05:30', + receivedAt: '2022-10-11T13:10:52.138+05:30', + request_ip: '[::1]', + originalTimestamp: '2022-10-11T13:10:54.877+05:30', + }, + destination: { Config: {} }, + }, + ], + method: 'POST', + }, + pathSuffix: '', + }, + output: { + response: { + status: 200, + body: [ + { + error: 'Routing Key Is Required', + statTags: { + destType: 'PAGERDUTY', + errorCategory: 'dataValidation', + errorType: 'configuration', + feature: 'processor', + implementation: 'native', + module: 'destination', + }, + statusCode: 400, + }, + ], + }, + }, + }, + { + name: 'pagerduty', + description: 'Unsupported Event type', + feature: 'processor', + module: 'destination', + version: 'v0', + input: { + request: { + body: [ + { + message: { + type: 'alias', + sentAt: '2022-10-11T13:10:54.877+05:30', + userId: 'user@45', + context: {}, + rudderId: 'caae04c5-959f-467b-a293-86f6c62d59e6', + messageId: 'b6ce7f31-5d76-4240-94d2-3eea020ef791', + timestamp: '2022-10-11T13:10:52.137+05:30', + receivedAt: '2022-10-11T13:10:52.138+05:30', + request_ip: '[::1]', + originalTimestamp: '2022-10-11T13:10:54.877+05:30', + }, + destination: { Config: { routingKey: '9552b56325dc490bd0139be85f7b8fac' } }, + }, + ], + method: 'POST', + }, + pathSuffix: '', + }, + output: { + response: { + status: 200, + body: [ + { + error: 'Event type alias is not supported', + statTags: { + destType: 'PAGERDUTY', + errorCategory: 'dataValidation', + errorType: 'instrumentation', + feature: 'processor', + implementation: 'native', + module: 'destination', + }, + statusCode: 400, + }, + ], + }, + }, + }, + { + name: 'pagerduty', + description: 'event name is not present', + feature: 'processor', + module: 'destination', + version: 'v0', + input: { + request: { + body: [ + { + message: { + channel: 'web', + type: 'track', + messageId: '9116b734-7e6b-4497-ab51-c16744d4487e', + userId: 'user@45', + properties: {}, + }, + destination: { Config: { routingKey: '9552b56325dc490bd0139be85f7b8fac' } }, + }, + ], + method: 'POST', + }, + pathSuffix: '', + }, + output: { + response: { + status: 200, + body: [ + { + error: 'Event name is required', + statTags: { + destType: 'PAGERDUTY', + errorCategory: 'dataValidation', + errorType: 'instrumentation', + feature: 'processor', + implementation: 'native', + module: 'destination', + }, + statusCode: 400, + }, + ], + }, + }, + }, + { + name: 'pagerduty', + description: 'Parameter source is not present', + feature: 'processor', + module: 'destination', + version: 'v0', + input: { + request: { + body: [ + { + message: { + channel: 'web', + type: 'track', + event: 'Event name is required', + messageId: '9116b734-7e6b-4497-ab51-c16744d4487e', + userId: 'user@45', + properties: { dedupKey: '9116b734-7e6b-4497-ab51-c16744d4487e' }, + }, + destination: { Config: { routingKey: '9552b56325dc490bd0139be85f7b8fac' } }, + }, + ], + method: 'POST', + }, + pathSuffix: '', + }, + output: { + response: { + status: 200, + body: [ + { + error: 'Missing required value from "properties.source"', + statTags: { + destType: 'PAGERDUTY', + errorCategory: 'dataValidation', + errorType: 'instrumentation', + feature: 'processor', + implementation: 'native', + module: 'destination', + }, + statusCode: 400, + }, + ], + }, + }, + }, + { + name: 'pagerduty', + description: 'dedup_key is not present', + feature: 'processor', + module: 'destination', + version: 'v0', + input: { + request: { + body: [ + { + message: { + channel: 'web', + type: 'track', + event: 'Event name is required', + messageId: '9116b734-7e6b-4497-ab51-c16744d4487e', + userId: 'user@45', + properties: { action: 'resolve' }, + }, + destination: { + Config: { + routingKey: '9552b56325dc490bd0139be85f7b8fac', + dedupKeyFieldIdentifier: 'properties.dedupKey', + }, + }, + }, + ], + method: 'POST', + }, + pathSuffix: '', + }, + output: { + response: { + status: 200, + body: [ + { + error: 'dedup_key required for resolve events', + statTags: { + destType: 'PAGERDUTY', + errorCategory: 'dataValidation', + errorType: 'instrumentation', + feature: 'processor', + implementation: 'native', + module: 'destination', + }, + statusCode: 400, + }, + ], + }, + }, + }, + { + name: 'pagerduty', + description: 'Timestamp older then 90 days', + feature: 'processor', + module: 'destination', + version: 'v0', + input: { + request: { + body: [ + { + message: { + channel: 'web', + type: 'track', + event: 'apiSecret is not present', + messageId: '9116b734-7e6b-4497-ab51-c16744d4487e', + userId: 'user@45', + originalTimestamp: '2021-12-20T10:26:33.451Z', + properties: { + action: 'trigger', + dedupKey: '9116b734-7e6b-4497-ab51-c16744d4487e', + severity: 'critical', + component: 'ui', + source: 'rudder-webapp', + group: 'destination', + class: 'connection settings', + customDetails: { 'ping time': '1500ms', 'load avg': 0.75 }, + imageURLs: [ + { + src: 'https://static.s4be.cochrane.org/app/uploads/2017/04/shutterstock_531145954.jpg', + alt: 'first image', + }, + { + src: 'https://chart.googleapis.com/chart?chs=600x400&chd=t:6,2,9,5,2,5,7,4,8,2,1&cht=lc&chds=a&chxt=y&chm=D,0033FF,0,0,5,1', + alt: 'second image', + }, + { alt: 'third image' }, + ], + linkURLs: [ + { + href: 'https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Error', + text: 'Js Object Error', + }, + { + href: 'https://www.techtarget.com/whatis/definition/stack-overflow#:~:text=A%20stack%20overflow%20is%20a,been%20allocated%20to%20that%20stack', + text: 'Stack Overflow Error', + }, + { text: 'Destructure Error' }, + ], + }, + }, + destination: { + Config: { + routingKey: '9552b56325dc490bd0139be85f7b8fac', + dedupKeyFieldIdentifier: 'properties.dedupKey', + }, + }, + }, + ], + method: 'POST', + }, + pathSuffix: '', + }, + output: { + response: { + status: 200, + body: [ + { + error: 'Events must be sent within ninety days of their occurrence', + statTags: { + destType: 'PAGERDUTY', + errorCategory: 'dataValidation', + errorType: 'instrumentation', + feature: 'processor', + implementation: 'native', + module: 'destination', + }, + statusCode: 400, + }, + ], + }, + }, + }, + { + name: 'pagerduty', + description: 'Trigger event', + feature: 'processor', + module: 'destination', + version: 'v0', + input: { + request: { + body: [ + { + message: { + channel: 'web', + type: 'track', + event: 'apiSecret is not present', + messageId: '9116b734-7e6b-4497-ab51-c16744d4487e', + userId: 'user@45', + properties: { + action: 'trigger', + dedupKey: '9116b734-7e6b-4497-ab51-c16744d4487e', + severity: 'critical', + component: 'ui', + source: 'rudder-webapp', + group: 'destination', + class: 'connection settings', + customDetails: { 'ping time': '1500ms', 'load avg': 0.75 }, + imageURLs: [ + { + src: 'https://static.s4be.cochrane.org/app/uploads/2017/04/shutterstock_531145954.jpg', + alt: 'first image', + }, + { + src: 'https://chart.googleapis.com/chart?chs=600x400&chd=t:6,2,9,5,2,5,7,4,8,2,1&cht=lc&chds=a&chxt=y&chm=D,0033FF,0,0,5,1', + alt: 'second image', + }, + { alt: 'third image' }, + ], + linkURLs: [ + { + href: 'https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Error', + text: 'Js Object Error', + }, + { + href: 'https://www.techtarget.com/whatis/definition/stack-overflow#:~:text=A%20stack%20overflow%20is%20a,been%20allocated%20to%20that%20stack', + text: 'Stack Overflow Error', + }, + { text: 'Destructure Error' }, + ], + }, + }, + destination: { + Config: { + routingKey: '9552b56325dc490bd0139be85f7b8fac', + dedupKeyFieldIdentifier: 'properties.dedupKey', + }, + }, + }, + ], + method: 'POST', + }, + pathSuffix: '', + }, + output: { + response: { + status: 200, + body: [ + { + output: { + body: { + XML: {}, + FORM: {}, + JSON: { + links: [ + { + href: 'https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Error', + text: 'Js Object Error', + }, + { + href: 'https://www.techtarget.com/whatis/definition/stack-overflow#:~:text=A%20stack%20overflow%20is%20a,been%20allocated%20to%20that%20stack', + text: 'Stack Overflow Error', + }, + ], + images: [ + { + alt: 'first image', + src: 'https://static.s4be.cochrane.org/app/uploads/2017/04/shutterstock_531145954.jpg', + }, + { + alt: 'second image', + src: 'https://chart.googleapis.com/chart?chs=600x400&chd=t:6,2,9,5,2,5,7,4,8,2,1&cht=lc&chds=a&chxt=y&chm=D,0033FF,0,0,5,1', + }, + ], + payload: { + class: 'connection settings', + group: 'destination', + source: 'rudder-webapp', + summary: 'apiSecret is not present', + severity: 'critical', + component: 'ui', + custom_details: { 'ping time': '1500ms', 'load avg': 0.75 }, + }, + dedup_key: '9116b734-7e6b-4497-ab51-c16744d4487e', + routing_key: '9552b56325dc490bd0139be85f7b8fac', + event_action: 'trigger', + }, + JSON_ARRAY: {}, + }, + type: 'REST', + files: {}, + method: 'POST', + params: {}, + headers: { 'Content-Type': 'application/json' }, + version: '1', + endpoint: 'https://events.pagerduty.com/v2/enqueue', + userId: '', + }, + statusCode: 200, + }, + ], + }, + }, + }, + { + name: 'pagerduty', + description: 'Acknowledge event', + feature: 'processor', + module: 'destination', + version: 'v0', + input: { + request: { + body: [ + { + message: { + channel: 'web', + type: 'track', + event: 'apiSecret is not present', + messageId: '9116b734-7e6b-4497-ab51-c16744d4487e', + userId: 'user@45', + properties: { + action: 'acknowledge', + dedupKey: '9116b734-7e6b-4497-ab51-c16744d4487e', + severity: 'critical', + component: 'ui', + source: 'rudder-webapp', + group: 'destination', + class: 'connection settings', + customDetails: { 'ping time': '1500ms', 'load avg': 0.75 }, + imageURLs: [ + { + src: 'https://static.s4be.cochrane.org/app/uploads/2017/04/shutterstock_531145954.jpg', + alt: 'first image', + }, + { + src: 'https://chart.googleapis.com/chart?chs=600x400&chd=t:6,2,9,5,2,5,7,4,8,2,1&cht=lc&chds=a&chxt=y&chm=D,0033FF,0,0,5,1', + alt: 'second image', + }, + { alt: 'third image' }, + ], + linkURLs: [ + { + href: 'https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Error', + text: 'Js Object Error', + }, + { + href: 'https://www.techtarget.com/whatis/definition/stack-overflow#:~:text=A%20stack%20overflow%20is%20a,been%20allocated%20to%20that%20stack', + text: 'Stack Overflow Error', + }, + { text: 'Destructure Error' }, + ], + }, + }, + destination: { + Config: { + routingKey: '9552b56325dc490bd0139be85f7b8fac', + dedupKeyFieldIdentifier: 'properties.dedupKey', + }, + }, + }, + ], + method: 'POST', + }, + pathSuffix: '', + }, + output: { + response: { + status: 200, + body: [ + { + output: { + body: { + XML: {}, + FORM: {}, + JSON: { + dedup_key: '9116b734-7e6b-4497-ab51-c16744d4487e', + routing_key: '9552b56325dc490bd0139be85f7b8fac', + event_action: 'acknowledge', + }, + JSON_ARRAY: {}, + }, + type: 'REST', + files: {}, + method: 'POST', + params: {}, + headers: { 'Content-Type': 'application/json' }, + version: '1', + endpoint: 'https://events.pagerduty.com/v2/enqueue', + userId: '', + }, + statusCode: 200, + }, + ], + }, + }, + }, + { + name: 'pagerduty', + description: 'Resolve event', + feature: 'processor', + module: 'destination', + version: 'v0', + input: { + request: { + body: [ + { + message: { + channel: 'web', + type: 'track', + event: 'apiSecret is not present', + messageId: '9116b734-7e6b-4497-ab51-c16744d4487e', + userId: 'user@45', + properties: { + action: 'resolve', + dedupKey: '9116b734-7e6b-4497-ab51-c16744d4487e', + severity: 'critical', + component: 'ui', + source: 'rudder-webapp', + group: 'destination', + class: 'connection settings', + customDetails: { 'ping time': '1500ms', 'load avg': 0.75 }, + imageURLs: [ + { + src: 'https://static.s4be.cochrane.org/app/uploads/2017/04/shutterstock_531145954.jpg', + alt: 'first image', + }, + { + src: 'https://chart.googleapis.com/chart?chs=600x400&chd=t:6,2,9,5,2,5,7,4,8,2,1&cht=lc&chds=a&chxt=y&chm=D,0033FF,0,0,5,1', + alt: 'second image', + }, + { alt: 'third image' }, + ], + linkURLs: [ + { + href: 'https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Error', + text: 'Js Object Error', + }, + { + href: 'https://www.techtarget.com/whatis/definition/stack-overflow#:~:text=A%20stack%20overflow%20is%20a,been%20allocated%20to%20that%20stack', + text: 'Stack Overflow Error', + }, + { text: 'Destructure Error' }, + ], + }, + }, + destination: { + Config: { + routingKey: '9552b56325dc490bd0139be85f7b8fac', + dedupKeyFieldIdentifier: 'properties.dedupKey', + }, + }, + }, + ], + method: 'POST', + }, + pathSuffix: '', + }, + output: { + response: { + status: 200, + body: [ + { + output: { + body: { + XML: {}, + FORM: {}, + JSON: { + dedup_key: '9116b734-7e6b-4497-ab51-c16744d4487e', + routing_key: '9552b56325dc490bd0139be85f7b8fac', + event_action: 'resolve', + }, + JSON_ARRAY: {}, + }, + type: 'REST', + files: {}, + method: 'POST', + params: {}, + headers: { 'Content-Type': 'application/json' }, + version: '1', + endpoint: 'https://events.pagerduty.com/v2/enqueue', + userId: '', + }, + statusCode: 200, + }, + ], + }, + }, + }, + { + name: 'pagerduty', + description: 'Change event', + feature: 'processor', + module: 'destination', + version: 'v0', + input: { + request: { + body: [ + { + message: { + channel: 'web', + type: 'track', + event: 'Github CI/CD Triggered', + messageId: '9116b734-7e6b-4497-ab51-c16744d4487e', + userId: 'user@45', + properties: { + source: 'rudder-webapp', + customDetails: { 'ping time': '1500ms', 'load avg': 0.75 }, + imageURLs: [ + { + src: 'https://static.s4be.cochrane.org/app/uploads/2017/04/shutterstock_531145954.jpg', + alt: 'first image', + }, + { + src: 'https://chart.googleapis.com/chart?chs=600x400&chd=t:6,2,9,5,2,5,7,4,8,2,1&cht=lc&chds=a&chxt=y&chm=D,0033FF,0,0,5,1', + alt: 'second image', + }, + { alt: 'third image' }, + ], + linkURLs: [ + { + href: 'https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Error', + text: 'Js Object Error', + }, + { + href: 'https://www.techtarget.com/whatis/definition/stack-overflow#:~:text=A%20stack%20overflow%20is%20a,been%20allocated%20to%20that%20stack', + text: 'Stack Overflow Error', + }, + { text: 'Destructure Error' }, + ], + }, + integrations: { pagerduty: { type: 'changeEvent' } }, + }, + destination: { + Config: { + routingKey: '9552b56325dc490bd0139be85f7b8fac', + dedupKeyFieldIdentifier: 'properties.dedupKey', + }, + }, + }, + ], + method: 'POST', + }, + pathSuffix: '', + }, + output: { + response: { + status: 200, + body: [ + { + output: { + body: { + XML: {}, + FORM: {}, + JSON: { + links: [ + { + href: 'https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Error', + text: 'Js Object Error', + }, + { + href: 'https://www.techtarget.com/whatis/definition/stack-overflow#:~:text=A%20stack%20overflow%20is%20a,been%20allocated%20to%20that%20stack', + text: 'Stack Overflow Error', + }, + ], + images: [ + { + alt: 'first image', + src: 'https://static.s4be.cochrane.org/app/uploads/2017/04/shutterstock_531145954.jpg', + }, + { + alt: 'second image', + src: 'https://chart.googleapis.com/chart?chs=600x400&chd=t:6,2,9,5,2,5,7,4,8,2,1&cht=lc&chds=a&chxt=y&chm=D,0033FF,0,0,5,1', + }, + ], + payload: { + source: 'rudder-webapp', + summary: 'Github CI/CD Triggered', + custom_details: { 'load avg': 0.75, 'ping time': '1500ms' }, + }, + routing_key: '9552b56325dc490bd0139be85f7b8fac', + }, + JSON_ARRAY: {}, + }, + type: 'REST', + files: {}, + method: 'POST', + params: {}, + headers: { 'Content-Type': 'application/json' }, + version: '1', + endpoint: 'https://events.pagerduty.com/v2/change/enqueue', + userId: '', + }, + statusCode: 200, + }, + ], + }, + }, + }, +]; diff --git a/test/integrations/destinations/pagerduty/router/data.ts b/test/integrations/destinations/pagerduty/router/data.ts new file mode 100644 index 0000000000..02fd53c629 --- /dev/null +++ b/test/integrations/destinations/pagerduty/router/data.ts @@ -0,0 +1,309 @@ +export const data = [ + { + name: 'pagerduty', + description: 'Test 0', + feature: 'router', + module: 'destination', + version: 'v0', + input: { + request: { + body: { + input: [ + { + message: { + channel: 'web', + type: 'track', + event: 'Github CI/CD Triggered', + messageId: '9116b734-7e6b-4497-ab51-c16744d4487e', + userId: 'user@45', + properties: { + source: 'rudder-webapp', + customDetails: { + 'ping time': '1500ms', + 'load avg': 0.75, + }, + imageURLs: [ + { + src: 'https://static.s4be.cochrane.org/app/uploads/2017/04/shutterstock_531145954.jpg', + alt: 'first image', + }, + { + src: 'https://chart.googleapis.com/chart?chs=600x400&chd=t:6,2,9,5,2,5,7,4,8,2,1&cht=lc&chds=a&chxt=y&chm=D,0033FF,0,0,5,1', + alt: 'second image', + }, + { + alt: 'third image', + }, + ], + linkURLs: [ + { + href: 'https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Error', + text: 'Js Object Error', + }, + { + href: 'https://www.techtarget.com/whatis/definition/stack-overflow#:~:text=A%20stack%20overflow%20is%20a,been%20allocated%20to%20that%20stack', + text: 'Stack Overflow Error', + }, + { + text: 'Destructure Error', + }, + ], + }, + integrations: { + pagerduty: { + type: 'changeEvent', + }, + }, + }, + metadata: { + jobId: 1, + }, + destination: { + Config: { + routingKey: '9552b56325dc490bd0139be85f7b8fac', + dedupKeyFieldIdentifier: 'properties.dedupKey', + }, + }, + }, + { + message: { + channel: 'web', + type: 'track', + event: 'apiSecret is not present', + messageId: '9116b734-7e6b-4497-ab51-c16744d4487e', + userId: 'user@45', + properties: { + action: 'acknowledge', + dedupKey: '9116b734-7e6b-4497-ab51-c16744d4487e', + severity: 'critical', + component: 'ui', + source: 'rudder-webapp', + group: 'destination', + class: 'connection settings', + customDetails: { + 'ping time': '1500ms', + 'load avg': 0.75, + }, + imageURLs: [ + { + src: 'https://static.s4be.cochrane.org/app/uploads/2017/04/shutterstock_531145954.jpg', + alt: 'first image', + }, + { + src: 'https://chart.googleapis.com/chart?chs=600x400&chd=t:6,2,9,5,2,5,7,4,8,2,1&cht=lc&chds=a&chxt=y&chm=D,0033FF,0,0,5,1', + alt: 'second image', + }, + { + alt: 'third image', + }, + ], + linkURLs: [ + { + href: 'https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Error', + text: 'Js Object Error', + }, + { + href: 'https://www.techtarget.com/whatis/definition/stack-overflow#:~:text=A%20stack%20overflow%20is%20a,been%20allocated%20to%20that%20stack', + text: 'Stack Overflow Error', + }, + { + text: 'Destructure Error', + }, + ], + }, + }, + metadata: { + jobId: 2, + }, + destination: { + Config: { + routingKey: '9552b56325dc490bd0139be85f7b8fac', + dedupKeyFieldIdentifier: 'properties.dedupKey', + }, + }, + }, + { + message: { + channel: 'web', + type: 'track', + event: 'apiSecret is not present', + messageId: '9116b734-7e6b-4497-ab51-c16744d4487e', + userId: 'user@45', + originalTimestamp: '2021-12-20T10:26:33.451Z', + properties: { + action: 'trigger', + dedupKey: '9116b734-7e6b-4497-ab51-c16744d4487e', + severity: 'critical', + component: 'ui', + source: 'rudder-webapp', + group: 'destination', + class: 'connection settings', + customDetails: { + 'ping time': '1500ms', + 'load avg': 0.75, + }, + imageURLs: [ + { + src: 'https://static.s4be.cochrane.org/app/uploads/2017/04/shutterstock_531145954.jpg', + alt: 'first image', + }, + { + src: 'https://chart.googleapis.com/chart?chs=600x400&chd=t:6,2,9,5,2,5,7,4,8,2,1&cht=lc&chds=a&chxt=y&chm=D,0033FF,0,0,5,1', + alt: 'second image', + }, + { + alt: 'third image', + }, + ], + linkURLs: [ + { + href: 'https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Error', + text: 'Js Object Error', + }, + { + href: 'https://www.techtarget.com/whatis/definition/stack-overflow#:~:text=A%20stack%20overflow%20is%20a,been%20allocated%20to%20that%20stack', + text: 'Stack Overflow Error', + }, + { + text: 'Destructure Error', + }, + ], + }, + }, + metadata: { + jobId: 3, + }, + destination: { + Config: { + routingKey: '9552b56325dc490bd0139be85f7b8fac', + dedupKeyFieldIdentifier: 'properties.dedupKey', + }, + }, + }, + ], + destType: 'pagerduty', + }, + method: 'POST', + }, + }, + output: { + response: { + status: 200, + body: { + output: [ + { + batched: false, + batchedRequest: { + body: { + XML: {}, + FORM: {}, + JSON: { + links: [ + { + href: 'https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Error', + text: 'Js Object Error', + }, + { + href: 'https://www.techtarget.com/whatis/definition/stack-overflow#:~:text=A%20stack%20overflow%20is%20a,been%20allocated%20to%20that%20stack', + text: 'Stack Overflow Error', + }, + ], + images: [ + { + alt: 'first image', + src: 'https://static.s4be.cochrane.org/app/uploads/2017/04/shutterstock_531145954.jpg', + }, + { + alt: 'second image', + src: 'https://chart.googleapis.com/chart?chs=600x400&chd=t:6,2,9,5,2,5,7,4,8,2,1&cht=lc&chds=a&chxt=y&chm=D,0033FF,0,0,5,1', + }, + ], + payload: { + source: 'rudder-webapp', + summary: 'Github CI/CD Triggered', + custom_details: { + 'load avg': 0.75, + 'ping time': '1500ms', + }, + }, + routing_key: '9552b56325dc490bd0139be85f7b8fac', + }, + JSON_ARRAY: {}, + }, + type: 'REST', + files: {}, + method: 'POST', + params: {}, + headers: { + 'Content-Type': 'application/json', + }, + version: '1', + endpoint: 'https://events.pagerduty.com/v2/change/enqueue', + }, + destination: { + Config: { + routingKey: '9552b56325dc490bd0139be85f7b8fac', + dedupKeyFieldIdentifier: 'properties.dedupKey', + }, + }, + metadata: [{ jobId: 1 }], + statusCode: 200, + }, + { + batched: false, + batchedRequest: { + body: { + XML: {}, + FORM: {}, + JSON: { + dedup_key: '9116b734-7e6b-4497-ab51-c16744d4487e', + routing_key: '9552b56325dc490bd0139be85f7b8fac', + event_action: 'acknowledge', + }, + JSON_ARRAY: {}, + }, + type: 'REST', + files: {}, + method: 'POST', + params: {}, + headers: { + 'Content-Type': 'application/json', + }, + version: '1', + endpoint: 'https://events.pagerduty.com/v2/enqueue', + }, + destination: { + Config: { + routingKey: '9552b56325dc490bd0139be85f7b8fac', + dedupKeyFieldIdentifier: 'properties.dedupKey', + }, + }, + metadata: [{ jobId: 2 }], + statusCode: 200, + }, + { + batched: false, + error: 'Events must be sent within ninety days of their occurrence', + metadata: [{ jobId: 3 }], + statusCode: 400, + statTags: { + destType: 'PAGERDUTY', + feature: 'router', + module: 'destination', + implementation: 'native', + errorCategory: 'dataValidation', + errorType: 'instrumentation', + }, + destination: { + Config: { + routingKey: '9552b56325dc490bd0139be85f7b8fac', + dedupKeyFieldIdentifier: 'properties.dedupKey', + }, + }, + }, + ], + }, + }, + }, + }, +]; diff --git a/test/integrations/destinations/pardot/router/data.ts b/test/integrations/destinations/pardot/router/data.ts new file mode 100644 index 0000000000..573f9192b5 --- /dev/null +++ b/test/integrations/destinations/pardot/router/data.ts @@ -0,0 +1,1017 @@ +export const data = [ + { + name: 'pardot', + description: 'Test 0', + feature: 'router', + module: 'destination', + version: 'v0', + input: { + request: { + body: { + input: [ + { + destination: { + Config: { + rudderAccountId: '1z8LpaSAuFR9TPWL6fECZfjmRa-', + businessUnitId: '0Uv2v000000k9tHCAQ', + campaignId: 42213, + authStatus: 'active', + eventDelivery: true, + eventDeliveryTS: 1636965406397, + }, + DestinationDefinition: { + name: 'PARDOT', + displayName: 'Pardot', + config: { + auth: { + type: 'OAuth', + }, + transformAt: 'router', + transformAtV1: 'router', + saveDestinationResponse: true, + includeKeys: [], + excludeKeys: [], + supportedSourceTypes: [ + 'android', + 'ios', + 'web', + 'unity', + 'amp', + 'cloud', + 'warehouse', + 'reactnative', + 'flutter', + 'cordova', + ], + destConfig: { + defaultConfig: ['rudderAccountId', 'businessUnitId', 'campaignId'], + }, + secretKeys: ['businessUnitId'], + }, + }, + Enabled: true, + ID: '1WXjIHpu7ETXgjfiGPW3kCUgZFR', + Name: 'test destination', + Transformations: [], + }, + metadata: { + jobId: 1, + secret: { + access_token: 'myToken', + refresh_token: 'myRefreshToken', + }, + }, + message: { + type: 'identify', + event: 'navigated user', + sentAt: '2021-09-08T11:10:45.466Z', + userId: 'user12345', + channel: 'web', + context: { + os: { + name: '', + version: '', + }, + app: { + name: 'RudderLabs JavaScript SDK', + build: '1.0.0', + version: '1.1.18', + namespace: 'com.rudderlabs.javascript', + }, + page: { + url: 'http://127.0.0.1:5500/index.html', + path: '/index.html', + title: 'Document', + search: '', + tab_url: 'http://127.0.0.1:5500/index.html', + referrer: '$direct', + initial_referrer: '$direct', + referring_domain: '', + initial_referring_domain: '', + }, + locale: 'en-GB', + screen: { + width: 1536, + height: 960, + density: 2, + innerWidth: 1536, + innerHeight: 776, + }, + traits: {}, + library: { + name: 'RudderLabs JavaScript SDK', + version: '1.1.18', + }, + campaign: {}, + userAgent: + 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.77 Safari/537.36', + externalId: [ + { + type: 'pardotId', + id: 123435, + }, + ], + }, + rudderId: 'fa2994a5-2a81-45fd-9919-fcf5596ad380', + messageId: 'e2d1a383-d9a2-4e03-a9dc-131d153c4d95', + timestamp: '2021-11-15T14:06:42.497+05:30', + properties: {}, + receivedAt: '2021-11-15T14:06:42.497+05:30', + request_ip: '[::1]', + anonymousId: 'd8b2ed61-7fa5-4ef8-bd92-6a506157c0cf', + integrations: { + All: true, + }, + originalTimestamp: '2021-09-08T11:10:45.466Z', + traits: { + email: 'Roger12@waltair.io', + active_seats: 4, + firstName: 'Roger12', + lastName: 'Federer12', + website: 'https://rudderstack.com', + score: 14, + }, + }, + }, + { + destination: { + Config: { + rudderAccountId: '1z8LpaSAuFR9TPWL6fECZfjmRa-', + businessUnitId: '0Uv2v000000k9tHCAQ', + campaignId: 42213, + authStatus: 'active', + eventDelivery: true, + eventDeliveryTS: 1636965406397, + }, + DestinationDefinition: { + name: 'PARDOT', + displayName: 'Pardot', + config: { + auth: { + type: 'OAuth', + }, + transformAt: 'router', + transformAtV1: 'router', + saveDestinationResponse: true, + includeKeys: [], + excludeKeys: [], + supportedSourceTypes: [ + 'android', + 'ios', + 'web', + 'unity', + 'amp', + 'cloud', + 'warehouse', + 'reactnative', + 'flutter', + 'cordova', + ], + destConfig: { + defaultConfig: ['rudderAccountId', 'businessUnitId', 'campaignId'], + }, + secretKeys: ['businessUnitId'], + }, + }, + Enabled: true, + ID: '1WXjIHpu7ETXgjfiGPW3kCUgZFR', + Name: 'test destination', + Transformations: [], + }, + metadata: { + jobId: 2, + secret: { + access_token: 'myToken', + refresh_token: 'myRefreshToken', + }, + }, + message: { + type: 'identify', + event: 'insert product', + sentAt: '2021-09-08T11:10:45.466Z', + userId: 'user12345', + channel: 'web', + context: { + os: { + name: '', + version: '', + }, + app: { + name: 'RudderLabs JavaScript SDK', + build: '1.0.0', + version: '1.1.18', + namespace: 'com.rudderlabs.javascript', + }, + page: { + url: 'http://127.0.0.1:5500/index.html', + path: '/index.html', + title: 'Document', + search: '', + tab_url: 'http://127.0.0.1:5500/index.html', + referrer: '$direct', + initial_referrer: '$direct', + referring_domain: '', + initial_referring_domain: '', + }, + locale: 'en-GB', + screen: { + width: 1536, + height: 960, + density: 2, + innerWidth: 1536, + innerHeight: 776, + }, + traits: {}, + library: { + name: 'RudderLabs JavaScript SDK', + version: '1.1.18', + }, + campaign: {}, + userAgent: + 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.77 Safari/537.36', + }, + rudderId: 'fa2994a5-2a81-45fd-9919-fcf5596ad380', + messageId: 'e2d1a383-d9a2-4e03-a9dc-131d153c4d95', + timestamp: '2021-11-15T14:06:42.497+05:30', + properties: {}, + receivedAt: '2021-11-15T14:06:42.497+05:30', + request_ip: '[::1]', + anonymousId: 'd8b2ed61-7fa5-4ef8-bd92-6a506157c0cf', + integrations: { + All: true, + }, + originalTimestamp: '2021-09-08T11:10:45.466Z', + traits: { + email: 'Roger_12@waltair.io', + active_seats: 4, + firstName: 'Roger_12', + lastName: 'Federer_12', + website: 'https://rudderstack.com', + score: 14, + }, + }, + }, + { + destination: { + Config: { + rudderAccountId: '1z8LpaSAuFR9TPWL6fECZfjmRa-', + businessUnitId: '0Uv2v000000k9tHCAQ', + campaignId: 42213, + authStatus: 'active', + eventDelivery: true, + eventDeliveryTS: 1636965406397, + }, + DestinationDefinition: { + name: 'PARDOT', + displayName: 'Pardot', + config: { + auth: { + type: 'OAuth', + }, + transformAt: 'router', + transformAtV1: 'router', + saveDestinationResponse: true, + includeKeys: [], + excludeKeys: [], + supportedSourceTypes: [ + 'android', + 'ios', + 'web', + 'unity', + 'amp', + 'cloud', + 'warehouse', + 'reactnative', + 'flutter', + 'cordova', + ], + destConfig: { + defaultConfig: ['rudderAccountId', 'businessUnitId', 'campaignId'], + }, + secretKeys: ['businessUnitId'], + }, + }, + Enabled: true, + ID: '1WXjIHpu7ETXgjfiGPW3kCUgZFR', + Name: 'test destination', + Transformations: [], + }, + metadata: { + jobId: 3, + secret: { + access_token: 'myToken', + refresh_token: 'myRefreshToken', + }, + }, + message: { + type: 'identify', + event: 'insert product', + sentAt: '2021-09-08T11:10:45.466Z', + userId: 'user12345', + channel: 'web', + context: { + os: { + name: '', + version: '', + }, + app: { + name: 'RudderLabs JavaScript SDK', + build: '1.0.0', + version: '1.1.18', + namespace: 'com.rudderlabs.javascript', + }, + page: { + url: 'http://127.0.0.1:5500/index.html', + path: '/index.html', + title: 'Document', + search: '', + tab_url: 'http://127.0.0.1:5500/index.html', + referrer: '$direct', + initial_referrer: '$direct', + referring_domain: '', + initial_referring_domain: '', + }, + locale: 'en-GB', + screen: { + width: 1536, + height: 960, + density: 2, + innerWidth: 1536, + innerHeight: 776, + }, + traits: {}, + library: { + name: 'RudderLabs JavaScript SDK', + version: '1.1.18', + }, + campaign: {}, + userAgent: + 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.77 Safari/537.36', + externalId: [ + { + type: 'crmfid', + id: '00Q6r000002LKhTPVR', + }, + ], + }, + rudderId: 'fa2994a5-2a81-45fd-9919-fcf5596ad380', + messageId: 'e2d1a383-d9a2-4e03-a9dc-131d153c4d95', + timestamp: '2021-11-15T14:06:42.497+05:30', + properties: {}, + receivedAt: '2021-11-15T14:06:42.497+05:30', + request_ip: '[::1]', + anonymousId: 'd8b2ed61-7fa5-4ef8-bd92-6a506157c0cf', + integrations: { + All: true, + }, + originalTimestamp: '2021-09-08T11:10:45.466Z', + traits: { + email: 'nick_kyrgios@waltair.io', + active_seats: 4, + firstName: 'Nick', + lastName: 'Kyrgios', + website: 'https://rudderstack.com', + score: 12, + }, + }, + }, + { + destination: { + Config: { + rudderAccountId: '1z8LpaSAuFR9TPWL6fECZfjmRa-', + businessUnitId: '0Uv2v000000k9tHCAQ', + campaignId: 42213, + authStatus: 'active', + eventDelivery: true, + eventDeliveryTS: 1636965406397, + }, + DestinationDefinition: { + name: 'PARDOT', + displayName: 'Pardot', + config: { + auth: { + type: 'OAuth', + }, + transformAt: 'router', + transformAtV1: 'router', + saveDestinationResponse: true, + includeKeys: [], + excludeKeys: [], + supportedSourceTypes: [ + 'android', + 'ios', + 'web', + 'unity', + 'amp', + 'cloud', + 'warehouse', + 'reactnative', + 'flutter', + 'cordova', + ], + destConfig: { + defaultConfig: ['rudderAccountId', 'businessUnitId', 'campaignId'], + }, + secretKeys: ['businessUnitId'], + }, + }, + Enabled: true, + ID: '1WXjIHpu7ETXgjfiGPW3kCUgZFR', + Name: 'test destination', + Transformations: [], + }, + metadata: { + jobId: 4, + secret: { + access_token: 'myExpiredToken', + refresh_token: 'myRefreshToken', + }, + }, + message: { + type: 'identify', + event: 'navigated user', + sentAt: '2021-09-08T11:10:45.466Z', + userId: 'user12345', + channel: 'web', + context: { + os: { + name: '', + version: '', + }, + app: { + name: 'RudderLabs JavaScript SDK', + build: '1.0.0', + version: '1.1.18', + namespace: 'com.rudderlabs.javascript', + }, + page: { + url: 'http://127.0.0.1:5500/index.html', + path: '/index.html', + title: 'Document', + search: '', + tab_url: 'http://127.0.0.1:5500/index.html', + referrer: '$direct', + initial_referrer: '$direct', + referring_domain: '', + initial_referring_domain: '', + }, + locale: 'en-GB', + screen: { + width: 1536, + height: 960, + density: 2, + innerWidth: 1536, + innerHeight: 776, + }, + traits: {}, + library: { + name: 'RudderLabs JavaScript SDK', + version: '1.1.18', + }, + campaign: {}, + userAgent: + 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.77 Safari/537.36', + }, + rudderId: 'fa2994a5-2a81-45fd-9919-fcf5596ad380', + messageId: 'e2d1a383-d9a2-4e03-a9dc-131d153c4d95', + timestamp: '2021-11-15T14:06:42.497+05:30', + properties: {}, + receivedAt: '2021-11-15T14:06:42.497+05:30', + request_ip: '[::1]', + anonymousId: 'd8b2ed61-7fa5-4ef8-bd92-6a506157c0cf', + integrations: { + All: true, + }, + originalTimestamp: '2021-09-08T11:10:45.466Z', + traits: { + email: 'rolex_waltair@mywebsite.io', + active_seats: 4, + firstName: 'Rolex', + lastName: 'Waltair', + website: 'https://rudderstack.com', + score: 15, + }, + }, + }, + { + destination: { + Config: { + rudderAccountId: '1z8LpaSAuFR9TPWL6fECZfjmRa-', + businessUnitId: '0Uv2v000000k9tHCAQ', + campaignId: 42213, + authStatus: 'active', + eventDelivery: true, + eventDeliveryTS: 1636965406397, + }, + DestinationDefinition: { + name: 'PARDOT', + displayName: 'Pardot', + config: { + auth: { + type: 'OAuth', + }, + transformAt: 'router', + transformAtV1: 'router', + saveDestinationResponse: true, + includeKeys: [], + excludeKeys: [], + supportedSourceTypes: [ + 'android', + 'ios', + 'web', + 'unity', + 'amp', + 'cloud', + 'warehouse', + 'reactnative', + 'flutter', + 'cordova', + ], + destConfig: { + defaultConfig: ['rudderAccountId', 'businessUnitId', 'campaignId'], + }, + secretKeys: ['businessUnitId'], + }, + }, + Enabled: true, + ID: '1WXjIHpu7ETXgjfiGPW3kCUgZFR', + Name: 'test destination', + Transformations: [], + }, + metadata: { + jobId: 5, + secret: null, + }, + message: { + type: 'identify', + event: 'navigated user', + sentAt: '2021-09-08T11:10:45.466Z', + userId: 'user12345', + channel: 'web', + context: { + os: { + name: '', + version: '', + }, + app: { + name: 'RudderLabs JavaScript SDK', + build: '1.0.0', + version: '1.1.18', + namespace: 'com.rudderlabs.javascript', + }, + page: { + url: 'http://127.0.0.1:5500/index.html', + path: '/index.html', + title: 'Document', + search: '', + tab_url: 'http://127.0.0.1:5500/index.html', + referrer: '$direct', + initial_referrer: '$direct', + referring_domain: '', + initial_referring_domain: '', + }, + locale: 'en-GB', + screen: { + width: 1536, + height: 960, + density: 2, + innerWidth: 1536, + innerHeight: 776, + }, + traits: {}, + library: { + name: 'RudderLabs JavaScript SDK', + version: '1.1.18', + }, + campaign: {}, + userAgent: + 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.77 Safari/537.36', + }, + rudderId: 'fa2994a5-2a81-45fd-9919-fcf5596ad380', + messageId: 'e2d1a383-d9a2-4e03-a9dc-131d153c4d95', + timestamp: '2021-11-15T14:06:42.497+05:30', + properties: {}, + receivedAt: '2021-11-15T14:06:42.497+05:30', + request_ip: '[::1]', + anonymousId: 'd8b2ed61-7fa5-4ef8-bd92-6a506157c0cf', + integrations: { + All: true, + }, + originalTimestamp: '2021-09-08T11:10:45.466Z', + traits: { + email: 'rolex_waltair@mywebsite.io', + active_seats: 4, + firstName: 'Rolex', + lastName: 'Waltair', + website: 'https://rudderstack.com', + score: 15, + }, + }, + }, + ], + destType: 'pardot', + }, + method: 'POST', + }, + }, + output: { + response: { + status: 200, + body: { + output: [ + { + batchedRequest: { + version: '1', + type: 'REST', + method: 'POST', + endpoint: 'https://pi.pardot.com/api/prospect/version/4/do/upsert/id/123435', + headers: { + Authorization: 'Bearer myToken', + 'Pardot-Business-Unit-Id': '0Uv2v000000k9tHCAQ', + }, + params: {}, + body: { + JSON: {}, + JSON_ARRAY: {}, + XML: {}, + FORM: { + first_name: 'Roger12', + last_name: 'Federer12', + website: 'https://rudderstack.com', + score: 14, + campaign_id: 42213, + }, + }, + files: {}, + }, + metadata: [ + { + jobId: 1, + secret: { + access_token: 'myToken', + refresh_token: 'myRefreshToken', + }, + }, + ], + batched: false, + statusCode: 200, + destination: { + Config: { + rudderAccountId: '1z8LpaSAuFR9TPWL6fECZfjmRa-', + businessUnitId: '0Uv2v000000k9tHCAQ', + campaignId: 42213, + authStatus: 'active', + eventDelivery: true, + eventDeliveryTS: 1636965406397, + }, + DestinationDefinition: { + name: 'PARDOT', + displayName: 'Pardot', + config: { + auth: { + type: 'OAuth', + }, + transformAt: 'router', + transformAtV1: 'router', + saveDestinationResponse: true, + includeKeys: [], + excludeKeys: [], + supportedSourceTypes: [ + 'android', + 'ios', + 'web', + 'unity', + 'amp', + 'cloud', + 'warehouse', + 'reactnative', + 'flutter', + 'cordova', + ], + destConfig: { + defaultConfig: ['rudderAccountId', 'businessUnitId', 'campaignId'], + }, + secretKeys: ['businessUnitId'], + }, + }, + Enabled: true, + ID: '1WXjIHpu7ETXgjfiGPW3kCUgZFR', + Name: 'test destination', + Transformations: [], + }, + }, + { + batchedRequest: { + version: '1', + type: 'REST', + method: 'POST', + endpoint: + 'https://pi.pardot.com/api/prospect/version/4/do/upsert/email/Roger_12@waltair.io', + headers: { + Authorization: 'Bearer myToken', + 'Pardot-Business-Unit-Id': '0Uv2v000000k9tHCAQ', + }, + params: {}, + body: { + JSON: {}, + JSON_ARRAY: {}, + XML: {}, + FORM: { + first_name: 'Roger_12', + last_name: 'Federer_12', + website: 'https://rudderstack.com', + score: 14, + campaign_id: 42213, + }, + }, + files: {}, + }, + metadata: [ + { + jobId: 2, + secret: { + access_token: 'myToken', + refresh_token: 'myRefreshToken', + }, + }, + ], + batched: false, + statusCode: 200, + destination: { + Config: { + rudderAccountId: '1z8LpaSAuFR9TPWL6fECZfjmRa-', + businessUnitId: '0Uv2v000000k9tHCAQ', + campaignId: 42213, + authStatus: 'active', + eventDelivery: true, + eventDeliveryTS: 1636965406397, + }, + DestinationDefinition: { + name: 'PARDOT', + displayName: 'Pardot', + config: { + auth: { + type: 'OAuth', + }, + transformAt: 'router', + transformAtV1: 'router', + saveDestinationResponse: true, + includeKeys: [], + excludeKeys: [], + supportedSourceTypes: [ + 'android', + 'ios', + 'web', + 'unity', + 'amp', + 'cloud', + 'warehouse', + 'reactnative', + 'flutter', + 'cordova', + ], + destConfig: { + defaultConfig: ['rudderAccountId', 'businessUnitId', 'campaignId'], + }, + secretKeys: ['businessUnitId'], + }, + }, + Enabled: true, + ID: '1WXjIHpu7ETXgjfiGPW3kCUgZFR', + Name: 'test destination', + Transformations: [], + }, + }, + { + batchedRequest: { + version: '1', + type: 'REST', + method: 'POST', + endpoint: + 'https://pi.pardot.com/api/prospect/version/4/do/upsert/fid/00Q6r000002LKhTPVR', + headers: { + Authorization: 'Bearer myToken', + 'Pardot-Business-Unit-Id': '0Uv2v000000k9tHCAQ', + }, + params: {}, + body: { + JSON: {}, + JSON_ARRAY: {}, + XML: {}, + FORM: { + first_name: 'Nick', + last_name: 'Kyrgios', + website: 'https://rudderstack.com', + score: 12, + campaign_id: 42213, + }, + }, + files: {}, + }, + metadata: [ + { + jobId: 3, + secret: { + access_token: 'myToken', + refresh_token: 'myRefreshToken', + }, + }, + ], + batched: false, + statusCode: 200, + destination: { + Config: { + rudderAccountId: '1z8LpaSAuFR9TPWL6fECZfjmRa-', + businessUnitId: '0Uv2v000000k9tHCAQ', + campaignId: 42213, + authStatus: 'active', + eventDelivery: true, + eventDeliveryTS: 1636965406397, + }, + DestinationDefinition: { + name: 'PARDOT', + displayName: 'Pardot', + config: { + auth: { + type: 'OAuth', + }, + transformAt: 'router', + transformAtV1: 'router', + saveDestinationResponse: true, + includeKeys: [], + excludeKeys: [], + supportedSourceTypes: [ + 'android', + 'ios', + 'web', + 'unity', + 'amp', + 'cloud', + 'warehouse', + 'reactnative', + 'flutter', + 'cordova', + ], + destConfig: { + defaultConfig: ['rudderAccountId', 'businessUnitId', 'campaignId'], + }, + secretKeys: ['businessUnitId'], + }, + }, + Enabled: true, + ID: '1WXjIHpu7ETXgjfiGPW3kCUgZFR', + Name: 'test destination', + Transformations: [], + }, + }, + { + batchedRequest: { + version: '1', + type: 'REST', + method: 'POST', + endpoint: + 'https://pi.pardot.com/api/prospect/version/4/do/upsert/email/rolex_waltair@mywebsite.io', + headers: { + Authorization: 'Bearer myExpiredToken', + 'Pardot-Business-Unit-Id': '0Uv2v000000k9tHCAQ', + }, + params: {}, + body: { + JSON: {}, + JSON_ARRAY: {}, + XML: {}, + FORM: { + first_name: 'Rolex', + last_name: 'Waltair', + website: 'https://rudderstack.com', + score: 15, + campaign_id: 42213, + }, + }, + files: {}, + }, + metadata: [ + { + jobId: 4, + secret: { + access_token: 'myExpiredToken', + refresh_token: 'myRefreshToken', + }, + }, + ], + batched: false, + statusCode: 200, + destination: { + Config: { + rudderAccountId: '1z8LpaSAuFR9TPWL6fECZfjmRa-', + businessUnitId: '0Uv2v000000k9tHCAQ', + campaignId: 42213, + authStatus: 'active', + eventDelivery: true, + eventDeliveryTS: 1636965406397, + }, + DestinationDefinition: { + name: 'PARDOT', + displayName: 'Pardot', + config: { + auth: { + type: 'OAuth', + }, + transformAt: 'router', + transformAtV1: 'router', + saveDestinationResponse: true, + includeKeys: [], + excludeKeys: [], + supportedSourceTypes: [ + 'android', + 'ios', + 'web', + 'unity', + 'amp', + 'cloud', + 'warehouse', + 'reactnative', + 'flutter', + 'cordova', + ], + destConfig: { + defaultConfig: ['rudderAccountId', 'businessUnitId', 'campaignId'], + }, + secretKeys: ['businessUnitId'], + }, + }, + Enabled: true, + ID: '1WXjIHpu7ETXgjfiGPW3kCUgZFR', + Name: 'test destination', + Transformations: [], + }, + }, + { + destination: { + Config: { + rudderAccountId: '1z8LpaSAuFR9TPWL6fECZfjmRa-', + businessUnitId: '0Uv2v000000k9tHCAQ', + campaignId: 42213, + authStatus: 'active', + eventDelivery: true, + eventDeliveryTS: 1636965406397, + }, + DestinationDefinition: { + name: 'PARDOT', + displayName: 'Pardot', + config: { + auth: { + type: 'OAuth', + }, + transformAt: 'router', + transformAtV1: 'router', + saveDestinationResponse: true, + includeKeys: [], + excludeKeys: [], + supportedSourceTypes: [ + 'android', + 'ios', + 'web', + 'unity', + 'amp', + 'cloud', + 'warehouse', + 'reactnative', + 'flutter', + 'cordova', + ], + destConfig: { + defaultConfig: ['rudderAccountId', 'businessUnitId', 'campaignId'], + }, + secretKeys: ['businessUnitId'], + }, + }, + Enabled: true, + ID: '1WXjIHpu7ETXgjfiGPW3kCUgZFR', + Name: 'test destination', + Transformations: [], + }, + metadata: [ + { + jobId: 5, + secret: null, + }, + ], + batched: false, + statusCode: 500, + error: 'Empty/Invalid access token', + statTags: { + destType: 'PARDOT', + feature: 'router', + implementation: 'native', + errorCategory: 'platform', + module: 'destination', + errorType: 'oAuthSecret', + }, + }, + ], + }, + }, + }, + }, +]; diff --git a/test/integrations/destinations/personalize/processor/data.ts b/test/integrations/destinations/personalize/processor/data.ts new file mode 100644 index 0000000000..012aae25bb --- /dev/null +++ b/test/integrations/destinations/personalize/processor/data.ts @@ -0,0 +1,4188 @@ +export const data = [ + { + name: 'personalize', + description: 'Test 0', + feature: 'processor', + module: 'destination', + version: 'v0', + input: { + request: { + body: [ + { + message: { + anonymousId: 'anon-id-new', + context: { ip: '14.5.67.21', library: { name: 'http' } }, + event: 'PRODUCT ADDED', + messageId: '4bb69e26-b5a6-446a-a140-dbb6263369c9', + originalTimestamp: '2021-03-13T01:56:46.896+05:30', + properties: { + numberOfRatings: 'checking with webapp change', + movieWatched: 2, + eventValue: 7.06, + }, + receivedAt: '2021-03-13T01:56:44.340+05:30', + request_ip: '[::1]', + rudderId: 'daf823fb-e8d3-413a-8313-d34cd756f968', + sentAt: '2021-03-13T01:56:46.896+05:30', + timestamp: '2020-02-02T00:23:09.544Z', + type: 'track', + userId: 'identified user id', + }, + metadata: { + sourceId: '1pe7ty3hMMQCnrfZ0Mn2QG48884', + destinationId: '1pe9WgFOuFHOSIfmUkkhVTD1Rsd', + jobId: 1, + destinationType: 'PERSONALIZE', + messageId: '4bb69e26-b5a6-446a-a140-dbb6263369c9', + messageIds: null, + rudderId: 'daf823fb-e8d3-413a-8313-d34cd756f968', + receivedAt: '2021-03-13T01:56:44.340+05:30', + }, + destination: { + ID: '1pe9WgFOuFHOSIfmUkkhVTD1Rsd', + Name: 'personalize Dev Testing', + DestinationDefinition: { + ID: '1pdthjPnz8gQhSTE2QTbm2LUMGM', + Name: 'PERSONALIZE', + DisplayName: 'AWS Personalize', + Config: { + destConfig: { + defaultConfig: [ + 'accessKeyId', + 'secretAccessKey', + 'region', + 'trackingId', + 'eventName', + 'customMappings', + ], + }, + excludeKeys: [], + includeKeys: [], + saveDestinationResponse: true, + secretKeys: ['accessKeyId', 'secretAccessKey'], + supportedSourceTypes: [ + 'android', + 'ios', + 'web', + 'unity', + 'amp', + 'cloud', + 'reactnative', + ], + transformAt: 'processor', + }, + }, + Config: { + accessKeyId: 'ABC', + customMappings: [ + { from: 'MOVIE_WATCHED', to: 'movieWatched' }, + { from: 'NUMBER_OF_RATINGS', to: 'numberOfRatings' }, + ], + datasetARN: '', + eventChoice: 'PutEvents', + region: 'us-east-1', + secretAccessKey: 'DEF', + trackingId: 'c60', + }, + Enabled: true, + Transformations: [], + IsProcessorEnabled: true, + }, + libraries: [], + request: { query: {} }, + }, + ], + method: 'POST', + }, + pathSuffix: '', + }, + output: { + response: { + status: 200, + body: [ + { + metadata: { + destinationId: '1pe9WgFOuFHOSIfmUkkhVTD1Rsd', + destinationType: 'PERSONALIZE', + jobId: 1, + messageId: '4bb69e26-b5a6-446a-a140-dbb6263369c9', + messageIds: null, + receivedAt: '2021-03-13T01:56:44.340+05:30', + rudderId: 'daf823fb-e8d3-413a-8313-d34cd756f968', + sourceId: '1pe7ty3hMMQCnrfZ0Mn2QG48884', + }, + output: { + sessionId: 'anon-id-new', + trackingId: 'c60', + userId: 'identified user id', + eventList: [ + { + itemId: '4bb69e26-b5a6-446a-a140-dbb6263369c9', + eventType: 'PRODUCT ADDED', + sentAt: '2020-02-02T00:23:09.544Z', + properties: { movieWatched: '2', numberOfRatings: 'checking with webapp change' }, + }, + ], + }, + statusCode: 200, + }, + ], + }, + }, + }, + { + name: 'personalize', + description: 'Test 1', + feature: 'processor', + module: 'destination', + version: 'v0', + input: { + request: { + body: [ + { + message: { + anonymousId: 'anon-id-new', + context: { ip: '14.5.67.21', library: { name: 'http' } }, + event: 'PRODUCT DELETED', + messageId: '4bb69e26-b5a6-446a-a140-dbb6263369c9', + originalTimestamp: '2021-03-13T01:56:46.896+05:30', + properties: { + numberOfRatings: 'checking with webapp change', + typeOfMovie: 'Art Film', + }, + receivedAt: '2021-03-13T01:56:44.340+05:30', + request_ip: '[::1]', + rudderId: 'daf823fb-e8d3-413a-8313-d34cd756f968', + sentAt: '2021-03-13T01:56:46.896+05:30', + timestamp: '2020-02-02T00:23:09.544Z', + type: 'track', + userId: 'identified user id', + }, + metadata: { + sourceId: '1pe7ty3hMMQCnrfZ0Mn2QG48884', + destinationId: '1pe9WgFOuFHOSIfmUkkhVTD1Rsd', + jobId: 1, + destinationType: 'PERSONALIZE', + messageId: '4bb69e26-b5a6-446a-a140-dbb6263369c9', + messageIds: null, + rudderId: 'daf823fb-e8d3-413a-8313-d34cd756f968', + receivedAt: '2021-03-13T01:56:44.340+05:30', + }, + destination: { + ID: '1pe9WgFOuFHOSIfmUkkhVTD1Rsd', + Name: 'personalize Dev Testing', + DestinationDefinition: { + ID: '1pdthjPnz8gQhSTE2QTbm2LUMGM', + Name: 'PERSONALIZE', + DisplayName: 'AWS Personalize', + Config: { + destConfig: { + defaultConfig: [ + 'accessKeyId', + 'secretAccessKey', + 'region', + 'trackingId', + 'eventName', + 'customMappings', + ], + }, + excludeKeys: [], + includeKeys: [], + saveDestinationResponse: true, + secretKeys: ['accessKeyId', 'secretAccessKey'], + supportedSourceTypes: [ + 'android', + 'ios', + 'web', + 'unity', + 'amp', + 'cloud', + 'reactnative', + ], + transformAt: 'processor', + }, + }, + Config: { + accessKeyId: 'ABC', + customMappings: [ + { from: 'TYPE_OF_MOVIE', to: 'typeOfMovie' }, + { from: 'NUMBER_OF_RATINGS', to: 'numberOfRatings' }, + ], + region: 'us-east-1', + datasetARN: '', + eventChoice: 'PutEvents', + secretAccessKey: 'DEF', + trackingId: 'c60', + }, + Enabled: true, + Transformations: [], + IsProcessorEnabled: true, + }, + libraries: [], + request: { query: {} }, + }, + ], + method: 'POST', + }, + pathSuffix: '', + }, + output: { + response: { + status: 200, + body: [ + { + metadata: { + sourceId: '1pe7ty3hMMQCnrfZ0Mn2QG48884', + destinationId: '1pe9WgFOuFHOSIfmUkkhVTD1Rsd', + jobId: 1, + destinationType: 'PERSONALIZE', + messageId: '4bb69e26-b5a6-446a-a140-dbb6263369c9', + messageIds: null, + rudderId: 'daf823fb-e8d3-413a-8313-d34cd756f968', + receivedAt: '2021-03-13T01:56:44.340+05:30', + }, + output: { + sessionId: 'anon-id-new', + trackingId: 'c60', + userId: 'identified user id', + eventList: [ + { + itemId: '4bb69e26-b5a6-446a-a140-dbb6263369c9', + eventType: 'PRODUCT DELETED', + sentAt: '2020-02-02T00:23:09.544Z', + properties: { + typeOfMovie: 'Art Film', + numberOfRatings: 'checking with webapp change', + }, + }, + ], + }, + statusCode: 200, + }, + ], + }, + }, + }, + { + name: 'personalize', + description: 'Test 2', + feature: 'processor', + module: 'destination', + version: 'v0', + input: { + request: { + body: [ + { + message: { + anonymousId: 'anon-id-new', + context: { ip: '14.5.67.21', library: { name: 'http' } }, + event: 'PRODUCT DELETED', + messageId: '4bb69e26-b5a6-446a-a140-dbb6263369c9', + originalTimestamp: '2021-03-13T01:56:46.896+05:30', + properties: { + numberOfRatings: 'checking with webapp change', + typeOfMovie: 'Art Film', + }, + receivedAt: '2021-03-13T01:56:44.340+05:30', + request_ip: '[::1]', + rudderId: 'daf823fb-e8d3-413a-8313-d34cd756f968', + sentAt: '2021-03-13T01:56:46.896+05:30', + timestamp: '2020-02-02T00:23:09.544Z', + type: 'track', + userId: 'identified user id', + }, + metadata: { + sourceId: '1pe7ty3hMMQCnrfZ0Mn2QG48884', + destinationId: '1pe9WgFOuFHOSIfmUkkhVTD1Rsd', + jobId: 1, + destinationType: 'PERSONALIZE', + messageId: '4bb69e26-b5a6-446a-a140-dbb6263369c9', + messageIds: null, + rudderId: 'daf823fb-e8d3-413a-8313-d34cd756f968', + receivedAt: '2021-03-13T01:56:44.340+05:30', + }, + destination: { + ID: '1pe9WgFOuFHOSIfmUkkhVTD1Rsd', + Name: 'personalize Dev Testing', + DestinationDefinition: { + ID: '1pdthjPnz8gQhSTE2QTbm2LUMGM', + Name: 'PERSONALIZE', + DisplayName: 'AWS Personalize', + Config: { + destConfig: { + defaultConfig: [ + 'accessKeyId', + 'secretAccessKey', + 'region', + 'trackingId', + 'eventName', + 'customMappings', + ], + }, + excludeKeys: [], + includeKeys: [], + saveDestinationResponse: true, + secretKeys: ['accessKeyId', 'secretAccessKey'], + supportedSourceTypes: [ + 'android', + 'ios', + 'web', + 'unity', + 'amp', + 'cloud', + 'reactnative', + ], + transformAt: 'processor', + }, + }, + Config: { + accessKeyId: 'ABC', + customMappings: [ + { from: 'TYPE_OF_MOVIE', to: 'typeOfMovie' }, + { from: 'NUMBER_OF_RATINGS', to: 'numberOfRatings' }, + { from: 'ITEM_ID', to: 'itemId' }, + ], + datasetARN: '', + eventChoice: 'PutEvents', + region: 'us-east-1', + secretAccessKey: 'DEF', + trackingId: 'c60', + }, + Enabled: true, + Transformations: [], + IsProcessorEnabled: true, + }, + libraries: [], + request: { query: {} }, + }, + ], + method: 'POST', + }, + pathSuffix: '', + }, + output: { + response: { + status: 200, + body: [ + { + metadata: { + sourceId: '1pe7ty3hMMQCnrfZ0Mn2QG48884', + destinationId: '1pe9WgFOuFHOSIfmUkkhVTD1Rsd', + jobId: 1, + destinationType: 'PERSONALIZE', + messageId: '4bb69e26-b5a6-446a-a140-dbb6263369c9', + messageIds: null, + rudderId: 'daf823fb-e8d3-413a-8313-d34cd756f968', + receivedAt: '2021-03-13T01:56:44.340+05:30', + }, + output: { + sessionId: 'anon-id-new', + trackingId: 'c60', + userId: 'identified user id', + eventList: [ + { + itemId: '4bb69e26-b5a6-446a-a140-dbb6263369c9', + eventType: 'PRODUCT DELETED', + sentAt: '2020-02-02T00:23:09.544Z', + properties: { + typeOfMovie: 'Art Film', + numberOfRatings: 'checking with webapp change', + }, + }, + ], + }, + statusCode: 200, + }, + ], + }, + }, + }, + { + name: 'personalize', + description: 'Test 3', + feature: 'processor', + module: 'destination', + version: 'v0', + input: { + request: { + body: [ + { + message: { + anonymousId: 'anon-id-new', + context: { ip: '14.5.67.21', library: { name: 'http' } }, + event: 'PRODUCT DELETED', + messageId: '4bb69e26-b5a6-446a-a140-dbb6263369c9', + originalTimestamp: '2021-03-13T01:56:46.896+05:30', + properties: { + numberOfRatings: 'checking with webapp change', + typeOfMovie: 'Art Film', + itemId: 'item 1', + }, + receivedAt: '2021-03-13T01:56:44.340+05:30', + request_ip: '[::1]', + rudderId: 'daf823fb-e8d3-413a-8313-d34cd756f968', + sentAt: '2021-03-13T01:56:46.896+05:30', + timestamp: '2020-02-02T00:23:09.544Z', + type: 'track', + userId: 'identified user id', + }, + metadata: { + sourceId: '1pe7ty3hMMQCnrfZ0Mn2QG48884', + destinationId: '1pe9WgFOuFHOSIfmUkkhVTD1Rsd', + jobId: 1, + destinationType: 'PERSONALIZE', + messageId: '4bb69e26-b5a6-446a-a140-dbb6263369c9', + messageIds: null, + rudderId: 'daf823fb-e8d3-413a-8313-d34cd756f968', + receivedAt: '2021-03-13T01:56:44.340+05:30', + }, + destination: { + ID: '1pe9WgFOuFHOSIfmUkkhVTD1Rsd', + Name: 'personalize Dev Testing', + DestinationDefinition: { + ID: '1pdthjPnz8gQhSTE2QTbm2LUMGM', + Name: 'PERSONALIZE', + DisplayName: 'AWS Personalize', + Config: { + destConfig: { + defaultConfig: [ + 'accessKeyId', + 'secretAccessKey', + 'region', + 'trackingId', + 'eventName', + 'customMappings', + ], + }, + excludeKeys: [], + includeKeys: [], + saveDestinationResponse: true, + secretKeys: ['accessKeyId', 'secretAccessKey'], + supportedSourceTypes: [ + 'android', + 'ios', + 'web', + 'unity', + 'amp', + 'cloud', + 'reactnative', + ], + transformAt: 'processor', + }, + }, + Config: { + accessKeyId: 'ABC', + customMappings: [ + { from: 'TYPE_OF_MOVIE', to: 'typeOfMovie' }, + { from: 'NUMBER_OF_RATINGS', to: 'numberOfRatings' }, + { from: 'ITEM_ID', to: 'itemId' }, + ], + datasetARN: '', + eventChoice: 'PutEvents', + region: 'us-east-1', + secretAccessKey: 'DEF', + trackingId: 'c60', + }, + Enabled: true, + Transformations: [], + IsProcessorEnabled: true, + }, + libraries: [], + request: { query: {} }, + }, + ], + method: 'POST', + }, + pathSuffix: '', + }, + output: { + response: { + status: 200, + body: [ + { + metadata: { + sourceId: '1pe7ty3hMMQCnrfZ0Mn2QG48884', + destinationId: '1pe9WgFOuFHOSIfmUkkhVTD1Rsd', + jobId: 1, + destinationType: 'PERSONALIZE', + messageId: '4bb69e26-b5a6-446a-a140-dbb6263369c9', + messageIds: null, + rudderId: 'daf823fb-e8d3-413a-8313-d34cd756f968', + receivedAt: '2021-03-13T01:56:44.340+05:30', + }, + output: { + sessionId: 'anon-id-new', + trackingId: 'c60', + userId: 'identified user id', + eventList: [ + { + itemId: 'item 1', + eventType: 'PRODUCT DELETED', + sentAt: '2020-02-02T00:23:09.544Z', + properties: { + typeOfMovie: 'Art Film', + numberOfRatings: 'checking with webapp change', + }, + }, + ], + }, + statusCode: 200, + }, + ], + }, + }, + }, + { + name: 'personalize', + description: 'Test 4', + feature: 'processor', + module: 'destination', + version: 'v0', + input: { + request: { + body: [ + { + message: { + anonymousId: 'anon-id-new', + context: { ip: '14.5.67.21', library: { name: 'http' } }, + event: 'PRODUCT DELETED', + messageId: '4bb69e26-b5a6-446a-a140-dbb6263369c9', + originalTimestamp: '2021-03-13T01:56:46.896+05:30', + properties: { + numberOfRatings: 'checking with webapp change', + typeOfMovie: 'Art Film', + itemId: 'item 1', + }, + receivedAt: '2021-03-13T01:56:44.340+05:30', + request_ip: '[::1]', + rudderId: 'daf823fb-e8d3-413a-8313-d34cd756f968', + sentAt: '2021-03-13T01:56:46.896+05:30', + timestamp: '2020-02-02T00:23:09.544Z', + type: 'track', + userId: 'identified user id', + }, + metadata: { + sourceId: '1pe7ty3hMMQCnrfZ0Mn2QG48884', + destinationId: '1pe9WgFOuFHOSIfmUkkhVTD1Rsd', + jobId: 1, + destinationType: 'PERSONALIZE', + messageId: '4bb69e26-b5a6-446a-a140-dbb6263369c9', + messageIds: null, + rudderId: 'daf823fb-e8d3-413a-8313-d34cd756f968', + receivedAt: '2021-03-13T01:56:44.340+05:30', + }, + destination: { + ID: '1pe9WgFOuFHOSIfmUkkhVTD1Rsd', + Name: 'personalize Dev Testing', + DestinationDefinition: { + ID: '1pdthjPnz8gQhSTE2QTbm2LUMGM', + Name: 'PERSONALIZE', + DisplayName: 'AWS Personalize', + Config: { + destConfig: { + defaultConfig: [ + 'accessKeyId', + 'secretAccessKey', + 'region', + 'trackingId', + 'eventName', + 'customMappings', + ], + }, + excludeKeys: [], + includeKeys: [], + saveDestinationResponse: true, + secretKeys: ['accessKeyId', 'secretAccessKey'], + supportedSourceTypes: [ + 'android', + 'ios', + 'web', + 'unity', + 'amp', + 'cloud', + 'reactnative', + ], + transformAt: 'processor', + }, + }, + Config: { + accessKeyId: 'ABC', + customMappings: [ + { from: 'TYPE_OF_MOVIE', to: 'typeOfMovie' }, + { from: 'NUMBER_OF_RATINGS', to: 'numberOfRatings' }, + ], + datasetARN: '', + eventChoice: 'PutEvents', + region: 'us-east-1', + secretAccessKey: 'DEF', + trackingId: 'c60', + }, + Enabled: true, + Transformations: [], + IsProcessorEnabled: true, + }, + libraries: [], + request: { query: {} }, + }, + ], + method: 'POST', + }, + pathSuffix: '', + }, + output: { + response: { + status: 200, + body: [ + { + metadata: { + sourceId: '1pe7ty3hMMQCnrfZ0Mn2QG48884', + destinationId: '1pe9WgFOuFHOSIfmUkkhVTD1Rsd', + jobId: 1, + destinationType: 'PERSONALIZE', + messageId: '4bb69e26-b5a6-446a-a140-dbb6263369c9', + messageIds: null, + rudderId: 'daf823fb-e8d3-413a-8313-d34cd756f968', + receivedAt: '2021-03-13T01:56:44.340+05:30', + }, + output: { + sessionId: 'anon-id-new', + trackingId: 'c60', + userId: 'identified user id', + eventList: [ + { + itemId: '4bb69e26-b5a6-446a-a140-dbb6263369c9', + eventType: 'PRODUCT DELETED', + sentAt: '2020-02-02T00:23:09.544Z', + properties: { + typeOfMovie: 'Art Film', + numberOfRatings: 'checking with webapp change', + }, + }, + ], + }, + statusCode: 200, + }, + ], + }, + }, + }, + { + name: 'personalize', + description: 'Test 5', + feature: 'processor', + module: 'destination', + version: 'v0', + input: { + request: { + body: [ + { + message: { + anonymousId: 'anon-id-new', + context: { ip: '14.5.67.21', library: { name: 'http' } }, + event: 'PRODUCT DELETED', + messageId: '4bb69e26-b5a6-446a-a140-dbb6263369c9', + originalTimestamp: '2021-03-13T01:56:46.896+05:30', + properties: { + numberOfRatings: 'checking with webapp change', + typeOfMovie: 'Art Film', + itemId: 'item 1', + }, + receivedAt: '2021-03-13T01:56:44.340+05:30', + request_ip: '[::1]', + rudderId: 'daf823fb-e8d3-413a-8313-d34cd756f968', + sentAt: '2021-03-13T01:56:46.896+05:30', + timestamp: '2020-02-02T00:23:09.544Z', + type: 'track', + userId: 'identified user id', + }, + metadata: { + sourceId: '1pe7ty3hMMQCnrfZ0Mn2QG48884', + destinationId: '1pe9WgFOuFHOSIfmUkkhVTD1Rsd', + jobId: 1, + destinationType: 'PERSONALIZE', + messageId: '4bb69e26-b5a6-446a-a140-dbb6263369c9', + messageIds: null, + rudderId: 'daf823fb-e8d3-413a-8313-d34cd756f968', + receivedAt: '2021-03-13T01:56:44.340+05:30', + }, + destination: { + ID: '1pe9WgFOuFHOSIfmUkkhVTD1Rsd', + Name: 'personalize Dev Testing', + DestinationDefinition: { + ID: '1pdthjPnz8gQhSTE2QTbm2LUMGM', + Name: 'PERSONALIZE', + DisplayName: 'AWS Personalize', + Config: { + destConfig: { + defaultConfig: [ + 'accessKeyId', + 'secretAccessKey', + 'region', + 'trackingId', + 'eventName', + 'customMappings', + ], + }, + excludeKeys: [], + includeKeys: [], + saveDestinationResponse: true, + secretKeys: ['accessKeyId', 'secretAccessKey'], + supportedSourceTypes: [ + 'android', + 'ios', + 'web', + 'unity', + 'amp', + 'cloud', + 'reactnative', + ], + transformAt: 'processor', + }, + }, + Config: { + accessKeyId: 'ABC', + customMappings: [ + { from: 'TYPE_OF_MOVIE', to: 'typeOfMovie' }, + { from: 'NUMBER_OF_RATINGS', to: 'numberOfRatings' }, + { from: 'USER_ID', to: 'userId' }, + ], + datasetARN: '', + eventChoice: 'PutEvents', + region: 'us-east-1', + secretAccessKey: 'DEF', + trackingId: 'c60', + }, + Enabled: true, + Transformations: [], + IsProcessorEnabled: true, + }, + libraries: [], + request: { query: {} }, + }, + ], + method: 'POST', + }, + pathSuffix: '', + }, + output: { + response: { + status: 200, + body: [ + { + metadata: { + sourceId: '1pe7ty3hMMQCnrfZ0Mn2QG48884', + destinationId: '1pe9WgFOuFHOSIfmUkkhVTD1Rsd', + jobId: 1, + destinationType: 'PERSONALIZE', + messageId: '4bb69e26-b5a6-446a-a140-dbb6263369c9', + messageIds: null, + rudderId: 'daf823fb-e8d3-413a-8313-d34cd756f968', + receivedAt: '2021-03-13T01:56:44.340+05:30', + }, + output: { + sessionId: 'anon-id-new', + trackingId: 'c60', + userId: 'identified user id', + eventList: [ + { + itemId: '4bb69e26-b5a6-446a-a140-dbb6263369c9', + eventType: 'PRODUCT DELETED', + sentAt: '2020-02-02T00:23:09.544Z', + properties: { + typeOfMovie: 'Art Film', + numberOfRatings: 'checking with webapp change', + }, + }, + ], + }, + statusCode: 200, + }, + ], + }, + }, + }, + { + name: 'personalize', + description: 'Test 6', + feature: 'processor', + module: 'destination', + version: 'v0', + input: { + request: { + body: [ + { + message: { + anonymousId: 'anon-id-new', + context: { ip: '14.5.67.21', library: { name: 'http' } }, + event: 'PRODUCT DELETED', + messageId: '4bb69e26-b5a6-446a-a140-dbb6263369c9', + originalTimestamp: '2021-03-13T01:56:46.896+05:30', + properties: { + numberOfRatings: 'checking with webapp change', + typeOfMovie: 'Art Film', + itemId: 'item 1', + userId: 'user 1', + }, + receivedAt: '2021-03-13T01:56:44.340+05:30', + request_ip: '[::1]', + rudderId: 'daf823fb-e8d3-413a-8313-d34cd756f968', + sentAt: '2021-03-13T01:56:46.896+05:30', + timestamp: '2020-02-02T00:23:09.544Z', + type: 'track', + userId: 'identified user id', + }, + metadata: { + sourceId: '1pe7ty3hMMQCnrfZ0Mn2QG48884', + destinationId: '1pe9WgFOuFHOSIfmUkkhVTD1Rsd', + jobId: 1, + destinationType: 'PERSONALIZE', + messageId: '4bb69e26-b5a6-446a-a140-dbb6263369c9', + messageIds: null, + rudderId: 'daf823fb-e8d3-413a-8313-d34cd756f968', + receivedAt: '2021-03-13T01:56:44.340+05:30', + }, + destination: { + ID: '1pe9WgFOuFHOSIfmUkkhVTD1Rsd', + Name: 'personalize Dev Testing', + DestinationDefinition: { + ID: '1pdthjPnz8gQhSTE2QTbm2LUMGM', + Name: 'PERSONALIZE', + DisplayName: 'AWS Personalize', + Config: { + destConfig: { + defaultConfig: [ + 'accessKeyId', + 'secretAccessKey', + 'region', + 'trackingId', + 'eventName', + 'customMappings', + ], + }, + excludeKeys: [], + includeKeys: [], + saveDestinationResponse: true, + secretKeys: ['accessKeyId', 'secretAccessKey'], + supportedSourceTypes: [ + 'android', + 'ios', + 'web', + 'unity', + 'amp', + 'cloud', + 'reactnative', + ], + transformAt: 'processor', + }, + }, + Config: { + accessKeyId: 'ABC', + customMappings: [ + { from: 'TYPE_OF_MOVIE', to: 'typeOfMovie' }, + { from: 'NUMBER_OF_RATINGS', to: 'numberOfRatings' }, + { from: 'USER_ID', to: 'userId' }, + ], + datasetARN: '', + eventChoice: 'PutEvents', + region: 'us-east-1', + secretAccessKey: 'DEF', + trackingId: 'c60', + }, + Enabled: true, + Transformations: [], + IsProcessorEnabled: true, + }, + libraries: [], + request: { query: {} }, + }, + ], + method: 'POST', + }, + pathSuffix: '', + }, + output: { + response: { + status: 200, + body: [ + { + metadata: { + sourceId: '1pe7ty3hMMQCnrfZ0Mn2QG48884', + destinationId: '1pe9WgFOuFHOSIfmUkkhVTD1Rsd', + jobId: 1, + destinationType: 'PERSONALIZE', + messageId: '4bb69e26-b5a6-446a-a140-dbb6263369c9', + messageIds: null, + rudderId: 'daf823fb-e8d3-413a-8313-d34cd756f968', + receivedAt: '2021-03-13T01:56:44.340+05:30', + }, + output: { + sessionId: 'anon-id-new', + trackingId: 'c60', + userId: 'user 1', + eventList: [ + { + itemId: '4bb69e26-b5a6-446a-a140-dbb6263369c9', + eventType: 'PRODUCT DELETED', + sentAt: '2020-02-02T00:23:09.544Z', + properties: { + typeOfMovie: 'Art Film', + numberOfRatings: 'checking with webapp change', + }, + }, + ], + }, + statusCode: 200, + }, + ], + }, + }, + }, + { + name: 'personalize', + description: 'Test 7', + feature: 'processor', + module: 'destination', + version: 'v0', + input: { + request: { + body: [ + { + message: { + anonymousId: 'anon-id-new', + context: { ip: '14.5.67.21', library: { name: 'http' } }, + event: 'PRODUCT DELETED', + messageId: '4bb69e26-b5a6-446a-a140-dbb6263369c9', + originalTimestamp: '2021-03-13T01:56:46.896+05:30', + properties: { + numberOfRatings: 'checking with webapp change', + typeOfMovie: 'Art Film', + itemId: 'item 1', + userId: 'user 1', + }, + receivedAt: '2021-03-13T01:56:44.340+05:30', + request_ip: '[::1]', + rudderId: 'daf823fb-e8d3-413a-8313-d34cd756f968', + sentAt: '2021-03-13T01:56:46.896+05:30', + timestamp: '2020-02-02T00:23:09.544Z', + type: 'track', + userId: 'identified user id', + }, + metadata: { + sourceId: '1pe7ty3hMMQCnrfZ0Mn2QG48884', + destinationId: '1pe9WgFOuFHOSIfmUkkhVTD1Rsd', + jobId: 1, + destinationType: 'PERSONALIZE', + messageId: '4bb69e26-b5a6-446a-a140-dbb6263369c9', + messageIds: null, + rudderId: 'daf823fb-e8d3-413a-8313-d34cd756f968', + receivedAt: '2021-03-13T01:56:44.340+05:30', + }, + destination: { + ID: '1pe9WgFOuFHOSIfmUkkhVTD1Rsd', + Name: 'personalize Dev Testing', + DestinationDefinition: { + ID: '1pdthjPnz8gQhSTE2QTbm2LUMGM', + Name: 'PERSONALIZE', + DisplayName: 'AWS Personalize', + Config: { + destConfig: { + defaultConfig: [ + 'accessKeyId', + 'secretAccessKey', + 'region', + 'trackingId', + 'eventName', + 'customMappings', + ], + }, + excludeKeys: [], + includeKeys: [], + saveDestinationResponse: true, + secretKeys: ['accessKeyId', 'secretAccessKey'], + supportedSourceTypes: [ + 'android', + 'ios', + 'web', + 'unity', + 'amp', + 'cloud', + 'reactnative', + ], + transformAt: 'processor', + }, + }, + Config: { + accessKeyId: 'ABC', + customMappings: [ + { from: 'TYPE_OF_MOVIE', to: 'typeOfMovie' }, + { from: 'NUMBER_OF_RATINGS', to: 'numberOfRatings' }, + ], + datasetARN: '', + eventChoice: 'PutEvents', + region: 'us-east-1', + secretAccessKey: 'DEF', + trackingId: 'c60', + }, + Enabled: true, + Transformations: [], + IsProcessorEnabled: true, + }, + libraries: [], + request: { query: {} }, + }, + ], + method: 'POST', + }, + pathSuffix: '', + }, + output: { + response: { + status: 200, + body: [ + { + metadata: { + sourceId: '1pe7ty3hMMQCnrfZ0Mn2QG48884', + destinationId: '1pe9WgFOuFHOSIfmUkkhVTD1Rsd', + jobId: 1, + destinationType: 'PERSONALIZE', + messageId: '4bb69e26-b5a6-446a-a140-dbb6263369c9', + messageIds: null, + rudderId: 'daf823fb-e8d3-413a-8313-d34cd756f968', + receivedAt: '2021-03-13T01:56:44.340+05:30', + }, + output: { + sessionId: 'anon-id-new', + trackingId: 'c60', + userId: 'identified user id', + eventList: [ + { + itemId: '4bb69e26-b5a6-446a-a140-dbb6263369c9', + eventType: 'PRODUCT DELETED', + sentAt: '2020-02-02T00:23:09.544Z', + properties: { + typeOfMovie: 'Art Film', + numberOfRatings: 'checking with webapp change', + }, + }, + ], + }, + statusCode: 200, + }, + ], + }, + }, + }, + { + name: 'personalize', + description: 'Test 8', + feature: 'processor', + module: 'destination', + version: 'v0', + input: { + request: { + body: [ + { + message: { + anonymousId: 'anon-id-new', + context: { ip: '14.5.67.21', library: { name: 'http' } }, + event: 'PRODUCT DELETED', + messageId: '4bb69e26-b5a6-446a-a140-dbb6263369c9', + originalTimestamp: '2021-03-13T01:56:46.896+05:30', + properties: { + numberOfRatings: 'checking with webapp change', + typeOfMovie: 'Art Film', + itemId: 'item 1', + userId: 'user 1', + impressions: 'abc', + }, + receivedAt: '2021-03-13T01:56:44.340+05:30', + request_ip: '[::1]', + rudderId: 'daf823fb-e8d3-413a-8313-d34cd756f968', + sentAt: '2021-03-13T01:56:46.896+05:30', + timestamp: '2020-02-02T00:23:09.544Z', + type: 'track', + userId: 'identified user id', + }, + metadata: { + sourceId: '1pe7ty3hMMQCnrfZ0Mn2QG48884', + destinationId: '1pe9WgFOuFHOSIfmUkkhVTD1Rsd', + jobId: 1, + destinationType: 'PERSONALIZE', + messageId: '4bb69e26-b5a6-446a-a140-dbb6263369c9', + messageIds: null, + rudderId: 'daf823fb-e8d3-413a-8313-d34cd756f968', + receivedAt: '2021-03-13T01:56:44.340+05:30', + }, + destination: { + ID: '1pe9WgFOuFHOSIfmUkkhVTD1Rsd', + Name: 'personalize Dev Testing', + DestinationDefinition: { + ID: '1pdthjPnz8gQhSTE2QTbm2LUMGM', + Name: 'PERSONALIZE', + DisplayName: 'AWS Personalize', + Config: { + destConfig: { + defaultConfig: [ + 'accessKeyId', + 'secretAccessKey', + 'region', + 'trackingId', + 'eventName', + 'customMappings', + ], + }, + excludeKeys: [], + includeKeys: [], + saveDestinationResponse: true, + secretKeys: ['accessKeyId', 'secretAccessKey'], + supportedSourceTypes: [ + 'android', + 'ios', + 'web', + 'unity', + 'amp', + 'cloud', + 'reactnative', + ], + transformAt: 'processor', + }, + }, + Config: { + accessKeyId: 'ABC', + customMappings: [ + { from: 'TYPE_OF_MOVIE', to: 'typeOfMovie' }, + { from: 'NUMBER_OF_RATINGS', to: 'numberOfRatings' }, + { from: 'IMPRESSION', to: 'impressions' }, + ], + datasetARN: '', + eventChoice: 'PutEvents', + region: 'us-east-1', + secretAccessKey: 'DEF', + trackingId: 'c60', + }, + Enabled: true, + Transformations: [], + IsProcessorEnabled: true, + }, + libraries: [], + request: { query: {} }, + }, + ], + method: 'POST', + }, + pathSuffix: '', + }, + output: { + response: { + status: 200, + body: [ + { + metadata: { + sourceId: '1pe7ty3hMMQCnrfZ0Mn2QG48884', + destinationId: '1pe9WgFOuFHOSIfmUkkhVTD1Rsd', + jobId: 1, + destinationType: 'PERSONALIZE', + messageId: '4bb69e26-b5a6-446a-a140-dbb6263369c9', + messageIds: null, + rudderId: 'daf823fb-e8d3-413a-8313-d34cd756f968', + receivedAt: '2021-03-13T01:56:44.340+05:30', + }, + output: { + userId: 'identified user id', + sessionId: 'anon-id-new', + trackingId: 'c60', + eventList: [ + { + eventType: 'PRODUCT DELETED', + sentAt: '2020-02-02T00:23:09.544Z', + properties: { + typeOfMovie: 'Art Film', + numberOfRatings: 'checking with webapp change', + }, + impression: ['abc'], + itemId: '4bb69e26-b5a6-446a-a140-dbb6263369c9', + }, + ], + }, + statusCode: 200, + }, + ], + }, + }, + }, + { + name: 'personalize', + description: 'Test 9', + feature: 'processor', + module: 'destination', + version: 'v0', + input: { + request: { + body: [ + { + message: { + anonymousId: 'anon-id-new', + context: { ip: '14.5.67.21', library: { name: 'http' } }, + event: 'PRODUCT DELETED', + messageId: '4bb69e26-b5a6-446a-a140-dbb6263369c9', + originalTimestamp: '2021-03-13T01:56:46.896+05:30', + properties: { + numberOfRatings: 'checking with webapp change', + typeOfMovie: 'Art Film', + itemId: 'item 1', + userId: 'user 1', + impressions: 'abc', + eventValue: '3.4abc', + }, + receivedAt: '2021-03-13T01:56:44.340+05:30', + request_ip: '[::1]', + rudderId: 'daf823fb-e8d3-413a-8313-d34cd756f968', + sentAt: '2021-03-13T01:56:46.896+05:30', + timestamp: '2020-02-02T00:23:09.544Z', + type: 'track', + userId: 'identified user id', + }, + metadata: { + sourceId: '1pe7ty3hMMQCnrfZ0Mn2QG48884', + destinationId: '1pe9WgFOuFHOSIfmUkkhVTD1Rsd', + jobId: 1, + destinationType: 'PERSONALIZE', + messageId: '4bb69e26-b5a6-446a-a140-dbb6263369c9', + messageIds: null, + rudderId: 'daf823fb-e8d3-413a-8313-d34cd756f968', + receivedAt: '2021-03-13T01:56:44.340+05:30', + }, + destination: { + ID: '1pe9WgFOuFHOSIfmUkkhVTD1Rsd', + Name: 'personalize Dev Testing', + DestinationDefinition: { + ID: '1pdthjPnz8gQhSTE2QTbm2LUMGM', + Name: 'PERSONALIZE', + DisplayName: 'AWS Personalize', + Config: { + destConfig: { + defaultConfig: [ + 'accessKeyId', + 'secretAccessKey', + 'region', + 'trackingId', + 'eventName', + 'customMappings', + ], + }, + excludeKeys: [], + includeKeys: [], + saveDestinationResponse: true, + secretKeys: ['accessKeyId', 'secretAccessKey'], + supportedSourceTypes: [ + 'android', + 'ios', + 'web', + 'unity', + 'amp', + 'cloud', + 'reactnative', + ], + transformAt: 'processor', + }, + }, + Config: { + accessKeyId: 'ABC', + customMappings: [ + { from: 'TYPE_OF_MOVIE', to: 'typeOfMovie' }, + { from: 'NUMBER_OF_RATINGS', to: 'numberOfRatings' }, + { from: 'IMPRESSION', to: 'impressions' }, + { from: 'EVENT_VALUE', to: 'eventValue' }, + ], + datasetARN: '', + eventChoice: 'PutEvents', + region: 'us-east-1', + secretAccessKey: 'DEF', + trackingId: 'c60', + }, + Enabled: true, + Transformations: [], + IsProcessorEnabled: true, + }, + libraries: [], + request: { query: {} }, + }, + ], + method: 'POST', + }, + pathSuffix: '', + }, + output: { + response: { + status: 200, + body: [ + { + metadata: { + sourceId: '1pe7ty3hMMQCnrfZ0Mn2QG48884', + destinationId: '1pe9WgFOuFHOSIfmUkkhVTD1Rsd', + jobId: 1, + destinationType: 'PERSONALIZE', + messageId: '4bb69e26-b5a6-446a-a140-dbb6263369c9', + messageIds: null, + rudderId: 'daf823fb-e8d3-413a-8313-d34cd756f968', + receivedAt: '2021-03-13T01:56:44.340+05:30', + }, + output: { + userId: 'identified user id', + sessionId: 'anon-id-new', + trackingId: 'c60', + eventList: [ + { + eventType: 'PRODUCT DELETED', + sentAt: '2020-02-02T00:23:09.544Z', + properties: { + typeOfMovie: 'Art Film', + numberOfRatings: 'checking with webapp change', + }, + impression: ['abc'], + eventValue: 3.4, + itemId: '4bb69e26-b5a6-446a-a140-dbb6263369c9', + }, + ], + }, + statusCode: 200, + }, + ], + }, + }, + }, + { + name: 'personalize', + description: 'Test 10', + feature: 'processor', + module: 'destination', + version: 'v0', + input: { + request: { + body: [ + { + message: { + anonymousId: 'anon-id-new', + context: { ip: '14.5.67.21', library: { name: 'http' } }, + event: 'PRODUCT DELETED', + messageId: '4bb69e26-b5a6-446a-a140-dbb6263369c9', + originalTimestamp: '2021-03-13T01:56:46.896+05:30', + properties: { + numberOfRatings: 'checking with webapp change', + typeOfMovie: 'Art Film', + itemId: 'item 1', + userId: 'user 1', + impressions: [2, 3], + eventValue: '3.4abc', + }, + receivedAt: '2021-03-13T01:56:44.340+05:30', + request_ip: '[::1]', + rudderId: 'daf823fb-e8d3-413a-8313-d34cd756f968', + sentAt: '2021-03-13T01:56:46.896+05:30', + timestamp: '2020-02-02T00:23:09.544Z', + type: 'track', + userId: 'identified user id', + }, + metadata: { + sourceId: '1pe7ty3hMMQCnrfZ0Mn2QG48884', + destinationId: '1pe9WgFOuFHOSIfmUkkhVTD1Rsd', + jobId: 1, + destinationType: 'PERSONALIZE', + messageId: '4bb69e26-b5a6-446a-a140-dbb6263369c9', + messageIds: null, + rudderId: 'daf823fb-e8d3-413a-8313-d34cd756f968', + receivedAt: '2021-03-13T01:56:44.340+05:30', + }, + destination: { + ID: '1pe9WgFOuFHOSIfmUkkhVTD1Rsd', + Name: 'personalize Dev Testing', + DestinationDefinition: { + ID: '1pdthjPnz8gQhSTE2QTbm2LUMGM', + Name: 'PERSONALIZE', + DisplayName: 'AWS Personalize', + Config: { + destConfig: { + defaultConfig: [ + 'accessKeyId', + 'secretAccessKey', + 'region', + 'trackingId', + 'eventName', + 'customMappings', + ], + }, + excludeKeys: [], + includeKeys: [], + saveDestinationResponse: true, + secretKeys: ['accessKeyId', 'secretAccessKey'], + supportedSourceTypes: [ + 'android', + 'ios', + 'web', + 'unity', + 'amp', + 'cloud', + 'reactnative', + ], + transformAt: 'processor', + }, + }, + Config: { + accessKeyId: 'ABC', + customMappings: [ + { from: 'TYPE_OF_MOVIE', to: 'typeOfMovie' }, + { from: 'NUMBER_OF_RATINGS', to: 'numberOfRatings' }, + { from: 'IMPRESSION', to: 'impressions' }, + { from: 'EVENT_VALUE', to: 'eventValue' }, + ], + datasetARN: '', + eventChoice: 'PutEvents', + region: 'us-east-1', + secretAccessKey: 'DEF', + trackingId: 'c60', + }, + Enabled: true, + Transformations: [], + IsProcessorEnabled: true, + }, + libraries: [], + request: { query: {} }, + }, + ], + method: 'POST', + }, + pathSuffix: '', + }, + output: { + response: { + status: 200, + body: [ + { + metadata: { + sourceId: '1pe7ty3hMMQCnrfZ0Mn2QG48884', + destinationId: '1pe9WgFOuFHOSIfmUkkhVTD1Rsd', + jobId: 1, + destinationType: 'PERSONALIZE', + messageId: '4bb69e26-b5a6-446a-a140-dbb6263369c9', + messageIds: null, + rudderId: 'daf823fb-e8d3-413a-8313-d34cd756f968', + receivedAt: '2021-03-13T01:56:44.340+05:30', + }, + output: { + userId: 'identified user id', + sessionId: 'anon-id-new', + trackingId: 'c60', + eventList: [ + { + eventType: 'PRODUCT DELETED', + sentAt: '2020-02-02T00:23:09.544Z', + properties: { + typeOfMovie: 'Art Film', + numberOfRatings: 'checking with webapp change', + }, + impression: ['2', '3'], + eventValue: 3.4, + itemId: '4bb69e26-b5a6-446a-a140-dbb6263369c9', + }, + ], + }, + statusCode: 200, + }, + ], + }, + }, + }, + { + name: 'personalize', + description: 'Test 11', + feature: 'processor', + module: 'destination', + version: 'v0', + input: { + request: { + body: [ + { + message: { + context: { ip: '14.5.67.21', library: { name: 'http' } }, + event: 'PRODUCT DELETED', + messageId: '4bb69e26-b5a6-446a-a140-dbb6263369c9', + originalTimestamp: '2021-03-13T01:56:46.896+05:30', + properties: { + numberOfRatings: 'checking with webapp change', + typeOfMovie: 'Art Film', + itemId: 'item 1', + userId: 'user 1', + impressions: [2, 3], + eventValue: '3.4abc', + }, + receivedAt: '2021-03-13T01:56:44.340+05:30', + request_ip: '[::1]', + rudderId: 'daf823fb-e8d3-413a-8313-d34cd756f968', + sentAt: '2021-03-13T01:56:46.896+05:30', + timestamp: '2020-02-02T00:23:09.544Z', + type: 'track', + userId: 'identified user id', + }, + metadata: { + sourceId: '1pe7ty3hMMQCnrfZ0Mn2QG48884', + destinationId: '1pe9WgFOuFHOSIfmUkkhVTD1Rsd', + jobId: 1, + destinationType: 'PERSONALIZE', + messageId: '4bb69e26-b5a6-446a-a140-dbb6263369c9', + messageIds: null, + rudderId: 'daf823fb-e8d3-413a-8313-d34cd756f968', + receivedAt: '2021-03-13T01:56:44.340+05:30', + }, + destination: { + ID: '1pe9WgFOuFHOSIfmUkkhVTD1Rsd', + Name: 'personalize Dev Testing', + DestinationDefinition: { + ID: '1pdthjPnz8gQhSTE2QTbm2LUMGM', + Name: 'PERSONALIZE', + DisplayName: 'AWS Personalize', + Config: { + destConfig: { + defaultConfig: [ + 'accessKeyId', + 'secretAccessKey', + 'region', + 'trackingId', + 'eventName', + 'customMappings', + ], + }, + excludeKeys: [], + includeKeys: [], + saveDestinationResponse: true, + secretKeys: ['accessKeyId', 'secretAccessKey'], + supportedSourceTypes: [ + 'android', + 'ios', + 'web', + 'unity', + 'amp', + 'cloud', + 'reactnative', + ], + transformAt: 'processor', + }, + }, + Config: { + accessKeyId: 'ABC', + customMappings: [ + { from: 'TYPE_OF_MOVIE', to: 'typeOfMovie' }, + { from: 'NUMBER_OF_RATINGS', to: 'numberOfRatings' }, + { from: 'IMPRESSION', to: 'impressions' }, + { from: 'EVENT_VALUE', to: 'eventValue' }, + ], + datasetARN: '', + eventChoice: 'PutEvents', + region: 'us-east-1', + secretAccessKey: 'DEF', + trackingId: 'c60', + }, + Enabled: true, + Transformations: [], + IsProcessorEnabled: true, + }, + libraries: [], + request: { query: {} }, + }, + ], + method: 'POST', + }, + pathSuffix: '', + }, + output: { + response: { + status: 200, + body: [ + { + metadata: { + sourceId: '1pe7ty3hMMQCnrfZ0Mn2QG48884', + destinationId: '1pe9WgFOuFHOSIfmUkkhVTD1Rsd', + jobId: 1, + destinationType: 'PERSONALIZE', + messageId: '4bb69e26-b5a6-446a-a140-dbb6263369c9', + messageIds: null, + rudderId: 'daf823fb-e8d3-413a-8313-d34cd756f968', + receivedAt: '2021-03-13T01:56:44.340+05:30', + }, + output: { + userId: 'identified user id', + sessionId: 'identified user id', + trackingId: 'c60', + eventList: [ + { + eventType: 'PRODUCT DELETED', + sentAt: '2020-02-02T00:23:09.544Z', + properties: { + typeOfMovie: 'Art Film', + numberOfRatings: 'checking with webapp change', + }, + impression: ['2', '3'], + eventValue: 3.4, + itemId: '4bb69e26-b5a6-446a-a140-dbb6263369c9', + }, + ], + }, + statusCode: 200, + }, + ], + }, + }, + }, + { + name: 'personalize', + description: 'Test 12', + feature: 'processor', + module: 'destination', + version: 'v0', + input: { + request: { + body: [ + { + message: { + channel: 'web', + context: { + app: { + build: '1.0.0', + name: 'RudderLabs JavaScript SDK', + namespace: 'com.rudderlabs.javascript', + version: '1.0.0', + }, + library: { name: 'RudderLabs JavaScript SDK', version: '1.0.0' }, + userAgent: + 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.90 Safari/537.36', + locale: 'en-US', + ip: '0.0.0.0', + os: { name: '', version: '' }, + screen: { density: 2 }, + }, + messageId: '84e26acc-56a5-4835-8233-591137fca468', + session_id: '3049dc4c-5a95-4ccd-a3e7-d74a7e411f22', + originalTimestamp: '2019-10-14T09:03:17.562Z', + anonymousId: 'anon_id', + userId: '123456', + type: 'identify', + traits: { + anonymousId: 'anon_id', + typeOfMovie: 'art film', + numberOfRatings: '13', + lastName: 'Doe', + phone: '92374162212', + }, + integrations: { All: true }, + sentAt: '2019-10-14T09:03:22.563Z', + }, + metadata: { + sourceId: '1pe7ty3hMMQCnrfZ0Mn2QG48884', + destinationId: '1pe9WgFOuFHOSIfmUkkhVTD1Rsd', + jobId: 1, + destinationType: 'PERSONALIZE', + messageId: '4bb69e26-b5a6-446a-a140-dbb6263369c9', + messageIds: null, + rudderId: 'daf823fb-e8d3-413a-8313-d34cd756f968', + receivedAt: '2021-03-13T01:56:44.340+05:30', + }, + destination: { + ID: '1pe9WgFOuFHOSIfmUkkhVTD1Rsd', + Name: 'personalize Dev Testing', + DestinationDefinition: { + ID: '1pdthjPnz8gQhSTE2QTbm2LUMGM', + Name: 'PERSONALIZE', + DisplayName: 'AWS Personalize', + Config: { + destConfig: { + defaultConfig: [ + 'accessKeyId', + 'secretAccessKey', + 'region', + 'trackingId', + 'eventName', + 'customMappings', + ], + }, + excludeKeys: [], + includeKeys: [], + saveDestinationResponse: true, + secretKeys: ['accessKeyId', 'secretAccessKey'], + supportedSourceTypes: [ + 'android', + 'ios', + 'web', + 'unity', + 'amp', + 'cloud', + 'reactnative', + ], + transformAt: 'processor', + }, + }, + Config: { + accessKeyId: 'ABC', + customMappings: [ + { from: 'TYPE_OF_MOVIE', to: 'typeOfMovie' }, + { from: 'NUMBER_OF_RATINGS', to: 'numberOfRatings' }, + ], + region: 'us-east-1', + secretAccessKey: 'DEF', + trackingId: 'c60', + datasetARN: + 'arn:aws:personalize:us-east-1:454531037350:dataset/putTest_DataSetGroup/USERS', + eventChoice: 'PutUsers', + }, + Enabled: true, + Transformations: [], + IsProcessorEnabled: true, + }, + libraries: [], + request: { query: {} }, + }, + ], + method: 'POST', + }, + pathSuffix: '', + }, + output: { + response: { + status: 200, + body: [ + { + metadata: { + sourceId: '1pe7ty3hMMQCnrfZ0Mn2QG48884', + destinationId: '1pe9WgFOuFHOSIfmUkkhVTD1Rsd', + jobId: 1, + destinationType: 'PERSONALIZE', + messageId: '4bb69e26-b5a6-446a-a140-dbb6263369c9', + messageIds: null, + rudderId: 'daf823fb-e8d3-413a-8313-d34cd756f968', + receivedAt: '2021-03-13T01:56:44.340+05:30', + }, + output: { + payload: { + datasetArn: + 'arn:aws:personalize:us-east-1:454531037350:dataset/putTest_DataSetGroup/USERS', + users: [ + { + userId: '123456', + properties: { typeOfMovie: 'art film', numberOfRatings: '13' }, + }, + ], + }, + choice: 'PutUsers', + userId: '', + }, + statusCode: 200, + }, + ], + }, + }, + }, + { + name: 'personalize', + description: 'Test 13', + feature: 'processor', + module: 'destination', + version: 'v0', + input: { + request: { + body: [ + { + message: { + anonymousId: 'anon-id-new', + context: { ip: '14.5.67.21', library: { name: 'http' } }, + event: 'PRODUCT ADDED', + messageId: '4bb69e26-b5a6-446a-a140-dbb6263369c9', + originalTimestamp: '2021-03-13T01:56:46.896+05:30', + properties: { + numberOfRatings: 'checking with webapp change', + typeOfMovie: 'Art Film', + eventValue: 7.06, + itemId: 1, + }, + receivedAt: '2021-03-13T01:56:44.340+05:30', + request_ip: '[::1]', + rudderId: 'daf823fb-e8d3-413a-8313-d34cd756f968', + sentAt: '2021-03-13T01:56:46.896+05:30', + timestamp: '2020-02-02T00:23:09.544Z', + type: 'track', + userId: 'identified user id', + }, + metadata: { + sourceId: '1pe7ty3hMMQCnrfZ0Mn2QG48884', + destinationId: '1pe9WgFOuFHOSIfmUkkhVTD1Rsd', + jobId: 1, + destinationType: 'PERSONALIZE', + messageId: '4bb69e26-b5a6-446a-a140-dbb6263369c9', + messageIds: null, + rudderId: 'daf823fb-e8d3-413a-8313-d34cd756f968', + receivedAt: '2021-03-13T01:56:44.340+05:30', + }, + destination: { + ID: '1pe9WgFOuFHOSIfmUkkhVTD1Rsd', + Name: 'personalize Dev Testing', + DestinationDefinition: { + ID: '1pdthjPnz8gQhSTE2QTbm2LUMGM', + Name: 'PERSONALIZE', + DisplayName: 'AWS Personalize', + Config: { + destConfig: { + defaultConfig: [ + 'accessKeyId', + 'secretAccessKey', + 'region', + 'trackingId', + 'eventName', + 'customMappings', + ], + }, + excludeKeys: [], + includeKeys: [], + saveDestinationResponse: true, + secretKeys: ['accessKeyId', 'secretAccessKey'], + supportedSourceTypes: [ + 'android', + 'ios', + 'web', + 'unity', + 'amp', + 'cloud', + 'reactnative', + ], + transformAt: 'processor', + }, + }, + Config: { + accessKeyId: 'ABC', + customMappings: [ + { from: 'TYPE_OF_MOVIE', to: 'typeOfMovie' }, + { from: 'NUMBER_OF_RATINGS', to: 'numberOfRatings' }, + { from: 'ITEM_ID', to: 'properties.itemId' }, + ], + region: 'us-east-1', + secretAccessKey: 'DEF', + trackingId: 'c60', + datasetARN: + 'arn:aws:personalize:us-east-1:454531037350:dataset/putTest_DataSetGroup/ITEMS', + eventChoice: 'PutItems', + }, + Enabled: true, + Transformations: [], + IsProcessorEnabled: true, + }, + libraries: [], + request: { query: {} }, + }, + ], + method: 'POST', + }, + pathSuffix: '', + }, + output: { + response: { + status: 200, + body: [ + { + metadata: { + sourceId: '1pe7ty3hMMQCnrfZ0Mn2QG48884', + destinationId: '1pe9WgFOuFHOSIfmUkkhVTD1Rsd', + jobId: 1, + destinationType: 'PERSONALIZE', + messageId: '4bb69e26-b5a6-446a-a140-dbb6263369c9', + messageIds: null, + rudderId: 'daf823fb-e8d3-413a-8313-d34cd756f968', + receivedAt: '2021-03-13T01:56:44.340+05:30', + }, + output: { + payload: { + datasetArn: + 'arn:aws:personalize:us-east-1:454531037350:dataset/putTest_DataSetGroup/ITEMS', + items: [ + { + properties: { + typeOfMovie: 'Art Film', + numberOfRatings: 'checking with webapp change', + }, + itemId: '1', + }, + ], + }, + choice: 'PutItems', + userId: '', + }, + statusCode: 200, + }, + ], + }, + }, + }, + { + name: 'personalize', + description: 'Test 14', + feature: 'processor', + module: 'destination', + version: 'v0', + input: { + request: { + body: [ + { + message: { + anonymousId: 'anon-id-new', + context: { ip: '14.5.67.21', library: { name: 'http' } }, + event: 'PRODUCT ADDED', + messageId: '4bb69e26-b5a6-446a-a140-dbb6263369c9', + originalTimestamp: '2021-03-13T01:56:46.896+05:30', + properties: { + numberOfRatings: 'checking with webapp change', + typeOfMovie: 'Art Film', + eventValue: 7.06, + itemId: 1, + }, + receivedAt: '2021-03-13T01:56:44.340+05:30', + request_ip: '[::1]', + rudderId: 'daf823fb-e8d3-413a-8313-d34cd756f968', + sentAt: '2021-03-13T01:56:46.896+05:30', + timestamp: '2020-02-02T00:23:09.544Z', + userId: 'identified user id', + }, + metadata: { + sourceId: '1pe7ty3hMMQCnrfZ0Mn2QG48884', + destinationId: '1pe9WgFOuFHOSIfmUkkhVTD1Rsd', + jobId: 1, + destinationType: 'PERSONALIZE', + messageId: '4bb69e26-b5a6-446a-a140-dbb6263369c9', + messageIds: null, + rudderId: 'daf823fb-e8d3-413a-8313-d34cd756f968', + receivedAt: '2021-03-13T01:56:44.340+05:30', + }, + destination: { + ID: '1pe9WgFOuFHOSIfmUkkhVTD1Rsd', + Name: 'personalize Dev Testing', + DestinationDefinition: { + ID: '1pdthjPnz8gQhSTE2QTbm2LUMGM', + Name: 'PERSONALIZE', + DisplayName: 'AWS Personalize', + Config: { + destConfig: { + defaultConfig: [ + 'accessKeyId', + 'secretAccessKey', + 'region', + 'trackingId', + 'eventName', + 'customMappings', + ], + }, + excludeKeys: [], + includeKeys: [], + saveDestinationResponse: true, + secretKeys: ['accessKeyId', 'secretAccessKey'], + supportedSourceTypes: [ + 'android', + 'ios', + 'web', + 'unity', + 'amp', + 'cloud', + 'reactnative', + ], + transformAt: 'processor', + }, + }, + Config: { + accessKeyId: 'ABC', + customMappings: [ + { from: 'TYPE_OF_MOVIE', to: 'typeOfMovie' }, + { from: 'NUMBER_OF_RATINGS', to: 'numberOfRatings' }, + { from: 'ITEM_ID', to: 'properties.itemId' }, + ], + region: 'us-east-1', + secretAccessKey: 'DEF', + trackingId: 'c60', + datasetARN: + 'arn:aws:personalize:us-east-1:454531037350:dataset/putTest_DataSetGroup/ITEMS', + eventChoice: 'PutItems', + }, + Enabled: true, + Transformations: [], + IsProcessorEnabled: true, + }, + libraries: [], + request: { query: {} }, + }, + ], + method: 'POST', + }, + pathSuffix: '', + }, + output: { + response: { + status: 200, + body: [ + { + error: 'Event type is required', + metadata: { + sourceId: '1pe7ty3hMMQCnrfZ0Mn2QG48884', + destinationId: '1pe9WgFOuFHOSIfmUkkhVTD1Rsd', + jobId: 1, + destinationType: 'PERSONALIZE', + messageId: '4bb69e26-b5a6-446a-a140-dbb6263369c9', + messageIds: null, + rudderId: 'daf823fb-e8d3-413a-8313-d34cd756f968', + receivedAt: '2021-03-13T01:56:44.340+05:30', + }, + statTags: { + destType: 'PERSONALIZE', + errorCategory: 'dataValidation', + destinationId: '1pe9WgFOuFHOSIfmUkkhVTD1Rsd', + errorType: 'instrumentation', + feature: 'processor', + implementation: 'native', + module: 'destination', + }, + statusCode: 400, + }, + ], + }, + }, + }, + { + name: 'personalize', + description: 'Test 15', + feature: 'processor', + module: 'destination', + version: 'v0', + input: { + request: { + body: [ + { + message: { + anonymousId: 'anon-id-new', + context: { ip: '14.5.67.21', library: { name: 'http' } }, + event: 'PRODUCT ADDED', + messageId: '4bb69e26-b5a6-446a-a140-dbb6263369c9', + originalTimestamp: '2021-03-13T01:56:46.896+05:30', + properties: { + numberOfRatings: 'checking with webapp change', + eventValue: 7.06, + itemId: 1, + }, + receivedAt: '2021-03-13T01:56:44.340+05:30', + request_ip: '[::1]', + rudderId: 'daf823fb-e8d3-413a-8313-d34cd756f968', + sentAt: '2021-03-13T01:56:46.896+05:30', + timestamp: '2020-02-02T00:23:09.544Z', + type: 'track', + userId: 'identified user id', + }, + metadata: { + sourceId: '1pe7ty3hMMQCnrfZ0Mn2QG48884', + destinationId: '1pe9WgFOuFHOSIfmUkkhVTD1Rsd', + jobId: 1, + destinationType: 'PERSONALIZE', + messageId: '4bb69e26-b5a6-446a-a140-dbb6263369c9', + messageIds: null, + rudderId: 'daf823fb-e8d3-413a-8313-d34cd756f968', + receivedAt: '2021-03-13T01:56:44.340+05:30', + }, + destination: { + ID: '1pe9WgFOuFHOSIfmUkkhVTD1Rsd', + Name: 'personalize Dev Testing', + DestinationDefinition: { + ID: '1pdthjPnz8gQhSTE2QTbm2LUMGM', + Name: 'PERSONALIZE', + DisplayName: 'AWS Personalize', + Config: { + destConfig: { + defaultConfig: [ + 'accessKeyId', + 'secretAccessKey', + 'region', + 'trackingId', + 'eventName', + 'customMappings', + ], + }, + excludeKeys: [], + includeKeys: [], + saveDestinationResponse: true, + secretKeys: ['accessKeyId', 'secretAccessKey'], + supportedSourceTypes: [ + 'android', + 'ios', + 'web', + 'unity', + 'amp', + 'cloud', + 'reactnative', + ], + transformAt: 'processor', + }, + }, + Config: { + accessKeyId: 'ABC', + customMappings: [ + { from: 'TYPE_OF_MOVIE', to: 'typeOfMovie' }, + { from: 'NUMBER_OF_RATINGS', to: 'numberOfRatings' }, + { from: 'ITEM_ID', to: 'properties.itemId' }, + ], + region: 'us-east-1', + secretAccessKey: 'DEF', + trackingId: 'c60', + datasetARN: + 'arn:aws:personalize:us-east-1:454531037350:dataset/putTest_DataSetGroup/ITEMS', + eventChoice: 'PutItems', + }, + Enabled: true, + Transformations: [], + IsProcessorEnabled: true, + }, + libraries: [], + request: { query: {} }, + }, + ], + method: 'POST', + }, + pathSuffix: '', + }, + output: { + response: { + status: 200, + body: [ + { + error: 'Mapped property typeOfMovie not found', + metadata: { + sourceId: '1pe7ty3hMMQCnrfZ0Mn2QG48884', + destinationId: '1pe9WgFOuFHOSIfmUkkhVTD1Rsd', + jobId: 1, + destinationType: 'PERSONALIZE', + messageId: '4bb69e26-b5a6-446a-a140-dbb6263369c9', + messageIds: null, + rudderId: 'daf823fb-e8d3-413a-8313-d34cd756f968', + receivedAt: '2021-03-13T01:56:44.340+05:30', + }, + statTags: { + destType: 'PERSONALIZE', + errorCategory: 'dataValidation', + destinationId: '1pe9WgFOuFHOSIfmUkkhVTD1Rsd', + errorType: 'instrumentation', + feature: 'processor', + implementation: 'native', + module: 'destination', + }, + statusCode: 400, + }, + ], + }, + }, + }, + { + name: 'personalize', + description: 'Test 16', + feature: 'processor', + module: 'destination', + version: 'v0', + input: { + request: { + body: [ + { + message: { + anonymousId: 'anon-id-new', + context: { ip: '14.5.67.21', library: { name: 'http' } }, + event: 'PRODUCT ADDED', + messageId: '4bb69e26-b5a6-446a-a140-dbb6263369c9', + originalTimestamp: '2021-03-13T01:56:46.896+05:30', + properties: { + numberOfRatings: 'checking with webapp change', + typeOfMovie: 'Art Film', + eventValue: 7.06, + itemId: 1, + }, + receivedAt: '2021-03-13T01:56:44.340+05:30', + request_ip: '[::1]', + rudderId: 'daf823fb-e8d3-413a-8313-d34cd756f968', + sentAt: '2021-03-13T01:56:46.896+05:30', + timestamp: '2020-02-02T00:23:09.544Z', + type: 'track', + userId: 'identified user id', + }, + metadata: { + sourceId: '1pe7ty3hMMQCnrfZ0Mn2QG48884', + destinationId: '1pe9WgFOuFHOSIfmUkkhVTD1Rsd', + jobId: 1, + destinationType: 'PERSONALIZE', + messageId: '4bb69e26-b5a6-446a-a140-dbb6263369c9', + messageIds: null, + rudderId: 'daf823fb-e8d3-413a-8313-d34cd756f968', + receivedAt: '2021-03-13T01:56:44.340+05:30', + }, + destination: { + ID: '1pe9WgFOuFHOSIfmUkkhVTD1Rsd', + Name: 'personalize Dev Testing', + DestinationDefinition: { + ID: '1pdthjPnz8gQhSTE2QTbm2LUMGM', + Name: 'PERSONALIZE', + DisplayName: 'AWS Personalize', + Config: { + destConfig: { + defaultConfig: [ + 'accessKeyId', + 'secretAccessKey', + 'region', + 'trackingId', + 'eventName', + 'customMappings', + ], + }, + excludeKeys: [], + includeKeys: [], + saveDestinationResponse: true, + secretKeys: ['accessKeyId', 'secretAccessKey'], + supportedSourceTypes: [ + 'android', + 'ios', + 'web', + 'unity', + 'amp', + 'cloud', + 'reactnative', + ], + transformAt: 'processor', + }, + }, + Config: { + accessKeyId: 'ABC', + customMappings: [ + { from: 'TYPE_OF_MOVIE', to: 'typeOfMovie' }, + { from: 'NUMBER_OF_RATINGS', to: 'numberOfRatings' }, + { from: 'ITEM_ID', to: 'properties.itemId' }, + ], + region: 'us-east-1', + secretAccessKey: 'DEF', + trackingId: 'c60', + datasetARN: + 'arn:aws:personalize:us-east-1:454531037350:dataset/putTest_DataSetGroup', + eventChoice: 'PutItems', + }, + Enabled: true, + Transformations: [], + IsProcessorEnabled: true, + }, + libraries: [], + request: { query: {} }, + }, + ], + method: 'POST', + }, + pathSuffix: '', + }, + output: { + response: { + status: 200, + body: [ + { + error: 'Either Dataset ARN is not correctly entered or invalid', + metadata: { + sourceId: '1pe7ty3hMMQCnrfZ0Mn2QG48884', + destinationId: '1pe9WgFOuFHOSIfmUkkhVTD1Rsd', + jobId: 1, + destinationType: 'PERSONALIZE', + messageId: '4bb69e26-b5a6-446a-a140-dbb6263369c9', + messageIds: null, + rudderId: 'daf823fb-e8d3-413a-8313-d34cd756f968', + receivedAt: '2021-03-13T01:56:44.340+05:30', + }, + statTags: { + destType: 'PERSONALIZE', + errorCategory: 'dataValidation', + destinationId: '1pe9WgFOuFHOSIfmUkkhVTD1Rsd', + errorType: 'configuration', + feature: 'processor', + implementation: 'native', + module: 'destination', + }, + statusCode: 400, + }, + ], + }, + }, + }, + { + name: 'personalize', + description: 'Test 17', + feature: 'processor', + module: 'destination', + version: 'v0', + input: { + request: { + body: [ + { + message: { + anonymousId: 'anon-id-new', + context: { ip: '14.5.67.21', library: { name: 'http' } }, + event: 'PRODUCT ADDED', + messageId: '4bb69e26-b5a6-446a-a140-dbb6263369c9', + originalTimestamp: '2021-03-13T01:56:46.896+05:30', + properties: { + numberOfRatings: 'checking with webapp change', + typeOfMovie: 'Art Film', + eventValue: 7.06, + itemId: 1, + }, + receivedAt: '2021-03-13T01:56:44.340+05:30', + request_ip: '[::1]', + rudderId: 'daf823fb-e8d3-413a-8313-d34cd756f968', + sentAt: '2021-03-13T01:56:46.896+05:30', + timestamp: '2020-02-02T00:23:09.544Z', + type: 'track', + userId: 'identified user id', + }, + metadata: { + sourceId: '1pe7ty3hMMQCnrfZ0Mn2QG48884', + destinationId: '1pe9WgFOuFHOSIfmUkkhVTD1Rsd', + jobId: 1, + destinationType: 'PERSONALIZE', + messageId: '4bb69e26-b5a6-446a-a140-dbb6263369c9', + messageIds: null, + rudderId: 'daf823fb-e8d3-413a-8313-d34cd756f968', + receivedAt: '2021-03-13T01:56:44.340+05:30', + }, + destination: { + ID: '1pe9WgFOuFHOSIfmUkkhVTD1Rsd', + Name: 'personalize Dev Testing', + DestinationDefinition: { + ID: '1pdthjPnz8gQhSTE2QTbm2LUMGM', + Name: 'PERSONALIZE', + DisplayName: 'AWS Personalize', + Config: { + destConfig: { + defaultConfig: [ + 'accessKeyId', + 'secretAccessKey', + 'region', + 'trackingId', + 'eventName', + 'customMappings', + ], + }, + excludeKeys: [], + includeKeys: [], + saveDestinationResponse: true, + secretKeys: ['accessKeyId', 'secretAccessKey'], + supportedSourceTypes: [ + 'android', + 'ios', + 'web', + 'unity', + 'amp', + 'cloud', + 'reactnative', + ], + transformAt: 'processor', + }, + }, + Config: { + accessKeyId: 'ABC', + customMappings: [ + { from: 'TYPE_OF_MOVIE', to: 'typeOfMovie' }, + { from: 'NUMBER_OF_RATINGS', to: 'numberOfRatings' }, + { from: 'ITEM_ID', to: 'properties.itemId' }, + ], + region: 'us-east-1', + secretAccessKey: 'DEF', + trackingId: 'c60', + datasetARN: '', + eventChoice: 'PutItems', + }, + Enabled: true, + Transformations: [], + IsProcessorEnabled: true, + }, + libraries: [], + request: { query: {} }, + }, + ], + method: 'POST', + }, + pathSuffix: '', + }, + output: { + response: { + status: 200, + body: [ + { + error: 'Dataset ARN is a mandatory information to use putItems', + metadata: { + sourceId: '1pe7ty3hMMQCnrfZ0Mn2QG48884', + destinationId: '1pe9WgFOuFHOSIfmUkkhVTD1Rsd', + jobId: 1, + destinationType: 'PERSONALIZE', + messageId: '4bb69e26-b5a6-446a-a140-dbb6263369c9', + messageIds: null, + rudderId: 'daf823fb-e8d3-413a-8313-d34cd756f968', + receivedAt: '2021-03-13T01:56:44.340+05:30', + }, + statTags: { + destType: 'PERSONALIZE', + errorCategory: 'dataValidation', + destinationId: '1pe9WgFOuFHOSIfmUkkhVTD1Rsd', + errorType: 'configuration', + feature: 'processor', + implementation: 'native', + module: 'destination', + }, + statusCode: 400, + }, + ], + }, + }, + }, + { + name: 'personalize', + description: 'Test 18', + feature: 'processor', + module: 'destination', + version: 'v0', + input: { + request: { + body: [ + { + message: { + anonymousId: 'anon-id-new', + context: { ip: '14.5.67.21', library: { name: 'http' } }, + event: 'PRODUCT ADDED', + messageId: '4bb69e26-b5a6-446a-a140-dbb6263369c9', + originalTimestamp: '2021-03-13T01:56:46.896+05:30', + properties: { + numberOfRatings: 'checking with webapp change', + typeOfMovie: 'Art Film', + eventValue: 7.06, + itemId: 1, + }, + receivedAt: '2021-03-13T01:56:44.340+05:30', + request_ip: '[::1]', + rudderId: 'daf823fb-e8d3-413a-8313-d34cd756f968', + sentAt: '2021-03-13T01:56:46.896+05:30', + timestamp: '2020-02-02T00:23:09.544Z', + type: 'track', + userId: 'identified user id', + }, + metadata: { + sourceId: '1pe7ty3hMMQCnrfZ0Mn2QG48884', + destinationId: '1pe9WgFOuFHOSIfmUkkhVTD1Rsd', + jobId: 1, + destinationType: 'PERSONALIZE', + messageId: '4bb69e26-b5a6-446a-a140-dbb6263369c9', + messageIds: null, + rudderId: 'daf823fb-e8d3-413a-8313-d34cd756f968', + receivedAt: '2021-03-13T01:56:44.340+05:30', + }, + destination: { + ID: '1pe9WgFOuFHOSIfmUkkhVTD1Rsd', + Name: 'personalize Dev Testing', + DestinationDefinition: { + ID: '1pdthjPnz8gQhSTE2QTbm2LUMGM', + Name: 'PERSONALIZE', + DisplayName: 'AWS Personalize', + Config: { + destConfig: { + defaultConfig: [ + 'accessKeyId', + 'secretAccessKey', + 'region', + 'trackingId', + 'eventName', + 'customMappings', + ], + }, + excludeKeys: [], + includeKeys: [], + saveDestinationResponse: true, + secretKeys: ['accessKeyId', 'secretAccessKey'], + supportedSourceTypes: [ + 'android', + 'ios', + 'web', + 'unity', + 'amp', + 'cloud', + 'reactnative', + ], + transformAt: 'processor', + }, + }, + Config: { + accessKeyId: 'ABC', + customMappings: [ + { from: 'TYPE_OF_MOVIE', to: 'typeOfMovie' }, + { from: 'NUMBER_OF_RATINGS', to: 'numberOfRatings' }, + { from: 'ITEM_ID', to: 'properties.itemId' }, + ], + region: 'us-east-1', + secretAccessKey: 'DEF', + trackingId: 'c60', + datasetARN: '', + eventChoice: 'PutUsers', + }, + Enabled: true, + Transformations: [], + IsProcessorEnabled: true, + }, + libraries: [], + request: { query: {} }, + }, + ], + method: 'POST', + }, + pathSuffix: '', + }, + output: { + response: { + status: 200, + body: [ + { + error: 'PutUsers is not supported for Track Calls', + metadata: { + sourceId: '1pe7ty3hMMQCnrfZ0Mn2QG48884', + destinationId: '1pe9WgFOuFHOSIfmUkkhVTD1Rsd', + jobId: 1, + destinationType: 'PERSONALIZE', + messageId: '4bb69e26-b5a6-446a-a140-dbb6263369c9', + messageIds: null, + rudderId: 'daf823fb-e8d3-413a-8313-d34cd756f968', + receivedAt: '2021-03-13T01:56:44.340+05:30', + }, + statTags: { + destType: 'PERSONALIZE', + errorCategory: 'dataValidation', + destinationId: '1pe9WgFOuFHOSIfmUkkhVTD1Rsd', + errorType: 'configuration', + feature: 'processor', + implementation: 'native', + module: 'destination', + }, + statusCode: 400, + }, + ], + }, + }, + }, + { + name: 'personalize', + description: 'Test 19', + feature: 'processor', + module: 'destination', + version: 'v0', + input: { + request: { + body: [ + { + message: { + anonymousId: 'anon-id-new', + context: { ip: '14.5.67.21', library: { name: 'http' } }, + event: 'PRODUCT ADDED', + messageId: '4bb69e26-b5a6-446a-a140-dbb6263369c9', + originalTimestamp: '2021-03-13T01:56:46.896+05:30', + properties: { + numberOfRatings: 'checking with webapp change', + typeOfMovie: 'Art Film', + eventValue: 7.06, + itemId: 1, + }, + receivedAt: '2021-03-13T01:56:44.340+05:30', + request_ip: '[::1]', + rudderId: 'daf823fb-e8d3-413a-8313-d34cd756f968', + sentAt: '2021-03-13T01:56:46.896+05:30', + timestamp: '2020-02-02T00:23:09.544Z', + type: 'track', + userId: 'identified user id', + }, + metadata: { + sourceId: '1pe7ty3hMMQCnrfZ0Mn2QG48884', + destinationId: '1pe9WgFOuFHOSIfmUkkhVTD1Rsd', + jobId: 1, + destinationType: 'PERSONALIZE', + messageId: '4bb69e26-b5a6-446a-a140-dbb6263369c9', + messageIds: null, + rudderId: 'daf823fb-e8d3-413a-8313-d34cd756f968', + receivedAt: '2021-03-13T01:56:44.340+05:30', + }, + destination: { + ID: '1pe9WgFOuFHOSIfmUkkhVTD1Rsd', + Name: 'personalize Dev Testing', + DestinationDefinition: { + ID: '1pdthjPnz8gQhSTE2QTbm2LUMGM', + Name: 'PERSONALIZE', + DisplayName: 'AWS Personalize', + Config: { + destConfig: { + defaultConfig: [ + 'accessKeyId', + 'secretAccessKey', + 'region', + 'trackingId', + 'eventName', + 'customMappings', + ], + }, + excludeKeys: [], + includeKeys: [], + saveDestinationResponse: true, + secretKeys: ['accessKeyId', 'secretAccessKey'], + supportedSourceTypes: [ + 'android', + 'ios', + 'web', + 'unity', + 'amp', + 'cloud', + 'reactnative', + ], + transformAt: 'processor', + }, + }, + Config: { + accessKeyId: 'ABC', + customMappings: [ + { from: 'TYPE_OF_MOVIE', to: 'typeOfMovie' }, + { from: 'NUMBER_OF_RATINGS', to: 'numberOfRatings' }, + { from: 'ITEM_ID', to: 'properties.itemId' }, + ], + region: 'us-east-1', + secretAccessKey: 'DEF', + trackingId: '', + datasetARN: + 'arn:aws:personalize:us-east-1:454531037350:dataset/putTest_DataSetGroup/ITEMS', + eventChoice: 'PutEvents', + }, + Enabled: true, + Transformations: [], + IsProcessorEnabled: true, + }, + libraries: [], + request: { query: {} }, + }, + ], + method: 'POST', + }, + pathSuffix: '', + }, + output: { + response: { + status: 200, + body: [ + { + error: 'Tracking Id is a mandatory information to use putEvents', + metadata: { + sourceId: '1pe7ty3hMMQCnrfZ0Mn2QG48884', + destinationId: '1pe9WgFOuFHOSIfmUkkhVTD1Rsd', + jobId: 1, + destinationType: 'PERSONALIZE', + messageId: '4bb69e26-b5a6-446a-a140-dbb6263369c9', + messageIds: null, + rudderId: 'daf823fb-e8d3-413a-8313-d34cd756f968', + receivedAt: '2021-03-13T01:56:44.340+05:30', + }, + statTags: { + destType: 'PERSONALIZE', + errorCategory: 'dataValidation', + destinationId: '1pe9WgFOuFHOSIfmUkkhVTD1Rsd', + errorType: 'configuration', + feature: 'processor', + implementation: 'native', + module: 'destination', + }, + statusCode: 400, + }, + ], + }, + }, + }, + { + name: 'personalize', + description: 'Test 20', + feature: 'processor', + module: 'destination', + version: 'v0', + input: { + request: { + body: [ + { + message: { + anonymousId: 'anon-id-new', + context: { ip: '14.5.67.21', library: { name: 'http' } }, + event: 'PRODUCT ADDED', + messageId: '4bb69e26-b5a6-446a-a140-dbb6263369c9', + originalTimestamp: '2021-03-13T01:56:46.896+05:30', + properties: { + numberOfRatings: 'checking with webapp change', + typeOfMovie: 'Art Film', + eventValue: 7.06, + itemId: '', + }, + receivedAt: '2021-03-13T01:56:44.340+05:30', + request_ip: '[::1]', + rudderId: 'daf823fb-e8d3-413a-8313-d34cd756f968', + sentAt: '2021-03-13T01:56:46.896+05:30', + timestamp: '2020-02-02T00:23:09.544Z', + type: 'track', + userId: 'identified user id', + }, + metadata: { + sourceId: '1pe7ty3hMMQCnrfZ0Mn2QG48884', + destinationId: '1pe9WgFOuFHOSIfmUkkhVTD1Rsd', + jobId: 1, + destinationType: 'PERSONALIZE', + messageId: '4bb69e26-b5a6-446a-a140-dbb6263369c9', + messageIds: null, + rudderId: 'daf823fb-e8d3-413a-8313-d34cd756f968', + receivedAt: '2021-03-13T01:56:44.340+05:30', + }, + destination: { + ID: '1pe9WgFOuFHOSIfmUkkhVTD1Rsd', + Name: 'personalize Dev Testing', + DestinationDefinition: { + ID: '1pdthjPnz8gQhSTE2QTbm2LUMGM', + Name: 'PERSONALIZE', + DisplayName: 'AWS Personalize', + Config: { + destConfig: { + defaultConfig: [ + 'accessKeyId', + 'secretAccessKey', + 'region', + 'trackingId', + 'eventName', + 'customMappings', + ], + }, + excludeKeys: [], + includeKeys: [], + saveDestinationResponse: true, + secretKeys: ['accessKeyId', 'secretAccessKey'], + supportedSourceTypes: [ + 'android', + 'ios', + 'web', + 'unity', + 'amp', + 'cloud', + 'reactnative', + ], + transformAt: 'processor', + }, + }, + Config: { + accessKeyId: 'ABC', + customMappings: [ + { from: 'TYPE_OF_MOVIE', to: 'typeOfMovie' }, + { from: 'NUMBER_OF_RATINGS', to: 'numberOfRatings' }, + { from: 'ITEM_ID', to: 'properties.itemId' }, + ], + region: 'us-east-1', + secretAccessKey: 'DEF', + trackingId: 'c60', + datasetARN: + 'arn:aws:personalize:us-east-1:454531037350:dataset/putTest_DataSetGroup/ITEMS', + eventChoice: 'PutItems', + }, + Enabled: true, + Transformations: [], + IsProcessorEnabled: true, + }, + libraries: [], + request: { query: {} }, + }, + ], + method: 'POST', + }, + pathSuffix: '', + }, + output: { + response: { + status: 200, + body: [ + { + error: 'itemId is a mandatory property for using PutItems', + metadata: { + sourceId: '1pe7ty3hMMQCnrfZ0Mn2QG48884', + destinationId: '1pe9WgFOuFHOSIfmUkkhVTD1Rsd', + jobId: 1, + destinationType: 'PERSONALIZE', + messageId: '4bb69e26-b5a6-446a-a140-dbb6263369c9', + messageIds: null, + rudderId: 'daf823fb-e8d3-413a-8313-d34cd756f968', + receivedAt: '2021-03-13T01:56:44.340+05:30', + }, + statTags: { + destType: 'PERSONALIZE', + errorCategory: 'dataValidation', + destinationId: '1pe9WgFOuFHOSIfmUkkhVTD1Rsd', + errorType: 'instrumentation', + feature: 'processor', + implementation: 'native', + module: 'destination', + }, + statusCode: 400, + }, + ], + }, + }, + }, + { + name: 'personalize', + description: 'Test 21', + feature: 'processor', + module: 'destination', + version: 'v0', + input: { + request: { + body: [ + { + message: { + anonymousId: 'anon-id-new', + context: { ip: '14.5.67.21', library: { name: 'http' } }, + event: '', + messageId: '4bb69e26-b5a6-446a-a140-dbb6263369c9', + originalTimestamp: '2021-03-13T01:56:46.896+05:30', + properties: { + numberOfRatings: 'checking with webapp change', + typeOfMovie: 'Art Film', + eventValue: 7.06, + itemId: '', + }, + receivedAt: '2021-03-13T01:56:44.340+05:30', + request_ip: '[::1]', + rudderId: 'daf823fb-e8d3-413a-8313-d34cd756f968', + sentAt: '2021-03-13T01:56:46.896+05:30', + timestamp: '2020-02-02T00:23:09.544Z', + type: 'track', + userId: 'identified user id', + }, + metadata: { + sourceId: '1pe7ty3hMMQCnrfZ0Mn2QG48884', + destinationId: '1pe9WgFOuFHOSIfmUkkhVTD1Rsd', + jobId: 1, + destinationType: 'PERSONALIZE', + messageId: '4bb69e26-b5a6-446a-a140-dbb6263369c9', + messageIds: null, + rudderId: 'daf823fb-e8d3-413a-8313-d34cd756f968', + receivedAt: '2021-03-13T01:56:44.340+05:30', + }, + destination: { + ID: '1pe9WgFOuFHOSIfmUkkhVTD1Rsd', + Name: 'personalize Dev Testing', + DestinationDefinition: { + ID: '1pdthjPnz8gQhSTE2QTbm2LUMGM', + Name: 'PERSONALIZE', + DisplayName: 'AWS Personalize', + Config: { + destConfig: { + defaultConfig: [ + 'accessKeyId', + 'secretAccessKey', + 'region', + 'trackingId', + 'eventName', + 'customMappings', + ], + }, + excludeKeys: [], + includeKeys: [], + saveDestinationResponse: true, + secretKeys: ['accessKeyId', 'secretAccessKey'], + supportedSourceTypes: [ + 'android', + 'ios', + 'web', + 'unity', + 'amp', + 'cloud', + 'reactnative', + ], + transformAt: 'processor', + }, + }, + Config: { + accessKeyId: 'ABC', + customMappings: [ + { from: 'TYPE_OF_MOVIE', to: 'typeOfMovie' }, + { from: 'NUMBER_OF_RATINGS', to: 'numberOfRatings' }, + { from: 'ITEM_ID', to: 'properties.itemId' }, + ], + region: 'us-east-1', + secretAccessKey: 'DEF', + trackingId: 'c60', + datasetARN: + 'arn:aws:personalize:us-east-1:454531037350:dataset/putTest_DataSetGroup/ITEMS', + eventChoice: 'PutEvents', + }, + Enabled: true, + Transformations: [], + IsProcessorEnabled: true, + }, + libraries: [], + request: { query: {} }, + }, + ], + method: 'POST', + }, + pathSuffix: '', + }, + output: { + response: { + status: 200, + body: [ + { + error: 'Cannot process if no event name specified', + metadata: { + sourceId: '1pe7ty3hMMQCnrfZ0Mn2QG48884', + destinationId: '1pe9WgFOuFHOSIfmUkkhVTD1Rsd', + jobId: 1, + destinationType: 'PERSONALIZE', + messageId: '4bb69e26-b5a6-446a-a140-dbb6263369c9', + messageIds: null, + rudderId: 'daf823fb-e8d3-413a-8313-d34cd756f968', + receivedAt: '2021-03-13T01:56:44.340+05:30', + }, + statTags: { + destType: 'PERSONALIZE', + errorCategory: 'dataValidation', + destinationId: '1pe9WgFOuFHOSIfmUkkhVTD1Rsd', + errorType: 'instrumentation', + feature: 'processor', + implementation: 'native', + module: 'destination', + }, + statusCode: 400, + }, + ], + }, + }, + }, + { + name: 'personalize', + description: 'Test 22', + feature: 'processor', + module: 'destination', + version: 'v0', + input: { + request: { + body: [ + { + message: { + channel: 'web', + context: { + app: { + build: '1.0.0', + name: 'RudderLabs JavaScript SDK', + namespace: 'com.rudderlabs.javascript', + version: '1.0.0', + }, + library: { name: 'RudderLabs JavaScript SDK', version: '1.0.0' }, + userAgent: + 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.90 Safari/537.36', + locale: 'en-US', + ip: '0.0.0.0', + os: { name: '', version: '' }, + screen: { density: 2 }, + }, + messageId: '84e26acc-56a5-4835-8233-591137fca468', + session_id: '3049dc4c-5a95-4ccd-a3e7-d74a7e411f22', + originalTimestamp: '2019-10-14T09:03:17.562Z', + anonymousId: 'anon_id', + userId: '123456', + type: 'identify', + traits: { + anonymousId: 'anon_id', + typeOfMovie: 'art film', + numberOfRatings: 'DDLJ', + lastName: 'Doe', + phone: '92374162212', + }, + integrations: { All: true }, + sentAt: '2019-10-14T09:03:22.563Z', + }, + metadata: { + sourceId: '1pe7ty3hMMQCnrfZ0Mn2QG48884', + destinationId: '1pe9WgFOuFHOSIfmUkkhVTD1Rsd', + jobId: 1, + destinationType: 'PERSONALIZE', + messageId: '4bb69e26-b5a6-446a-a140-dbb6263369c9', + messageIds: null, + rudderId: 'daf823fb-e8d3-413a-8313-d34cd756f968', + receivedAt: '2021-03-13T01:56:44.340+05:30', + }, + destination: { + ID: '1pe9WgFOuFHOSIfmUkkhVTD1Rsd', + Name: 'personalize Dev Testing', + DestinationDefinition: { + ID: '1pdthjPnz8gQhSTE2QTbm2LUMGM', + Name: 'PERSONALIZE', + DisplayName: 'AWS Personalize', + Config: { + destConfig: { + defaultConfig: [ + 'accessKeyId', + 'secretAccessKey', + 'region', + 'trackingId', + 'eventName', + 'customMappings', + ], + }, + excludeKeys: [], + includeKeys: [], + saveDestinationResponse: true, + secretKeys: ['accessKeyId', 'secretAccessKey'], + supportedSourceTypes: [ + 'android', + 'ios', + 'web', + 'unity', + 'amp', + 'cloud', + 'reactnative', + ], + transformAt: 'processor', + }, + }, + Config: { + accessKeyId: 'ABC', + customMappings: [ + { from: 'TYPE_OF_MOVIE', to: 'typeOfMovie' }, + { from: 'NUMBER_OF_RATINGS', to: 'numberOfRatings' }, + ], + region: 'us-east-1', + secretAccessKey: 'DEF', + trackingId: '', + datasetARN: + 'arn:aws:personalize:us-east-1:454531037350:dataset/putTest_DataSetGroup/USERS', + eventChoice: 'PutItems', + }, + Enabled: true, + Transformations: [], + IsProcessorEnabled: true, + }, + libraries: [], + request: { query: {} }, + }, + ], + method: 'POST', + }, + pathSuffix: '', + }, + output: { + response: { + status: 200, + body: [ + { + error: 'This Message Type does not support PutItems. Aborting message', + metadata: { + sourceId: '1pe7ty3hMMQCnrfZ0Mn2QG48884', + destinationId: '1pe9WgFOuFHOSIfmUkkhVTD1Rsd', + jobId: 1, + destinationType: 'PERSONALIZE', + messageId: '4bb69e26-b5a6-446a-a140-dbb6263369c9', + messageIds: null, + rudderId: 'daf823fb-e8d3-413a-8313-d34cd756f968', + receivedAt: '2021-03-13T01:56:44.340+05:30', + }, + statTags: { + destType: 'PERSONALIZE', + destinationId: '1pe9WgFOuFHOSIfmUkkhVTD1Rsd', + errorCategory: 'dataValidation', + errorType: 'configuration', + feature: 'processor', + implementation: 'native', + module: 'destination', + }, + statusCode: 400, + }, + ], + }, + }, + }, + { + name: 'personalize', + description: 'Test 23', + feature: 'processor', + module: 'destination', + version: 'v0', + input: { + request: { + body: [ + { + message: { + channel: 'web', + context: { + app: { + build: '1.0.0', + name: 'RudderLabs JavaScript SDK', + namespace: 'com.rudderlabs.javascript', + version: '1.0.0', + }, + library: { name: 'RudderLabs JavaScript SDK', version: '1.0.0' }, + userAgent: + 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.90 Safari/537.36', + locale: 'en-US', + ip: '0.0.0.0', + os: { name: '', version: '' }, + screen: { density: 2 }, + }, + messageId: '84e26acc-56a5-4835-8233-591137fca468', + session_id: '3049dc4c-5a95-4ccd-a3e7-d74a7e411f22', + originalTimestamp: '2019-10-14T09:03:17.562Z', + anonymousId: 'anon_id', + userId: '123456', + type: 'identify', + traits: { + anonymousId: 'anon_id', + typeOfMovie: 'art film', + numberOfRatings: 'DDLJ', + lastName: 'Doe', + phone: '92374162212', + }, + integrations: { All: true }, + sentAt: '2019-10-14T09:03:22.563Z', + }, + metadata: { + sourceId: '1pe7ty3hMMQCnrfZ0Mn2QG48884', + destinationId: '1pe9WgFOuFHOSIfmUkkhVTD1Rsd', + jobId: 1, + destinationType: 'PERSONALIZE', + messageId: '4bb69e26-b5a6-446a-a140-dbb6263369c9', + messageIds: null, + rudderId: 'daf823fb-e8d3-413a-8313-d34cd756f968', + receivedAt: '2021-03-13T01:56:44.340+05:30', + }, + destination: { + ID: '1pe9WgFOuFHOSIfmUkkhVTD1Rsd', + Name: 'personalize Dev Testing', + DestinationDefinition: { + ID: '1pdthjPnz8gQhSTE2QTbm2LUMGM', + Name: 'PERSONALIZE', + DisplayName: 'AWS Personalize', + Config: { + destConfig: { + defaultConfig: [ + 'accessKeyId', + 'secretAccessKey', + 'region', + 'trackingId', + 'eventName', + 'customMappings', + ], + }, + excludeKeys: [], + includeKeys: [], + saveDestinationResponse: true, + secretKeys: ['accessKeyId', 'secretAccessKey'], + supportedSourceTypes: [ + 'android', + 'ios', + 'web', + 'unity', + 'amp', + 'cloud', + 'reactnative', + ], + transformAt: 'processor', + }, + }, + Config: { + accessKeyId: 'ABC', + customMappings: [ + { from: 'TYPE_OF_MOVIE', to: 'typeOfMovie' }, + { from: 'NUMBER_OF_RATINGS', to: 'numberOfRatings' }, + ], + region: 'us-east-1', + secretAccessKey: 'DEF', + trackingId: '', + datasetARN: '', + eventChoice: 'PutUsers', + }, + Enabled: true, + Transformations: [], + IsProcessorEnabled: true, + }, + libraries: [], + request: { query: {} }, + }, + ], + method: 'POST', + }, + pathSuffix: '', + }, + output: { + response: { + status: 200, + body: [ + { + error: 'Dataset ARN is a mandatory information to use putUsers', + metadata: { + sourceId: '1pe7ty3hMMQCnrfZ0Mn2QG48884', + destinationId: '1pe9WgFOuFHOSIfmUkkhVTD1Rsd', + jobId: 1, + destinationType: 'PERSONALIZE', + messageId: '4bb69e26-b5a6-446a-a140-dbb6263369c9', + messageIds: null, + rudderId: 'daf823fb-e8d3-413a-8313-d34cd756f968', + receivedAt: '2021-03-13T01:56:44.340+05:30', + }, + statTags: { + destType: 'PERSONALIZE', + errorCategory: 'dataValidation', + destinationId: '1pe9WgFOuFHOSIfmUkkhVTD1Rsd', + errorType: 'configuration', + feature: 'processor', + implementation: 'native', + module: 'destination', + }, + statusCode: 400, + }, + ], + }, + }, + }, + { + name: 'personalize', + description: 'Test 24', + feature: 'processor', + module: 'destination', + version: 'v0', + input: { + request: { + body: [ + { + message: { + channel: 'web', + context: { + app: { + build: '1.0.0', + name: 'RudderLabs JavaScript SDK', + namespace: 'com.rudderlabs.javascript', + version: '1.0.0', + }, + library: { name: 'RudderLabs JavaScript SDK', version: '1.0.0' }, + userAgent: + 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.90 Safari/537.36', + locale: 'en-US', + ip: '0.0.0.0', + os: { name: '', version: '' }, + screen: { density: 2 }, + }, + messageId: '84e26acc-56a5-4835-8233-591137fca468', + session_id: '3049dc4c-5a95-4ccd-a3e7-d74a7e411f22', + originalTimestamp: '2019-10-14T09:03:17.562Z', + anonymousId: 'anon_id', + userId: '123456', + type: 'identify', + traits: { + anonymousId: 'anon_id', + typeOfMovie: 'art film', + numberOfRatings: 'DDLJ', + lastName: 'Doe', + phone: '92374162212', + }, + integrations: { All: true }, + sentAt: '2019-10-14T09:03:22.563Z', + }, + metadata: { + sourceId: '1pe7ty3hMMQCnrfZ0Mn2QG48884', + destinationId: '1pe9WgFOuFHOSIfmUkkhVTD1Rsd', + jobId: 1, + destinationType: 'PERSONALIZE', + messageId: '4bb69e26-b5a6-446a-a140-dbb6263369c9', + messageIds: null, + rudderId: 'daf823fb-e8d3-413a-8313-d34cd756f968', + receivedAt: '2021-03-13T01:56:44.340+05:30', + }, + destination: { + ID: '1pe9WgFOuFHOSIfmUkkhVTD1Rsd', + Name: 'personalize Dev Testing', + DestinationDefinition: { + ID: '1pdthjPnz8gQhSTE2QTbm2LUMGM', + Name: 'PERSONALIZE', + DisplayName: 'AWS Personalize', + Config: { + destConfig: { + defaultConfig: [ + 'accessKeyId', + 'secretAccessKey', + 'region', + 'trackingId', + 'eventName', + 'customMappings', + ], + }, + excludeKeys: [], + includeKeys: [], + saveDestinationResponse: true, + secretKeys: ['accessKeyId', 'secretAccessKey'], + supportedSourceTypes: [ + 'android', + 'ios', + 'web', + 'unity', + 'amp', + 'cloud', + 'reactnative', + ], + transformAt: 'processor', + }, + }, + Config: { + accessKeyId: 'ABC', + customMappings: [ + { from: 'TYPE_OF_MOVIE', to: 'typeOfMovie' }, + { from: 'NUMBER_OF_RATINGS', to: 'numberOfRatings' }, + ], + region: 'us-east-1', + secretAccessKey: 'DEF', + trackingId: '', + datasetARN: + 'arn:aws:personalize:us-east-1:454531037350:dataset/putTest_DataSetGroup', + eventChoice: 'PutUsers', + }, + Enabled: true, + Transformations: [], + IsProcessorEnabled: true, + }, + libraries: [], + request: { query: {} }, + }, + ], + method: 'POST', + }, + pathSuffix: '', + }, + output: { + response: { + status: 200, + body: [ + { + error: 'Either Dataset ARN is not correctly entered or invalid', + metadata: { + sourceId: '1pe7ty3hMMQCnrfZ0Mn2QG48884', + destinationId: '1pe9WgFOuFHOSIfmUkkhVTD1Rsd', + jobId: 1, + destinationType: 'PERSONALIZE', + messageId: '4bb69e26-b5a6-446a-a140-dbb6263369c9', + messageIds: null, + rudderId: 'daf823fb-e8d3-413a-8313-d34cd756f968', + receivedAt: '2021-03-13T01:56:44.340+05:30', + }, + statTags: { + destType: 'PERSONALIZE', + errorCategory: 'dataValidation', + destinationId: '1pe9WgFOuFHOSIfmUkkhVTD1Rsd', + errorType: 'configuration', + feature: 'processor', + implementation: 'native', + module: 'destination', + }, + statusCode: 400, + }, + ], + }, + }, + }, + { + name: 'personalize', + description: 'Test 25', + feature: 'processor', + module: 'destination', + version: 'v0', + input: { + request: { + body: [ + { + message: { + channel: 'web', + context: { + app: { + build: '1.0.0', + name: 'RudderLabs JavaScript SDK', + namespace: 'com.rudderlabs.javascript', + version: '1.0.0', + }, + library: { name: 'RudderLabs JavaScript SDK', version: '1.0.0' }, + userAgent: + 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.90 Safari/537.36', + locale: 'en-US', + ip: '0.0.0.0', + os: { name: '', version: '' }, + screen: { density: 2 }, + }, + messageId: '84e26acc-56a5-4835-8233-591137fca468', + session_id: '3049dc4c-5a95-4ccd-a3e7-d74a7e411f22', + originalTimestamp: '2019-10-14T09:03:17.562Z', + anonymousId: 'anon_id', + userId: '123456', + type: 'identify', + traits: { + anonymousId: 'anon_id', + typeOfMovie: 'art film', + lastName: 'Doe', + phone: '92374162212', + }, + integrations: { All: true }, + sentAt: '2019-10-14T09:03:22.563Z', + }, + metadata: { + sourceId: '1pe7ty3hMMQCnrfZ0Mn2QG48884', + destinationId: '1pe9WgFOuFHOSIfmUkkhVTD1Rsd', + jobId: 1, + destinationType: 'PERSONALIZE', + messageId: '4bb69e26-b5a6-446a-a140-dbb6263369c9', + messageIds: null, + rudderId: 'daf823fb-e8d3-413a-8313-d34cd756f968', + receivedAt: '2021-03-13T01:56:44.340+05:30', + }, + destination: { + ID: '1pe9WgFOuFHOSIfmUkkhVTD1Rsd', + Name: 'personalize Dev Testing', + DestinationDefinition: { + ID: '1pdthjPnz8gQhSTE2QTbm2LUMGM', + Name: 'PERSONALIZE', + DisplayName: 'AWS Personalize', + Config: { + destConfig: { + defaultConfig: [ + 'accessKeyId', + 'secretAccessKey', + 'region', + 'trackingId', + 'eventName', + 'customMappings', + ], + }, + excludeKeys: [], + includeKeys: [], + saveDestinationResponse: true, + secretKeys: ['accessKeyId', 'secretAccessKey'], + supportedSourceTypes: [ + 'android', + 'ios', + 'web', + 'unity', + 'amp', + 'cloud', + 'reactnative', + ], + transformAt: 'processor', + }, + }, + Config: { + accessKeyId: 'ABC', + customMappings: [ + { from: 'TYPE_OF_MOVIE', to: 'typeOfMovie' }, + { from: 'NUMBER_OF_RATINGS', to: 'numberOfRatings' }, + ], + region: 'us-east-1', + secretAccessKey: 'DEF', + trackingId: '', + datasetARN: + 'arn:aws:personalize:us-east-1:454531037350:dataset/putTest_DataSetGroup/USERS', + eventChoice: 'PutUsers', + }, + Enabled: true, + Transformations: [], + IsProcessorEnabled: true, + }, + libraries: [], + request: { query: {} }, + }, + ], + method: 'POST', + }, + pathSuffix: '', + }, + output: { + response: { + status: 200, + body: [ + { + error: 'Mapped property numberOfRatings not found', + metadata: { + sourceId: '1pe7ty3hMMQCnrfZ0Mn2QG48884', + destinationId: '1pe9WgFOuFHOSIfmUkkhVTD1Rsd', + jobId: 1, + destinationType: 'PERSONALIZE', + messageId: '4bb69e26-b5a6-446a-a140-dbb6263369c9', + messageIds: null, + rudderId: 'daf823fb-e8d3-413a-8313-d34cd756f968', + receivedAt: '2021-03-13T01:56:44.340+05:30', + }, + statTags: { + destType: 'PERSONALIZE', + errorCategory: 'dataValidation', + destinationId: '1pe9WgFOuFHOSIfmUkkhVTD1Rsd', + errorType: 'instrumentation', + feature: 'processor', + implementation: 'native', + module: 'destination', + }, + statusCode: 400, + }, + ], + }, + }, + }, + { + name: 'personalize', + description: 'Test 26', + feature: 'processor', + module: 'destination', + version: 'v0', + input: { + request: { + body: [ + { + message: { + anonymousId: 'anon-id-new', + context: { ip: '14.5.67.21', library: { name: 'http' } }, + event: '', + messageId: '4bb69e26-b5a6-446a-a140-dbb6263369c9', + originalTimestamp: '2021-03-13T01:56:46.896+05:30', + properties: { + numberOfRatings: 'checking with webapp change', + typeOfMovie: 'Art Film', + eventValue: 7.06, + itemId: '', + }, + receivedAt: '2021-03-13T01:56:44.340+05:30', + request_ip: '[::1]', + rudderId: 'daf823fb-e8d3-413a-8313-d34cd756f968', + sentAt: '2021-03-13T01:56:46.896+05:30', + timestamp: '2020-02-02T00:23:09.544Z', + type: 'screen', + userId: 'identified user id', + }, + metadata: { + sourceId: '1pe7ty3hMMQCnrfZ0Mn2QG48884', + destinationId: '1pe9WgFOuFHOSIfmUkkhVTD1Rsd', + jobId: 1, + destinationType: 'PERSONALIZE', + messageId: '4bb69e26-b5a6-446a-a140-dbb6263369c9', + messageIds: null, + rudderId: 'daf823fb-e8d3-413a-8313-d34cd756f968', + receivedAt: '2021-03-13T01:56:44.340+05:30', + }, + destination: { + ID: '1pe9WgFOuFHOSIfmUkkhVTD1Rsd', + Name: 'personalize Dev Testing', + DestinationDefinition: { + ID: '1pdthjPnz8gQhSTE2QTbm2LUMGM', + Name: 'PERSONALIZE', + DisplayName: 'AWS Personalize', + Config: { + destConfig: { + defaultConfig: [ + 'accessKeyId', + 'secretAccessKey', + 'region', + 'trackingId', + 'eventName', + 'customMappings', + ], + }, + excludeKeys: [], + includeKeys: [], + saveDestinationResponse: true, + secretKeys: ['accessKeyId', 'secretAccessKey'], + supportedSourceTypes: [ + 'android', + 'ios', + 'web', + 'unity', + 'amp', + 'cloud', + 'reactnative', + ], + transformAt: 'processor', + }, + }, + Config: { + accessKeyId: 'ABC', + customMappings: [ + { from: 'TYPE_OF_MOVIE', to: 'typeOfMovie' }, + { from: 'NUMBER_OF_RATINGS', to: 'numberOfRatings' }, + { from: 'ITEM_ID', to: 'properties.itemId' }, + ], + region: 'us-east-1', + secretAccessKey: 'DEF', + trackingId: 'c60', + datasetARN: + 'arn:aws:personalize:us-east-1:454531037350:dataset/putTest_DataSetGroup/ITEMS', + eventChoice: 'PutEvents', + }, + Enabled: true, + Transformations: [], + IsProcessorEnabled: true, + }, + libraries: [], + request: { query: {} }, + }, + ], + method: 'POST', + }, + pathSuffix: '', + }, + output: { + response: { + status: 200, + body: [ + { + error: 'Event type screen is not supported', + metadata: { + sourceId: '1pe7ty3hMMQCnrfZ0Mn2QG48884', + destinationId: '1pe9WgFOuFHOSIfmUkkhVTD1Rsd', + jobId: 1, + destinationType: 'PERSONALIZE', + messageId: '4bb69e26-b5a6-446a-a140-dbb6263369c9', + messageIds: null, + rudderId: 'daf823fb-e8d3-413a-8313-d34cd756f968', + receivedAt: '2021-03-13T01:56:44.340+05:30', + }, + statTags: { + destType: 'PERSONALIZE', + errorCategory: 'dataValidation', + destinationId: '1pe9WgFOuFHOSIfmUkkhVTD1Rsd', + errorType: 'instrumentation', + feature: 'processor', + implementation: 'native', + module: 'destination', + }, + statusCode: 400, + }, + ], + }, + }, + }, + { + name: 'personalize', + description: 'Test 27', + feature: 'processor', + module: 'destination', + version: 'v0', + input: { + request: { + body: [ + { + message: { + anonymousId: 'anon-id-new', + context: { ip: '14.5.67.21', library: { name: 'http' } }, + event: 'PRODUCT ADDED', + messageId: '4bb69e26-b5a6-446a-a140-dbb6263369c9', + originalTimestamp: '2021-03-13T01:56:46.896+05:30', + properties: { + numberOfRatings: 'checking with webapp change', + movieWatched: 2, + eventValue: 7.06, + }, + receivedAt: '2021-03-13T01:56:44.340+05:30', + request_ip: '[::1]', + rudderId: 'daf823fb-e8d3-413a-8313-d34cd756f968', + sentAt: '2021-03-13T01:56:46.896+05:30', + timestamp: '2020-02-02T00:23:09.544Z', + type: 'track', + userId: 'identified user id', + }, + metadata: { + sourceId: '1pe7ty3hMMQCnrfZ0Mn2QG48884', + destinationId: '1pe9WgFOuFHOSIfmUkkhVTD1Rsd', + jobId: 1, + destinationType: 'PERSONALIZE', + messageId: '4bb69e26-b5a6-446a-a140-dbb6263369c9', + messageIds: null, + rudderId: 'daf823fb-e8d3-413a-8313-d34cd756f968', + receivedAt: '2021-03-13T01:56:44.340+05:30', + }, + destination: { + ID: '1pe9WgFOuFHOSIfmUkkhVTD1Rsd', + Name: 'personalize Dev Testing', + DestinationDefinition: { + ID: '1pdthjPnz8gQhSTE2QTbm2LUMGM', + Name: 'PERSONALIZE', + DisplayName: 'AWS Personalize', + Config: { + destConfig: { + defaultConfig: [ + 'accessKeyId', + 'secretAccessKey', + 'region', + 'trackingId', + 'eventName', + 'customMappings', + ], + }, + excludeKeys: [], + includeKeys: [], + saveDestinationResponse: true, + secretKeys: ['accessKeyId', 'secretAccessKey'], + supportedSourceTypes: [ + 'android', + 'ios', + 'web', + 'unity', + 'amp', + 'cloud', + 'reactnative', + ], + transformAt: 'processor', + }, + }, + Config: { + accessKeyId: 'ABC', + customMappings: [ + { from: 'MOVIE_WATCHED', to: 'movieWatched' }, + { from: 'NUMBER_OF_RATINGS', to: 'numberOfRatings' }, + ], + datasetARN: '', + eventChoice: 'PutEvents', + stringifyProperty: true, + region: 'us-east-1', + secretAccessKey: 'DEF', + trackingId: 'c60', + }, + Enabled: true, + Transformations: [], + IsProcessorEnabled: true, + }, + libraries: [], + request: { query: {} }, + }, + ], + method: 'POST', + }, + pathSuffix: '', + }, + output: { + response: { + status: 200, + body: [ + { + metadata: { + sourceId: '1pe7ty3hMMQCnrfZ0Mn2QG48884', + destinationId: '1pe9WgFOuFHOSIfmUkkhVTD1Rsd', + jobId: 1, + destinationType: 'PERSONALIZE', + messageId: '4bb69e26-b5a6-446a-a140-dbb6263369c9', + messageIds: null, + rudderId: 'daf823fb-e8d3-413a-8313-d34cd756f968', + receivedAt: '2021-03-13T01:56:44.340+05:30', + }, + output: { + sessionId: 'anon-id-new', + trackingId: 'c60', + userId: 'identified user id', + eventList: [ + { + itemId: '4bb69e26-b5a6-446a-a140-dbb6263369c9', + eventType: 'PRODUCT ADDED', + sentAt: '2020-02-02T00:23:09.544Z', + properties: { movieWatched: '2', numberOfRatings: 'checking with webapp change' }, + }, + ], + }, + statusCode: 200, + }, + ], + }, + }, + }, + { + name: 'personalize', + description: 'Test 28', + feature: 'processor', + module: 'destination', + version: 'v0', + input: { + request: { + body: [ + { + message: { + anonymousId: 'anon-id-new', + context: { ip: '14.5.67.21', library: { name: 'http' } }, + event: 'PRODUCT ADDED', + messageId: '4bb69e26-b5a6-446a-a140-dbb6263369c9', + originalTimestamp: '2021-03-13T01:56:46.896+05:30', + properties: { + numberOfRatings: 'checking with webapp change', + movieWatched: 2, + eventValue: 7.06, + }, + receivedAt: '2021-03-13T01:56:44.340+05:30', + request_ip: '[::1]', + rudderId: 'daf823fb-e8d3-413a-8313-d34cd756f968', + sentAt: '2021-03-13T01:56:46.896+05:30', + timestamp: '2020-02-02T00:23:09.544Z', + type: 'track', + userId: 'identified user id', + }, + metadata: { + sourceId: '1pe7ty3hMMQCnrfZ0Mn2QG48884', + destinationId: '1pe9WgFOuFHOSIfmUkkhVTD1Rsd', + jobId: 1, + destinationType: 'PERSONALIZE', + messageId: '4bb69e26-b5a6-446a-a140-dbb6263369c9', + messageIds: null, + rudderId: 'daf823fb-e8d3-413a-8313-d34cd756f968', + receivedAt: '2021-03-13T01:56:44.340+05:30', + }, + destination: { + ID: '1pe9WgFOuFHOSIfmUkkhVTD1Rsd', + Name: 'personalize Dev Testing', + DestinationDefinition: { + ID: '1pdthjPnz8gQhSTE2QTbm2LUMGM', + Name: 'PERSONALIZE', + DisplayName: 'AWS Personalize', + Config: { + destConfig: { + defaultConfig: [ + 'accessKeyId', + 'secretAccessKey', + 'region', + 'trackingId', + 'eventName', + 'customMappings', + ], + }, + excludeKeys: [], + includeKeys: [], + saveDestinationResponse: true, + secretKeys: ['accessKeyId', 'secretAccessKey'], + supportedSourceTypes: [ + 'android', + 'ios', + 'web', + 'unity', + 'amp', + 'cloud', + 'reactnative', + ], + transformAt: 'processor', + }, + }, + Config: { + accessKeyId: 'ABC', + customMappings: [ + { from: 'MOVIE_WATCHED', to: 'movieWatched' }, + { from: 'NUMBER_OF_RATINGS', to: 'numberOfRatings' }, + ], + datasetARN: '', + eventChoice: 'PutEvents', + disableStringify: true, + region: 'us-east-1', + secretAccessKey: 'DEF', + trackingId: 'c60', + }, + Enabled: true, + Transformations: [], + IsProcessorEnabled: true, + }, + libraries: [], + request: { query: {} }, + }, + ], + method: 'POST', + }, + pathSuffix: '', + }, + output: { + response: { + status: 200, + body: [ + { + metadata: { + sourceId: '1pe7ty3hMMQCnrfZ0Mn2QG48884', + destinationId: '1pe9WgFOuFHOSIfmUkkhVTD1Rsd', + jobId: 1, + destinationType: 'PERSONALIZE', + messageId: '4bb69e26-b5a6-446a-a140-dbb6263369c9', + messageIds: null, + rudderId: 'daf823fb-e8d3-413a-8313-d34cd756f968', + receivedAt: '2021-03-13T01:56:44.340+05:30', + }, + output: { + sessionId: 'anon-id-new', + trackingId: 'c60', + userId: 'identified user id', + eventList: [ + { + itemId: '4bb69e26-b5a6-446a-a140-dbb6263369c9', + eventType: 'PRODUCT ADDED', + sentAt: '2020-02-02T00:23:09.544Z', + properties: { movieWatched: 2, numberOfRatings: 'checking with webapp change' }, + }, + ], + }, + statusCode: 200, + }, + ], + }, + }, + }, + { + name: 'personalize', + description: 'Test 29', + feature: 'processor', + module: 'destination', + version: 'v0', + input: { + request: { + body: [ + { + message: { + anonymousId: 'anon-id-new', + context: { ip: '14.5.67.21', library: { name: 'http' } }, + event: 'PRODUCT ADDED', + messageId: '4bb69e26-b5a6-446a-a140-dbb6263369c9', + originalTimestamp: '2021-03-13T01:56:46.896+05:30', + properties: { + numberOfRatings: 'checking with webapp change', + movieWatched: 2, + eventValue: 7.06, + }, + receivedAt: '2021-03-13T01:56:44.340+05:30', + request_ip: '[::1]', + rudderId: 'daf823fb-e8d3-413a-8313-d34cd756f968', + sentAt: '2021-03-13T01:56:46.896+05:30', + timestamp: '2020-02-02T00:23:09.544Z', + type: 'track', + userId: 'identified user id', + }, + metadata: { + sourceId: '1pe7ty3hMMQCnrfZ0Mn2QG48884', + destinationId: '1pe9WgFOuFHOSIfmUkkhVTD1Rsd', + jobId: 1, + destinationType: 'PERSONALIZE', + messageId: '4bb69e26-b5a6-446a-a140-dbb6263369c9', + messageIds: null, + rudderId: 'daf823fb-e8d3-413a-8313-d34cd756f968', + receivedAt: '2021-03-13T01:56:44.340+05:30', + }, + destination: { + ID: '1pe9WgFOuFHOSIfmUkkhVTD1Rsd', + Name: 'personalize Dev Testing', + DestinationDefinition: { + ID: '1pdthjPnz8gQhSTE2QTbm2LUMGM', + Name: 'PERSONALIZE', + DisplayName: 'AWS Personalize', + Config: { + destConfig: { + defaultConfig: [ + 'accessKeyId', + 'secretAccessKey', + 'region', + 'trackingId', + 'eventName', + 'customMappings', + ], + }, + excludeKeys: [], + includeKeys: [], + saveDestinationResponse: true, + secretKeys: ['accessKeyId', 'secretAccessKey'], + supportedSourceTypes: [ + 'android', + 'ios', + 'web', + 'unity', + 'amp', + 'cloud', + 'reactnative', + ], + transformAt: 'processor', + }, + }, + Config: { + accessKeyId: 'ABC', + customMappings: [ + { from: 'MOVIE_WATCHED', to: 'movieWatched' }, + { from: 'NUMBER_OF_RATINGS', to: 'numberOfRatings' }, + ], + datasetARN: '', + eventChoice: 'PutEvents', + disableStringify: false, + region: 'us-east-1', + secretAccessKey: 'DEF', + trackingId: 'c60', + }, + Enabled: true, + Transformations: [], + IsProcessorEnabled: true, + }, + libraries: [], + request: { query: {} }, + }, + ], + method: 'POST', + }, + pathSuffix: '', + }, + output: { + response: { + status: 200, + body: [ + { + metadata: { + sourceId: '1pe7ty3hMMQCnrfZ0Mn2QG48884', + destinationId: '1pe9WgFOuFHOSIfmUkkhVTD1Rsd', + jobId: 1, + destinationType: 'PERSONALIZE', + messageId: '4bb69e26-b5a6-446a-a140-dbb6263369c9', + messageIds: null, + rudderId: 'daf823fb-e8d3-413a-8313-d34cd756f968', + receivedAt: '2021-03-13T01:56:44.340+05:30', + }, + output: { + sessionId: 'anon-id-new', + trackingId: 'c60', + userId: 'identified user id', + eventList: [ + { + itemId: '4bb69e26-b5a6-446a-a140-dbb6263369c9', + eventType: 'PRODUCT ADDED', + sentAt: '2020-02-02T00:23:09.544Z', + properties: { movieWatched: '2', numberOfRatings: 'checking with webapp change' }, + }, + ], + }, + statusCode: 200, + }, + ], + }, + }, + }, + { + name: 'personalize', + description: 'Test 30', + feature: 'processor', + module: 'destination', + version: 'v0', + input: { + request: { + body: [ + { + message: { + context: { + ip: '14.5.67.21', + library: { name: 'http' }, + sessionId: '4bb69e26-b5a6-446a-a140-dbb6263369c9', + }, + event: 'PRODUCT ADDED', + messageId: '4bb69e26-b5a6-446a-a140-dbb6263369c9', + originalTimestamp: '2023-01-10T01:56:46.896+05:30', + properties: { + numberOfRatings: 'checking with webapp change', + movieWatched: 2, + eventValue: 7.06, + }, + type: 'track', + }, + metadata: { + sourceId: '1pe7ty3hMMQCnrfZ0Mn2QG48884', + destinationId: '1pe9WgFOuFHOSIfmUkkhVTD1Rsd', + jobId: 1, + destinationType: 'PERSONALIZE', + messageId: '4bb69e26-b5a6-446a-a140-dbb6263369c9', + messageIds: null, + rudderId: 'daf823fb-e8d3-413a-8313-d34cd756f968', + }, + destination: { + ID: '1pe9WgFOuFHOSIfmUkkhVTD1Rsd', + Name: 'personalize Dev Testing', + DestinationDefinition: { + ID: '1pdthjPnz8gQhSTE2QTbm2LUMGM', + Name: 'PERSONALIZE', + DisplayName: 'AWS Personalize', + Config: { + destConfig: { + defaultConfig: [ + 'accessKeyId', + 'secretAccessKey', + 'region', + 'trackingId', + 'eventName', + 'customMappings', + ], + }, + excludeKeys: [], + includeKeys: [], + saveDestinationResponse: true, + secretKeys: ['accessKeyId', 'secretAccessKey'], + supportedSourceTypes: [ + 'android', + 'ios', + 'web', + 'unity', + 'amp', + 'cloud', + 'reactnative', + ], + transformAt: 'processor', + }, + }, + Config: { + accessKeyId: 'ABC', + customMappings: [ + { from: 'MOVIE_WATCHED', to: 'movieWatched' }, + { from: 'NUMBER_OF_RATINGS', to: 'numberOfRatings' }, + ], + datasetARN: '', + eventChoice: 'PutEvents', + disableStringify: false, + region: 'us-east-1', + secretAccessKey: 'DEF', + trackingId: 'c60', + }, + Enabled: true, + Transformations: [], + IsProcessorEnabled: true, + }, + libraries: [], + request: { query: {} }, + }, + ], + method: 'POST', + }, + pathSuffix: '', + }, + output: { + response: { + status: 200, + body: [ + { + metadata: { + sourceId: '1pe7ty3hMMQCnrfZ0Mn2QG48884', + destinationId: '1pe9WgFOuFHOSIfmUkkhVTD1Rsd', + jobId: 1, + destinationType: 'PERSONALIZE', + messageId: '4bb69e26-b5a6-446a-a140-dbb6263369c9', + messageIds: null, + rudderId: 'daf823fb-e8d3-413a-8313-d34cd756f968', + }, + output: { + sessionId: '4bb69e26-b5a6-446a-a140-dbb6263369c9', + trackingId: 'c60', + userId: '', + eventList: [ + { + itemId: '4bb69e26-b5a6-446a-a140-dbb6263369c9', + eventType: 'PRODUCT ADDED', + sentAt: '2023-01-10T01:56:46.896+05:30', + properties: { movieWatched: '2', numberOfRatings: 'checking with webapp change' }, + }, + ], + }, + statusCode: 200, + }, + ], + }, + }, + }, +]; diff --git a/test/integrations/destinations/pinterest_tag/processor/data.ts b/test/integrations/destinations/pinterest_tag/processor/data.ts new file mode 100644 index 0000000000..344d4ff507 --- /dev/null +++ b/test/integrations/destinations/pinterest_tag/processor/data.ts @@ -0,0 +1,3435 @@ +export const data = [ + { + name: 'pinterest_tag', + description: 'Test 0', + feature: 'processor', + module: 'destination', + version: 'v0', + input: { + request: { + body: [ + { + message: { + type: 'track', + event: 'ABC Searched', + sentAt: '2020-08-14T05:30:30.118Z', + channel: 'web', + context: { + source: 'test', + userAgent: 'chrome', + traits: { + anonymousId: '50be5c78-6c3f-4b60-be84-97805a316fb1', + email: 'abc@gmail.com', + phone: '+1234589947', + gender: 'non-binary', + db: '19950715', + lastname: 'Rudderlabs', + firstName: 'Test', + address: { city: 'Kolkata', state: 'WB', zip: '700114', country: 'IN' }, + }, + device: { advertisingId: 'abc123' }, + library: { name: 'rudder-sdk-ruby-sync', version: '1.0.6' }, + }, + messageId: '7208bbb6-2c4e-45bb-bf5b-ad426f3593e9', + timestamp: '2020-08-14T05:30:30.118Z', + properties: { + tax: 2, + total: 27.5, + coupon: 'hasbros', + revenue: 48, + price: 25, + quantity: 2, + currency: 'USD', + discount: 2.5, + order_id: '50314b8e9bcf000000000000', + requestIP: '123.0.0.0', + optOutType: 'LDP', + products: [ + { + sku: '45790-32', + url: 'https://www.example.com/product/path', + name: 'Monopoly: 3rd Edition', + price: 19, + category: 'Games', + quantity: 1, + image_url: 'https:///www.example.com/product/path.jpg', + product_id: '507f1f77bcf86cd799439011', + }, + { + sku: '46493-32', + name: 'Uno Card Game', + price: 3, + category: 'Games', + quantity: 2, + product_id: '505bd76785ebb509fc183733', + }, + ], + shipping: 3, + subtotal: 22.5, + affiliation: 'Google Store', + checkout_id: 'fksdjfsdjfisjf9sdfjsd9f', + }, + anonymousId: '50be5c78-6c3f-4b60-be84-97805a316fb1', + integrations: { All: true }, + }, + destination: { + DestinationDefinition: { Config: { cdkV2Enabled: true } }, + ID: '1pYpzzvcn7AQ2W9GGIAZSsN6Mfq', + Name: 'PINTEREST_TAG', + Config: { + tagId: '123456789', + advertiserId: '429047995', + appId: '429047995', + enhancedMatch: true, + enableDeduplication: true, + deduplicationKey: 'messageId', + sendingUnHashedData: true, + sendAsTestEvent: true, + customProperties: [{ properties: 'presentclass' }, { properties: 'presentgrade' }], + eventsMapping: [{ from: 'ABC Searched', to: 'WatchVideo' }], + }, + Enabled: true, + Transformations: [], + }, + metadata: { destintionId: '1pYpzzvcn7AQ2W9GGIAZSsN6Mfq' }, + }, + ], + method: 'POST', + }, + pathSuffix: '', + }, + output: { + response: { + status: 200, + body: [ + { + metadata: { destintionId: '1pYpzzvcn7AQ2W9GGIAZSsN6Mfq' }, + output: { + version: '1', + type: 'REST', + method: 'POST', + endpoint: 'https://ct.pinterest.com/events/v3', + headers: { 'Content-Type': 'application/json' }, + params: { test: true }, + body: { + JSON: { + action_source: 'web', + event_name: 'watch_video', + event_time: 1597383030, + event_id: '7208bbb6-2c4e-45bb-bf5b-ad426f3593e9', + app_id: '429047995', + advertiser_id: '429047995', + user_data: { + em: ['48ddb93f0b30c475423fe177832912c5bcdce3cc72872f8051627967ef278e08'], + ph: ['d164bbe036663cb5c96835e9ccc6501e9a521127ea62f6359744928ba932413b'], + ln: ['dcf000c2386fb76d22cefc0d118a8511bb75999019cd373df52044bccd1bd251'], + fn: ['9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a08'], + ct: ['6689106ca7922c30b2fd2c175c85bc7fc2d52cc4941bdd7bb622c6cdc6284a85'], + st: ['3b45022ab36728cdae12e709e945bba267c50ee8a91e6e4388539a8e03a3fdcd'], + zp: ['1a4292e00780e18d00e76fde9850aee5344e939ba593333cd5e4b4aa2cd33b0c'], + country: ['582967534d0f909d196b97f9e6921342777aea87b46fa52df165389db1fb8ccf'], + hashed_maids: [ + '6ca13d52ca70c883e0f0bb101e425a89e8624de51db2d2392593af6a84118090', + ], + client_user_agent: 'chrome', + ge: ['1b16b1df538ba12dc3f97edbb85caa7050d46c148134290feba80f8236c83db9'], + }, + custom_data: { + currency: 'USD', + value: '27.5', + order_id: '50314b8e9bcf000000000000', + opt_out_type: 'LDP', + num_items: 3, + content_ids: ['507f1f77bcf86cd799439011', '505bd76785ebb509fc183733'], + contents: [ + { quantity: 1, item_price: '19' }, + { quantity: 2, item_price: '3' }, + ], + }, + }, + JSON_ARRAY: {}, + XML: {}, + FORM: {}, + }, + files: {}, + userId: '', + }, + statusCode: 200, + }, + ], + }, + }, + }, + { + name: 'pinterest_tag', + description: 'Test 1', + feature: 'processor', + module: 'destination', + version: 'v0', + input: { + request: { + body: [ + { + message: { + type: 'track', + event: 'Order completed', + sentAt: '2020-08-14T05:30:30.118Z', + channel: 'web', + context: { + source: 'test', + userAgent: 'chrome', + traits: { + anonymousId: '50be5c78-6c3f-4b60-be84-97805a316fb1', + email: 'abc@gmail.com', + phone: '+1234589947', + ge: 'male', + db: '19950715', + lastname: 'Rudderlabs', + firstName: 'Test', + address: { city: 'Kolkata', state: 'WB', zip: '700114', country: 'IN' }, + }, + device: { advertisingId: 'abc123' }, + library: { name: 'rudder-sdk-ruby-sync', version: '1.0.6' }, + }, + messageId: '7208bbb6-2c4e-45bb-bf5b-ad426f3593e9', + timestamp: '2020-08-14T05:30:30.118Z', + properties: { + tax: 2, + total: 27.5, + coupon: 'hasbros', + revenue: 48, + price: 25, + quantity: 2, + currency: 'USD', + discount: 2.5, + order_id: '50314b8e9bcf000000000000', + requestIP: '123.0.0.0', + products: [ + { + sku: '45790-32', + url: 'https://www.example.com/product/path', + name: 'Monopoly: 3rd Edition', + price: 19, + category: 'Games', + quantity: 1, + image_url: 'https:///www.example.com/product/path.jpg', + product_id: '507f1f77bcf86cd799439011', + }, + { + sku: '46493-32', + name: 'Uno Card Game', + price: 3, + category: 'Games', + quantity: 2, + product_id: '505bd76785ebb509fc183733', + }, + ], + shipping: 3, + subtotal: 22.5, + affiliation: 'Google Store', + checkout_id: 'fksdjfsdjfisjf9sdfjsd9f', + }, + anonymousId: '50be5c78-6c3f-4b60-be84-97805a316fb1', + integrations: { All: true }, + }, + destination: { + DestinationDefinition: { Config: { cdkV2Enabled: true } }, + ID: '1pYpzzvcn7AQ2W9GGIAZSsN6Mfq', + Name: 'PINTEREST_TAG', + Config: { + sendAsTestEvent: false, + tagId: '123456789', + advertiserId: '429047995', + appId: '429047995', + sendingUnHashedData: true, + enableDeduplication: true, + deduplicationKey: 'messageId', + enhancedMatch: true, + customProperties: [{ properties: 'presentclass' }, { properties: 'presentgrade' }], + eventsMapping: [{ from: 'ABC Searched', to: 'WatchVideo' }], + }, + Enabled: true, + Transformations: [], + }, + metadata: { destintionId: '1pYpzzvcn7AQ2W9GGIAZSsN6Mfq' }, + }, + ], + method: 'POST', + }, + pathSuffix: '', + }, + output: { + response: { + status: 200, + body: [ + { + metadata: { destintionId: '1pYpzzvcn7AQ2W9GGIAZSsN6Mfq' }, + output: { + version: '1', + type: 'REST', + method: 'POST', + endpoint: 'https://ct.pinterest.com/events/v3', + headers: { 'Content-Type': 'application/json' }, + params: {}, + body: { + JSON: { + action_source: 'web', + event_name: 'checkout', + event_time: 1597383030, + event_id: '7208bbb6-2c4e-45bb-bf5b-ad426f3593e9', + app_id: '429047995', + advertiser_id: '429047995', + user_data: { + em: ['48ddb93f0b30c475423fe177832912c5bcdce3cc72872f8051627967ef278e08'], + ph: ['d164bbe036663cb5c96835e9ccc6501e9a521127ea62f6359744928ba932413b'], + ln: ['dcf000c2386fb76d22cefc0d118a8511bb75999019cd373df52044bccd1bd251'], + fn: ['9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a08'], + ct: ['6689106ca7922c30b2fd2c175c85bc7fc2d52cc4941bdd7bb622c6cdc6284a85'], + st: ['3b45022ab36728cdae12e709e945bba267c50ee8a91e6e4388539a8e03a3fdcd'], + zp: ['1a4292e00780e18d00e76fde9850aee5344e939ba593333cd5e4b4aa2cd33b0c'], + country: ['582967534d0f909d196b97f9e6921342777aea87b46fa52df165389db1fb8ccf'], + hashed_maids: [ + '6ca13d52ca70c883e0f0bb101e425a89e8624de51db2d2392593af6a84118090', + ], + client_user_agent: 'chrome', + }, + custom_data: { + currency: 'USD', + value: '27.5', + order_id: '50314b8e9bcf000000000000', + num_items: 3, + content_ids: ['507f1f77bcf86cd799439011', '505bd76785ebb509fc183733'], + contents: [ + { quantity: 1, item_price: '19' }, + { quantity: 2, item_price: '3' }, + ], + }, + }, + JSON_ARRAY: {}, + XML: {}, + FORM: {}, + }, + files: {}, + userId: '', + }, + statusCode: 200, + }, + ], + }, + }, + }, + { + name: 'pinterest_tag', + description: 'Test 2', + feature: 'processor', + module: 'destination', + version: 'v0', + input: { + request: { + body: [ + { + message: { + type: 'track', + event: 'product added', + sentAt: '2020-08-14T05:30:30.118Z', + channel: 'web', + context: { + source: 'test', + userAgent: 'chrome', + traits: { + anonymousId: '50be5c78-6c3f-4b60-be84-97805a316fb1', + email: 'abc@gmail.com', + phone: '+1234589947', + ge: 'male', + db: '19950715', + lastname: 'Rudderlabs', + firstName: 'Test', + address: { city: 'Kolkata', state: 'WB', zip: '700114', country: 'IN' }, + }, + device: { advertisingId: 'abc123' }, + library: { name: 'rudder-sdk-ruby-sync', version: '1.0.6' }, + }, + messageId: '7208bbb6-2c4e-45bb-bf5b-ad426f3593e9', + timestamp: '2020-08-14T05:30:30.118Z', + properties: { + product_id: '123', + tax: 2, + total: 27.5, + coupon: 'hasbros', + revenue: 48, + price: 25, + quantity: 2, + currency: 'USD', + discount: 2.5, + order_id: '50314b8e9bcf000000000000', + requestIP: '123.0.0.0', + shipping: 3, + subtotal: 22.5, + affiliation: 'Google Store', + checkout_id: 'fksdjfsdjfisjf9sdfjsd9f', + }, + anonymousId: '50be5c78-6c3f-4b60-be84-97805a316fb1', + integrations: { All: true }, + }, + destination: { + DestinationDefinition: { Config: { cdkV2Enabled: true } }, + ID: '1pYpzzvcn7AQ2W9GGIAZSsN6Mfq', + Name: 'PINTEREST_TAG', + Config: { + sendAsTestEvent: false, + tagId: '123456789', + advertiserId: '429047995', + appId: '429047995', + sendingUnHashedData: true, + enableDeduplication: true, + deduplicationKey: 'messageId', + enhancedMatch: true, + customProperties: [{ properties: 'presentclass' }, { properties: 'presentgrade' }], + eventsMapping: [{ from: 'ABC Searched', to: 'WatchVideo' }], + }, + Enabled: true, + Transformations: [], + }, + metadata: { destintionId: '1pYpzzvcn7AQ2W9GGIAZSsN6Mfq' }, + }, + ], + method: 'POST', + }, + pathSuffix: '', + }, + output: { + response: { + status: 200, + body: [ + { + metadata: { destintionId: '1pYpzzvcn7AQ2W9GGIAZSsN6Mfq' }, + output: { + version: '1', + type: 'REST', + method: 'POST', + endpoint: 'https://ct.pinterest.com/events/v3', + headers: { 'Content-Type': 'application/json' }, + params: {}, + body: { + JSON: { + event_name: 'add_to_cart', + action_source: 'web', + event_time: 1597383030, + event_id: '7208bbb6-2c4e-45bb-bf5b-ad426f3593e9', + app_id: '429047995', + advertiser_id: '429047995', + user_data: { + em: ['48ddb93f0b30c475423fe177832912c5bcdce3cc72872f8051627967ef278e08'], + ph: ['d164bbe036663cb5c96835e9ccc6501e9a521127ea62f6359744928ba932413b'], + ln: ['dcf000c2386fb76d22cefc0d118a8511bb75999019cd373df52044bccd1bd251'], + fn: ['9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a08'], + ct: ['6689106ca7922c30b2fd2c175c85bc7fc2d52cc4941bdd7bb622c6cdc6284a85'], + st: ['3b45022ab36728cdae12e709e945bba267c50ee8a91e6e4388539a8e03a3fdcd'], + zp: ['1a4292e00780e18d00e76fde9850aee5344e939ba593333cd5e4b4aa2cd33b0c'], + country: ['582967534d0f909d196b97f9e6921342777aea87b46fa52df165389db1fb8ccf'], + hashed_maids: [ + '6ca13d52ca70c883e0f0bb101e425a89e8624de51db2d2392593af6a84118090', + ], + client_user_agent: 'chrome', + }, + custom_data: { + currency: 'USD', + value: '27.5', + order_id: '50314b8e9bcf000000000000', + num_items: 2, + content_ids: ['123'], + contents: [{ quantity: 2, item_price: '25' }], + }, + }, + JSON_ARRAY: {}, + XML: {}, + FORM: {}, + }, + files: {}, + userId: '', + }, + statusCode: 200, + }, + ], + }, + }, + }, + { + name: 'pinterest_tag', + description: 'Test 3', + feature: 'processor', + module: 'destination', + version: 'v0', + input: { + request: { + body: [ + { + message: { + type: 'track', + event: 'Product List Filtered', + sentAt: '2020-08-14T05:30:30.118Z', + context: { + source: 'test', + userAgent: 'chrome', + traits: { + anonymousId: '50be5c78-6c3f-4b60-be84-97805a316fb1', + email: 'abc@gmail.com', + phone: '+1234589947', + ge: 'male', + db: '19950715', + lastname: 'Rudderlabs', + firstName: 'Test', + address: { city: 'Kolkata', state: 'WB', zip: '700114', country: 'IN' }, + }, + device: { advertisingId: 'abc123' }, + library: { name: 'rudder-sdk-ruby-sync', version: '1.0.6' }, + }, + messageId: '7208bbb6-2c4e-45bb-bf5b-ad426f3593e9', + timestamp: '2020-08-14T05:30:30.118Z', + properties: { + tax: 2, + total: 27.5, + coupon: 'hasbros', + revenue: 48, + price: 25, + quantity: 2, + currency: 'USD', + discount: 2.5, + order_id: '50314b8e9bcf000000000000', + requestIP: '123.0.0.0', + products: [ + { + sku: '45790-32', + url: 'https://www.example.com/product/path', + name: 'Monopoly: 3rd Edition', + price: 19, + category: 'Games', + quantity: 1, + image_url: 'https:///www.example.com/product/path.jpg', + product_id: '507f1f77bcf86cd799439011', + }, + { + sku: '46493-32', + name: 'Uno Card Game', + price: 3, + category: 'Games', + quantity: 2, + product_id: '505bd76785ebb509fc183733', + }, + ], + shipping: 3, + subtotal: 22.5, + affiliation: 'Google Store', + checkout_id: 'fksdjfsdjfisjf9sdfjsd9f', + }, + anonymousId: '50be5c78-6c3f-4b60-be84-97805a316fb1', + integrations: { All: true }, + }, + destination: { + DestinationDefinition: { Config: { cdkV2Enabled: true } }, + ID: '1pYpzzvcn7AQ2W9GGIAZSsN6Mfq', + Name: 'PINTEREST_TAG', + destinationDefinition: { Config: { cdkV2Enabled: true } }, + Config: { + sendAsTestEvent: false, + tagId: '123456789', + advertiserId: '', + appId: '429047995', + sendingUnHashedData: true, + enableDeduplication: true, + deduplicationKey: 'messageId', + enhancedMatch: true, + customProperties: [{ properties: 'presentclass' }, { properties: 'presentgrade' }], + eventsMapping: [{ from: 'ABC Searched', to: 'WatchVideo' }], + }, + Enabled: true, + Transformations: [], + }, + metadata: { destintionId: '1pYpzzvcn7AQ2W9GGIAZSsN6Mfq' }, + }, + ], + method: 'POST', + }, + pathSuffix: '', + }, + output: { + response: { + status: 200, + body: [ + { + error: + 'Advertiser Id not found. Aborting: Workflow: procWorkflow, Step: validateInput, ChildStep: undefined, OriginalError: Advertiser Id not found. Aborting', + metadata: { destintionId: '1pYpzzvcn7AQ2W9GGIAZSsN6Mfq' }, + statTags: { + destType: 'PINTEREST_TAG', + errorCategory: 'platform', + feature: 'processor', + implementation: 'cdkV2', + module: 'destination', + }, + statusCode: 400, + }, + ], + }, + }, + }, + { + name: 'pinterest_tag', + description: 'Test 4', + feature: 'processor', + module: 'destination', + version: 'v0', + input: { + request: { + body: [ + { + message: { + type: 'track', + event: 'Product List Filtered', + sentAt: '2020-08-14T05:30:30.118Z', + channel: 'web', + context: { + source: 'test', + userAgent: 'chrome', + traits: { + anonymousId: '50be5c78-6c3f-4b60-be84-97805a316fb1', + phone: '+1234589947', + ge: 'male', + db: '19950715', + lastname: 'Rudderlabs', + firstName: 'Test', + address: { city: 'Kolkata', state: 'WB', zip: '700114', country: 'IN' }, + }, + library: { name: 'rudder-sdk-ruby-sync', version: '1.0.6' }, + }, + messageId: '7208bbb6-2c4e-45bb-bf5b-ad426f3593e9', + timestamp: '2020-08-14T05:30:30.118Z', + properties: { + tax: 2, + total: 27.5, + coupon: 'hasbros', + revenue: 48, + price: 25, + quantity: 2, + currency: 'USD', + discount: 2.5, + order_id: '50314b8e9bcf000000000000', + requestIP: '123.0.0.0', + products: [ + { + sku: '45790-32', + url: 'https://www.example.com/product/path', + name: 'Monopoly: 3rd Edition', + price: 19, + category: 'Games', + quantity: 1, + image_url: 'https:///www.example.com/product/path.jpg', + product_id: '507f1f77bcf86cd799439011', + }, + { + sku: '46493-32', + name: 'Uno Card Game', + price: 3, + category: 'Games', + quantity: 2, + product_id: '505bd76785ebb509fc183733', + }, + ], + shipping: 3, + subtotal: 22.5, + affiliation: 'Google Store', + checkout_id: 'fksdjfsdjfisjf9sdfjsd9f', + }, + anonymousId: '50be5c78-6c3f-4b60-be84-97805a316fb1', + integrations: { All: true }, + }, + destination: { + DestinationDefinition: { Config: { cdkV2Enabled: true } }, + ID: '1pYpzzvcn7AQ2W9GGIAZSsN6Mfq', + Name: 'PINTEREST_TAG', + Config: { + sendAsTestEvent: false, + tagId: '123456789', + advertiserId: '429047995', + appId: '429047995', + sendingUnHashedData: true, + enableDeduplication: true, + deduplicationKey: 'messageId', + enhancedMatch: true, + customProperties: [{ properties: 'presentclass' }, { properties: 'presentgrade' }], + eventsMapping: [{ from: 'ABC Searched', to: 'WatchVideo' }], + }, + Enabled: true, + Transformations: [], + }, + metadata: { destintionId: '1pYpzzvcn7AQ2W9GGIAZSsN6Mfq' }, + }, + ], + method: 'POST', + }, + pathSuffix: '', + }, + output: { + response: { + status: 200, + body: [ + { + metadata: { destintionId: '1pYpzzvcn7AQ2W9GGIAZSsN6Mfq' }, + error: + 'It is required at least one of em, hashed_maids or pair of client_ip_address and client_user_agent: Workflow: procWorkflow, Step: validateUserFields, ChildStep: undefined, OriginalError: It is required at least one of em, hashed_maids or pair of client_ip_address and client_user_agent', + statTags: { + destType: 'PINTEREST_TAG', + errorCategory: 'platform', + feature: 'processor', + implementation: 'cdkV2', + module: 'destination', + }, + statusCode: 400, + }, + ], + }, + }, + }, + { + name: 'pinterest_tag', + description: 'Test 5', + feature: 'processor', + module: 'destination', + version: 'v0', + input: { + request: { + body: [ + { + message: { + type: 'track', + event: 'ABC Searched', + sentAt: '2020-08-14T05:30:30.118Z', + channel: 'web', + context: { + source: 'test', + userAgent: 'chrome', + traits: { + anonymousId: '50be5c78-6c3f-4b60-be84-97805a316fb1', + email: 'abc@gmail.com', + phone: '+1234589947', + ge: 'male', + db: '19950715', + lastname: 'Rudderlabs', + firstName: 'Test', + address: { city: 'Kolkata', state: 'WB', zip: '700114', country: 'IN' }, + }, + device: { advertisingId: 'abc123' }, + library: { name: 'rudder-sdk-ruby-sync', version: '1.0.6' }, + }, + messageId: '7208bbb6-2c4e-45bb-bf5b-ad426f3593e9', + timestamp: '2020-08-14T05:30:30.118Z', + properties: { + tax: 2, + total: 27.5, + coupon: 'hasbros', + revenue: 48, + price: 25, + quantity: 2, + currency: 'USD', + discount: 2.5, + order_id: '50314b8e9bcf000000000000', + requestIP: '123.0.0.0', + numOfItems: 2, + products: [ + { + sku: '45790-32', + url: 'https://www.example.com/product/path', + name: 'Monopoly: 3rd Edition', + price: 19, + category: 'Games', + quantity: 1, + image_url: 'https:///www.example.com/product/path.jpg', + product_id: '507f1f77bcf86cd799439011', + }, + { + sku: '46493-32', + name: 'Uno Card Game', + price: 3, + category: 'Games', + quantity: 2, + product_id: '505bd76785ebb509fc183733', + }, + ], + shipping: 3, + subtotal: 22.5, + affiliation: 'Google Store', + checkout_id: 'fksdjfsdjfisjf9sdfjsd9f', + }, + anonymousId: '50be5c78-6c3f-4b60-be84-97805a316fb1', + integrations: { All: true }, + }, + destination: { + DestinationDefinition: { Config: { cdkV2Enabled: true } }, + ID: '1pYpzzvcn7AQ2W9GGIAZSsN6Mfq', + Name: 'PINTEREST_TAG', + Config: { + sendAsTestEvent: false, + tagId: '123456789', + advertiserId: '429047995', + appId: '429047995', + sendingUnHashedData: true, + enableDeduplication: true, + deduplicationKey: 'messageId', + enhancedMatch: true, + customProperties: [{ properties: 'presentclass' }, { properties: 'presentgrade' }], + eventsMapping: [{ from: 'ABC Searched', to: 'WatchVideo' }], + }, + Enabled: true, + Transformations: [], + }, + metadata: { destintionId: '1pYpzzvcn7AQ2W9GGIAZSsN6Mfq' }, + }, + ], + method: 'POST', + }, + pathSuffix: '', + }, + output: { + response: { + status: 200, + body: [ + { + metadata: { destintionId: '1pYpzzvcn7AQ2W9GGIAZSsN6Mfq' }, + output: { + version: '1', + type: 'REST', + method: 'POST', + endpoint: 'https://ct.pinterest.com/events/v3', + headers: { 'Content-Type': 'application/json' }, + params: {}, + body: { + JSON: { + event_name: 'watch_video', + event_time: 1597383030, + action_source: 'web', + event_id: '7208bbb6-2c4e-45bb-bf5b-ad426f3593e9', + app_id: '429047995', + advertiser_id: '429047995', + user_data: { + em: ['48ddb93f0b30c475423fe177832912c5bcdce3cc72872f8051627967ef278e08'], + ph: ['d164bbe036663cb5c96835e9ccc6501e9a521127ea62f6359744928ba932413b'], + ln: ['dcf000c2386fb76d22cefc0d118a8511bb75999019cd373df52044bccd1bd251'], + fn: ['9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a08'], + ct: ['6689106ca7922c30b2fd2c175c85bc7fc2d52cc4941bdd7bb622c6cdc6284a85'], + st: ['3b45022ab36728cdae12e709e945bba267c50ee8a91e6e4388539a8e03a3fdcd'], + zp: ['1a4292e00780e18d00e76fde9850aee5344e939ba593333cd5e4b4aa2cd33b0c'], + country: ['582967534d0f909d196b97f9e6921342777aea87b46fa52df165389db1fb8ccf'], + hashed_maids: [ + '6ca13d52ca70c883e0f0bb101e425a89e8624de51db2d2392593af6a84118090', + ], + client_user_agent: 'chrome', + }, + custom_data: { + currency: 'USD', + value: '27.5', + num_items: 2, + order_id: '50314b8e9bcf000000000000', + content_ids: ['507f1f77bcf86cd799439011', '505bd76785ebb509fc183733'], + contents: [ + { quantity: 1, item_price: '19' }, + { quantity: 2, item_price: '3' }, + ], + }, + }, + JSON_ARRAY: {}, + XML: {}, + FORM: {}, + }, + files: {}, + userId: '', + }, + statusCode: 200, + }, + ], + }, + }, + }, + { + name: 'pinterest_tag', + description: 'Test 6', + feature: 'processor', + module: 'destination', + version: 'v0', + input: { + request: { + body: [ + { + message: { + type: 'track', + event: 'ABC Searched', + sentAt: '2020-08-14T05:30:30.118Z', + channel: 'web', + context: { + source: 'test', + userAgent: 'chrome', + traits: { + anonymousId: '50be5c78-6c3f-4b60-be84-97805a316fb1', + email: 'abc@gmail.com', + phone: '+1234589947', + ge: 'male', + db: '19950715', + lastname: 'Rudderlabs', + firstName: 'Test', + address: { city: 'Kolkata', state: 'WB', zip: '700114', country: 'IN' }, + }, + device: { advertisingId: 'abc123' }, + library: { name: 'rudder-sdk-ruby-sync', version: '1.0.6' }, + }, + messageId: '7208bbb6-2c4e-45bb-bf5b-ad426f3593e9', + timestamp: '2020-08-14T05:30:30.118Z', + properties: { + tax: 2, + total: 27.5, + coupon: 'hasbros', + revenue: 48, + price: 25, + quantity: 2, + currency: 'USD', + discount: 2.5, + order_id: '50314b8e9bcf000000000000', + requestIP: '123.0.0.0', + numOfItems: 2, + products: [ + { + sku: '45790-32', + url: 'https://www.example.com/product/path', + name: 'Monopoly: 3rd Edition', + price: 19, + category: 'Games', + quantity: 1, + image_url: 'https:///www.example.com/product/path.jpg', + product_id: '507f1f77bcf86cd799439011', + }, + { + sku: '46493-32', + name: 'Uno Card Game', + price: 3, + category: 'Games', + quantity: 2, + product_id: '505bd76785ebb509fc183733', + }, + ], + shipping: 3, + subtotal: 22.5, + affiliation: 'Google Store', + checkout_id: 'fksdjfsdjfisjf9sdfjsd9f', + }, + anonymousId: '50be5c78-6c3f-4b60-be84-97805a316fb1', + integrations: { All: true }, + }, + destination: { + DestinationDefinition: { Config: { cdkV2Enabled: true } }, + ID: '1pYpzzvcn7AQ2W9GGIAZSsN6Mfq', + Name: 'PINTEREST_TAG', + Config: { + sendAsTestEvent: false, + tagId: '123456789', + advertiserId: '', + appId: '429047995', + sendingUnHashedData: true, + enableDeduplication: true, + deduplicationKey: 'messageId', + enhancedMatch: true, + customProperties: [{ properties: 'presentclass' }, { properties: 'presentgrade' }], + eventsMapping: [{ from: 'ABC Searched', to: 'WatchVideo' }], + }, + Enabled: true, + Transformations: [], + }, + metadata: { destintionId: '1pYpzzvcn7AQ2W9GGIAZSsN6Mfq' }, + }, + ], + method: 'POST', + }, + pathSuffix: '', + }, + output: { + response: { + status: 200, + body: [ + { + error: + 'Advertiser Id not found. Aborting: Workflow: procWorkflow, Step: validateInput, ChildStep: undefined, OriginalError: Advertiser Id not found. Aborting', + metadata: { destintionId: '1pYpzzvcn7AQ2W9GGIAZSsN6Mfq' }, + statTags: { + destType: 'PINTEREST_TAG', + errorCategory: 'platform', + feature: 'processor', + implementation: 'cdkV2', + module: 'destination', + }, + statusCode: 400, + }, + ], + }, + }, + }, + { + name: 'pinterest_tag', + description: 'Test 7', + feature: 'processor', + module: 'destination', + version: 'v0', + input: { + request: { + body: [ + { + message: { + type: 'group', + event: 'ABC Searched', + sentAt: '2020-08-14T05:30:30.118Z', + context: { + source: 'test', + userAgent: 'chrome', + traits: { + anonymousId: '50be5c78-6c3f-4b60-be84-97805a316fb1', + email: 'abc@gmail.com', + phone: '+1234589947', + ge: 'male', + db: '19950715', + lastname: 'Rudderlabs', + firstName: 'Test', + address: { city: 'Kolkata', state: 'WB', zip: '700114', country: 'IN' }, + }, + device: { advertisingId: 'abc123' }, + library: { name: 'rudder-sdk-ruby-sync', version: '1.0.6' }, + }, + messageId: '7208bbb6-2c4e-45bb-bf5b-ad426f3593e9', + timestamp: '2020-08-14T05:30:30.118Z', + properties: { + tax: 2, + total: 27.5, + coupon: 'hasbros', + revenue: 48, + price: 25, + quantity: 2, + currency: 'USD', + discount: 2.5, + order_id: '50314b8e9bcf000000000000', + requestIP: '123.0.0.0', + numOfItems: 2, + products: [ + { + sku: '45790-32', + url: 'https://www.example.com/product/path', + name: 'Monopoly: 3rd Edition', + price: 19, + category: 'Games', + quantity: 1, + image_url: 'https:///www.example.com/product/path.jpg', + product_id: '507f1f77bcf86cd799439011', + }, + { + sku: '46493-32', + name: 'Uno Card Game', + price: 3, + category: 'Games', + quantity: 2, + product_id: '505bd76785ebb509fc183733', + }, + ], + shipping: 3, + subtotal: 22.5, + affiliation: 'Google Store', + checkout_id: 'fksdjfsdjfisjf9sdfjsd9f', + }, + anonymousId: '50be5c78-6c3f-4b60-be84-97805a316fb1', + integrations: { All: true }, + }, + destination: { + DestinationDefinition: { Config: { cdkV2Enabled: true } }, + ID: '1pYpzzvcn7AQ2W9GGIAZSsN6Mfq', + Name: 'PINTEREST_TAG', + Config: { + sendAsTestEvent: false, + tagId: '123456789', + advertiserId: '123456', + appId: '429047995', + enhancedMatch: true, + sendingUnHashedData: true, + enableDeduplication: true, + deduplicationKey: 'messageId', + customProperties: [{ properties: 'presentclass' }, { properties: 'presentgrade' }], + eventsMapping: [{ from: 'ABC Searched', to: 'WatchVideo' }], + }, + Enabled: true, + Transformations: [], + }, + metadata: { destintionId: '1pYpzzvcn7AQ2W9GGIAZSsN6Mfq' }, + }, + ], + method: 'POST', + }, + pathSuffix: '', + }, + output: { + response: { + status: 200, + body: [ + { + error: + 'message type group is not supported: Workflow: procWorkflow, Step: validateInput, ChildStep: undefined, OriginalError: message type group is not supported', + metadata: { destintionId: '1pYpzzvcn7AQ2W9GGIAZSsN6Mfq' }, + statTags: { + destType: 'PINTEREST_TAG', + errorCategory: 'platform', + feature: 'processor', + implementation: 'cdkV2', + module: 'destination', + }, + statusCode: 400, + }, + ], + }, + }, + }, + { + name: 'pinterest_tag', + description: 'Test 8', + feature: 'processor', + module: 'destination', + version: 'v0', + input: { + request: { + body: [ + { + message: { + type: 'track', + event: 'ABC Searched', + channel: 'abc', + sentAt: '2020-08-14T05:30:30.118Z', + context: { + source: 'test', + userAgent: 'chrome', + traits: { + anonymousId: '50be5c78-6c3f-4b60-be84-97805a316fb1', + email: 'abc@gmail.com', + phone: '+1234589947', + ge: 'male', + db: '19950715', + lastname: 'Rudderlabs', + firstName: 'Test', + address: { city: 'Kolkata', state: 'WB', zip: '700114', country: 'IN' }, + }, + device: { advertisingId: 'abc123' }, + library: { name: 'rudder-sdk-ruby-sync', version: '1.0.6' }, + }, + messageId: '7208bbb6-2c4e-45bb-bf5b-ad426f3593e9', + timestamp: '2020-08-14T05:30:30.118Z', + properties: { + tax: 2, + total: 27.5, + coupon: 'hasbros', + revenue: 48, + price: 25, + quantity: 2, + currency: 'USD', + discount: 2.5, + order_id: '50314b8e9bcf000000000000', + requestIP: '123.0.0.0', + numOfItems: 2, + products: [ + { + sku: '45790-32', + url: 'https://www.example.com/product/path', + name: 'Monopoly: 3rd Edition', + price: 19, + category: 'Games', + quantity: 1, + image_url: 'https:///www.example.com/product/path.jpg', + product_id: '507f1f77bcf86cd799439011', + }, + { + sku: '46493-32', + name: 'Uno Card Game', + price: 3, + category: 'Games', + quantity: 2, + product_id: '505bd76785ebb509fc183733', + }, + ], + shipping: 3, + subtotal: 22.5, + affiliation: 'Google Store', + checkout_id: 'fksdjfsdjfisjf9sdfjsd9f', + }, + anonymousId: '50be5c78-6c3f-4b60-be84-97805a316fb1', + integrations: { All: true }, + }, + destination: { + DestinationDefinition: { Config: { cdkV2Enabled: true } }, + ID: '1pYpzzvcn7AQ2W9GGIAZSsN6Mfq', + Name: 'PINTEREST_TAG', + Config: { + sendAsTestEvent: false, + tagId: '123456789', + advertiserId: '123456', + appId: '429047995', + sendingUnHashedData: true, + enableDeduplication: true, + deduplicationKey: 'messageId', + enhancedMatch: true, + customProperties: [{ properties: 'presentclass' }, { properties: 'presentgrade' }], + eventsMapping: [{ from: 'ABC Searched', to: 'WatchVideo' }], + }, + Enabled: true, + Transformations: [], + }, + metadata: { destintionId: '1pYpzzvcn7AQ2W9GGIAZSsN6Mfq' }, + }, + ], + method: 'POST', + }, + pathSuffix: '', + }, + output: { + response: { + status: 200, + body: [ + { + metadata: { destintionId: '1pYpzzvcn7AQ2W9GGIAZSsN6Mfq' }, + error: + 'Action source must be one of app_android, app_ios, web, offline: Workflow: procWorkflow, Step: validateCommonFields, ChildStep: undefined, OriginalError: Action source must be one of app_android, app_ios, web, offline', + statTags: { + destType: 'PINTEREST_TAG', + errorCategory: 'platform', + feature: 'processor', + implementation: 'cdkV2', + module: 'destination', + }, + statusCode: 400, + }, + ], + }, + }, + }, + { + name: 'pinterest_tag', + description: 'Test 9', + feature: 'processor', + module: 'destination', + version: 'v0', + input: { + request: { + body: [ + { + message: { + type: 'track', + event: 'custom event', + channel: 'web', + sentAt: '2020-08-14T05:30:30.118Z', + context: { + source: 'test', + userAgent: 'chrome', + traits: { + anonymousId: '50be5c78-6c3f-4b60-be84-97805a316fb1', + email: 'abc@gmail.com', + phone: '+1234589947', + ge: 'male', + db: '19950715', + lastname: 'Rudderlabs', + firstName: 'Test', + address: { city: 'Kolkata', state: 'WB', zip: '700114', country: 'IN' }, + }, + device: { advertisingId: 'abc123' }, + library: { name: 'rudder-sdk-ruby-sync', version: '1.0.6' }, + }, + messageId: '7208bbb6-2c4e-45bb-bf5b-ad426f3593e9', + timestamp: '2020-08-14T05:30:30.118Z', + properties: { + tax: 2, + total: 27.5, + coupon: 'hasbros', + revenue: 48, + price: 25, + quantity: 2, + currency: 'USD', + discount: 2.5, + order_id: '50314b8e9bcf000000000000', + requestIP: '123.0.0.0', + numOfItems: 2, + products: [ + { + sku: '45790-32', + url: 'https://www.example.com/product/path', + name: 'Monopoly: 3rd Edition', + price: 19, + category: 'Games', + quantity: 1, + image_url: 'https:///www.example.com/product/path.jpg', + product_id: '507f1f77bcf86cd799439011', + }, + { + sku: '46493-32', + name: 'Uno Card Game', + price: 3, + category: 'Games', + quantity: 2, + product_id: '505bd76785ebb509fc183733', + }, + ], + shipping: 3, + subtotal: 22.5, + affiliation: 'Google Store', + checkout_id: 'fksdjfsdjfisjf9sdfjsd9f', + }, + anonymousId: '50be5c78-6c3f-4b60-be84-97805a316fb1', + integrations: { All: true }, + }, + destination: { + DestinationDefinition: { Config: { cdkV2Enabled: true } }, + ID: '1pYpzzvcn7AQ2W9GGIAZSsN6Mfq', + Name: 'PINTEREST_TAG', + Config: { + sendAsTestEvent: false, + tagId: '123456789', + advertiserId: '123456', + appId: '429047995', + sendingUnHashedData: true, + enableDeduplication: true, + deduplicationKey: 'messageId', + enhancedMatch: true, + sendAsCustomEvent: true, + customProperties: [{ properties: 'presentclass' }, { properties: 'presentgrade' }], + eventsMapping: [{ from: 'ABC Searched', to: 'WatchVideo' }], + }, + Enabled: true, + Transformations: [], + }, + metadata: { destintionId: '1pYpzzvcn7AQ2W9GGIAZSsN6Mfq' }, + }, + ], + method: 'POST', + }, + pathSuffix: '', + }, + output: { + response: { + status: 200, + body: [ + { + metadata: { destintionId: '1pYpzzvcn7AQ2W9GGIAZSsN6Mfq' }, + output: { + version: '1', + type: 'REST', + method: 'POST', + endpoint: 'https://ct.pinterest.com/events/v3', + headers: { 'Content-Type': 'application/json' }, + params: {}, + body: { + JSON: { + event_name: 'custom', + event_time: 1597383030, + event_id: '7208bbb6-2c4e-45bb-bf5b-ad426f3593e9', + app_id: '429047995', + action_source: 'web', + advertiser_id: '123456', + user_data: { + em: ['48ddb93f0b30c475423fe177832912c5bcdce3cc72872f8051627967ef278e08'], + ph: ['d164bbe036663cb5c96835e9ccc6501e9a521127ea62f6359744928ba932413b'], + ln: ['dcf000c2386fb76d22cefc0d118a8511bb75999019cd373df52044bccd1bd251'], + fn: ['9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a08'], + ct: ['6689106ca7922c30b2fd2c175c85bc7fc2d52cc4941bdd7bb622c6cdc6284a85'], + st: ['3b45022ab36728cdae12e709e945bba267c50ee8a91e6e4388539a8e03a3fdcd'], + zp: ['1a4292e00780e18d00e76fde9850aee5344e939ba593333cd5e4b4aa2cd33b0c'], + country: ['582967534d0f909d196b97f9e6921342777aea87b46fa52df165389db1fb8ccf'], + hashed_maids: [ + '6ca13d52ca70c883e0f0bb101e425a89e8624de51db2d2392593af6a84118090', + ], + client_user_agent: 'chrome', + }, + custom_data: { + currency: 'USD', + value: '27.5', + num_items: 2, + order_id: '50314b8e9bcf000000000000', + content_ids: ['507f1f77bcf86cd799439011', '505bd76785ebb509fc183733'], + contents: [ + { quantity: 1, item_price: '19' }, + { quantity: 2, item_price: '3' }, + ], + }, + }, + JSON_ARRAY: {}, + XML: {}, + FORM: {}, + }, + files: {}, + userId: '', + }, + statusCode: 200, + }, + ], + }, + }, + }, + { + name: 'pinterest_tag', + description: 'Test 10', + feature: 'processor', + module: 'destination', + version: 'v0', + input: { + request: { + body: [ + { + message: { + type: 'page', + name: 'ApplicationLoaded', + channel: 'web', + sentAt: '2020-08-14T05:30:30.118Z', + context: { + source: 'test', + userAgent: 'chrome', + traits: { + anonymousId: '50be5c78-6c3f-4b60-be84-97805a316fb1', + email: 'abc@gmail.com', + phone: '+1234589947', + ge: 'male', + db: '19950715', + lastname: 'Rudderlabs', + firstName: 'Test', + address: { city: 'Kolkata', state: 'WB', zip: '700114', country: 'IN' }, + }, + device: { advertisingId: 'abc123' }, + library: { name: 'rudder-sdk-ruby-sync', version: '1.0.6' }, + }, + messageId: '7208bbb6-2c4e-45bb-bf5b-ad426f3593e9', + timestamp: '2020-08-14T05:30:30.118Z', + properties: { path: '', referrer: '', search: '', title: '', url: '' }, + anonymousId: '50be5c78-6c3f-4b60-be84-97805a316fb1', + integrations: { All: true }, + }, + destination: { + DestinationDefinition: { Config: { cdkV2Enabled: true } }, + ID: '1pYpzzvcn7AQ2W9GGIAZSsN6Mfq', + Name: 'PINTEREST_TAG', + Config: { + sendAsTestEvent: false, + tagId: '123456789', + advertiserId: '123456', + appId: '429047995', + sendingUnHashedData: true, + enableDeduplication: true, + deduplicationKey: 'messageId', + enhancedMatch: true, + customProperties: [{ properties: 'presentclass' }, { properties: 'presentgrade' }], + eventsMapping: [{ from: 'ABC Searched', to: 'WatchVideo' }], + }, + Enabled: true, + Transformations: [], + }, + metadata: { destintionId: '1pYpzzvcn7AQ2W9GGIAZSsN6Mfq' }, + }, + ], + method: 'POST', + }, + pathSuffix: '', + }, + output: { + response: { + status: 200, + body: [ + { + metadata: { destintionId: '1pYpzzvcn7AQ2W9GGIAZSsN6Mfq' }, + output: { + version: '1', + type: 'REST', + method: 'POST', + endpoint: 'https://ct.pinterest.com/events/v3', + headers: { 'Content-Type': 'application/json' }, + params: {}, + body: { + JSON: { + event_time: 1597383030, + event_id: '7208bbb6-2c4e-45bb-bf5b-ad426f3593e9', + action_source: 'web', + event_name: 'page_visit', + app_id: '429047995', + advertiser_id: '123456', + user_data: { + em: ['48ddb93f0b30c475423fe177832912c5bcdce3cc72872f8051627967ef278e08'], + ph: ['d164bbe036663cb5c96835e9ccc6501e9a521127ea62f6359744928ba932413b'], + ln: ['dcf000c2386fb76d22cefc0d118a8511bb75999019cd373df52044bccd1bd251'], + fn: ['9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a08'], + ct: ['6689106ca7922c30b2fd2c175c85bc7fc2d52cc4941bdd7bb622c6cdc6284a85'], + st: ['3b45022ab36728cdae12e709e945bba267c50ee8a91e6e4388539a8e03a3fdcd'], + zp: ['1a4292e00780e18d00e76fde9850aee5344e939ba593333cd5e4b4aa2cd33b0c'], + country: ['582967534d0f909d196b97f9e6921342777aea87b46fa52df165389db1fb8ccf'], + hashed_maids: [ + '6ca13d52ca70c883e0f0bb101e425a89e8624de51db2d2392593af6a84118090', + ], + client_user_agent: 'chrome', + }, + }, + JSON_ARRAY: {}, + XML: {}, + FORM: {}, + }, + files: {}, + userId: '', + }, + statusCode: 200, + }, + ], + }, + }, + }, + { + name: 'pinterest_tag', + description: 'Test 11', + feature: 'processor', + module: 'destination', + version: 'v0', + input: { + request: { + body: [ + { + message: { + type: 'page', + name: 'ApplicationLoaded', + category: 'test category', + channel: 'web', + sentAt: '2020-08-14T05:30:30.118Z', + context: { + source: 'test', + userAgent: 'chrome', + traits: { + anonymousId: '50be5c78-6c3f-4b60-be84-97805a316fb1', + email: 'abc@gmail.com', + phone: '+1234589947', + ge: 'male', + db: '19950715', + lastname: 'Rudderlabs', + firstName: 'Test', + address: { city: 'Kolkata', state: 'WB', zip: '700114', country: 'IN' }, + }, + device: { advertisingId: 'abc123' }, + library: { name: 'rudder-sdk-ruby-sync', version: '1.0.6' }, + }, + messageId: '7208bbb6-2c4e-45bb-bf5b-ad426f3593e9', + timestamp: '2020-08-14T05:30:30.118Z', + properties: { path: '', referrer: '', search: '', title: '', url: '' }, + anonymousId: '50be5c78-6c3f-4b60-be84-97805a316fb1', + integrations: { All: true }, + }, + destination: { + DestinationDefinition: { Config: { cdkV2Enabled: true } }, + ID: '1pYpzzvcn7AQ2W9GGIAZSsN6Mfq', + Name: 'PINTEREST_TAG', + Config: { + sendAsTestEvent: false, + tagId: '123456789', + advertiserId: '123456', + appId: '429047995', + sendingUnHashedData: true, + enableDeduplication: true, + deduplicationKey: 'messageId', + enhancedMatch: true, + customProperties: [{ properties: 'presentclass' }, { properties: 'presentgrade' }], + eventsMapping: [{ from: 'ABC Searched', to: 'WatchVideo' }], + }, + Enabled: true, + Transformations: [], + }, + metadata: { destintionId: '1pYpzzvcn7AQ2W9GGIAZSsN6Mfq' }, + }, + ], + method: 'POST', + }, + pathSuffix: '', + }, + output: { + response: { + status: 200, + body: [ + { + metadata: { destintionId: '1pYpzzvcn7AQ2W9GGIAZSsN6Mfq' }, + output: { + version: '1', + type: 'REST', + method: 'POST', + endpoint: 'https://ct.pinterest.com/events/v3', + headers: { 'Content-Type': 'application/json' }, + params: {}, + body: { + JSON: { + event_time: 1597383030, + event_id: '7208bbb6-2c4e-45bb-bf5b-ad426f3593e9', + action_source: 'web', + event_name: 'view_category', + app_id: '429047995', + advertiser_id: '123456', + user_data: { + em: ['48ddb93f0b30c475423fe177832912c5bcdce3cc72872f8051627967ef278e08'], + ph: ['d164bbe036663cb5c96835e9ccc6501e9a521127ea62f6359744928ba932413b'], + ln: ['dcf000c2386fb76d22cefc0d118a8511bb75999019cd373df52044bccd1bd251'], + fn: ['9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a08'], + ct: ['6689106ca7922c30b2fd2c175c85bc7fc2d52cc4941bdd7bb622c6cdc6284a85'], + st: ['3b45022ab36728cdae12e709e945bba267c50ee8a91e6e4388539a8e03a3fdcd'], + zp: ['1a4292e00780e18d00e76fde9850aee5344e939ba593333cd5e4b4aa2cd33b0c'], + country: ['582967534d0f909d196b97f9e6921342777aea87b46fa52df165389db1fb8ccf'], + hashed_maids: [ + '6ca13d52ca70c883e0f0bb101e425a89e8624de51db2d2392593af6a84118090', + ], + client_user_agent: 'chrome', + }, + }, + JSON_ARRAY: {}, + XML: {}, + FORM: {}, + }, + files: {}, + userId: '', + }, + statusCode: 200, + }, + ], + }, + }, + }, + { + name: 'pinterest_tag', + description: 'Test 12', + feature: 'processor', + module: 'destination', + version: 'v0', + input: { + request: { + body: [ + { + message: { + type: 'page', + name: 'ApplicationLoaded', + category: 'test category', + channel: 'web', + sentAt: '2020-08-14T05:30:30.118Z', + context: { + source: 'test', + userAgent: 'chrome', + traits: { + anonymousId: '50be5c78-6c3f-4b60-be84-97805a316fb1', + email: 'abc@gmail.com', + phone: '+1234589947', + ge: 'male', + db: '19950715', + lastname: 'Rudderlabs', + firstName: 'Test', + address: { city: 'Kolkata', state: 'WB', zip: '700114', country: 'IN' }, + }, + device: { advertisingId: 'abc123', adTrackingEnabled: true }, + library: { name: 'rudder-sdk-ruby-sync', version: '1.0.6' }, + }, + messageId: '7208bbb6-2c4e-45bb-bf5b-ad426f3593e9', + timestamp: '2020-08-14T05:30:30.118Z', + properties: { path: '', referrer: '', search: '', title: '', url: '' }, + anonymousId: '50be5c78-6c3f-4b60-be84-97805a316fb1', + integrations: { All: true }, + }, + destination: { + DestinationDefinition: { Config: { cdkV2Enabled: true } }, + ID: '1pYpzzvcn7AQ2W9GGIAZSsN6Mfq', + Name: 'PINTEREST_TAG', + Config: { + sendAsTestEvent: false, + tagId: '123456789', + advertiserId: '123456', + appId: '429047995', + sendingUnHashedData: true, + enableDeduplication: true, + deduplicationKey: 'messageId', + enhancedMatch: true, + customProperties: [{ properties: 'presentclass' }, { properties: 'presentgrade' }], + eventsMapping: [{ from: 'ABC Searched', to: 'WatchVideo' }], + }, + Enabled: true, + Transformations: [], + }, + metadata: { destintionId: '1pYpzzvcn7AQ2W9GGIAZSsN6Mfq' }, + }, + ], + method: 'POST', + }, + pathSuffix: '', + }, + output: { + response: { + status: 200, + body: [ + { + metadata: { destintionId: '1pYpzzvcn7AQ2W9GGIAZSsN6Mfq' }, + output: { + version: '1', + type: 'REST', + method: 'POST', + endpoint: 'https://ct.pinterest.com/events/v3', + headers: { 'Content-Type': 'application/json' }, + params: {}, + body: { + JSON: { + event_time: 1597383030, + opt_out: false, + event_id: '7208bbb6-2c4e-45bb-bf5b-ad426f3593e9', + action_source: 'web', + event_name: 'view_category', + app_id: '429047995', + advertiser_id: '123456', + user_data: { + em: ['48ddb93f0b30c475423fe177832912c5bcdce3cc72872f8051627967ef278e08'], + ph: ['d164bbe036663cb5c96835e9ccc6501e9a521127ea62f6359744928ba932413b'], + ln: ['dcf000c2386fb76d22cefc0d118a8511bb75999019cd373df52044bccd1bd251'], + fn: ['9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a08'], + ct: ['6689106ca7922c30b2fd2c175c85bc7fc2d52cc4941bdd7bb622c6cdc6284a85'], + st: ['3b45022ab36728cdae12e709e945bba267c50ee8a91e6e4388539a8e03a3fdcd'], + zp: ['1a4292e00780e18d00e76fde9850aee5344e939ba593333cd5e4b4aa2cd33b0c'], + country: ['582967534d0f909d196b97f9e6921342777aea87b46fa52df165389db1fb8ccf'], + hashed_maids: [ + '6ca13d52ca70c883e0f0bb101e425a89e8624de51db2d2392593af6a84118090', + ], + client_user_agent: 'chrome', + }, + }, + JSON_ARRAY: {}, + XML: {}, + FORM: {}, + }, + files: {}, + userId: '', + }, + statusCode: 200, + }, + ], + }, + }, + }, + { + name: 'pinterest_tag', + description: 'Test 13', + feature: 'processor', + module: 'destination', + version: 'v0', + input: { + request: { + body: [ + { + message: { + type: 'page', + name: 'ApplicationLoaded', + category: 'test category', + channel: 'web', + sentAt: '2020-08-14T05:30:30.118Z', + context: { + source: 'test', + userAgent: 'chrome', + ip: '127.0.0.0', + traits: { + anonymousId: '50be5c78-6c3f-4b60-be84-97805a316fb1', + phone: '+1234589947', + ge: 'male', + db: '19950715', + lastname: 'Rudderlabs', + firstName: 'Test', + address: { city: 'Kolkata', state: 'WB', zip: '700114', country: 'IN' }, + }, + device: { adTrackingEnabled: false }, + library: { name: 'rudder-sdk-ruby-sync', version: '1.0.6' }, + }, + messageId: '7208bbb6-2c4e-45bb-bf5b-ad426f3593e9', + timestamp: '2020-08-14T05:30:30.118Z', + properties: { path: '', referrer: '', search: '', title: '', url: '' }, + anonymousId: '50be5c78-6c3f-4b60-be84-97805a316fb1', + integrations: { All: true }, + }, + destination: { + DestinationDefinition: { Config: { cdkV2Enabled: true } }, + ID: '1pYpzzvcn7AQ2W9GGIAZSsN6Mfq', + Name: 'PINTEREST_TAG', + Config: { + sendAsTestEvent: false, + tagId: '123456789', + advertiserId: '123456', + appId: '429047995', + sendingUnHashedData: true, + enableDeduplication: true, + deduplicationKey: 'messageId', + enhancedMatch: true, + customProperties: [{ properties: 'presentclass' }, { properties: 'presentgrade' }], + eventsMapping: [{ from: 'ABC Searched', to: 'WatchVideo' }], + }, + Enabled: true, + Transformations: [], + }, + metadata: { destintionId: '1pYpzzvcn7AQ2W9GGIAZSsN6Mfq' }, + }, + ], + method: 'POST', + }, + pathSuffix: '', + }, + output: { + response: { + status: 200, + body: [ + { + metadata: { destintionId: '1pYpzzvcn7AQ2W9GGIAZSsN6Mfq' }, + output: { + version: '1', + type: 'REST', + method: 'POST', + endpoint: 'https://ct.pinterest.com/events/v3', + headers: { 'Content-Type': 'application/json' }, + params: {}, + body: { + JSON: { + event_time: 1597383030, + opt_out: true, + event_id: '7208bbb6-2c4e-45bb-bf5b-ad426f3593e9', + action_source: 'web', + event_name: 'view_category', + app_id: '429047995', + advertiser_id: '123456', + user_data: { + ph: ['d164bbe036663cb5c96835e9ccc6501e9a521127ea62f6359744928ba932413b'], + ln: ['dcf000c2386fb76d22cefc0d118a8511bb75999019cd373df52044bccd1bd251'], + fn: ['9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a08'], + ct: ['6689106ca7922c30b2fd2c175c85bc7fc2d52cc4941bdd7bb622c6cdc6284a85'], + st: ['3b45022ab36728cdae12e709e945bba267c50ee8a91e6e4388539a8e03a3fdcd'], + zp: ['1a4292e00780e18d00e76fde9850aee5344e939ba593333cd5e4b4aa2cd33b0c'], + country: ['582967534d0f909d196b97f9e6921342777aea87b46fa52df165389db1fb8ccf'], + client_ip_address: '127.0.0.0', + client_user_agent: 'chrome', + }, + }, + JSON_ARRAY: {}, + XML: {}, + FORM: {}, + }, + files: {}, + userId: '', + }, + statusCode: 200, + }, + ], + }, + }, + }, + { + name: 'pinterest_tag', + description: 'Test 14', + feature: 'processor', + module: 'destination', + version: 'v0', + input: { + request: { + body: [ + { + message: { + type: 'page', + name: 'ApplicationLoaded', + category: 'test category', + channel: 'web', + sentAt: '2020-08-14T05:30:30.118Z', + context: { + source: 'test', + userAgent: 'chrome', + requestIP: '127.0.0.0', + traits: { + anonymousId: '50be5c78-6c3f-4b60-be84-97805a316fb1', + phone: 'Hashed phone', + gender: 'Hashed Gender', + dob: 'Hashed DB', + lastname: 'Hashed Lastname', + firstName: 'Hashed FirstName', + address: { + city: 'Hashed City', + state: 'Hashed State', + zip: 'Hashed Zip', + country: 'Hashed country', + }, + }, + device: { adTrackingEnabled: false, advertisingId: 'Hashed maids' }, + library: { name: 'rudder-sdk-ruby-sync', version: '1.0.6' }, + }, + messageId: '7208bbb6-2c4e-45bb-bf5b-ad426f3593e9', + timestamp: '2020-08-14T05:30:30.118Z', + properties: { path: '', referrer: '', search: '', title: '', url: '' }, + anonymousId: '50be5c78-6c3f-4b60-be84-97805a316fb1', + }, + destination: { + DestinationDefinition: { Config: { cdkV2Enabled: true } }, + ID: '1pYpzzvcn7AQ2W9GGIAZSsN6Mfq', + Name: 'PINTEREST_TAG', + Config: { + sendAsTestEvent: false, + tagId: '123456789', + advertiserId: '123456', + appId: '429047995', + sendingUnHashedData: false, + enhancedMatch: true, + customProperties: [{ properties: 'presentclass' }, { properties: 'presentgrade' }], + eventsMapping: [{ from: 'ABC Searched', to: 'WatchVideo' }], + }, + Enabled: true, + Transformations: [], + }, + metadata: { destintionId: '1pYpzzvcn7AQ2W9GGIAZSsN6Mfq' }, + }, + ], + method: 'POST', + }, + pathSuffix: '', + }, + output: { + response: { + status: 200, + body: [ + { + metadata: { destintionId: '1pYpzzvcn7AQ2W9GGIAZSsN6Mfq' }, + output: { + version: '1', + type: 'REST', + method: 'POST', + endpoint: 'https://ct.pinterest.com/events/v3', + headers: { 'Content-Type': 'application/json' }, + params: {}, + body: { + JSON: { + event_time: 1597383030, + action_source: 'web', + opt_out: true, + event_name: 'view_category', + app_id: '429047995', + advertiser_id: '123456', + event_id: '7208bbb6-2c4e-45bb-bf5b-ad426f3593e9', + user_data: { + ph: ['Hashed phone'], + db: ['Hashed DB'], + ln: ['Hashed Lastname'], + fn: ['Hashed FirstName'], + ct: ['Hashed City'], + st: ['Hashed State'], + zp: ['Hashed Zip'], + country: ['Hashed country'], + hashed_maids: ['Hashed maids'], + ge: ['Hashed Gender'], + client_user_agent: 'chrome', + }, + }, + JSON_ARRAY: {}, + XML: {}, + FORM: {}, + }, + files: {}, + userId: '', + }, + statusCode: 200, + }, + ], + }, + }, + }, + { + name: 'pinterest_tag', + description: 'Test 15', + feature: 'processor', + module: 'destination', + version: 'v0', + input: { + request: { + body: [ + { + message: { + type: 'page', + name: 'ApplicationLoaded', + category: 'test category', + channel: 'web', + sentAt: '2020-08-14T05:30:30.118Z', + context: { + source: 'test', + userAgent: 'chrome', + requestIP: '127.0.0.0', + traits: { + anonymousId: '50be5c78-6c3f-4b60-be84-97805a316fb1', + phone: ['Hashed phone', 'Hashed phone1'], + gender: ['Hashed Gender', 'Hashed Gender1'], + dob: ['Hashed DB', 'Hashed DB1'], + lastname: ['Hashed Lastname', 'Hashed Lastname1'], + firstName: ['Hashed FirstName', 'Hashed FirstName1'], + address: { + city: ['Hashed City', 'Hashed City1'], + state: ['Hashed State', 'Hashed State1'], + zip: ['Hashed Zip', 'Hashed Zip1'], + country: ['Hashed country', 'Hashed country1'], + }, + }, + device: { adTrackingEnabled: false, advertisingId: 'Hashed maids' }, + library: { name: 'rudder-sdk-ruby-sync', version: '1.0.6' }, + }, + messageId: '7208bbb6-2c4e-45bb-bf5b-ad426f3593e9', + timestamp: '2020-08-14T05:30:30.118Z', + properties: { path: '', referrer: '', search: '', title: '', url: '' }, + anonymousId: '50be5c78-6c3f-4b60-be84-97805a316fb1', + }, + destination: { + DestinationDefinition: { Config: { cdkV2Enabled: true } }, + ID: '1pYpzzvcn7AQ2W9GGIAZSsN6Mfq', + Name: 'PINTEREST_TAG', + Config: { + sendAsTestEvent: false, + tagId: '123456789', + advertiserId: '123456', + appId: '429047995', + sendingUnHashedData: false, + enhancedMatch: true, + customProperties: [{ properties: 'presentclass' }, { properties: 'presentgrade' }], + eventsMapping: [{ from: 'ABC Searched', to: 'WatchVideo' }], + }, + Enabled: true, + Transformations: [], + }, + metadata: { destintionId: '1pYpzzvcn7AQ2W9GGIAZSsN6Mfq' }, + }, + ], + method: 'POST', + }, + pathSuffix: '', + }, + output: { + response: { + status: 200, + body: [ + { + metadata: { destintionId: '1pYpzzvcn7AQ2W9GGIAZSsN6Mfq' }, + output: { + version: '1', + type: 'REST', + method: 'POST', + endpoint: 'https://ct.pinterest.com/events/v3', + headers: { 'Content-Type': 'application/json' }, + params: {}, + body: { + JSON: { + event_time: 1597383030, + action_source: 'web', + opt_out: true, + event_name: 'view_category', + app_id: '429047995', + advertiser_id: '123456', + event_id: '7208bbb6-2c4e-45bb-bf5b-ad426f3593e9', + user_data: { + ph: ['Hashed phone', 'Hashed phone1'], + db: ['Hashed DB', 'Hashed DB1'], + ln: ['Hashed Lastname', 'Hashed Lastname1'], + fn: ['Hashed FirstName', 'Hashed FirstName1'], + ct: ['Hashed City', 'Hashed City1'], + st: ['Hashed State', 'Hashed State1'], + zp: ['Hashed Zip', 'Hashed Zip1'], + country: ['Hashed country', 'Hashed country1'], + hashed_maids: ['Hashed maids'], + ge: ['Hashed Gender', 'Hashed Gender1'], + client_user_agent: 'chrome', + }, + }, + JSON_ARRAY: {}, + XML: {}, + FORM: {}, + }, + files: {}, + userId: '', + }, + statusCode: 200, + }, + ], + }, + }, + }, + { + name: 'pinterest_tag', + description: 'Test 16', + feature: 'processor', + module: 'destination', + version: 'v0', + input: { + request: { + body: [ + { + message: { + name: 'Test Tool', + type: 'page', + sentAt: '2023-02-01T00:00:00.379Z', + userId: '', + channel: 'web', + context: { + os: { name: '', version: '' }, + app: { + name: 'RudderLabs JavaScript SDK', + version: '2.22.3', + namespace: 'com.rudderlabs.javascript', + }, + page: { + url: 'https://www.abc.com/s598907', + path: '/test-path/s598907', + title: 'Test Tool + Reviews | Rudderstack', + search: '', + tab_url: 'https://www.abc.com/s598907', + referrer: '$direct', + initial_referrer: '$direct', + referring_domain: '', + initial_referring_domain: '', + }, + locale: 'en-US', + screen: { + width: 1024, + height: 1024, + density: 1, + innerWidth: 1024, + innerHeight: 1024, + }, + traits: {}, + library: { name: 'RudderLabs JavaScript SDK', version: '2.22.3' }, + campaign: {}, + doNotSell: false, + sessionId: 1675209600203, + userAgent: + 'Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko; compatible; Googlebot/2.1; +http://www.google.com/bot.html) Chrome/109.0.5414.101 Safari/537.36', + gaClientId: { + integrations: { + 'Google Ads': { gclid: '' }, + 'Google Analytics': { clientId: '1518934611.1234569600' }, + }, + }, + sessionStart: true, + }, + rudderId: '7291a10f-e7dd-49f9-94ce-0154f53897y6', + messageId: '1c77a616-13a7-4a2e-a8e7-e1a0971897y6', + timestamp: '2023-02-01T12:47:30.030Z', + properties: { + sku: '45790-32', + url: 'https://www.abc.com/23rty', + name: 'Test Tool', + path: '/test-path/tool', + email: '', + title: 'Test Tool + Reviews | Rudderstack', + review: { reviewCount: 2, averageReview: 5, reviewContentID: ['238300132'] }, + search: '', + tab_url: 'https://www.abc/com', + pageInfo: { + pageId: 's592897', + category: { + pageType: 'product', + subCategory: 'Dining & Kitchen Furniture', + pageTemplate: 'product detail grouper', + primaryCategory: 'Furniture', + }, + brandType: 'new brand', + }, + referrer: '', + subCategory: 'Dining & Kitchen Furniture', + primaryCategory: 'Furniture', + initial_referrer: '$direct', + referring_domain: '', + initial_referring_domain: '', + }, + receivedAt: '2023-02-01T12:47:30.038Z', + request_ip: '66.249.72.218', + anonymousId: 'a61c77a6-1613-474a-aee8-e7e1a0971047', + integrations: { All: true }, + originalTimestamp: '2023-02-01T00:00:00.371Z', + }, + destination: { + DestinationDefinition: { Config: { cdkV2Enabled: true } }, + ID: '1pYpzzvcn7AQ2W9GGIAZSsN6Mfq', + Name: 'PINTEREST_TAG', + Config: { + sendAsTestEvent: false, + tagId: '123456789', + advertiserId: '123478671210', + sendingUnHashedData: false, + enableDeduplication: false, + eventsMapping: [ + { from: 'Product Added', to: 'AddToCart' }, + { from: 'Order Completed', to: 'Checkout' }, + { from: 'Product Viewed', to: 'PageVisit' }, + { from: 'Lead', to: 'Lead' }, + { from: 'Signup', to: 'Signup' }, + ], + enhancedMatch: true, + }, + Enabled: true, + Transformations: [], + }, + metadata: { destintionId: '1pYpzzvcn7AQ2W9GGIAZSsN6Mfq' }, + }, + ], + method: 'POST', + }, + pathSuffix: '', + }, + output: { + response: { + status: 200, + body: [ + { + metadata: { destintionId: '1pYpzzvcn7AQ2W9GGIAZSsN6Mfq' }, + output: { + body: { + JSON: { + event_time: 1675255650, + event_source_url: 'https://www.abc.com/s598907', + action_source: 'web', + app_name: 'RudderLabs JavaScript SDK', + app_version: '2.22.3', + language: 'en-US', + event_id: '1c77a616-13a7-4a2e-a8e7-e1a0971897y6', + advertiser_id: '123478671210', + user_data: { + client_ip_address: '66.249.72.218', + client_user_agent: + 'Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko; compatible; Googlebot/2.1; +http://www.google.com/bot.html) Chrome/109.0.5414.101 Safari/537.36', + }, + event_name: 'page_visit', + }, + JSON_ARRAY: {}, + XML: {}, + FORM: {}, + }, + version: '1', + type: 'REST', + method: 'POST', + endpoint: 'https://ct.pinterest.com/events/v3', + headers: { 'Content-Type': 'application/json' }, + params: {}, + files: {}, + userId: '', + }, + statusCode: 200, + }, + ], + }, + }, + }, + { + name: 'pinterest_tag', + description: 'Test 17', + feature: 'processor', + module: 'destination', + version: 'v0', + input: { + request: { + body: [ + { + message: { + type: 'track', + event: 'test', + channel: 'web', + sentAt: '2020-08-14T05:30:30.118Z', + context: { + source: 'test', + userAgent: 'chrome', + traits: { + anonymousId: '50be5c78-6c3f-4b60-be84-97805a316fb1', + email: 'abc@gmail.com', + phone: '+1234589947', + ge: 'male', + db: '19950715', + lastname: 'Rudderlabs', + firstName: 'Test', + address: { city: 'Kolkata', state: 'WB', zip: '700114', country: 'IN' }, + }, + device: { advertisingId: 'abc123' }, + library: { name: 'rudder-sdk-ruby-sync', version: '1.0.6' }, + }, + messageId: '7208bbb6-2c4e-45bb-bf5b-ad426f3593e9', + timestamp: '2020-08-14T05:30:30.118Z', + properties: { + sku: '1234', + tax: 2, + total: 27.5, + coupon: 'hasbros', + revenue: 48, + currency: 'USD', + discount: 2.5, + order_id: '50314b8e9bcf000000000000', + requestIP: '123.0.0.0', + shipping: 3, + subtotal: 22.5, + affiliation: 'Google Store', + checkout_id: 'fksdjfsdjfisjf9sdfjsd9f', + }, + anonymousId: '50be5c78-6c3f-4b60-be84-97805a316fb1', + integrations: { All: true }, + }, + destination: { + DestinationDefinition: { Config: { cdkV2Enabled: true } }, + ID: '1pYpzzvcn7AQ2W9GGIAZSsN6Mfq', + Name: 'PINTEREST_TAG', + Config: { + sendAsTestEvent: false, + tagId: '123456789', + advertiserId: '123456', + appId: '429047995', + sendingUnHashedData: true, + enableDeduplication: true, + deduplicationKey: 'messageId', + enhancedMatch: true, + sendAsCustomEvent: true, + customProperties: [{ properties: 'presentclass' }, { properties: 'presentgrade' }], + eventsMapping: [{ from: 'ABC Searched', to: 'WatchVideo' }], + }, + Enabled: true, + Transformations: [], + }, + metadata: { destintionId: '1pYpzzvcn7AQ2W9GGIAZSsN6Mfq' }, + }, + ], + method: 'POST', + }, + pathSuffix: '', + }, + output: { + response: { + status: 200, + body: [ + { + metadata: { destintionId: '1pYpzzvcn7AQ2W9GGIAZSsN6Mfq' }, + output: { + version: '1', + type: 'REST', + method: 'POST', + endpoint: 'https://ct.pinterest.com/events/v3', + headers: { 'Content-Type': 'application/json' }, + params: {}, + body: { + JSON: { + event_name: 'custom', + event_time: 1597383030, + action_source: 'web', + event_id: '7208bbb6-2c4e-45bb-bf5b-ad426f3593e9', + app_id: '429047995', + advertiser_id: '123456', + user_data: { + em: ['48ddb93f0b30c475423fe177832912c5bcdce3cc72872f8051627967ef278e08'], + ph: ['d164bbe036663cb5c96835e9ccc6501e9a521127ea62f6359744928ba932413b'], + ln: ['dcf000c2386fb76d22cefc0d118a8511bb75999019cd373df52044bccd1bd251'], + fn: ['9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a08'], + ct: ['6689106ca7922c30b2fd2c175c85bc7fc2d52cc4941bdd7bb622c6cdc6284a85'], + st: ['3b45022ab36728cdae12e709e945bba267c50ee8a91e6e4388539a8e03a3fdcd'], + zp: ['1a4292e00780e18d00e76fde9850aee5344e939ba593333cd5e4b4aa2cd33b0c'], + country: ['582967534d0f909d196b97f9e6921342777aea87b46fa52df165389db1fb8ccf'], + hashed_maids: [ + '6ca13d52ca70c883e0f0bb101e425a89e8624de51db2d2392593af6a84118090', + ], + client_user_agent: 'chrome', + }, + custom_data: { + currency: 'USD', + value: '27.5', + order_id: '50314b8e9bcf000000000000', + num_items: 0, + content_ids: ['1234'], + contents: [{ quantity: 1, item_price: 'undefined' }], + }, + }, + JSON_ARRAY: {}, + XML: {}, + FORM: {}, + }, + files: {}, + userId: '', + }, + statusCode: 200, + }, + ], + }, + }, + }, + { + name: 'pinterest_tag', + description: 'Test 18', + feature: 'processor', + module: 'destination', + version: 'v0', + input: { + request: { + body: [ + { + message: { + type: 'track', + event: 'custom event', + channel: 'web', + sentAt: '2020-08-14T05:30:30.118Z', + context: { + source: 'test', + userAgent: 'chrome', + traits: { + anonymousId: '50be5c78-6c3f-4b60-be84-97805a316fb1', + email: 'abc@gmail.com', + phone: '+1234589947', + ge: 'male', + db: '19950715', + lastname: 'Rudderlabs', + firstName: 'Test', + address: { city: 'Kolkata', state: 'WB', zip: '700114', country: 'IN' }, + }, + device: { advertisingId: 'abc123' }, + library: { name: 'rudder-sdk-ruby-sync', version: '1.0.6' }, + }, + messageId: '7208bbb6-2c4e-45bb-bf5b-ad426f3593e9', + timestamp: '2020-08-14T05:30:30.118Z', + properties: { + sku: '1234', + tax: 2, + total: 27.5, + coupon: 'hasbros', + revenue: 48, + currency: 'USD', + discount: 2.5, + order_id: '50314b8e9bcf000000000000', + requestIP: '123.0.0.0', + shipping: 3, + subtotal: 22.5, + affiliation: 'Google Store', + checkout_id: 'fksdjfsdjfisjf9sdfjsd9f', + products: [ + { + sku: '45790-32', + url: 'https://www.example.com/product/path', + name: 'Monopoly: 3rd Edition', + price: 19, + category: 'Games', + quantity: 1, + image_url: 'https:///www.example.com/product/path.jpg', + product_id: '507f1f77bcf86cd799439011', + }, + ], + }, + anonymousId: '50be5c78-6c3f-4b60-be84-97805a316fb1', + integrations: { All: true }, + }, + destination: { + DestinationDefinition: { Config: { cdkV2Enabled: true } }, + ID: '1pYpzzvcn7AQ2W9GGIAZSsN6Mfq', + Name: 'PINTEREST_TAG', + Config: { + sendAsTestEvent: false, + tagId: '123456789', + advertiserId: '123456', + appId: '429047995', + sendingUnHashedData: true, + enableDeduplication: true, + deduplicationKey: 'messageId', + enhancedMatch: true, + sendAsCustomEvent: true, + customProperties: [{ properties: 'presentclass' }, { properties: 'presentgrade' }], + eventsMapping: [{ from: 'ABC Searched', to: 'WatchVideo' }], + }, + Enabled: true, + Transformations: [], + }, + metadata: { destintionId: '1pYpzzvcn7AQ2W9GGIAZSsN6Mfq' }, + }, + ], + method: 'POST', + }, + pathSuffix: '', + }, + output: { + response: { + status: 200, + body: [ + { + metadata: { destintionId: '1pYpzzvcn7AQ2W9GGIAZSsN6Mfq' }, + output: { + version: '1', + type: 'REST', + method: 'POST', + endpoint: 'https://ct.pinterest.com/events/v3', + headers: { 'Content-Type': 'application/json' }, + params: {}, + body: { + JSON: { + event_name: 'custom', + event_time: 1597383030, + action_source: 'web', + event_id: '7208bbb6-2c4e-45bb-bf5b-ad426f3593e9', + app_id: '429047995', + advertiser_id: '123456', + user_data: { + em: ['48ddb93f0b30c475423fe177832912c5bcdce3cc72872f8051627967ef278e08'], + ph: ['d164bbe036663cb5c96835e9ccc6501e9a521127ea62f6359744928ba932413b'], + ln: ['dcf000c2386fb76d22cefc0d118a8511bb75999019cd373df52044bccd1bd251'], + fn: ['9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a08'], + ct: ['6689106ca7922c30b2fd2c175c85bc7fc2d52cc4941bdd7bb622c6cdc6284a85'], + st: ['3b45022ab36728cdae12e709e945bba267c50ee8a91e6e4388539a8e03a3fdcd'], + zp: ['1a4292e00780e18d00e76fde9850aee5344e939ba593333cd5e4b4aa2cd33b0c'], + country: ['582967534d0f909d196b97f9e6921342777aea87b46fa52df165389db1fb8ccf'], + hashed_maids: [ + '6ca13d52ca70c883e0f0bb101e425a89e8624de51db2d2392593af6a84118090', + ], + client_user_agent: 'chrome', + }, + custom_data: { + currency: 'USD', + value: '27.5', + order_id: '50314b8e9bcf000000000000', + num_items: 1, + content_ids: ['507f1f77bcf86cd799439011'], + contents: [{ quantity: 1, item_price: '19' }], + }, + }, + JSON_ARRAY: {}, + XML: {}, + FORM: {}, + }, + files: {}, + userId: '', + }, + statusCode: 200, + }, + ], + }, + }, + }, + { + name: 'pinterest_tag', + description: 'Test 19', + feature: 'processor', + module: 'destination', + version: 'v0', + input: { + request: { + body: [ + { + message: { + type: 'track', + event: 'custom event', + channel: 'web', + sentAt: '2020-08-14T05:30:30.118Z', + context: { + source: 'test', + userAgent: 'chrome', + traits: { + anonymousId: '50be5c78-6c3f-4b60-be84-97805a316fb1', + email: 'abc@gmail.com', + phone: '+1234589947', + ge: 'male', + db: '19950715', + lastname: 'Rudderlabs', + firstName: 'Test', + address: { city: 'Kolkata', state: 'WB', zip: '700114', country: 'IN' }, + }, + device: { advertisingId: 'abc123' }, + library: { name: 'rudder-sdk-ruby-sync', version: '1.0.6' }, + }, + messageId: '7208bbb6-2c4e-45bb-bf5b-ad426f3593e9', + timestamp: '2020-08-14T05:30:30.118Z', + properties: { + tax: 2, + total: 27.5, + coupon: 'hasbros', + revenue: 48, + currency: 'USD', + discount: 2.5, + order_id: '50314b8e9bcf000000000000', + requestIP: '123.0.0.0', + shipping: 3, + subtotal: 22.5, + affiliation: 'Google Store', + checkout_id: 'fksdjfsdjfisjf9sdfjsd9f', + }, + anonymousId: '50be5c78-6c3f-4b60-be84-97805a316fb1', + integrations: { All: true }, + }, + destination: { + DestinationDefinition: { Config: { cdkV2Enabled: true } }, + ID: '1pYpzzvcn7AQ2W9GGIAZSsN6Mfq', + Name: 'PINTEREST_TAG', + Config: { + sendAsTestEvent: false, + tagId: '123456789', + advertiserId: '123456', + appId: '429047995', + sendingUnHashedData: true, + enableDeduplication: true, + deduplicationKey: 'messageId', + enhancedMatch: true, + customProperties: [{ properties: 'presentclass' }, { properties: 'presentgrade' }], + eventsMapping: [{ from: 'ABC Searched', to: 'WatchVideo' }], + }, + Enabled: true, + Transformations: [], + }, + metadata: { destintionId: '1pYpzzvcn7AQ2W9GGIAZSsN6Mfq' }, + }, + ], + method: 'POST', + }, + pathSuffix: '', + }, + output: { + response: { + status: 200, + body: [ + { + metadata: { destintionId: '1pYpzzvcn7AQ2W9GGIAZSsN6Mfq' }, + output: { + body: { + FORM: {}, + JSON: { + action_source: 'web', + advertiser_id: '123456', + app_id: '429047995', + custom_data: { + contents: [{ item_price: 'undefined', quantity: 1 }], + currency: 'USD', + num_items: 0, + order_id: '50314b8e9bcf000000000000', + value: '27.5', + }, + event_id: '7208bbb6-2c4e-45bb-bf5b-ad426f3593e9', + event_name: 'custom event', + event_time: 1597383030, + user_data: { + client_user_agent: 'chrome', + country: ['582967534d0f909d196b97f9e6921342777aea87b46fa52df165389db1fb8ccf'], + ct: ['6689106ca7922c30b2fd2c175c85bc7fc2d52cc4941bdd7bb622c6cdc6284a85'], + em: ['48ddb93f0b30c475423fe177832912c5bcdce3cc72872f8051627967ef278e08'], + fn: ['9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a08'], + hashed_maids: [ + '6ca13d52ca70c883e0f0bb101e425a89e8624de51db2d2392593af6a84118090', + ], + ln: ['dcf000c2386fb76d22cefc0d118a8511bb75999019cd373df52044bccd1bd251'], + ph: ['d164bbe036663cb5c96835e9ccc6501e9a521127ea62f6359744928ba932413b'], + st: ['3b45022ab36728cdae12e709e945bba267c50ee8a91e6e4388539a8e03a3fdcd'], + zp: ['1a4292e00780e18d00e76fde9850aee5344e939ba593333cd5e4b4aa2cd33b0c'], + }, + }, + JSON_ARRAY: {}, + XML: {}, + }, + endpoint: 'https://ct.pinterest.com/events/v3', + files: {}, + headers: { 'Content-Type': 'application/json' }, + method: 'POST', + params: {}, + type: 'REST', + version: '1', + userId: '', + }, + statusCode: 200, + }, + ], + }, + }, + }, + { + name: 'pinterest_tag', + description: 'Test 20', + feature: 'processor', + module: 'destination', + version: 'v0', + input: { + request: { + body: [ + { + description: 'Track call with v5 Api version and send external_id toggle enabled', + message: { + type: 'track', + event: 'ABC Searched', + sentAt: '2020-08-14T05:30:30.118Z', + channel: 'web', + context: { + source: 'test', + userAgent: 'chrome', + traits: { + anonymousId: '50be5c78-6c3f-4b60-be84-97805a316fb1', + email: 'abc@gmail.com', + phone: '+1234589947', + ge: 'male', + db: '19950715', + lastname: 'Rudderlabs', + firstName: 'Test', + address: { city: 'Kolkata', state: 'WB', zip: '700114', country: 'IN' }, + }, + device: { advertisingId: 'abc123' }, + library: { name: 'rudder-sdk-ruby-sync', version: '1.0.6' }, + }, + messageId: '7208bbb6-2c4e-45bb-bf5b-ad426f3593e9', + timestamp: '2020-08-14T05:30:30.118Z', + properties: { + tax: 2, + total: 27.5, + coupon: 'hasbros', + revenue: 48, + price: 25, + quantity: 2, + currency: 'USD', + discount: 2.5, + order_id: '50314b8e9bcf000000000000', + requestIP: '123.0.0.0', + optOutType: 'LDP', + products: [ + { + sku: '45790-32', + url: 'https://www.example.com/product/path', + name: 'Monopoly: 3rd Edition', + price: 19, + category: 'Games', + quantity: 1, + image_url: 'https:///www.example.com/product/path.jpg', + product_id: '507f1f77bcf86cd799439011', + }, + { + sku: '46493-32', + name: 'Uno Card Game', + price: 3, + category: 'Games', + quantity: 2, + product_id: '505bd76785ebb509fc183733', + }, + ], + shipping: 3, + subtotal: 22.5, + affiliation: 'Google Store', + checkout_id: 'fksdjfsdjfisjf9sdfjsd9f', + }, + anonymousId: '50be5c78-6c3f-4b60-be84-97805a316fb1', + integrations: { All: true }, + }, + destination: { + DestinationDefinition: { Config: { cdkV2Enabled: true } }, + ID: '1pYpzzvcn7AQ2W9GGIAZSsN6Mfq', + Name: 'PINTEREST_TAG', + Config: { + sendAsTestEvent: false, + tagId: '123456789', + apiVersion: 'newApi', + adAccountId: 'accountId123', + conversionToken: 'conversionToken123', + appId: '429047995', + enhancedMatch: true, + enableDeduplication: true, + deduplicationKey: 'messageId', + sendingUnHashedData: true, + sendExternalId: true, + customProperties: [{ properties: 'presentclass' }, { properties: 'presentgrade' }], + eventsMapping: [{ from: 'ABC Searched', to: 'WatchVideo' }], + }, + Enabled: true, + Transformations: [], + }, + metadata: { destintionId: '1pYpzzvcn7AQ2W9GGIAZSsN6Mfq' }, + }, + ], + method: 'POST', + }, + pathSuffix: '', + }, + output: { + response: { + status: 200, + body: [ + { + metadata: { destintionId: '1pYpzzvcn7AQ2W9GGIAZSsN6Mfq' }, + output: { + version: '1', + type: 'REST', + method: 'POST', + endpoint: 'https://api.pinterest.com/v5/ad_accounts/accountId123/events', + headers: { + 'Content-Type': 'application/json', + Authorization: 'Bearer conversionToken123', + }, + params: {}, + body: { + JSON: { + action_source: 'web', + event_name: 'watch_video', + event_time: 1597383030, + event_id: '7208bbb6-2c4e-45bb-bf5b-ad426f3593e9', + app_id: '429047995', + user_data: { + em: ['48ddb93f0b30c475423fe177832912c5bcdce3cc72872f8051627967ef278e08'], + ph: ['d164bbe036663cb5c96835e9ccc6501e9a521127ea62f6359744928ba932413b'], + ln: ['dcf000c2386fb76d22cefc0d118a8511bb75999019cd373df52044bccd1bd251'], + fn: ['9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a08'], + ct: ['6689106ca7922c30b2fd2c175c85bc7fc2d52cc4941bdd7bb622c6cdc6284a85'], + st: ['3b45022ab36728cdae12e709e945bba267c50ee8a91e6e4388539a8e03a3fdcd'], + zp: ['1a4292e00780e18d00e76fde9850aee5344e939ba593333cd5e4b4aa2cd33b0c'], + country: ['582967534d0f909d196b97f9e6921342777aea87b46fa52df165389db1fb8ccf'], + hashed_maids: [ + '6ca13d52ca70c883e0f0bb101e425a89e8624de51db2d2392593af6a84118090', + ], + client_user_agent: 'chrome', + external_id: [ + '3217d71a74c219d6e31e28267b313a7ceb6a2c032db1a091c9416b25b2ae2bc8', + ], + }, + custom_data: { + currency: 'USD', + value: '27.5', + order_id: '50314b8e9bcf000000000000', + opt_out_type: 'LDP', + num_items: 3, + content_ids: ['507f1f77bcf86cd799439011', '505bd76785ebb509fc183733'], + contents: [ + { quantity: 1, item_price: '19' }, + { quantity: 2, item_price: '3' }, + ], + }, + }, + JSON_ARRAY: {}, + XML: {}, + FORM: {}, + }, + files: {}, + userId: '', + }, + statusCode: 200, + }, + ], + }, + }, + }, + { + name: 'pinterest_tag', + description: 'Test 21', + feature: 'processor', + module: 'destination', + version: 'v0', + input: { + request: { + body: [ + { + description: 'Custom event with v5 Api version', + message: { + type: 'track', + event: 'random', + sentAt: '2020-08-14T05:30:30.118Z', + channel: 'web', + context: { + source: 'test', + userAgent: 'chrome', + traits: { + anonymousId: '50be5c78-6c3f-4b60-be84-97805a316fb1', + email: 'abc@gmail.com', + phone: '+1234589947', + ge: 'male', + db: '19950715', + lastname: 'Rudderlabs', + firstName: 'Test', + address: { city: 'Kolkata', state: 'WB', zip: '700114', country: 'IN' }, + }, + device: { advertisingId: 'abc123' }, + library: { name: 'rudder-sdk-ruby-sync', version: '1.0.6' }, + }, + messageId: '7208bbb6-2c4e-45bb-bf5b-ad426f3593e9', + timestamp: '2020-08-14T05:30:30.118Z', + properties: { + tax: 2, + total: 27.5, + coupon: 'hasbros', + revenue: 48, + price: 25, + quantity: 2, + currency: 'USD', + discount: 2.5, + order_id: '50314b8e9bcf000000000000', + requestIP: '123.0.0.0', + optOutType: 'LDP', + products: [ + { + sku: '45790-32', + url: 'https://www.example.com/product/path', + name: 'Monopoly: 3rd Edition', + price: 19, + category: 'Games', + quantity: 1, + image_url: 'https:///www.example.com/product/path.jpg', + product_id: '507f1f77bcf86cd799439011', + }, + { + sku: '46493-32', + name: 'Uno Card Game', + price: 3, + category: 'Games', + quantity: 2, + product_id: '505bd76785ebb509fc183733', + }, + ], + shipping: 3, + subtotal: 22.5, + affiliation: 'Google Store', + checkout_id: 'fksdjfsdjfisjf9sdfjsd9f', + }, + anonymousId: '50be5c78-6c3f-4b60-be84-97805a316fb1', + integrations: { All: true }, + }, + destination: { + DestinationDefinition: { Config: { cdkV2Enabled: true } }, + ID: '1pYpzzvcn7AQ2W9GGIAZSsN6Mfq', + Name: 'PINTEREST_TAG', + Config: { + sendAsTestEvent: false, + tagId: '123456789', + apiVersion: 'newApi', + adAccountId: 'accountId123', + conversionToken: 'conversionToken123', + appId: '429047995', + enhancedMatch: true, + enableDeduplication: true, + deduplicationKey: 'messageId', + sendingUnHashedData: true, + sendAsCustomEvent: true, + customProperties: [{ properties: 'presentclass' }, { properties: 'presentgrade' }], + eventsMapping: [{ from: 'ABC Searched', to: 'WatchVideo' }], + }, + Enabled: true, + Transformations: [], + }, + metadata: { destintionId: '1pYpzzvcn7AQ2W9GGIAZSsN6Mfq' }, + }, + ], + method: 'POST', + }, + pathSuffix: '', + }, + output: { + response: { + status: 200, + body: [ + { + metadata: { destintionId: '1pYpzzvcn7AQ2W9GGIAZSsN6Mfq' }, + output: { + version: '1', + type: 'REST', + method: 'POST', + endpoint: 'https://api.pinterest.com/v5/ad_accounts/accountId123/events', + headers: { + 'Content-Type': 'application/json', + Authorization: 'Bearer conversionToken123', + }, + params: {}, + body: { + JSON: { + action_source: 'web', + event_name: 'custom', + event_time: 1597383030, + event_id: '7208bbb6-2c4e-45bb-bf5b-ad426f3593e9', + app_id: '429047995', + user_data: { + em: ['48ddb93f0b30c475423fe177832912c5bcdce3cc72872f8051627967ef278e08'], + ph: ['d164bbe036663cb5c96835e9ccc6501e9a521127ea62f6359744928ba932413b'], + ln: ['dcf000c2386fb76d22cefc0d118a8511bb75999019cd373df52044bccd1bd251'], + fn: ['9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a08'], + ct: ['6689106ca7922c30b2fd2c175c85bc7fc2d52cc4941bdd7bb622c6cdc6284a85'], + st: ['3b45022ab36728cdae12e709e945bba267c50ee8a91e6e4388539a8e03a3fdcd'], + zp: ['1a4292e00780e18d00e76fde9850aee5344e939ba593333cd5e4b4aa2cd33b0c'], + country: ['582967534d0f909d196b97f9e6921342777aea87b46fa52df165389db1fb8ccf'], + hashed_maids: [ + '6ca13d52ca70c883e0f0bb101e425a89e8624de51db2d2392593af6a84118090', + ], + client_user_agent: 'chrome', + }, + custom_data: { + currency: 'USD', + value: '27.5', + order_id: '50314b8e9bcf000000000000', + opt_out_type: 'LDP', + num_items: 3, + content_ids: ['507f1f77bcf86cd799439011', '505bd76785ebb509fc183733'], + contents: [ + { quantity: 1, item_price: '19' }, + { quantity: 2, item_price: '3' }, + ], + }, + }, + JSON_ARRAY: {}, + XML: {}, + FORM: {}, + }, + files: {}, + userId: '', + }, + statusCode: 200, + }, + ], + }, + }, + }, + { + name: 'pinterest_tag', + description: 'Test 22', + feature: 'processor', + module: 'destination', + version: 'v0', + input: { + request: { + body: [ + { + description: + 'Custom event with v5 Api version, with unhashed User Data and the values are an array of strings', + message: { + type: 'track', + event: 'random', + sentAt: '2020-08-14T05:30:30.118Z', + channel: 'web', + context: { + source: 'test', + userAgent: 'chrome', + traits: { + anonymousId: '50be5c78-6c3f-4b60-be84-97805a316fb1', + email: ['abc@gmail.com', 'def@gmail.com'], + phone: ['+1234589947', '+1234589948'], + ge: ['male', 'male'], + db: ['19950715', '19970615'], + lastname: ['Rudderlabs', 'Xu'], + firstName: ['Test', 'Alex'], + address: { + city: ['Kolkata', 'Mumbai'], + state: ['WB', 'MH'], + zip: ['700114', '700115'], + country: ['IN', 'IN'], + }, + }, + device: { advertisingId: 'abc123' }, + library: { name: 'rudder-sdk-ruby-sync', version: '1.0.6' }, + }, + messageId: '7208bbb6-2c4e-45bb-bf5b-ad426f3593e9', + timestamp: '2020-08-14T05:30:30.118Z', + properties: { + tax: 2, + total: 27.5, + coupon: 'hasbros', + revenue: 48, + price: 25, + quantity: 2, + currency: 'USD', + discount: 2.5, + order_id: '50314b8e9bcf000000000000', + requestIP: '123.0.0.0', + optOutType: 'LDP', + products: [ + { + sku: '45790-32', + url: 'https://www.example.com/product/path', + name: 'Monopoly: 3rd Edition', + price: 19, + category: 'Games', + quantity: 1, + image_url: 'https:///www.example.com/product/path.jpg', + product_id: '507f1f77bcf86cd799439011', + }, + { + sku: '46493-32', + name: 'Uno Card Game', + price: 3, + category: 'Games', + quantity: 2, + product_id: '505bd76785ebb509fc183733', + }, + ], + shipping: 3, + subtotal: 22.5, + affiliation: 'Google Store', + checkout_id: 'fksdjfsdjfisjf9sdfjsd9f', + }, + anonymousId: '50be5c78-6c3f-4b60-be84-97805a316fb1', + integrations: { All: true }, + }, + destination: { + DestinationDefinition: { Config: { cdkV2Enabled: true } }, + ID: '1pYpzzvcn7AQ2W9GGIAZSsN6Mfq', + Name: 'PINTEREST_TAG', + Config: { + sendAsTestEvent: false, + tagId: '123456789', + apiVersion: 'newApi', + adAccountId: 'accountId123', + conversionToken: 'conversionToken123', + appId: '429047995', + enhancedMatch: true, + enableDeduplication: true, + deduplicationKey: 'messageId', + sendingUnHashedData: true, + sendAsCustomEvent: true, + customProperties: [{ properties: 'presentclass' }, { properties: 'presentgrade' }], + eventsMapping: [{ from: 'ABC Searched', to: 'WatchVideo' }], + }, + Enabled: true, + Transformations: [], + }, + metadata: { destintionId: '1pYpzzvcn7AQ2W9GGIAZSsN6Mfq' }, + }, + ], + method: 'POST', + }, + pathSuffix: '', + }, + output: { + response: { + status: 200, + body: [ + { + metadata: { destintionId: '1pYpzzvcn7AQ2W9GGIAZSsN6Mfq' }, + output: { + version: '1', + type: 'REST', + method: 'POST', + endpoint: 'https://api.pinterest.com/v5/ad_accounts/accountId123/events', + headers: { + 'Content-Type': 'application/json', + Authorization: 'Bearer conversionToken123', + }, + params: {}, + body: { + JSON: { + action_source: 'web', + event_name: 'custom', + event_time: 1597383030, + event_id: '7208bbb6-2c4e-45bb-bf5b-ad426f3593e9', + app_id: '429047995', + user_data: { + em: [ + '48ddb93f0b30c475423fe177832912c5bcdce3cc72872f8051627967ef278e08', + 'c392e50ebeca7bea4405e9c545023451ac56620031f81263f681269bde14218b', + ], + ph: [ + 'd164bbe036663cb5c96835e9ccc6501e9a521127ea62f6359744928ba932413b', + '22bdde2594851294f2a6f4c34af704e68b398b03129ea9ceb58f0ffe33f6db52', + ], + ln: [ + 'dcf000c2386fb76d22cefc0d118a8511bb75999019cd373df52044bccd1bd251', + '9c2f138690fca4890c3c4a6691610fbbbdf32091cc001f7355cfdf574baa52b9', + ], + fn: [ + '9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a08', + '4135aa9dc1b842a653dea846903ddb95bfb8c5a10c504a7fa16e10bc31d1fdf0', + ], + ct: [ + '6689106ca7922c30b2fd2c175c85bc7fc2d52cc4941bdd7bb622c6cdc6284a85', + 'd209bcc17778fd19fd2bc0c99a3868bf011da5162d3a75037a605768ebc276e2', + ], + st: [ + '3b45022ab36728cdae12e709e945bba267c50ee8a91e6e4388539a8e03a3fdcd', + '1b0316ed1cfed044035c55363e02ccafab26d66b1c2746b94d17285f043324aa', + ], + zp: [ + '1a4292e00780e18d00e76fde9850aee5344e939ba593333cd5e4b4aa2cd33b0c', + '4d6755aa1e85517191f06cc91448696c173e1195ae51f94a1670116ac7b5c47b', + ], + country: [ + '582967534d0f909d196b97f9e6921342777aea87b46fa52df165389db1fb8ccf', + '582967534d0f909d196b97f9e6921342777aea87b46fa52df165389db1fb8ccf', + ], + hashed_maids: [ + '6ca13d52ca70c883e0f0bb101e425a89e8624de51db2d2392593af6a84118090', + ], + client_user_agent: 'chrome', + }, + custom_data: { + currency: 'USD', + value: '27.5', + order_id: '50314b8e9bcf000000000000', + opt_out_type: 'LDP', + num_items: 3, + content_ids: ['507f1f77bcf86cd799439011', '505bd76785ebb509fc183733'], + contents: [ + { quantity: 1, item_price: '19' }, + { quantity: 2, item_price: '3' }, + ], + }, + }, + JSON_ARRAY: {}, + XML: {}, + FORM: {}, + }, + files: {}, + userId: '', + }, + statusCode: 200, + }, + ], + }, + }, + }, + { + name: 'pinterest_tag', + description: 'Test 23', + feature: 'processor', + module: 'destination', + version: 'v0', + input: { + request: { + body: [ + { + description: 'Ad Account Id check in V5', + message: { + type: 'track', + event: 'random', + sentAt: '2020-08-14T05:30:30.118Z', + channel: 'web', + context: { + source: 'test', + userAgent: 'chrome', + traits: { + anonymousId: '50be5c78-6c3f-4b60-be84-97805a316fb1', + email: 'abc@gmail.com', + phone: '+1234589947', + ge: 'male', + db: '19950715', + lastname: 'Rudderlabs', + firstName: 'Test', + address: { city: 'Kolkata', state: 'WB', zip: '700114', country: 'IN' }, + }, + device: { advertisingId: 'abc123' }, + library: { name: 'rudder-sdk-ruby-sync', version: '1.0.6' }, + }, + messageId: '7208bbb6-2c4e-45bb-bf5b-ad426f3593e9', + timestamp: '2020-08-14T05:30:30.118Z', + anonymousId: '50be5c78-6c3f-4b60-be84-97805a316fb1', + integrations: { All: true }, + }, + destination: { + DestinationDefinition: { Config: { cdkV2Enabled: true } }, + ID: '1pYpzzvcn7AQ2W9GGIAZSsN6Mfq', + Name: 'PINTEREST_TAG', + Config: { + sendAsTestEvent: false, + tagId: '123456789', + apiVersion: 'newApi', + adAccountId: '', + conversionToken: 'conversionToken123', + appId: '429047995', + enhancedMatch: true, + enableDeduplication: true, + deduplicationKey: 'messageId', + sendingUnHashedData: true, + sendAsCustomEvent: true, + customProperties: [{ properties: 'presentclass' }, { properties: 'presentgrade' }], + eventsMapping: [{ from: 'ABC Searched', to: 'WatchVideo' }], + }, + Enabled: true, + Transformations: [], + }, + metadata: { destintionId: '1pYpzzvcn7AQ2W9GGIAZSsN6Mfq' }, + }, + ], + method: 'POST', + }, + pathSuffix: '', + }, + output: { + response: { + status: 200, + body: [ + { + error: + 'Ad Account ID not found. Aborting: Workflow: procWorkflow, Step: validateInput, ChildStep: undefined, OriginalError: Ad Account ID not found. Aborting', + metadata: { destintionId: '1pYpzzvcn7AQ2W9GGIAZSsN6Mfq' }, + statTags: { + destType: 'PINTEREST_TAG', + errorCategory: 'platform', + feature: 'processor', + implementation: 'cdkV2', + module: 'destination', + }, + statusCode: 400, + }, + ], + }, + }, + }, + { + name: 'pinterest_tag', + description: 'Test 24', + feature: 'processor', + module: 'destination', + version: 'v0', + input: { + request: { + body: [ + { + description: 'Conversion Token check in V5', + message: { + type: 'track', + event: 'random', + sentAt: '2020-08-14T05:30:30.118Z', + channel: 'web', + context: { + source: 'test', + userAgent: 'chrome', + traits: { + anonymousId: '50be5c78-6c3f-4b60-be84-97805a316fb1', + email: 'abc@gmail.com', + phone: '+1234589947', + ge: 'male', + db: '19950715', + lastname: 'Rudderlabs', + firstName: 'Test', + address: { city: 'Kolkata', state: 'WB', zip: '700114', country: 'IN' }, + }, + device: { advertisingId: 'abc123' }, + library: { name: 'rudder-sdk-ruby-sync', version: '1.0.6' }, + }, + messageId: '7208bbb6-2c4e-45bb-bf5b-ad426f3593e9', + timestamp: '2020-08-14T05:30:30.118Z', + anonymousId: '50be5c78-6c3f-4b60-be84-97805a316fb1', + integrations: { All: true }, + }, + destination: { + DestinationDefinition: { Config: { cdkV2Enabled: true } }, + ID: '1pYpzzvcn7AQ2W9GGIAZSsN6Mfq', + Name: 'PINTEREST_TAG', + Config: { + sendAsTestEvent: false, + tagId: '123456789', + apiVersion: 'newApi', + adAccountId: 'accountId123', + conversionToken: '', + appId: '429047995', + enhancedMatch: true, + enableDeduplication: true, + deduplicationKey: 'messageId', + sendingUnHashedData: true, + sendAsCustomEvent: true, + customProperties: [{ properties: 'presentclass' }, { properties: 'presentgrade' }], + eventsMapping: [{ from: 'ABC Searched', to: 'WatchVideo' }], + }, + Enabled: true, + Transformations: [], + }, + metadata: { destintionId: '1pYpzzvcn7AQ2W9GGIAZSsN6Mfq' }, + }, + ], + method: 'POST', + }, + pathSuffix: '', + }, + output: { + response: { + status: 200, + body: [ + { + error: + 'Conversion Token not found. Aborting: Workflow: procWorkflow, Step: validateInput, ChildStep: undefined, OriginalError: Conversion Token not found. Aborting', + metadata: { destintionId: '1pYpzzvcn7AQ2W9GGIAZSsN6Mfq' }, + statTags: { + destType: 'PINTEREST_TAG', + errorCategory: 'platform', + feature: 'processor', + implementation: 'cdkV2', + module: 'destination', + }, + statusCode: 400, + }, + ], + }, + }, + }, + { + name: 'pinterest_tag', + description: 'Test 25', + feature: 'processor', + module: 'destination', + version: 'v0', + input: { + request: { + body: [ + { + message: { + type: 'track', + event: 'custom event', + channel: 'web', + sentAt: '2020-08-14T05:30:30.118Z', + context: { + source: 'test', + userAgent: 'chrome', + traits: { + anonymousId: '50be5c78-6c3f-4b60-be84-97805a316fb1', + email: 'abc@gmail.com', + phone: '+1234589947', + ge: 'male', + db: '19950715', + lastname: 'Rudderlabs', + firstName: 'Test', + address: { city: 'Kolkata', state: 'WB', zip: '700114', country: 'IN' }, + }, + device: { advertisingId: 'abc123' }, + library: { name: 'rudder-sdk-ruby-sync', version: '1.0.6' }, + }, + messageId: '7208bbb6-2c4e-45bb-bf5b-ad426f3593e9', + timestamp: '2020-08-14T05:30:30.118Z', + properties: { + tax: 2, + total: 27.5, + coupon: 'hasbros', + revenue: 48, + currency: 'USD', + discount: 2.5, + order_id: '50314b8e9bcf000000000000', + requestIP: '123.0.0.0', + shipping: 3, + subtotal: 22.5, + affiliation: 'Google Store', + checkout_id: 'fksdjfsdjfisjf9sdfjsd9f', + }, + anonymousId: '50be5c78-6c3f-4b60-be84-97805a316fb1', + integrations: { All: true }, + }, + destination: { + DestinationDefinition: { Config: { cdkV2Enabled: true } }, + ID: '1pYpzzvcn7AQ2W9GGIAZSsN6Mfq', + Name: 'PINTEREST_TAG', + Config: { + sendAsTestEvent: false, + tagId: '123456789', + apiVersion: 'newApi', + adAccountId: 'accountId123', + conversionToken: 'conversionToken123', + appId: '429047995', + enhancedMatch: true, + enableDeduplication: true, + deduplicationKey: 'messageId', + sendingUnHashedData: true, + sendAsCustomEvent: false, + customProperties: [{ properties: 'presentclass' }, { properties: 'presentgrade' }], + eventsMapping: [{ from: 'ABC Searched', to: 'WatchVideo' }], + }, + Enabled: true, + Transformations: [], + }, + metadata: { destintionId: '1pYpzzvcn7AQ2W9GGIAZSsN6Mfq' }, + }, + ], + method: 'POST', + }, + pathSuffix: '', + }, + output: { + response: { + status: 200, + body: [ + { + metadata: { destintionId: '1pYpzzvcn7AQ2W9GGIAZSsN6Mfq' }, + error: + "custom event is not mapped in UI. Make sure to map the event in UI or enable the 'send as custom event' setting: Workflow: procWorkflow, Step: eventNames, ChildStep: undefined, OriginalError: custom event is not mapped in UI. Make sure to map the event in UI or enable the 'send as custom event' setting", + statTags: { + destType: 'PINTEREST_TAG', + errorCategory: 'platform', + feature: 'processor', + implementation: 'cdkV2', + module: 'destination', + }, + statusCode: 400, + }, + ], + }, + }, + }, +]; diff --git a/test/integrations/destinations/pinterest_tag/router/data.ts b/test/integrations/destinations/pinterest_tag/router/data.ts new file mode 100644 index 0000000000..e004be25f0 --- /dev/null +++ b/test/integrations/destinations/pinterest_tag/router/data.ts @@ -0,0 +1,2153 @@ +export const data = [ + { + destType: 'pinterest_tag', + description: 'Test 0', + feature: 'router', + module: 'destination', + version: 'v0', + input: { + request: { + body: { + input: [ + { + message: { + type: 'track', + event: 'ABC Searched', + sentAt: '2020-08-14T05:30:30.118Z', + channel: 'web', + context: { + source: 'test', + userAgent: 'chrome', + traits: { + anonymousId: '50be5c78-6c3f-4b60-be84-97805a316fb1', + email: 'abc@gmail.com', + phone: '+1234589947', + ge: 'male', + db: '19950715', + lastname: 'Rudderlabs', + firstName: 'Test', + address: { + city: 'Kolkata', + state: 'WB', + zip: '700114', + country: 'IN', + }, + }, + device: { + advertisingId: 'abc123', + }, + library: { + name: 'rudder-sdk-ruby-sync', + version: '1.0.6', + }, + }, + messageId: '7208bbb6-2c4e-45bb-bf5b-ad426f3593e9', + timestamp: '2020-08-14T05:30:30.118Z', + properties: { + tax: 2, + total: 27.5, + coupon: 'hasbros', + revenue: 48, + price: 25, + quantity: 2, + currency: 'USD', + discount: 2.5, + order_id: '50314b8e9bcf000000000000', + requestIP: '123.0.0.0', + optOutType: 'LDP', + products: [ + { + sku: '45790-32', + url: 'https://www.example.com/product/path', + name: 'Monopoly: 3rd Edition', + price: 19, + category: 'Games', + quantity: 1, + image_url: 'https:///www.example.com/product/path.jpg', + product_id: '507f1f77bcf86cd799439011', + }, + { + sku: '46493-32', + name: 'Uno Card Game', + price: 3, + category: 'Games', + quantity: 2, + product_id: '505bd76785ebb509fc183733', + }, + ], + shipping: 3, + subtotal: 22.5, + affiliation: 'Google Store', + checkout_id: 'fksdjfsdjfisjf9sdfjsd9f', + }, + anonymousId: '50be5c78-6c3f-4b60-be84-97805a316fb1', + integrations: { + All: true, + }, + }, + metadata: { + destintionId: '1pYpzzvcn7AQ2W9GGIAZSsN6Mfq', + jobId: 1, + }, + destination: { + DestinationDefinition: { Config: { cdkV2Enabled: true } }, + ID: '1pYpzzvcn7AQ2W9GGIAZSsN6Mfq', + Name: 'PINTEREST_TAG', + Config: { + sendAsTestEvent: false, + tagId: '123456789', + advertiserId: '429047995', + appId: '429047995', + sendingUnHashedData: true, + enableDeduplication: true, + deduplicationKey: 'messageId', + enhancedMatch: true, + customProperties: [ + { + properties: 'presentclass', + }, + { + properties: 'presentgrade', + }, + ], + eventsMapping: [ + { + from: 'ABC Searched', + to: 'WatchVideo', + }, + { + from: 'ABC Searched', + to: 'Signup', + }, + { + from: 'User Signup', + to: 'Signup', + }, + { + from: 'User Created', + to: 'Signup', + }, + ], + }, + Enabled: true, + Transformations: [], + }, + }, + { + message: { + type: 'track', + event: 'Order completed', + sentAt: '2020-08-14T05:30:30.118Z', + channel: 'web', + context: { + source: 'test', + userAgent: 'chrome', + traits: { + anonymousId: '50be5c78-6c3f-4b60-be84-97805a316fb1', + email: 'abc@gmail.com', + phone: '+1234589947', + ge: 'male', + db: '19950715', + lastname: 'Rudderlabs', + firstName: 'Test', + address: { + city: 'Kolkata', + state: 'WB', + zip: '700114', + country: 'IN', + }, + }, + device: { + advertisingId: 'abc123', + }, + library: { + name: 'rudder-sdk-ruby-sync', + version: '1.0.6', + }, + }, + messageId: '7208bbb6-2c4e-45bb-bf5b-ad426f3593e9', + timestamp: '2020-08-14T05:30:30.118Z', + properties: { + tax: 2, + total: 27.5, + coupon: 'hasbros', + revenue: 48, + price: 25, + quantity: 2, + currency: 'USD', + discount: 2.5, + order_id: '50314b8e9bcf000000000000', + requestIP: '123.0.0.0', + products: [ + { + sku: '45790-32', + url: 'https://www.example.com/product/path', + name: 'Monopoly: 3rd Edition', + price: 19, + category: 'Games', + quantity: 1, + image_url: 'https:///www.example.com/product/path.jpg', + product_id: '507f1f77bcf86cd799439011', + }, + { + sku: '46493-32', + name: 'Uno Card Game', + price: 3, + category: 'Games', + quantity: 2, + product_id: '505bd76785ebb509fc183733', + }, + ], + shipping: 3, + subtotal: 22.5, + affiliation: 'Google Store', + checkout_id: 'fksdjfsdjfisjf9sdfjsd9f', + }, + anonymousId: '50be5c78-6c3f-4b60-be84-97805a316fb1', + integrations: { + All: true, + }, + }, + metadata: { + destintionId: '1pYpzzvcn7AQ2W9GGIAZSsN6Mfq', + jobId: 2, + }, + destination: { + DestinationDefinition: { Config: { cdkV2Enabled: true } }, + ID: '1pYpzzvcn7AQ2W9GGIAZSsN6Mfq', + Name: 'PINTEREST_TAG', + Config: { + sendAsTestEvent: false, + tagId: '123456789', + advertiserId: '429047995', + appId: '429047995', + sendingUnHashedData: true, + enableDeduplication: true, + deduplicationKey: 'messageId', + enhancedMatch: true, + customProperties: [ + { + properties: 'presentclass', + }, + { + properties: 'presentgrade', + }, + ], + eventsMapping: [ + { + from: 'ABC Searched', + to: 'WatchVideo', + }, + { + from: 'ABC Searched', + to: 'Signup', + }, + { + from: 'User Signup', + to: 'Signup', + }, + { + from: 'User Created', + to: 'Signup', + }, + ], + }, + Enabled: true, + Transformations: [], + }, + }, + { + message: { + type: 'track', + event: 'product added', + sentAt: '2020-08-14T05:30:30.118Z', + channel: 'web', + context: { + source: 'test', + userAgent: 'chrome', + traits: { + anonymousId: '50be5c78-6c3f-4b60-be84-97805a316fb1', + email: 'abc@gmail.com', + phone: '+1234589947', + ge: 'male', + db: '19950715', + lastname: 'Rudderlabs', + firstName: 'Test', + address: { + city: 'Kolkata', + state: 'WB', + zip: '700114', + country: 'IN', + }, + }, + device: { + advertisingId: 'abc123', + }, + library: { + name: 'rudder-sdk-ruby-sync', + version: '1.0.6', + }, + }, + messageId: '7208bbb6-2c4e-45bb-bf5b-ad426f3593e9', + timestamp: '2020-08-14T05:30:30.118Z', + properties: { + product_id: '123', + tax: 2, + total: 27.5, + coupon: 'hasbros', + revenue: 48, + price: 25, + quantity: 2, + currency: 'USD', + discount: 2.5, + order_id: '50314b8e9bcf000000000000', + requestIP: '123.0.0.0', + shipping: 3, + subtotal: 22.5, + affiliation: 'Google Store', + checkout_id: 'fksdjfsdjfisjf9sdfjsd9f', + }, + anonymousId: '50be5c78-6c3f-4b60-be84-97805a316fb1', + integrations: { + All: true, + }, + }, + metadata: { + destintionId: '1pYpzzvcn7AQ2W9GGIAZSsN6Mfq', + jobId: 3, + }, + destination: { + DestinationDefinition: { Config: { cdkV2Enabled: true } }, + ID: '1pYpzzvcn7AQ2W9GGIAZSsN6Mfq', + Name: 'PINTEREST_TAG', + Config: { + sendAsTestEvent: false, + tagId: '123456789', + advertiserId: '429047995', + appId: '429047995', + sendingUnHashedData: true, + enableDeduplication: true, + deduplicationKey: 'messageId', + enhancedMatch: true, + customProperties: [ + { + properties: 'presentclass', + }, + { + properties: 'presentgrade', + }, + ], + eventsMapping: [ + { + from: 'ABC Searched', + to: 'WatchVideo', + }, + { + from: 'ABC Searched', + to: 'Signup', + }, + { + from: 'User Signup', + to: 'Signup', + }, + { + from: 'User Created', + to: 'Signup', + }, + ], + }, + Enabled: true, + Transformations: [], + }, + }, + { + message: { + type: 'track', + event: 'Product List Filtered', + sentAt: '2020-08-14T05:30:30.118Z', + channel: 'web', + context: { + source: 'test', + userAgent: 'chrome', + traits: { + anonymousId: '50be5c78-6c3f-4b60-be84-97805a316fb1', + email: 'abc@gmail.com', + phone: '+1234589947', + ge: 'male', + db: '19950715', + lastname: 'Rudderlabs', + firstName: 'Test', + address: { + city: 'Kolkata', + state: 'WB', + zip: '700114', + country: 'IN', + }, + }, + device: { + advertisingId: 'abc123', + }, + library: { + name: 'rudder-sdk-ruby-sync', + version: '1.0.6', + }, + }, + messageId: '7208bbb6-2c4e-45bb-bf5b-ad426f3593e9', + timestamp: '2020-08-14T05:30:30.118Z', + properties: { + tax: 2, + total: 27.5, + coupon: 'hasbros', + revenue: 48, + price: 25, + quantity: 2, + currency: 'USD', + discount: 2.5, + order_id: '50314b8e9bcf000000000000', + requestIP: '123.0.0.0', + products: [ + { + sku: '45790-32', + url: 'https://www.example.com/product/path', + name: 'Monopoly: 3rd Edition', + price: 19, + category: 'Games', + quantity: 1, + image_url: 'https:///www.example.com/product/path.jpg', + product_id: '507f1f77bcf86cd799439011', + }, + { + sku: '46493-32', + name: 'Uno Card Game', + price: 3, + category: 'Games', + quantity: 2, + product_id: '505bd76785ebb509fc183733', + }, + ], + shipping: 3, + subtotal: 22.5, + affiliation: 'Google Store', + checkout_id: 'fksdjfsdjfisjf9sdfjsd9f', + }, + anonymousId: '50be5c78-6c3f-4b60-be84-97805a316fb1', + integrations: { + All: true, + }, + }, + metadata: { + destintionId: '1pYpzzvcn7AQ2W9GGIAZSsN6Mfq', + jobId: 4, + }, + destination: { + DestinationDefinition: { Config: { cdkV2Enabled: true } }, + ID: '1pYpzzvcn7AQ2W9GGIAZSsN6Mfq', + Name: 'PINTEREST_TAG', + Config: { + sendAsTestEvent: false, + tagId: '123456789', + advertiserId: '429047995', + appId: '429047995', + sendingUnHashedData: true, + enableDeduplication: true, + deduplicationKey: 'messageId', + enhancedMatch: true, + customProperties: [ + { + properties: 'presentclass', + }, + { + properties: 'presentgrade', + }, + ], + eventsMapping: [ + { + from: 'ABC Searched', + to: 'WatchVideo', + }, + { + from: 'ABC Searched', + to: 'Signup', + }, + { + from: 'User Signup', + to: 'Signup', + }, + { + from: 'User Created', + to: 'Signup', + }, + ], + }, + Enabled: true, + Transformations: [], + }, + }, + { + message: { + type: 'Identify', + event: 'User Signup', + sentAt: '2020-08-14T05:30:30.118Z', + channel: 'web', + context: { + source: 'test', + userAgent: 'chrome', + traits: { + anonymousId: '50be5c78-6c3f-4b60-be84-97805a316fb1', + email: 'abc@gmail.com', + phone: '+1234589947', + ge: 'male', + db: '19950715', + lastname: 'Rudderlabs', + firstName: 'Test', + address: { + city: 'Kolkata', + state: 'WB', + zip: '700114', + country: 'IN', + }, + }, + device: { + advertisingId: 'abc123', + }, + library: { + name: 'rudder-sdk-ruby-sync', + version: '1.0.6', + }, + }, + messageId: '7208bbb6-2c4e-45bb-bf5b-ad426f3593e9', + timestamp: '2020-08-14T05:30:30.118Z', + properties: { + tax: 2, + total: 27.5, + coupon: 'hasbros', + revenue: 48, + price: 25, + quantity: 2, + currency: 'USD', + discount: 2.5, + order_id: '50314b8e9bcf000000000000', + requestIP: '123.0.0.0', + products: [ + { + sku: '45790-32', + url: 'https://www.example.com/product/path', + name: 'Monopoly: 3rd Edition', + price: 19, + category: 'Games', + quantity: 1, + image_url: 'https:///www.example.com/product/path.jpg', + product_id: '507f1f77bcf86cd799439011', + }, + { + sku: '46493-32', + name: 'Uno Card Game', + price: 3, + category: 'Games', + quantity: 2, + product_id: '505bd76785ebb509fc183733', + }, + ], + shipping: 3, + subtotal: 22.5, + affiliation: 'Google Store', + checkout_id: 'fksdjfsdjfisjf9sdfjsd9f', + }, + anonymousId: '50be5c78-6c3f-4b60-be84-97805a316fb1', + integrations: { + All: true, + }, + }, + metadata: { + destintionId: '1pYpzzvcn7AQ2W9GGIAZSsN6Mfq', + jobId: 5, + }, + destination: { + DestinationDefinition: { Config: { cdkV2Enabled: true } }, + ID: '1pYpzzvcn7AQ2W9GGIAZSsN6Mfq', + Name: 'PINTEREST_TAG', + Config: { + sendAsTestEvent: false, + tagId: '123456789', + advertiserId: '429047995', + appId: '429047995', + sendingUnHashedData: true, + enableDeduplication: true, + deduplicationKey: 'messageId', + enhancedMatch: true, + customProperties: [ + { + properties: 'presentclass', + }, + { + properties: 'presentgrade', + }, + ], + eventsMapping: [ + { + from: 'ABC Searched', + to: 'WatchVideo', + }, + { + from: 'ABC Searched', + to: 'Signup', + }, + { + from: 'User Signup', + to: 'Signup', + }, + { + from: 'User Created', + to: 'Signup', + }, + ], + }, + Enabled: true, + Transformations: [], + }, + }, + { + message: { + type: 'track', + event: 'User Created', + sentAt: '2020-08-14T05:30:30.118Z', + channel: 'web', + context: { + source: 'test', + userAgent: 'chrome', + traits: { + anonymousId: '50be5c78-6c3f-4b60-be84-97805a316fb1', + email: 'abc@gmail.com', + phone: '+1234589947', + ge: 'male', + db: '19950715', + lastname: 'Rudderlabs', + firstName: 'Test', + address: { + city: 'Kolkata', + state: 'WB', + zip: '700114', + country: 'IN', + }, + }, + device: { + advertisingId: 'abc123', + }, + library: { + name: 'rudder-sdk-ruby-sync', + version: '1.0.6', + }, + }, + messageId: '7208bbb6-2c4e-45bb-bf5b-ad426f3593e9', + timestamp: '2020-08-14T05:30:30.118Z', + properties: { + tax: 2, + total: 27.5, + coupon: 'hasbros', + revenue: 48, + price: 25, + quantity: 2, + currency: 'USD', + discount: 2.5, + order_id: '50314b8e9bcf000000000000', + requestIP: '123.0.0.0', + products: [ + { + sku: '45790-32', + url: 'https://www.example.com/product/path', + name: 'Monopoly: 3rd Edition', + price: 19, + category: 'Games', + quantity: 1, + image_url: 'https:///www.example.com/product/path.jpg', + product_id: '507f1f77bcf86cd799439011', + }, + { + sku: '46493-32', + name: 'Uno Card Game', + price: 3, + category: 'Games', + quantity: 2, + product_id: '505bd76785ebb509fc183733', + }, + ], + shipping: 3, + subtotal: 22.5, + affiliation: 'Google Store', + checkout_id: 'fksdjfsdjfisjf9sdfjsd9f', + }, + anonymousId: '50be5c78-6c3f-4b60-be84-97805a316fb1', + integrations: { + All: true, + }, + }, + metadata: { + destintionId: '1pYpzzvcn7AQ2W9GGIAZSsN6Mfq', + jobId: 6, + }, + destination: { + DestinationDefinition: { Config: { cdkV2Enabled: true } }, + ID: '1pYpzzvcn7AQ2W9GGIAZSsN6Mfq', + Name: 'PINTEREST_TAG', + Config: { + sendAsTestEvent: false, + tagId: '123456789', + advertiserId: '429047995', + appId: '429047995', + sendingUnHashedData: true, + enableDeduplication: true, + deduplicationKey: 'messageId', + enhancedMatch: true, + customProperties: [ + { + properties: 'presentclass', + }, + { + properties: 'presentgrade', + }, + ], + eventsMapping: [ + { + from: 'ABC Searched', + to: 'WatchVideo', + }, + { + from: 'ABC Searched', + to: 'Signup', + }, + { + from: 'User Signup', + to: 'Signup', + }, + { + from: 'User Created', + to: 'Signup', + }, + ], + }, + Enabled: true, + Transformations: [], + }, + }, + { + message: { + version: '1', + statusCode: 200, + type: 'REST', + method: 'POST', + endpoint: 'https://ct.pinterest.com/events/v3', + headers: { + 'Content-Type': 'application/json', + }, + params: {}, + body: { + JSON: { + action_source: 'web', + event_name: 'WatchVideo', + event_time: 1597383030, + event_id: '7208bbb6-2c4e-45bb-bf5b-ad426f3593e9', + app_id: '429047995', + advertiser_id: '429047995', + user_data: { + em: ['48ddb93f0b30c475423fe177832912c5bcdce3cc72872f8051627967ef278e08'], + ph: ['d164bbe036663cb5c96835e9ccc6501e9a521127ea62f6359744928ba932413b'], + ln: ['bdfdee6414a89d72bfbf5ee90b1f85924467bae1e3980d83c2cd348dc31d5819'], + fn: ['ee5db3fe0253b651aca3676692e0c59b25909304f5c51d223a02a215d104144b'], + ct: ['6689106ca7922c30b2fd2c175c85bc7fc2d52cc4941bdd7bb622c6cdc6284a85'], + st: ['3b45022ab36728cdae12e709e945bba267c50ee8a91e6e4388539a8e03a3fdcd'], + zp: ['1a4292e00780e18d00e76fde9850aee5344e939ba593333cd5e4b4aa2cd33b0c'], + country: ['582967534d0f909d196b97f9e6921342777aea87b46fa52df165389db1fb8ccf'], + hashed_maids: [ + '6ca13d52ca70c883e0f0bb101e425a89e8624de51db2d2392593af6a84118090', + ], + client_user_agent: 'chrome', + }, + custom_data: { + currency: 'USD', + value: '27.5', + order_id: '50314b8e9bcf000000000000', + num_items: 3, + content_ids: ['507f1f77bcf86cd799439011', '505bd76785ebb509fc183733'], + contents: [ + { + quantity: 1, + item_price: '19', + }, + { + quantity: 2, + item_price: '3', + }, + ], + }, + }, + JSON_ARRAY: {}, + XML: {}, + FORM: {}, + }, + files: {}, + }, + metadata: { + destintionId: '1pYpzzvcn7AQ2W9GGIAZSsN6Mfq', + jobId: 7, + }, + destination: { + DestinationDefinition: { Config: { cdkV2Enabled: true } }, + ID: '1pYpzzvcn7AQ2W9GGIAZSsN6Mfq', + Name: 'PINTEREST_TAG', + Config: { + sendAsTestEvent: false, + tagId: '123456789', + advertiserId: '429047995', + appId: '429047995', + sendingUnHashedData: true, + enableDeduplication: true, + deduplicationKey: 'messageId', + enhancedMatch: true, + customProperties: [ + { + properties: 'presentclass', + }, + { + properties: 'presentgrade', + }, + ], + eventsMapping: [ + { + from: 'ABC Searched', + to: 'WatchVideo', + }, + { + from: 'ABC Searched', + to: 'Signup', + }, + { + from: 'User Signup', + to: 'Signup', + }, + { + from: 'User Created', + to: 'Signup', + }, + ], + }, + Enabled: true, + Transformations: [], + }, + }, + ], + destType: 'pinterest_tag', + }, + method: 'POST', + }, + }, + output: { + response: { + status: 200, + body: { + output: [ + { + batchedRequest: { + version: '1', + type: 'REST', + method: 'POST', + endpoint: 'https://ct.pinterest.com/events/v3', + headers: { + 'Content-Type': 'application/json', + }, + params: {}, + body: { + JSON: { + data: [ + { + event_name: 'watch_video', + event_time: 1597383030, + action_source: 'web', + event_id: '7208bbb6-2c4e-45bb-bf5b-ad426f3593e9', + app_id: '429047995', + advertiser_id: '429047995', + user_data: { + em: ['48ddb93f0b30c475423fe177832912c5bcdce3cc72872f8051627967ef278e08'], + ph: ['d164bbe036663cb5c96835e9ccc6501e9a521127ea62f6359744928ba932413b'], + ln: ['dcf000c2386fb76d22cefc0d118a8511bb75999019cd373df52044bccd1bd251'], + fn: ['9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a08'], + ct: ['6689106ca7922c30b2fd2c175c85bc7fc2d52cc4941bdd7bb622c6cdc6284a85'], + st: ['3b45022ab36728cdae12e709e945bba267c50ee8a91e6e4388539a8e03a3fdcd'], + zp: ['1a4292e00780e18d00e76fde9850aee5344e939ba593333cd5e4b4aa2cd33b0c'], + country: [ + '582967534d0f909d196b97f9e6921342777aea87b46fa52df165389db1fb8ccf', + ], + hashed_maids: [ + '6ca13d52ca70c883e0f0bb101e425a89e8624de51db2d2392593af6a84118090', + ], + client_user_agent: 'chrome', + }, + custom_data: { + currency: 'USD', + value: '27.5', + order_id: '50314b8e9bcf000000000000', + num_items: 3, + opt_out_type: 'LDP', + content_ids: ['507f1f77bcf86cd799439011', '505bd76785ebb509fc183733'], + contents: [ + { + quantity: 1, + item_price: '19', + }, + { + quantity: 2, + item_price: '3', + }, + ], + }, + }, + { + event_name: 'signup', + event_time: 1597383030, + action_source: 'web', + event_id: '7208bbb6-2c4e-45bb-bf5b-ad426f3593e9', + app_id: '429047995', + advertiser_id: '429047995', + user_data: { + em: ['48ddb93f0b30c475423fe177832912c5bcdce3cc72872f8051627967ef278e08'], + ph: ['d164bbe036663cb5c96835e9ccc6501e9a521127ea62f6359744928ba932413b'], + ln: ['dcf000c2386fb76d22cefc0d118a8511bb75999019cd373df52044bccd1bd251'], + fn: ['9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a08'], + ct: ['6689106ca7922c30b2fd2c175c85bc7fc2d52cc4941bdd7bb622c6cdc6284a85'], + st: ['3b45022ab36728cdae12e709e945bba267c50ee8a91e6e4388539a8e03a3fdcd'], + zp: ['1a4292e00780e18d00e76fde9850aee5344e939ba593333cd5e4b4aa2cd33b0c'], + country: [ + '582967534d0f909d196b97f9e6921342777aea87b46fa52df165389db1fb8ccf', + ], + hashed_maids: [ + '6ca13d52ca70c883e0f0bb101e425a89e8624de51db2d2392593af6a84118090', + ], + client_user_agent: 'chrome', + }, + custom_data: { + currency: 'USD', + value: '27.5', + order_id: '50314b8e9bcf000000000000', + num_items: 3, + opt_out_type: 'LDP', + content_ids: ['507f1f77bcf86cd799439011', '505bd76785ebb509fc183733'], + contents: [ + { + quantity: 1, + item_price: '19', + }, + { + quantity: 2, + item_price: '3', + }, + ], + }, + }, + { + event_name: 'checkout', + event_time: 1597383030, + action_source: 'web', + event_id: '7208bbb6-2c4e-45bb-bf5b-ad426f3593e9', + app_id: '429047995', + advertiser_id: '429047995', + user_data: { + em: ['48ddb93f0b30c475423fe177832912c5bcdce3cc72872f8051627967ef278e08'], + ph: ['d164bbe036663cb5c96835e9ccc6501e9a521127ea62f6359744928ba932413b'], + ln: ['dcf000c2386fb76d22cefc0d118a8511bb75999019cd373df52044bccd1bd251'], + fn: ['9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a08'], + ct: ['6689106ca7922c30b2fd2c175c85bc7fc2d52cc4941bdd7bb622c6cdc6284a85'], + st: ['3b45022ab36728cdae12e709e945bba267c50ee8a91e6e4388539a8e03a3fdcd'], + zp: ['1a4292e00780e18d00e76fde9850aee5344e939ba593333cd5e4b4aa2cd33b0c'], + country: [ + '582967534d0f909d196b97f9e6921342777aea87b46fa52df165389db1fb8ccf', + ], + hashed_maids: [ + '6ca13d52ca70c883e0f0bb101e425a89e8624de51db2d2392593af6a84118090', + ], + client_user_agent: 'chrome', + }, + custom_data: { + currency: 'USD', + value: '27.5', + order_id: '50314b8e9bcf000000000000', + num_items: 3, + content_ids: ['507f1f77bcf86cd799439011', '505bd76785ebb509fc183733'], + contents: [ + { + quantity: 1, + item_price: '19', + }, + { + quantity: 2, + item_price: '3', + }, + ], + }, + }, + { + event_name: 'add_to_cart', + event_time: 1597383030, + action_source: 'web', + event_id: '7208bbb6-2c4e-45bb-bf5b-ad426f3593e9', + app_id: '429047995', + advertiser_id: '429047995', + user_data: { + em: ['48ddb93f0b30c475423fe177832912c5bcdce3cc72872f8051627967ef278e08'], + ph: ['d164bbe036663cb5c96835e9ccc6501e9a521127ea62f6359744928ba932413b'], + ln: ['dcf000c2386fb76d22cefc0d118a8511bb75999019cd373df52044bccd1bd251'], + fn: ['9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a08'], + ct: ['6689106ca7922c30b2fd2c175c85bc7fc2d52cc4941bdd7bb622c6cdc6284a85'], + st: ['3b45022ab36728cdae12e709e945bba267c50ee8a91e6e4388539a8e03a3fdcd'], + zp: ['1a4292e00780e18d00e76fde9850aee5344e939ba593333cd5e4b4aa2cd33b0c'], + country: [ + '582967534d0f909d196b97f9e6921342777aea87b46fa52df165389db1fb8ccf', + ], + hashed_maids: [ + '6ca13d52ca70c883e0f0bb101e425a89e8624de51db2d2392593af6a84118090', + ], + client_user_agent: 'chrome', + }, + custom_data: { + currency: 'USD', + value: '27.5', + order_id: '50314b8e9bcf000000000000', + num_items: 2, + content_ids: ['123'], + contents: [ + { + quantity: 2, + item_price: '25', + }, + ], + }, + }, + { + event_name: 'search', + event_time: 1597383030, + action_source: 'web', + event_id: '7208bbb6-2c4e-45bb-bf5b-ad426f3593e9', + app_id: '429047995', + advertiser_id: '429047995', + user_data: { + em: ['48ddb93f0b30c475423fe177832912c5bcdce3cc72872f8051627967ef278e08'], + ph: ['d164bbe036663cb5c96835e9ccc6501e9a521127ea62f6359744928ba932413b'], + ln: ['dcf000c2386fb76d22cefc0d118a8511bb75999019cd373df52044bccd1bd251'], + fn: ['9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a08'], + ct: ['6689106ca7922c30b2fd2c175c85bc7fc2d52cc4941bdd7bb622c6cdc6284a85'], + st: ['3b45022ab36728cdae12e709e945bba267c50ee8a91e6e4388539a8e03a3fdcd'], + zp: ['1a4292e00780e18d00e76fde9850aee5344e939ba593333cd5e4b4aa2cd33b0c'], + country: [ + '582967534d0f909d196b97f9e6921342777aea87b46fa52df165389db1fb8ccf', + ], + hashed_maids: [ + '6ca13d52ca70c883e0f0bb101e425a89e8624de51db2d2392593af6a84118090', + ], + client_user_agent: 'chrome', + }, + custom_data: { + currency: 'USD', + value: '27.5', + order_id: '50314b8e9bcf000000000000', + num_items: 3, + content_ids: ['507f1f77bcf86cd799439011', '505bd76785ebb509fc183733'], + contents: [ + { + quantity: 1, + item_price: '19', + }, + { + quantity: 2, + item_price: '3', + }, + ], + }, + }, + { + event_name: 'signup', + event_time: 1597383030, + action_source: 'web', + event_id: '7208bbb6-2c4e-45bb-bf5b-ad426f3593e9', + app_id: '429047995', + advertiser_id: '429047995', + user_data: { + em: ['48ddb93f0b30c475423fe177832912c5bcdce3cc72872f8051627967ef278e08'], + ph: ['d164bbe036663cb5c96835e9ccc6501e9a521127ea62f6359744928ba932413b'], + ln: ['dcf000c2386fb76d22cefc0d118a8511bb75999019cd373df52044bccd1bd251'], + fn: ['9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a08'], + ct: ['6689106ca7922c30b2fd2c175c85bc7fc2d52cc4941bdd7bb622c6cdc6284a85'], + st: ['3b45022ab36728cdae12e709e945bba267c50ee8a91e6e4388539a8e03a3fdcd'], + zp: ['1a4292e00780e18d00e76fde9850aee5344e939ba593333cd5e4b4aa2cd33b0c'], + country: [ + '582967534d0f909d196b97f9e6921342777aea87b46fa52df165389db1fb8ccf', + ], + hashed_maids: [ + '6ca13d52ca70c883e0f0bb101e425a89e8624de51db2d2392593af6a84118090', + ], + client_user_agent: 'chrome', + }, + custom_data: { + currency: 'USD', + value: '27.5', + order_id: '50314b8e9bcf000000000000', + num_items: 3, + content_ids: ['507f1f77bcf86cd799439011', '505bd76785ebb509fc183733'], + contents: [ + { + quantity: 1, + item_price: '19', + }, + { + quantity: 2, + item_price: '3', + }, + ], + }, + }, + { + action_source: 'web', + event_name: 'WatchVideo', + event_time: 1597383030, + event_id: '7208bbb6-2c4e-45bb-bf5b-ad426f3593e9', + app_id: '429047995', + advertiser_id: '429047995', + user_data: { + em: ['48ddb93f0b30c475423fe177832912c5bcdce3cc72872f8051627967ef278e08'], + ph: ['d164bbe036663cb5c96835e9ccc6501e9a521127ea62f6359744928ba932413b'], + ln: ['bdfdee6414a89d72bfbf5ee90b1f85924467bae1e3980d83c2cd348dc31d5819'], + fn: ['ee5db3fe0253b651aca3676692e0c59b25909304f5c51d223a02a215d104144b'], + ct: ['6689106ca7922c30b2fd2c175c85bc7fc2d52cc4941bdd7bb622c6cdc6284a85'], + st: ['3b45022ab36728cdae12e709e945bba267c50ee8a91e6e4388539a8e03a3fdcd'], + zp: ['1a4292e00780e18d00e76fde9850aee5344e939ba593333cd5e4b4aa2cd33b0c'], + country: [ + '582967534d0f909d196b97f9e6921342777aea87b46fa52df165389db1fb8ccf', + ], + hashed_maids: [ + '6ca13d52ca70c883e0f0bb101e425a89e8624de51db2d2392593af6a84118090', + ], + client_user_agent: 'chrome', + }, + custom_data: { + currency: 'USD', + value: '27.5', + order_id: '50314b8e9bcf000000000000', + num_items: 3, + content_ids: ['507f1f77bcf86cd799439011', '505bd76785ebb509fc183733'], + contents: [ + { + quantity: 1, + item_price: '19', + }, + { + quantity: 2, + item_price: '3', + }, + ], + }, + }, + ], + }, + JSON_ARRAY: {}, + XML: {}, + FORM: {}, + }, + files: {}, + }, + metadata: [ + { + destintionId: '1pYpzzvcn7AQ2W9GGIAZSsN6Mfq', + jobId: 1, + }, + { + destintionId: '1pYpzzvcn7AQ2W9GGIAZSsN6Mfq', + jobId: 2, + }, + { + destintionId: '1pYpzzvcn7AQ2W9GGIAZSsN6Mfq', + jobId: 3, + }, + { + destintionId: '1pYpzzvcn7AQ2W9GGIAZSsN6Mfq', + jobId: 4, + }, + { + destintionId: '1pYpzzvcn7AQ2W9GGIAZSsN6Mfq', + jobId: 6, + }, + { + destintionId: '1pYpzzvcn7AQ2W9GGIAZSsN6Mfq', + jobId: 7, + }, + ], + batched: true, + statusCode: 200, + destination: { + DestinationDefinition: { Config: { cdkV2Enabled: true } }, + ID: '1pYpzzvcn7AQ2W9GGIAZSsN6Mfq', + Name: 'PINTEREST_TAG', + Config: { + sendAsTestEvent: false, + tagId: '123456789', + advertiserId: '429047995', + appId: '429047995', + sendingUnHashedData: true, + enableDeduplication: true, + deduplicationKey: 'messageId', + enhancedMatch: true, + customProperties: [ + { + properties: 'presentclass', + }, + { + properties: 'presentgrade', + }, + ], + eventsMapping: [ + { + from: 'ABC Searched', + to: 'WatchVideo', + }, + { + from: 'ABC Searched', + to: 'Signup', + }, + { + from: 'User Signup', + to: 'Signup', + }, + { + from: 'User Created', + to: 'Signup', + }, + ], + }, + Enabled: true, + Transformations: [], + }, + }, + { + metadata: [ + { + destintionId: '1pYpzzvcn7AQ2W9GGIAZSsN6Mfq', + jobId: 5, + }, + ], + statTags: { + destType: 'PINTEREST_TAG', + feature: 'router', + implementation: 'cdkV2', + module: 'destination', + errorCategory: 'dataValidation', + errorType: 'instrumentation', + }, + batched: false, + statusCode: 400, + error: 'message type identify is not supported', + destination: { + DestinationDefinition: { Config: { cdkV2Enabled: true } }, + ID: '1pYpzzvcn7AQ2W9GGIAZSsN6Mfq', + Name: 'PINTEREST_TAG', + Config: { + sendAsTestEvent: false, + tagId: '123456789', + advertiserId: '429047995', + appId: '429047995', + sendingUnHashedData: true, + enableDeduplication: true, + deduplicationKey: 'messageId', + enhancedMatch: true, + customProperties: [ + { + properties: 'presentclass', + }, + { + properties: 'presentgrade', + }, + ], + eventsMapping: [ + { + from: 'ABC Searched', + to: 'WatchVideo', + }, + { + from: 'ABC Searched', + to: 'Signup', + }, + { + from: 'User Signup', + to: 'Signup', + }, + { + from: 'User Created', + to: 'Signup', + }, + ], + }, + Enabled: true, + Transformations: [], + }, + }, + ], + }, + }, + }, + }, + { + destType: 'pinterest_tag', + description: 'Test 0', + feature: 'router', + module: 'destination', + version: 'v0', + input: { + request: { + body: { + input: [ + { + message: { + type: 'track', + event: 'ABC Searched', + sentAt: '2020-08-14T05:30:30.118Z', + channel: 'web', + context: { + source: 'test', + userAgent: 'chrome', + traits: { + anonymousId: '50be5c78-6c3f-4b60-be84-97805a316fb1', + email: 'abc@gmail.com', + phone: '+1234589947', + ge: 'male', + db: '19950715', + lastname: 'Rudderlabs', + firstName: 'Test', + address: { + city: 'Kolkata', + state: 'WB', + zip: '700114', + country: 'IN', + }, + }, + device: { + advertisingId: 'abc123', + }, + library: { + name: 'rudder-sdk-ruby-sync', + version: '1.0.6', + }, + }, + messageId: '7208bbb6-2c4e-45bb-bf5b-ad426f3593e9', + timestamp: '2020-08-14T05:30:30.118Z', + properties: { + tax: 2, + total: 27.5, + coupon: 'hasbros', + revenue: 48, + price: 25, + quantity: 2, + currency: 'USD', + discount: 2.5, + order_id: '50314b8e9bcf000000000000', + requestIP: '123.0.0.0', + optOutType: 'LDP', + products: [ + { + sku: '45790-32', + url: 'https://www.example.com/product/path', + name: 'Monopoly: 3rd Edition', + price: 19, + category: 'Games', + quantity: 1, + image_url: 'https:///www.example.com/product/path.jpg', + product_id: '507f1f77bcf86cd799439011', + }, + { + sku: '46493-32', + name: 'Uno Card Game', + price: 3, + category: 'Games', + quantity: 2, + product_id: '505bd76785ebb509fc183733', + }, + ], + shipping: 3, + subtotal: 22.5, + affiliation: 'Google Store', + checkout_id: 'fksdjfsdjfisjf9sdfjsd9f', + }, + anonymousId: '50be5c78-6c3f-4b60-be84-97805a316fb1', + integrations: { + All: true, + }, + }, + metadata: { + destintionId: '1pYpzzvcn7AQ2W9GGIAZSsN6Mfq', + jobId: 8, + }, + destination: { + DestinationDefinition: { Config: { cdkV2Enabled: true } }, + ID: '1pYpzzvcn7AQ2W9GGIAZSsN6Mfq', + Name: 'PINTEREST_TAG', + Config: { + sendAsTestEvent: false, + tagId: '123456789', + apiVersion: 'newApi', + adAccountId: 'accountId123', + conversionToken: 'conversionToken123', + appId: '429047995', + sendingUnHashedData: true, + enableDeduplication: true, + deduplicationKey: 'messageId', + enhancedMatch: true, + customProperties: [ + { + properties: 'presentclass', + }, + { + properties: 'presentgrade', + }, + ], + eventsMapping: [ + { + from: 'ABC Searched', + to: 'WatchVideo', + }, + { + from: 'ABC Searched', + to: 'Signup', + }, + { + from: 'User Signup', + to: 'Signup', + }, + { + from: 'User Created', + to: 'Signup', + }, + ], + }, + Enabled: true, + Transformations: [], + }, + }, + { + message: { + type: 'track', + event: 'Order completed', + sentAt: '2020-08-14T05:30:30.118Z', + channel: 'web', + context: { + source: 'test', + userAgent: 'chrome', + traits: { + anonymousId: '50be5c78-6c3f-4b60-be84-97805a316fb1', + email: 'abc@gmail.com', + phone: '+1234589947', + ge: 'male', + db: '19950715', + lastname: 'Rudderlabs', + firstName: 'Test', + address: { + city: 'Kolkata', + state: 'WB', + zip: '700114', + country: 'IN', + }, + }, + device: { + advertisingId: 'abc123', + }, + library: { + name: 'rudder-sdk-ruby-sync', + version: '1.0.6', + }, + }, + messageId: '7208bbb6-2c4e-45bb-bf5b-ad426f3593e9', + timestamp: '2020-08-14T05:30:30.118Z', + properties: { + tax: 2, + total: 27.5, + coupon: 'hasbros', + revenue: 48, + price: 25, + quantity: 2, + currency: 'USD', + discount: 2.5, + order_id: '50314b8e9bcf000000000000', + requestIP: '123.0.0.0', + products: [ + { + sku: '45790-32', + url: 'https://www.example.com/product/path', + name: 'Monopoly: 3rd Edition', + price: 19, + category: 'Games', + quantity: 1, + image_url: 'https:///www.example.com/product/path.jpg', + product_id: '507f1f77bcf86cd799439011', + }, + { + sku: '46493-32', + name: 'Uno Card Game', + price: 3, + category: 'Games', + quantity: 2, + product_id: '505bd76785ebb509fc183733', + }, + ], + shipping: 3, + subtotal: 22.5, + affiliation: 'Google Store', + checkout_id: 'fksdjfsdjfisjf9sdfjsd9f', + }, + anonymousId: '50be5c78-6c3f-4b60-be84-97805a316fb1', + integrations: { + All: true, + }, + }, + metadata: { + destintionId: '1pYpzzvcn7AQ2W9GGIAZSsN6Mfq', + jobId: 9, + }, + destination: { + DestinationDefinition: { Config: { cdkV2Enabled: true } }, + ID: '1pYpzzvcn7AQ2W9GGIAZSsN6Mfq', + Name: 'PINTEREST_TAG', + Config: { + sendAsTestEvent: false, + tagId: '123456789', + apiVersion: 'newApi', + adAccountId: 'accountId123', + conversionToken: 'conversionToken123', + appId: '429047995', + sendingUnHashedData: true, + enableDeduplication: true, + deduplicationKey: 'messageId', + enhancedMatch: true, + customProperties: [ + { + properties: 'presentclass', + }, + { + properties: 'presentgrade', + }, + ], + eventsMapping: [ + { + from: 'ABC Searched', + to: 'WatchVideo', + }, + { + from: 'ABC Searched', + to: 'Signup', + }, + { + from: 'User Signup', + to: 'Signup', + }, + { + from: 'User Created', + to: 'Signup', + }, + ], + }, + Enabled: true, + Transformations: [], + }, + }, + { + message: { + type: 'track', + event: 'Test', + sentAt: '2020-08-14T05:30:30.118Z', + channel: 'web', + context: { + source: 'test', + userAgent: 'chrome', + traits: { + anonymousId: '50be5c78-6c3f-4b60-be84-97805a316fb1', + email: 'abc@gmail.com', + phone: '+1234589947', + ge: 'male', + db: '19950715', + lastname: 'Rudderlabs', + firstName: 'Test', + address: { + city: 'Kolkata', + state: 'WB', + zip: '700114', + country: 'IN', + }, + }, + device: { + advertisingId: 'abc123', + }, + library: { + name: 'rudder-sdk-ruby-sync', + version: '1.0.6', + }, + }, + messageId: '7208bbb6-2c4e-45bb-bf5b-ad426f3593e9', + timestamp: '2020-08-14T05:30:30.118Z', + properties: { + tax: 2, + total: 27.5, + coupon: 'hasbros', + revenue: 48, + price: 25, + quantity: 2, + currency: 'USD', + discount: 2.5, + order_id: '50314b8e9bcf000000000000', + requestIP: '123.0.0.0', + products: [ + { + sku: '45790-32', + url: 'https://www.example.com/product/path', + name: 'Monopoly: 3rd Edition', + price: 19, + category: 'Games', + quantity: 1, + image_url: 'https:///www.example.com/product/path.jpg', + product_id: '507f1f77bcf86cd799439011', + }, + { + sku: '46493-32', + name: 'Uno Card Game', + price: 3, + category: 'Games', + quantity: 2, + product_id: '505bd76785ebb509fc183733', + }, + ], + shipping: 3, + subtotal: 22.5, + affiliation: 'Google Store', + checkout_id: 'fksdjfsdjfisjf9sdfjsd9f', + }, + anonymousId: '50be5c78-6c3f-4b60-be84-97805a316fb1', + integrations: { + All: true, + }, + }, + metadata: { + destintionId: '1pYpzzvcn7AQ2W9GGIAZSsN6Mfq', + jobId: 10, + }, + destination: { + DestinationDefinition: { Config: { cdkV2Enabled: true } }, + ID: '1pYpzzvcn7AQ2W9GGIAZSsN6Mfq', + Name: 'PINTEREST_TAG', + Config: { + sendAsTestEvent: false, + tagId: '123456789', + apiVersion: 'newApi', + adAccountId: 'accountId123', + conversionToken: 'conversionToken123', + appId: '429047995', + sendingUnHashedData: true, + enableDeduplication: true, + deduplicationKey: 'messageId', + enhancedMatch: true, + sendAsCustomEvent: true, + customProperties: [ + { + properties: 'presentclass', + }, + { + properties: 'presentgrade', + }, + ], + eventsMapping: [ + { + from: 'ABC Searched', + to: 'WatchVideo', + }, + { + from: 'ABC Searched', + to: 'Signup', + }, + { + from: 'User Signup', + to: 'Signup', + }, + { + from: 'User Created', + to: 'Signup', + }, + ], + }, + Enabled: true, + Transformations: [], + }, + }, + ], + destType: 'pinterest_tag', + }, + method: 'POST', + }, + }, + output: { + response: { + status: 200, + body: { + output: [ + { + batchedRequest: { + version: '1', + type: 'REST', + method: 'POST', + endpoint: 'https://api.pinterest.com/v5/ad_accounts/accountId123/events', + headers: { + 'Content-Type': 'application/json', + Authorization: 'Bearer conversionToken123', + }, + params: {}, + body: { + JSON: { + data: [ + { + event_name: 'watch_video', + event_time: 1597383030, + action_source: 'web', + event_id: '7208bbb6-2c4e-45bb-bf5b-ad426f3593e9', + app_id: '429047995', + user_data: { + em: ['48ddb93f0b30c475423fe177832912c5bcdce3cc72872f8051627967ef278e08'], + ph: ['d164bbe036663cb5c96835e9ccc6501e9a521127ea62f6359744928ba932413b'], + ln: ['dcf000c2386fb76d22cefc0d118a8511bb75999019cd373df52044bccd1bd251'], + fn: ['9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a08'], + ct: ['6689106ca7922c30b2fd2c175c85bc7fc2d52cc4941bdd7bb622c6cdc6284a85'], + st: ['3b45022ab36728cdae12e709e945bba267c50ee8a91e6e4388539a8e03a3fdcd'], + zp: ['1a4292e00780e18d00e76fde9850aee5344e939ba593333cd5e4b4aa2cd33b0c'], + country: [ + '582967534d0f909d196b97f9e6921342777aea87b46fa52df165389db1fb8ccf', + ], + hashed_maids: [ + '6ca13d52ca70c883e0f0bb101e425a89e8624de51db2d2392593af6a84118090', + ], + client_user_agent: 'chrome', + }, + custom_data: { + currency: 'USD', + value: '27.5', + order_id: '50314b8e9bcf000000000000', + num_items: 3, + opt_out_type: 'LDP', + content_ids: ['507f1f77bcf86cd799439011', '505bd76785ebb509fc183733'], + contents: [ + { + quantity: 1, + item_price: '19', + }, + { + quantity: 2, + item_price: '3', + }, + ], + }, + }, + { + event_name: 'signup', + event_time: 1597383030, + action_source: 'web', + event_id: '7208bbb6-2c4e-45bb-bf5b-ad426f3593e9', + app_id: '429047995', + user_data: { + em: ['48ddb93f0b30c475423fe177832912c5bcdce3cc72872f8051627967ef278e08'], + ph: ['d164bbe036663cb5c96835e9ccc6501e9a521127ea62f6359744928ba932413b'], + ln: ['dcf000c2386fb76d22cefc0d118a8511bb75999019cd373df52044bccd1bd251'], + fn: ['9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a08'], + ct: ['6689106ca7922c30b2fd2c175c85bc7fc2d52cc4941bdd7bb622c6cdc6284a85'], + st: ['3b45022ab36728cdae12e709e945bba267c50ee8a91e6e4388539a8e03a3fdcd'], + zp: ['1a4292e00780e18d00e76fde9850aee5344e939ba593333cd5e4b4aa2cd33b0c'], + country: [ + '582967534d0f909d196b97f9e6921342777aea87b46fa52df165389db1fb8ccf', + ], + hashed_maids: [ + '6ca13d52ca70c883e0f0bb101e425a89e8624de51db2d2392593af6a84118090', + ], + client_user_agent: 'chrome', + }, + custom_data: { + currency: 'USD', + value: '27.5', + order_id: '50314b8e9bcf000000000000', + num_items: 3, + opt_out_type: 'LDP', + content_ids: ['507f1f77bcf86cd799439011', '505bd76785ebb509fc183733'], + contents: [ + { + quantity: 1, + item_price: '19', + }, + { + quantity: 2, + item_price: '3', + }, + ], + }, + }, + { + event_name: 'checkout', + event_time: 1597383030, + action_source: 'web', + event_id: '7208bbb6-2c4e-45bb-bf5b-ad426f3593e9', + app_id: '429047995', + user_data: { + em: ['48ddb93f0b30c475423fe177832912c5bcdce3cc72872f8051627967ef278e08'], + ph: ['d164bbe036663cb5c96835e9ccc6501e9a521127ea62f6359744928ba932413b'], + ln: ['dcf000c2386fb76d22cefc0d118a8511bb75999019cd373df52044bccd1bd251'], + fn: ['9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a08'], + ct: ['6689106ca7922c30b2fd2c175c85bc7fc2d52cc4941bdd7bb622c6cdc6284a85'], + st: ['3b45022ab36728cdae12e709e945bba267c50ee8a91e6e4388539a8e03a3fdcd'], + zp: ['1a4292e00780e18d00e76fde9850aee5344e939ba593333cd5e4b4aa2cd33b0c'], + country: [ + '582967534d0f909d196b97f9e6921342777aea87b46fa52df165389db1fb8ccf', + ], + hashed_maids: [ + '6ca13d52ca70c883e0f0bb101e425a89e8624de51db2d2392593af6a84118090', + ], + client_user_agent: 'chrome', + }, + custom_data: { + currency: 'USD', + value: '27.5', + order_id: '50314b8e9bcf000000000000', + num_items: 3, + content_ids: ['507f1f77bcf86cd799439011', '505bd76785ebb509fc183733'], + contents: [ + { + quantity: 1, + item_price: '19', + }, + { + quantity: 2, + item_price: '3', + }, + ], + }, + }, + { + event_name: 'custom', + event_time: 1597383030, + action_source: 'web', + event_id: '7208bbb6-2c4e-45bb-bf5b-ad426f3593e9', + app_id: '429047995', + user_data: { + em: ['48ddb93f0b30c475423fe177832912c5bcdce3cc72872f8051627967ef278e08'], + ph: ['d164bbe036663cb5c96835e9ccc6501e9a521127ea62f6359744928ba932413b'], + ln: ['dcf000c2386fb76d22cefc0d118a8511bb75999019cd373df52044bccd1bd251'], + fn: ['9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a08'], + ct: ['6689106ca7922c30b2fd2c175c85bc7fc2d52cc4941bdd7bb622c6cdc6284a85'], + st: ['3b45022ab36728cdae12e709e945bba267c50ee8a91e6e4388539a8e03a3fdcd'], + zp: ['1a4292e00780e18d00e76fde9850aee5344e939ba593333cd5e4b4aa2cd33b0c'], + country: [ + '582967534d0f909d196b97f9e6921342777aea87b46fa52df165389db1fb8ccf', + ], + hashed_maids: [ + '6ca13d52ca70c883e0f0bb101e425a89e8624de51db2d2392593af6a84118090', + ], + client_user_agent: 'chrome', + }, + custom_data: { + currency: 'USD', + value: '27.5', + order_id: '50314b8e9bcf000000000000', + num_items: 3, + content_ids: ['507f1f77bcf86cd799439011', '505bd76785ebb509fc183733'], + contents: [ + { + quantity: 1, + item_price: '19', + }, + { + quantity: 2, + item_price: '3', + }, + ], + }, + }, + ], + }, + JSON_ARRAY: {}, + XML: {}, + FORM: {}, + }, + files: {}, + }, + metadata: [ + { + destintionId: '1pYpzzvcn7AQ2W9GGIAZSsN6Mfq', + jobId: 8, + }, + { + destintionId: '1pYpzzvcn7AQ2W9GGIAZSsN6Mfq', + jobId: 9, + }, + { + destintionId: '1pYpzzvcn7AQ2W9GGIAZSsN6Mfq', + jobId: 10, + }, + ], + batched: true, + statusCode: 200, + destination: { + DestinationDefinition: { Config: { cdkV2Enabled: true } }, + ID: '1pYpzzvcn7AQ2W9GGIAZSsN6Mfq', + Name: 'PINTEREST_TAG', + Config: { + sendAsTestEvent: false, + tagId: '123456789', + apiVersion: 'newApi', + adAccountId: 'accountId123', + conversionToken: 'conversionToken123', + appId: '429047995', + sendingUnHashedData: true, + enableDeduplication: true, + deduplicationKey: 'messageId', + enhancedMatch: true, + customProperties: [ + { + properties: 'presentclass', + }, + { + properties: 'presentgrade', + }, + ], + eventsMapping: [ + { + from: 'ABC Searched', + to: 'WatchVideo', + }, + { + from: 'ABC Searched', + to: 'Signup', + }, + { + from: 'User Signup', + to: 'Signup', + }, + { + from: 'User Created', + to: 'Signup', + }, + ], + }, + Enabled: true, + Transformations: [], + }, + }, + ], + }, + }, + }, + }, + { + destType: 'pinterest_tag', + description: 'Test 0', + feature: 'router', + module: 'destination', + version: 'v0', + input: { + request: { + body: { + input: [ + { + message: { + type: 'Identify', + event: 'User Signup', + sentAt: '2020-08-14T05:30:30.118Z', + channel: 'web', + context: { + source: 'test', + userAgent: 'chrome', + traits: { + anonymousId: '50be5c78-6c3f-4b60-be84-97805a316fb1', + email: 'abc@gmail.com', + phone: '+1234589947', + ge: 'male', + db: '19950715', + lastname: 'Rudderlabs', + firstName: 'Test', + address: { + city: 'Kolkata', + state: 'WB', + zip: '700114', + country: 'IN', + }, + }, + device: { + advertisingId: 'abc123', + }, + library: { + name: 'rudder-sdk-ruby-sync', + version: '1.0.6', + }, + }, + messageId: '7208bbb6-2c4e-45bb-bf5b-ad426f3593e9', + timestamp: '2020-08-14T05:30:30.118Z', + properties: { + tax: 2, + total: 27.5, + coupon: 'hasbros', + revenue: 48, + price: 25, + quantity: 2, + currency: 'USD', + discount: 2.5, + order_id: '50314b8e9bcf000000000000', + requestIP: '123.0.0.0', + products: [ + { + sku: '45790-32', + url: 'https://www.example.com/product/path', + name: 'Monopoly: 3rd Edition', + price: 19, + category: 'Games', + quantity: 1, + image_url: 'https:///www.example.com/product/path.jpg', + product_id: '507f1f77bcf86cd799439011', + }, + { + sku: '46493-32', + name: 'Uno Card Game', + price: 3, + category: 'Games', + quantity: 2, + product_id: '505bd76785ebb509fc183733', + }, + ], + shipping: 3, + subtotal: 22.5, + affiliation: 'Google Store', + checkout_id: 'fksdjfsdjfisjf9sdfjsd9f', + }, + anonymousId: '50be5c78-6c3f-4b60-be84-97805a316fb1', + integrations: { + All: true, + }, + }, + metadata: { + destintionId: '1pYpzzvcn7AQ2W9GGIAZSsN6Mfq', + jobId: 5, + }, + destination: { + DestinationDefinition: { Config: { cdkV2Enabled: true } }, + ID: '1pYpzzvcn7AQ2W9GGIAZSsN6Mfq', + Name: 'PINTEREST_TAG', + Config: { + sendAsTestEvent: false, + tagId: '123456789', + advertiserId: '429047995', + appId: '429047995', + sendingUnHashedData: true, + enableDeduplication: true, + deduplicationKey: 'messageId', + enhancedMatch: true, + customProperties: [ + { + properties: 'presentclass', + }, + { + properties: 'presentgrade', + }, + ], + eventsMapping: [ + { + from: 'ABC Searched', + to: 'Watch Video', + }, + { + from: 'ABC Searched', + to: 'Signup', + }, + { + from: 'User Signup', + to: 'Signup', + }, + { + from: 'User Created', + to: 'Signup', + }, + ], + }, + Enabled: true, + Transformations: [], + }, + }, + ], + destType: 'pinterest_tag', + }, + method: 'POST', + }, + }, + output: { + response: { + status: 200, + body: { + output: [ + { + metadata: [ + { + destintionId: '1pYpzzvcn7AQ2W9GGIAZSsN6Mfq', + jobId: 5, + }, + ], + batched: false, + statusCode: 400, + error: 'message type identify is not supported', + statTags: { + destType: 'PINTEREST_TAG', + implementation: 'cdkV2', + feature: 'router', + module: 'destination', + errorCategory: 'dataValidation', + errorType: 'instrumentation', + }, + destination: { + DestinationDefinition: { Config: { cdkV2Enabled: true } }, + ID: '1pYpzzvcn7AQ2W9GGIAZSsN6Mfq', + Name: 'PINTEREST_TAG', + Config: { + sendAsTestEvent: false, + tagId: '123456789', + advertiserId: '429047995', + appId: '429047995', + sendingUnHashedData: true, + enableDeduplication: true, + deduplicationKey: 'messageId', + enhancedMatch: true, + customProperties: [ + { + properties: 'presentclass', + }, + { + properties: 'presentgrade', + }, + ], + eventsMapping: [ + { + from: 'ABC Searched', + to: 'Watch Video', + }, + { + from: 'ABC Searched', + to: 'Signup', + }, + { + from: 'User Signup', + to: 'Signup', + }, + { + from: 'User Created', + to: 'Signup', + }, + ], + }, + Enabled: true, + Transformations: [], + }, + }, + ], + }, + }, + }, + }, +]; diff --git a/test/integrations/destinations/pinterest_tag/step/data.ts b/test/integrations/destinations/pinterest_tag/step/data.ts new file mode 100644 index 0000000000..b5d6f5186f --- /dev/null +++ b/test/integrations/destinations/pinterest_tag/step/data.ts @@ -0,0 +1,3358 @@ +export const data = [ + { + name: 'pinterest_tag', + description: 'Test 0', + feature: 'processor', + module: 'destination', + version: 'v0', + input: { + request: { + body: [ + { + message: { + type: 'track', + event: 'ABC Searched', + sentAt: '2020-08-14T05:30:30.118Z', + channel: 'web', + context: { + source: 'test', + userAgent: 'chrome', + traits: { + anonymousId: '50be5c78-6c3f-4b60-be84-97805a316fb1', + email: 'abc@gmail.com', + phone: '+1234589947', + gender: 'non-binary', + db: '19950715', + lastname: 'Rudderlabs', + firstName: 'Test', + address: { city: 'Kolkata', state: 'WB', zip: '700114', country: 'IN' }, + }, + device: { advertisingId: 'abc123' }, + library: { name: 'rudder-sdk-ruby-sync', version: '1.0.6' }, + }, + messageId: '7208bbb6-2c4e-45bb-bf5b-ad426f3593e9', + timestamp: '2020-08-14T05:30:30.118Z', + properties: { + tax: 2, + total: 27.5, + coupon: 'hasbros', + revenue: 48, + price: 25, + quantity: 2, + currency: 'USD', + discount: 2.5, + order_id: '50314b8e9bcf000000000000', + requestIP: '123.0.0.0', + optOutType: 'LDP', + products: [ + { + sku: '45790-32', + url: 'https://www.example.com/product/path', + name: 'Monopoly: 3rd Edition', + price: 19, + category: 'Games', + quantity: 1, + image_url: 'https:///www.example.com/product/path.jpg', + product_id: '507f1f77bcf86cd799439011', + }, + { + sku: '46493-32', + name: 'Uno Card Game', + price: 3, + category: 'Games', + quantity: 2, + product_id: '505bd76785ebb509fc183733', + }, + ], + shipping: 3, + subtotal: 22.5, + affiliation: 'Google Store', + checkout_id: 'fksdjfsdjfisjf9sdfjsd9f', + }, + anonymousId: '50be5c78-6c3f-4b60-be84-97805a316fb1', + integrations: { All: true }, + }, + destination: { + ID: '1pYpzzvcn7AQ2W9GGIAZSsN6Mfq', + Name: 'PINTEREST_TAG', + Config: { + sendAsTestEvent: false, + tagId: '123456789', + advertiserId: '429047995', + appId: '429047995', + enhancedMatch: true, + enableDeduplication: true, + deduplicationKey: 'messageId', + sendingUnHashedData: true, + customProperties: [{ properties: 'presentclass' }, { properties: 'presentgrade' }], + eventsMapping: [{ from: 'ABC Searched', to: 'WatchVideo' }], + }, + Enabled: true, + Transformations: [], + }, + }, + ], + method: 'POST', + }, + pathSuffix: '', + }, + output: { + response: { + status: 200, + body: [ + { + output: { + version: '1', + type: 'REST', + method: 'POST', + endpoint: 'https://ct.pinterest.com/events/v3', + headers: { 'Content-Type': 'application/json' }, + params: {}, + body: { + JSON: { + action_source: 'web', + event_name: 'watch_video', + event_time: 1597383030, + event_id: '7208bbb6-2c4e-45bb-bf5b-ad426f3593e9', + app_id: '429047995', + advertiser_id: '429047995', + user_data: { + em: ['48ddb93f0b30c475423fe177832912c5bcdce3cc72872f8051627967ef278e08'], + ph: ['d164bbe036663cb5c96835e9ccc6501e9a521127ea62f6359744928ba932413b'], + ln: ['dcf000c2386fb76d22cefc0d118a8511bb75999019cd373df52044bccd1bd251'], + fn: ['9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a08'], + ct: ['6689106ca7922c30b2fd2c175c85bc7fc2d52cc4941bdd7bb622c6cdc6284a85'], + st: ['3b45022ab36728cdae12e709e945bba267c50ee8a91e6e4388539a8e03a3fdcd'], + zp: ['1a4292e00780e18d00e76fde9850aee5344e939ba593333cd5e4b4aa2cd33b0c'], + country: ['582967534d0f909d196b97f9e6921342777aea87b46fa52df165389db1fb8ccf'], + hashed_maids: [ + '6ca13d52ca70c883e0f0bb101e425a89e8624de51db2d2392593af6a84118090', + ], + client_user_agent: 'chrome', + ge: ['1b16b1df538ba12dc3f97edbb85caa7050d46c148134290feba80f8236c83db9'], + }, + custom_data: { + currency: 'USD', + value: '27.5', + order_id: '50314b8e9bcf000000000000', + opt_out_type: 'LDP', + num_items: 3, + content_ids: ['507f1f77bcf86cd799439011', '505bd76785ebb509fc183733'], + contents: [ + { quantity: 1, item_price: '19' }, + { quantity: 2, item_price: '3' }, + ], + }, + }, + JSON_ARRAY: {}, + XML: {}, + FORM: {}, + }, + files: {}, + userId: '', + }, + statusCode: 200, + }, + ], + }, + }, + }, + { + name: 'pinterest_tag', + description: 'Test 1', + feature: 'processor', + module: 'destination', + version: 'v0', + input: { + request: { + body: [ + { + message: { + type: 'track', + event: 'Order completed', + sentAt: '2020-08-14T05:30:30.118Z', + channel: 'web', + context: { + source: 'test', + userAgent: 'chrome', + traits: { + anonymousId: '50be5c78-6c3f-4b60-be84-97805a316fb1', + email: 'abc@gmail.com', + phone: '+1234589947', + ge: 'male', + db: '19950715', + lastname: 'Rudderlabs', + firstName: 'Test', + address: { city: 'Kolkata', state: 'WB', zip: '700114', country: 'IN' }, + }, + device: { advertisingId: 'abc123' }, + library: { name: 'rudder-sdk-ruby-sync', version: '1.0.6' }, + }, + messageId: '7208bbb6-2c4e-45bb-bf5b-ad426f3593e9', + timestamp: '2020-08-14T05:30:30.118Z', + properties: { + tax: 2, + total: 27.5, + coupon: 'hasbros', + revenue: 48, + price: 25, + quantity: 2, + currency: 'USD', + discount: 2.5, + order_id: '50314b8e9bcf000000000000', + requestIP: '123.0.0.0', + products: [ + { + sku: '45790-32', + url: 'https://www.example.com/product/path', + name: 'Monopoly: 3rd Edition', + price: 19, + category: 'Games', + quantity: 1, + image_url: 'https:///www.example.com/product/path.jpg', + product_id: '507f1f77bcf86cd799439011', + }, + { + sku: '46493-32', + name: 'Uno Card Game', + price: 3, + category: 'Games', + quantity: 2, + product_id: '505bd76785ebb509fc183733', + }, + ], + shipping: 3, + subtotal: 22.5, + affiliation: 'Google Store', + checkout_id: 'fksdjfsdjfisjf9sdfjsd9f', + }, + anonymousId: '50be5c78-6c3f-4b60-be84-97805a316fb1', + integrations: { All: true }, + }, + destination: { + ID: '1pYpzzvcn7AQ2W9GGIAZSsN6Mfq', + Name: 'PINTEREST_TAG', + Config: { + sendAsTestEvent: false, + tagId: '123456789', + advertiserId: '429047995', + appId: '429047995', + sendingUnHashedData: true, + enableDeduplication: true, + deduplicationKey: 'messageId', + enhancedMatch: true, + customProperties: [{ properties: 'presentclass' }, { properties: 'presentgrade' }], + eventsMapping: [{ from: 'ABC Searched', to: 'WatchVideo' }], + }, + Enabled: true, + Transformations: [], + }, + }, + ], + method: 'POST', + }, + pathSuffix: '', + }, + output: { + response: { + status: 200, + body: [ + { + output: { + version: '1', + type: 'REST', + method: 'POST', + endpoint: 'https://ct.pinterest.com/events/v3', + headers: { 'Content-Type': 'application/json' }, + params: {}, + body: { + JSON: { + action_source: 'web', + event_name: 'checkout', + event_time: 1597383030, + event_id: '7208bbb6-2c4e-45bb-bf5b-ad426f3593e9', + app_id: '429047995', + advertiser_id: '429047995', + user_data: { + em: ['48ddb93f0b30c475423fe177832912c5bcdce3cc72872f8051627967ef278e08'], + ph: ['d164bbe036663cb5c96835e9ccc6501e9a521127ea62f6359744928ba932413b'], + ln: ['dcf000c2386fb76d22cefc0d118a8511bb75999019cd373df52044bccd1bd251'], + fn: ['9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a08'], + ct: ['6689106ca7922c30b2fd2c175c85bc7fc2d52cc4941bdd7bb622c6cdc6284a85'], + st: ['3b45022ab36728cdae12e709e945bba267c50ee8a91e6e4388539a8e03a3fdcd'], + zp: ['1a4292e00780e18d00e76fde9850aee5344e939ba593333cd5e4b4aa2cd33b0c'], + country: ['582967534d0f909d196b97f9e6921342777aea87b46fa52df165389db1fb8ccf'], + hashed_maids: [ + '6ca13d52ca70c883e0f0bb101e425a89e8624de51db2d2392593af6a84118090', + ], + client_user_agent: 'chrome', + }, + custom_data: { + currency: 'USD', + value: '27.5', + order_id: '50314b8e9bcf000000000000', + num_items: 3, + content_ids: ['507f1f77bcf86cd799439011', '505bd76785ebb509fc183733'], + contents: [ + { quantity: 1, item_price: '19' }, + { quantity: 2, item_price: '3' }, + ], + }, + }, + JSON_ARRAY: {}, + XML: {}, + FORM: {}, + }, + files: {}, + userId: '', + }, + statusCode: 200, + }, + ], + }, + }, + }, + { + name: 'pinterest_tag', + description: 'Test 2', + feature: 'processor', + module: 'destination', + version: 'v0', + input: { + request: { + body: [ + { + message: { + type: 'track', + event: 'product added', + sentAt: '2020-08-14T05:30:30.118Z', + channel: 'web', + context: { + source: 'test', + userAgent: 'chrome', + traits: { + anonymousId: '50be5c78-6c3f-4b60-be84-97805a316fb1', + email: 'abc@gmail.com', + phone: '+1234589947', + ge: 'male', + db: '19950715', + lastname: 'Rudderlabs', + firstName: 'Test', + address: { city: 'Kolkata', state: 'WB', zip: '700114', country: 'IN' }, + }, + device: { advertisingId: 'abc123' }, + library: { name: 'rudder-sdk-ruby-sync', version: '1.0.6' }, + }, + messageId: '7208bbb6-2c4e-45bb-bf5b-ad426f3593e9', + timestamp: '2020-08-14T05:30:30.118Z', + properties: { + product_id: '123', + tax: 2, + total: 27.5, + coupon: 'hasbros', + revenue: 48, + price: 25, + quantity: 2, + currency: 'USD', + discount: 2.5, + order_id: '50314b8e9bcf000000000000', + requestIP: '123.0.0.0', + shipping: 3, + subtotal: 22.5, + affiliation: 'Google Store', + checkout_id: 'fksdjfsdjfisjf9sdfjsd9f', + }, + anonymousId: '50be5c78-6c3f-4b60-be84-97805a316fb1', + integrations: { All: true }, + }, + destination: { + ID: '1pYpzzvcn7AQ2W9GGIAZSsN6Mfq', + Name: 'PINTEREST_TAG', + Config: { + sendAsTestEvent: false, + tagId: '123456789', + advertiserId: '429047995', + appId: '429047995', + sendingUnHashedData: true, + enableDeduplication: true, + deduplicationKey: 'messageId', + enhancedMatch: true, + customProperties: [{ properties: 'presentclass' }, { properties: 'presentgrade' }], + eventsMapping: [{ from: 'ABC Searched', to: 'WatchVideo' }], + }, + Enabled: true, + Transformations: [], + }, + }, + ], + method: 'POST', + }, + pathSuffix: '', + }, + output: { + response: { + status: 200, + body: [ + { + output: { + version: '1', + type: 'REST', + method: 'POST', + endpoint: 'https://ct.pinterest.com/events/v3', + headers: { 'Content-Type': 'application/json' }, + params: {}, + body: { + JSON: { + event_name: 'add_to_cart', + action_source: 'web', + event_time: 1597383030, + event_id: '7208bbb6-2c4e-45bb-bf5b-ad426f3593e9', + app_id: '429047995', + advertiser_id: '429047995', + user_data: { + em: ['48ddb93f0b30c475423fe177832912c5bcdce3cc72872f8051627967ef278e08'], + ph: ['d164bbe036663cb5c96835e9ccc6501e9a521127ea62f6359744928ba932413b'], + ln: ['dcf000c2386fb76d22cefc0d118a8511bb75999019cd373df52044bccd1bd251'], + fn: ['9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a08'], + ct: ['6689106ca7922c30b2fd2c175c85bc7fc2d52cc4941bdd7bb622c6cdc6284a85'], + st: ['3b45022ab36728cdae12e709e945bba267c50ee8a91e6e4388539a8e03a3fdcd'], + zp: ['1a4292e00780e18d00e76fde9850aee5344e939ba593333cd5e4b4aa2cd33b0c'], + country: ['582967534d0f909d196b97f9e6921342777aea87b46fa52df165389db1fb8ccf'], + hashed_maids: [ + '6ca13d52ca70c883e0f0bb101e425a89e8624de51db2d2392593af6a84118090', + ], + client_user_agent: 'chrome', + }, + custom_data: { + currency: 'USD', + value: '27.5', + order_id: '50314b8e9bcf000000000000', + num_items: 2, + content_ids: ['123'], + contents: [{ quantity: 2, item_price: '25' }], + }, + }, + JSON_ARRAY: {}, + XML: {}, + FORM: {}, + }, + files: {}, + userId: '', + }, + statusCode: 200, + }, + ], + }, + }, + }, + { + name: 'pinterest_tag', + description: 'Test 3', + feature: 'processor', + module: 'destination', + version: 'v0', + input: { + request: { + body: [ + { + message: { + type: 'track', + event: 'Product List Filtered', + sentAt: '2020-08-14T05:30:30.118Z', + context: { + source: 'test', + userAgent: 'chrome', + traits: { + anonymousId: '50be5c78-6c3f-4b60-be84-97805a316fb1', + email: 'abc@gmail.com', + phone: '+1234589947', + ge: 'male', + db: '19950715', + lastname: 'Rudderlabs', + firstName: 'Test', + address: { city: 'Kolkata', state: 'WB', zip: '700114', country: 'IN' }, + }, + device: { advertisingId: 'abc123' }, + library: { name: 'rudder-sdk-ruby-sync', version: '1.0.6' }, + }, + messageId: '7208bbb6-2c4e-45bb-bf5b-ad426f3593e9', + timestamp: '2020-08-14T05:30:30.118Z', + properties: { + tax: 2, + total: 27.5, + coupon: 'hasbros', + revenue: 48, + price: 25, + quantity: 2, + currency: 'USD', + discount: 2.5, + order_id: '50314b8e9bcf000000000000', + requestIP: '123.0.0.0', + products: [ + { + sku: '45790-32', + url: 'https://www.example.com/product/path', + name: 'Monopoly: 3rd Edition', + price: 19, + category: 'Games', + quantity: 1, + image_url: 'https:///www.example.com/product/path.jpg', + product_id: '507f1f77bcf86cd799439011', + }, + { + sku: '46493-32', + name: 'Uno Card Game', + price: 3, + category: 'Games', + quantity: 2, + product_id: '505bd76785ebb509fc183733', + }, + ], + shipping: 3, + subtotal: 22.5, + affiliation: 'Google Store', + checkout_id: 'fksdjfsdjfisjf9sdfjsd9f', + }, + anonymousId: '50be5c78-6c3f-4b60-be84-97805a316fb1', + integrations: { All: true }, + }, + destination: { + ID: '1pYpzzvcn7AQ2W9GGIAZSsN6Mfq', + Name: 'PINTEREST_TAG', + Config: { + sendAsTestEvent: false, + tagId: '123456789', + advertiserId: '', + appId: '429047995', + sendingUnHashedData: true, + enableDeduplication: true, + deduplicationKey: 'messageId', + enhancedMatch: true, + customProperties: [{ properties: 'presentclass' }, { properties: 'presentgrade' }], + eventsMapping: [{ from: 'ABC Searched', to: 'WatchVideo' }], + }, + Enabled: true, + Transformations: [], + }, + }, + ], + method: 'POST', + }, + pathSuffix: '', + }, + output: { + response: { + status: 200, + body: [ + { + error: 'Advertiser Id not found. Aborting', + statTags: { + destType: 'PINTEREST_TAG', + errorCategory: 'dataValidation', + errorType: 'configuration', + feature: 'processor', + implementation: 'native', + module: 'destination', + }, + statusCode: 400, + }, + ], + }, + }, + }, + { + name: 'pinterest_tag', + description: 'Test 4', + feature: 'processor', + module: 'destination', + version: 'v0', + input: { + request: { + body: [ + { + message: { + type: 'track', + event: 'Product List Filtered', + sentAt: '2020-08-14T05:30:30.118Z', + channel: 'web', + context: { + source: 'test', + userAgent: 'chrome', + traits: { + anonymousId: '50be5c78-6c3f-4b60-be84-97805a316fb1', + phone: '+1234589947', + ge: 'male', + db: '19950715', + lastname: 'Rudderlabs', + firstName: 'Test', + address: { city: 'Kolkata', state: 'WB', zip: '700114', country: 'IN' }, + }, + library: { name: 'rudder-sdk-ruby-sync', version: '1.0.6' }, + }, + messageId: '7208bbb6-2c4e-45bb-bf5b-ad426f3593e9', + timestamp: '2020-08-14T05:30:30.118Z', + properties: { + tax: 2, + total: 27.5, + coupon: 'hasbros', + revenue: 48, + price: 25, + quantity: 2, + currency: 'USD', + discount: 2.5, + order_id: '50314b8e9bcf000000000000', + requestIP: '123.0.0.0', + products: [ + { + sku: '45790-32', + url: 'https://www.example.com/product/path', + name: 'Monopoly: 3rd Edition', + price: 19, + category: 'Games', + quantity: 1, + image_url: 'https:///www.example.com/product/path.jpg', + product_id: '507f1f77bcf86cd799439011', + }, + { + sku: '46493-32', + name: 'Uno Card Game', + price: 3, + category: 'Games', + quantity: 2, + product_id: '505bd76785ebb509fc183733', + }, + ], + shipping: 3, + subtotal: 22.5, + affiliation: 'Google Store', + checkout_id: 'fksdjfsdjfisjf9sdfjsd9f', + }, + anonymousId: '50be5c78-6c3f-4b60-be84-97805a316fb1', + integrations: { All: true }, + }, + destination: { + ID: '1pYpzzvcn7AQ2W9GGIAZSsN6Mfq', + Name: 'PINTEREST_TAG', + Config: { + sendAsTestEvent: false, + tagId: '123456789', + advertiserId: '429047995', + appId: '429047995', + sendingUnHashedData: true, + enableDeduplication: true, + deduplicationKey: 'messageId', + enhancedMatch: true, + customProperties: [{ properties: 'presentclass' }, { properties: 'presentgrade' }], + eventsMapping: [{ from: 'ABC Searched', to: 'WatchVideo' }], + }, + Enabled: true, + Transformations: [], + }, + }, + ], + method: 'POST', + }, + pathSuffix: '', + }, + output: { + response: { + status: 200, + body: [ + { + error: + 'It is required at least one of em, hashed_maids or pair of client_ip_address and client_user_agent', + statTags: { + destType: 'PINTEREST_TAG', + errorCategory: 'dataValidation', + errorType: 'instrumentation', + feature: 'processor', + implementation: 'native', + module: 'destination', + }, + statusCode: 400, + }, + ], + }, + }, + }, + { + name: 'pinterest_tag', + description: 'Test 5', + feature: 'processor', + module: 'destination', + version: 'v0', + input: { + request: { + body: [ + { + message: { + type: 'track', + event: 'ABC Searched', + sentAt: '2020-08-14T05:30:30.118Z', + channel: 'web', + context: { + source: 'test', + userAgent: 'chrome', + traits: { + anonymousId: '50be5c78-6c3f-4b60-be84-97805a316fb1', + email: 'abc@gmail.com', + phone: '+1234589947', + ge: 'male', + db: '19950715', + lastname: 'Rudderlabs', + firstName: 'Test', + address: { city: 'Kolkata', state: 'WB', zip: '700114', country: 'IN' }, + }, + device: { advertisingId: 'abc123' }, + library: { name: 'rudder-sdk-ruby-sync', version: '1.0.6' }, + }, + messageId: '7208bbb6-2c4e-45bb-bf5b-ad426f3593e9', + timestamp: '2020-08-14T05:30:30.118Z', + properties: { + tax: 2, + total: 27.5, + coupon: 'hasbros', + revenue: 48, + price: 25, + quantity: 2, + currency: 'USD', + discount: 2.5, + order_id: '50314b8e9bcf000000000000', + requestIP: '123.0.0.0', + numOfItems: 2, + products: [ + { + sku: '45790-32', + url: 'https://www.example.com/product/path', + name: 'Monopoly: 3rd Edition', + price: 19, + category: 'Games', + quantity: 1, + image_url: 'https:///www.example.com/product/path.jpg', + product_id: '507f1f77bcf86cd799439011', + }, + { + sku: '46493-32', + name: 'Uno Card Game', + price: 3, + category: 'Games', + quantity: 2, + product_id: '505bd76785ebb509fc183733', + }, + ], + shipping: 3, + subtotal: 22.5, + affiliation: 'Google Store', + checkout_id: 'fksdjfsdjfisjf9sdfjsd9f', + }, + anonymousId: '50be5c78-6c3f-4b60-be84-97805a316fb1', + integrations: { All: true }, + }, + destination: { + ID: '1pYpzzvcn7AQ2W9GGIAZSsN6Mfq', + Name: 'PINTEREST_TAG', + Config: { + sendAsTestEvent: false, + tagId: '123456789', + advertiserId: '429047995', + appId: '429047995', + sendingUnHashedData: true, + enableDeduplication: true, + deduplicationKey: 'messageId', + enhancedMatch: true, + customProperties: [{ properties: 'presentclass' }, { properties: 'presentgrade' }], + eventsMapping: [{ from: 'ABC Searched', to: 'WatchVideo' }], + }, + Enabled: true, + Transformations: [], + }, + }, + ], + method: 'POST', + }, + pathSuffix: '', + }, + output: { + response: { + status: 200, + body: [ + { + output: { + version: '1', + type: 'REST', + method: 'POST', + endpoint: 'https://ct.pinterest.com/events/v3', + headers: { 'Content-Type': 'application/json' }, + params: {}, + body: { + JSON: { + event_name: 'watch_video', + event_time: 1597383030, + action_source: 'web', + event_id: '7208bbb6-2c4e-45bb-bf5b-ad426f3593e9', + app_id: '429047995', + advertiser_id: '429047995', + user_data: { + em: ['48ddb93f0b30c475423fe177832912c5bcdce3cc72872f8051627967ef278e08'], + ph: ['d164bbe036663cb5c96835e9ccc6501e9a521127ea62f6359744928ba932413b'], + ln: ['dcf000c2386fb76d22cefc0d118a8511bb75999019cd373df52044bccd1bd251'], + fn: ['9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a08'], + ct: ['6689106ca7922c30b2fd2c175c85bc7fc2d52cc4941bdd7bb622c6cdc6284a85'], + st: ['3b45022ab36728cdae12e709e945bba267c50ee8a91e6e4388539a8e03a3fdcd'], + zp: ['1a4292e00780e18d00e76fde9850aee5344e939ba593333cd5e4b4aa2cd33b0c'], + country: ['582967534d0f909d196b97f9e6921342777aea87b46fa52df165389db1fb8ccf'], + hashed_maids: [ + '6ca13d52ca70c883e0f0bb101e425a89e8624de51db2d2392593af6a84118090', + ], + client_user_agent: 'chrome', + }, + custom_data: { + currency: 'USD', + value: '27.5', + num_items: 2, + order_id: '50314b8e9bcf000000000000', + content_ids: ['507f1f77bcf86cd799439011', '505bd76785ebb509fc183733'], + contents: [ + { quantity: 1, item_price: '19' }, + { quantity: 2, item_price: '3' }, + ], + }, + }, + JSON_ARRAY: {}, + XML: {}, + FORM: {}, + }, + files: {}, + userId: '', + }, + statusCode: 200, + }, + ], + }, + }, + }, + { + name: 'pinterest_tag', + description: 'Test 6', + feature: 'processor', + module: 'destination', + version: 'v0', + input: { + request: { + body: [ + { + message: { + type: 'track', + event: 'ABC Searched', + sentAt: '2020-08-14T05:30:30.118Z', + channel: 'web', + context: { + source: 'test', + userAgent: 'chrome', + traits: { + anonymousId: '50be5c78-6c3f-4b60-be84-97805a316fb1', + email: 'abc@gmail.com', + phone: '+1234589947', + ge: 'male', + db: '19950715', + lastname: 'Rudderlabs', + firstName: 'Test', + address: { city: 'Kolkata', state: 'WB', zip: '700114', country: 'IN' }, + }, + device: { advertisingId: 'abc123' }, + library: { name: 'rudder-sdk-ruby-sync', version: '1.0.6' }, + }, + messageId: '7208bbb6-2c4e-45bb-bf5b-ad426f3593e9', + timestamp: '2020-08-14T05:30:30.118Z', + properties: { + tax: 2, + total: 27.5, + coupon: 'hasbros', + revenue: 48, + price: 25, + quantity: 2, + currency: 'USD', + discount: 2.5, + order_id: '50314b8e9bcf000000000000', + requestIP: '123.0.0.0', + numOfItems: 2, + products: [ + { + sku: '45790-32', + url: 'https://www.example.com/product/path', + name: 'Monopoly: 3rd Edition', + price: 19, + category: 'Games', + quantity: 1, + image_url: 'https:///www.example.com/product/path.jpg', + product_id: '507f1f77bcf86cd799439011', + }, + { + sku: '46493-32', + name: 'Uno Card Game', + price: 3, + category: 'Games', + quantity: 2, + product_id: '505bd76785ebb509fc183733', + }, + ], + shipping: 3, + subtotal: 22.5, + affiliation: 'Google Store', + checkout_id: 'fksdjfsdjfisjf9sdfjsd9f', + }, + anonymousId: '50be5c78-6c3f-4b60-be84-97805a316fb1', + integrations: { All: true }, + }, + destination: { + ID: '1pYpzzvcn7AQ2W9GGIAZSsN6Mfq', + Name: 'PINTEREST_TAG', + Config: { + sendAsTestEvent: false, + tagId: '123456789', + advertiserId: '', + appId: '429047995', + sendingUnHashedData: true, + enableDeduplication: true, + deduplicationKey: 'messageId', + enhancedMatch: true, + customProperties: [{ properties: 'presentclass' }, { properties: 'presentgrade' }], + eventsMapping: [{ from: 'ABC Searched', to: 'WatchVideo' }], + }, + Enabled: true, + Transformations: [], + }, + }, + ], + method: 'POST', + }, + pathSuffix: '', + }, + output: { + response: { + status: 200, + body: [ + { + error: 'Advertiser Id not found. Aborting', + statTags: { + destType: 'PINTEREST_TAG', + errorCategory: 'dataValidation', + errorType: 'configuration', + feature: 'processor', + implementation: 'native', + module: 'destination', + }, + statusCode: 400, + }, + ], + }, + }, + }, + { + name: 'pinterest_tag', + description: 'Test 7', + feature: 'processor', + module: 'destination', + version: 'v0', + input: { + request: { + body: [ + { + message: { + type: 'group', + event: 'ABC Searched', + sentAt: '2020-08-14T05:30:30.118Z', + context: { + source: 'test', + userAgent: 'chrome', + traits: { + anonymousId: '50be5c78-6c3f-4b60-be84-97805a316fb1', + email: 'abc@gmail.com', + phone: '+1234589947', + ge: 'male', + db: '19950715', + lastname: 'Rudderlabs', + firstName: 'Test', + address: { city: 'Kolkata', state: 'WB', zip: '700114', country: 'IN' }, + }, + device: { advertisingId: 'abc123' }, + library: { name: 'rudder-sdk-ruby-sync', version: '1.0.6' }, + }, + messageId: '7208bbb6-2c4e-45bb-bf5b-ad426f3593e9', + timestamp: '2020-08-14T05:30:30.118Z', + properties: { + tax: 2, + total: 27.5, + coupon: 'hasbros', + revenue: 48, + price: 25, + quantity: 2, + currency: 'USD', + discount: 2.5, + order_id: '50314b8e9bcf000000000000', + requestIP: '123.0.0.0', + numOfItems: 2, + products: [ + { + sku: '45790-32', + url: 'https://www.example.com/product/path', + name: 'Monopoly: 3rd Edition', + price: 19, + category: 'Games', + quantity: 1, + image_url: 'https:///www.example.com/product/path.jpg', + product_id: '507f1f77bcf86cd799439011', + }, + { + sku: '46493-32', + name: 'Uno Card Game', + price: 3, + category: 'Games', + quantity: 2, + product_id: '505bd76785ebb509fc183733', + }, + ], + shipping: 3, + subtotal: 22.5, + affiliation: 'Google Store', + checkout_id: 'fksdjfsdjfisjf9sdfjsd9f', + }, + anonymousId: '50be5c78-6c3f-4b60-be84-97805a316fb1', + integrations: { All: true }, + }, + destination: { + ID: '1pYpzzvcn7AQ2W9GGIAZSsN6Mfq', + Name: 'PINTEREST_TAG', + Config: { + sendAsTestEvent: false, + tagId: '123456789', + advertiserId: '123456', + appId: '429047995', + enhancedMatch: true, + sendingUnHashedData: true, + enableDeduplication: true, + deduplicationKey: 'messageId', + customProperties: [{ properties: 'presentclass' }, { properties: 'presentgrade' }], + eventsMapping: [{ from: 'ABC Searched', to: 'WatchVideo' }], + }, + Enabled: true, + Transformations: [], + }, + }, + ], + method: 'POST', + }, + pathSuffix: '', + }, + output: { + response: { + status: 200, + body: [ + { + error: 'message type group is not supported', + statTags: { + destType: 'PINTEREST_TAG', + errorCategory: 'dataValidation', + errorType: 'instrumentation', + feature: 'processor', + implementation: 'native', + module: 'destination', + }, + statusCode: 400, + }, + ], + }, + }, + }, + { + name: 'pinterest_tag', + description: 'Test 8', + feature: 'processor', + module: 'destination', + version: 'v0', + input: { + request: { + body: [ + { + message: { + type: 'track', + event: 'ABC Searched', + channel: 'abc', + sentAt: '2020-08-14T05:30:30.118Z', + context: { + source: 'test', + userAgent: 'chrome', + traits: { + anonymousId: '50be5c78-6c3f-4b60-be84-97805a316fb1', + email: 'abc@gmail.com', + phone: '+1234589947', + ge: 'male', + db: '19950715', + lastname: 'Rudderlabs', + firstName: 'Test', + address: { city: 'Kolkata', state: 'WB', zip: '700114', country: 'IN' }, + }, + device: { advertisingId: 'abc123' }, + library: { name: 'rudder-sdk-ruby-sync', version: '1.0.6' }, + }, + messageId: '7208bbb6-2c4e-45bb-bf5b-ad426f3593e9', + timestamp: '2020-08-14T05:30:30.118Z', + properties: { + tax: 2, + total: 27.5, + coupon: 'hasbros', + revenue: 48, + price: 25, + quantity: 2, + currency: 'USD', + discount: 2.5, + order_id: '50314b8e9bcf000000000000', + requestIP: '123.0.0.0', + numOfItems: 2, + products: [ + { + sku: '45790-32', + url: 'https://www.example.com/product/path', + name: 'Monopoly: 3rd Edition', + price: 19, + category: 'Games', + quantity: 1, + image_url: 'https:///www.example.com/product/path.jpg', + product_id: '507f1f77bcf86cd799439011', + }, + { + sku: '46493-32', + name: 'Uno Card Game', + price: 3, + category: 'Games', + quantity: 2, + product_id: '505bd76785ebb509fc183733', + }, + ], + shipping: 3, + subtotal: 22.5, + affiliation: 'Google Store', + checkout_id: 'fksdjfsdjfisjf9sdfjsd9f', + }, + anonymousId: '50be5c78-6c3f-4b60-be84-97805a316fb1', + integrations: { All: true }, + }, + destination: { + ID: '1pYpzzvcn7AQ2W9GGIAZSsN6Mfq', + Name: 'PINTEREST_TAG', + Config: { + sendAsTestEvent: false, + tagId: '123456789', + advertiserId: '123456', + appId: '429047995', + sendingUnHashedData: true, + enableDeduplication: true, + deduplicationKey: 'messageId', + enhancedMatch: true, + customProperties: [{ properties: 'presentclass' }, { properties: 'presentgrade' }], + eventsMapping: [{ from: 'ABC Searched', to: 'WatchVideo' }], + }, + Enabled: true, + Transformations: [], + }, + }, + ], + method: 'POST', + }, + pathSuffix: '', + }, + output: { + response: { + status: 200, + body: [ + { + error: 'Action source must be one of app_android, app_ios, web, offline', + statTags: { + destType: 'PINTEREST_TAG', + errorCategory: 'dataValidation', + errorType: 'instrumentation', + feature: 'processor', + implementation: 'native', + module: 'destination', + }, + statusCode: 400, + }, + ], + }, + }, + }, + { + name: 'pinterest_tag', + description: 'Test 9', + feature: 'processor', + module: 'destination', + version: 'v0', + input: { + request: { + body: [ + { + message: { + type: 'track', + event: 'custom event', + channel: 'web', + sentAt: '2020-08-14T05:30:30.118Z', + context: { + source: 'test', + userAgent: 'chrome', + traits: { + anonymousId: '50be5c78-6c3f-4b60-be84-97805a316fb1', + email: 'abc@gmail.com', + phone: '+1234589947', + ge: 'male', + db: '19950715', + lastname: 'Rudderlabs', + firstName: 'Test', + address: { city: 'Kolkata', state: 'WB', zip: '700114', country: 'IN' }, + }, + device: { advertisingId: 'abc123' }, + library: { name: 'rudder-sdk-ruby-sync', version: '1.0.6' }, + }, + messageId: '7208bbb6-2c4e-45bb-bf5b-ad426f3593e9', + timestamp: '2020-08-14T05:30:30.118Z', + properties: { + tax: 2, + total: 27.5, + coupon: 'hasbros', + revenue: 48, + price: 25, + quantity: 2, + currency: 'USD', + discount: 2.5, + order_id: '50314b8e9bcf000000000000', + requestIP: '123.0.0.0', + numOfItems: 2, + products: [ + { + sku: '45790-32', + url: 'https://www.example.com/product/path', + name: 'Monopoly: 3rd Edition', + price: 19, + category: 'Games', + quantity: 1, + image_url: 'https:///www.example.com/product/path.jpg', + product_id: '507f1f77bcf86cd799439011', + }, + { + sku: '46493-32', + name: 'Uno Card Game', + price: 3, + category: 'Games', + quantity: 2, + product_id: '505bd76785ebb509fc183733', + }, + ], + shipping: 3, + subtotal: 22.5, + affiliation: 'Google Store', + checkout_id: 'fksdjfsdjfisjf9sdfjsd9f', + }, + anonymousId: '50be5c78-6c3f-4b60-be84-97805a316fb1', + integrations: { All: true }, + }, + destination: { + ID: '1pYpzzvcn7AQ2W9GGIAZSsN6Mfq', + Name: 'PINTEREST_TAG', + Config: { + sendAsTestEvent: false, + tagId: '123456789', + advertiserId: '123456', + appId: '429047995', + sendingUnHashedData: true, + enableDeduplication: true, + deduplicationKey: 'messageId', + enhancedMatch: true, + sendAsCustomEvent: true, + customProperties: [{ properties: 'presentclass' }, { properties: 'presentgrade' }], + eventsMapping: [{ from: 'ABC Searched', to: 'WatchVideo' }], + }, + Enabled: true, + Transformations: [], + }, + }, + ], + method: 'POST', + }, + pathSuffix: '', + }, + output: { + response: { + status: 200, + body: [ + { + output: { + version: '1', + type: 'REST', + method: 'POST', + endpoint: 'https://ct.pinterest.com/events/v3', + headers: { 'Content-Type': 'application/json' }, + params: {}, + body: { + JSON: { + event_name: 'custom', + event_time: 1597383030, + event_id: '7208bbb6-2c4e-45bb-bf5b-ad426f3593e9', + app_id: '429047995', + action_source: 'web', + advertiser_id: '123456', + user_data: { + em: ['48ddb93f0b30c475423fe177832912c5bcdce3cc72872f8051627967ef278e08'], + ph: ['d164bbe036663cb5c96835e9ccc6501e9a521127ea62f6359744928ba932413b'], + ln: ['dcf000c2386fb76d22cefc0d118a8511bb75999019cd373df52044bccd1bd251'], + fn: ['9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a08'], + ct: ['6689106ca7922c30b2fd2c175c85bc7fc2d52cc4941bdd7bb622c6cdc6284a85'], + st: ['3b45022ab36728cdae12e709e945bba267c50ee8a91e6e4388539a8e03a3fdcd'], + zp: ['1a4292e00780e18d00e76fde9850aee5344e939ba593333cd5e4b4aa2cd33b0c'], + country: ['582967534d0f909d196b97f9e6921342777aea87b46fa52df165389db1fb8ccf'], + hashed_maids: [ + '6ca13d52ca70c883e0f0bb101e425a89e8624de51db2d2392593af6a84118090', + ], + client_user_agent: 'chrome', + }, + custom_data: { + currency: 'USD', + value: '27.5', + num_items: 2, + order_id: '50314b8e9bcf000000000000', + content_ids: ['507f1f77bcf86cd799439011', '505bd76785ebb509fc183733'], + contents: [ + { quantity: 1, item_price: '19' }, + { quantity: 2, item_price: '3' }, + ], + }, + }, + JSON_ARRAY: {}, + XML: {}, + FORM: {}, + }, + files: {}, + userId: '', + }, + statusCode: 200, + }, + ], + }, + }, + }, + { + name: 'pinterest_tag', + description: 'Test 10', + feature: 'processor', + module: 'destination', + version: 'v0', + input: { + request: { + body: [ + { + message: { + type: 'page', + name: 'ApplicationLoaded', + channel: 'web', + sentAt: '2020-08-14T05:30:30.118Z', + context: { + source: 'test', + userAgent: 'chrome', + traits: { + anonymousId: '50be5c78-6c3f-4b60-be84-97805a316fb1', + email: 'abc@gmail.com', + phone: '+1234589947', + ge: 'male', + db: '19950715', + lastname: 'Rudderlabs', + firstName: 'Test', + address: { city: 'Kolkata', state: 'WB', zip: '700114', country: 'IN' }, + }, + device: { advertisingId: 'abc123' }, + library: { name: 'rudder-sdk-ruby-sync', version: '1.0.6' }, + }, + messageId: '7208bbb6-2c4e-45bb-bf5b-ad426f3593e9', + timestamp: '2020-08-14T05:30:30.118Z', + properties: { path: '', referrer: '', search: '', title: '', url: '' }, + anonymousId: '50be5c78-6c3f-4b60-be84-97805a316fb1', + integrations: { All: true }, + }, + destination: { + ID: '1pYpzzvcn7AQ2W9GGIAZSsN6Mfq', + Name: 'PINTEREST_TAG', + Config: { + sendAsTestEvent: false, + tagId: '123456789', + advertiserId: '123456', + appId: '429047995', + sendingUnHashedData: true, + enableDeduplication: true, + deduplicationKey: 'messageId', + enhancedMatch: true, + customProperties: [{ properties: 'presentclass' }, { properties: 'presentgrade' }], + eventsMapping: [{ from: 'ABC Searched', to: 'WatchVideo' }], + }, + Enabled: true, + Transformations: [], + }, + }, + ], + method: 'POST', + }, + pathSuffix: '', + }, + output: { + response: { + status: 200, + body: [ + { + output: { + version: '1', + type: 'REST', + method: 'POST', + endpoint: 'https://ct.pinterest.com/events/v3', + headers: { 'Content-Type': 'application/json' }, + params: {}, + body: { + JSON: { + event_time: 1597383030, + event_id: '7208bbb6-2c4e-45bb-bf5b-ad426f3593e9', + action_source: 'web', + event_name: 'page_visit', + app_id: '429047995', + advertiser_id: '123456', + user_data: { + em: ['48ddb93f0b30c475423fe177832912c5bcdce3cc72872f8051627967ef278e08'], + ph: ['d164bbe036663cb5c96835e9ccc6501e9a521127ea62f6359744928ba932413b'], + ln: ['dcf000c2386fb76d22cefc0d118a8511bb75999019cd373df52044bccd1bd251'], + fn: ['9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a08'], + ct: ['6689106ca7922c30b2fd2c175c85bc7fc2d52cc4941bdd7bb622c6cdc6284a85'], + st: ['3b45022ab36728cdae12e709e945bba267c50ee8a91e6e4388539a8e03a3fdcd'], + zp: ['1a4292e00780e18d00e76fde9850aee5344e939ba593333cd5e4b4aa2cd33b0c'], + country: ['582967534d0f909d196b97f9e6921342777aea87b46fa52df165389db1fb8ccf'], + hashed_maids: [ + '6ca13d52ca70c883e0f0bb101e425a89e8624de51db2d2392593af6a84118090', + ], + client_user_agent: 'chrome', + }, + }, + JSON_ARRAY: {}, + XML: {}, + FORM: {}, + }, + files: {}, + userId: '', + }, + statusCode: 200, + }, + ], + }, + }, + }, + { + name: 'pinterest_tag', + description: 'Test 11', + feature: 'processor', + module: 'destination', + version: 'v0', + input: { + request: { + body: [ + { + message: { + type: 'page', + name: 'ApplicationLoaded', + category: 'test category', + channel: 'web', + sentAt: '2020-08-14T05:30:30.118Z', + context: { + source: 'test', + userAgent: 'chrome', + traits: { + anonymousId: '50be5c78-6c3f-4b60-be84-97805a316fb1', + email: 'abc@gmail.com', + phone: '+1234589947', + ge: 'male', + db: '19950715', + lastname: 'Rudderlabs', + firstName: 'Test', + address: { city: 'Kolkata', state: 'WB', zip: '700114', country: 'IN' }, + }, + device: { advertisingId: 'abc123' }, + library: { name: 'rudder-sdk-ruby-sync', version: '1.0.6' }, + }, + messageId: '7208bbb6-2c4e-45bb-bf5b-ad426f3593e9', + timestamp: '2020-08-14T05:30:30.118Z', + properties: { path: '', referrer: '', search: '', title: '', url: '' }, + anonymousId: '50be5c78-6c3f-4b60-be84-97805a316fb1', + integrations: { All: true }, + }, + destination: { + ID: '1pYpzzvcn7AQ2W9GGIAZSsN6Mfq', + Name: 'PINTEREST_TAG', + Config: { + sendAsTestEvent: false, + tagId: '123456789', + advertiserId: '123456', + appId: '429047995', + sendingUnHashedData: true, + enableDeduplication: true, + deduplicationKey: 'messageId', + enhancedMatch: true, + customProperties: [{ properties: 'presentclass' }, { properties: 'presentgrade' }], + eventsMapping: [{ from: 'ABC Searched', to: 'WatchVideo' }], + }, + Enabled: true, + Transformations: [], + }, + }, + ], + method: 'POST', + }, + pathSuffix: '', + }, + output: { + response: { + status: 200, + body: [ + { + output: { + version: '1', + type: 'REST', + method: 'POST', + endpoint: 'https://ct.pinterest.com/events/v3', + headers: { 'Content-Type': 'application/json' }, + params: {}, + body: { + JSON: { + event_time: 1597383030, + event_id: '7208bbb6-2c4e-45bb-bf5b-ad426f3593e9', + action_source: 'web', + event_name: 'view_category', + app_id: '429047995', + advertiser_id: '123456', + user_data: { + em: ['48ddb93f0b30c475423fe177832912c5bcdce3cc72872f8051627967ef278e08'], + ph: ['d164bbe036663cb5c96835e9ccc6501e9a521127ea62f6359744928ba932413b'], + ln: ['dcf000c2386fb76d22cefc0d118a8511bb75999019cd373df52044bccd1bd251'], + fn: ['9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a08'], + ct: ['6689106ca7922c30b2fd2c175c85bc7fc2d52cc4941bdd7bb622c6cdc6284a85'], + st: ['3b45022ab36728cdae12e709e945bba267c50ee8a91e6e4388539a8e03a3fdcd'], + zp: ['1a4292e00780e18d00e76fde9850aee5344e939ba593333cd5e4b4aa2cd33b0c'], + country: ['582967534d0f909d196b97f9e6921342777aea87b46fa52df165389db1fb8ccf'], + hashed_maids: [ + '6ca13d52ca70c883e0f0bb101e425a89e8624de51db2d2392593af6a84118090', + ], + client_user_agent: 'chrome', + }, + }, + JSON_ARRAY: {}, + XML: {}, + FORM: {}, + }, + files: {}, + userId: '', + }, + statusCode: 200, + }, + ], + }, + }, + }, + { + name: 'pinterest_tag', + description: 'Test 12', + feature: 'processor', + module: 'destination', + version: 'v0', + input: { + request: { + body: [ + { + message: { + type: 'page', + name: 'ApplicationLoaded', + category: 'test category', + channel: 'web', + sentAt: '2020-08-14T05:30:30.118Z', + context: { + source: 'test', + userAgent: 'chrome', + traits: { + anonymousId: '50be5c78-6c3f-4b60-be84-97805a316fb1', + email: 'abc@gmail.com', + phone: '+1234589947', + ge: 'male', + db: '19950715', + lastname: 'Rudderlabs', + firstName: 'Test', + address: { city: 'Kolkata', state: 'WB', zip: '700114', country: 'IN' }, + }, + device: { advertisingId: 'abc123', adTrackingEnabled: true }, + library: { name: 'rudder-sdk-ruby-sync', version: '1.0.6' }, + }, + messageId: '7208bbb6-2c4e-45bb-bf5b-ad426f3593e9', + timestamp: '2020-08-14T05:30:30.118Z', + properties: { path: '', referrer: '', search: '', title: '', url: '' }, + anonymousId: '50be5c78-6c3f-4b60-be84-97805a316fb1', + integrations: { All: true }, + }, + destination: { + ID: '1pYpzzvcn7AQ2W9GGIAZSsN6Mfq', + Name: 'PINTEREST_TAG', + Config: { + sendAsTestEvent: false, + tagId: '123456789', + advertiserId: '123456', + appId: '429047995', + sendingUnHashedData: true, + enableDeduplication: true, + deduplicationKey: 'messageId', + enhancedMatch: true, + customProperties: [{ properties: 'presentclass' }, { properties: 'presentgrade' }], + eventsMapping: [{ from: 'ABC Searched', to: 'WatchVideo' }], + }, + Enabled: true, + Transformations: [], + }, + }, + ], + method: 'POST', + }, + pathSuffix: '', + }, + output: { + response: { + status: 200, + body: [ + { + output: { + version: '1', + type: 'REST', + method: 'POST', + endpoint: 'https://ct.pinterest.com/events/v3', + headers: { 'Content-Type': 'application/json' }, + params: {}, + body: { + JSON: { + event_time: 1597383030, + opt_out: false, + event_id: '7208bbb6-2c4e-45bb-bf5b-ad426f3593e9', + action_source: 'web', + event_name: 'view_category', + app_id: '429047995', + advertiser_id: '123456', + user_data: { + em: ['48ddb93f0b30c475423fe177832912c5bcdce3cc72872f8051627967ef278e08'], + ph: ['d164bbe036663cb5c96835e9ccc6501e9a521127ea62f6359744928ba932413b'], + ln: ['dcf000c2386fb76d22cefc0d118a8511bb75999019cd373df52044bccd1bd251'], + fn: ['9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a08'], + ct: ['6689106ca7922c30b2fd2c175c85bc7fc2d52cc4941bdd7bb622c6cdc6284a85'], + st: ['3b45022ab36728cdae12e709e945bba267c50ee8a91e6e4388539a8e03a3fdcd'], + zp: ['1a4292e00780e18d00e76fde9850aee5344e939ba593333cd5e4b4aa2cd33b0c'], + country: ['582967534d0f909d196b97f9e6921342777aea87b46fa52df165389db1fb8ccf'], + hashed_maids: [ + '6ca13d52ca70c883e0f0bb101e425a89e8624de51db2d2392593af6a84118090', + ], + client_user_agent: 'chrome', + }, + }, + JSON_ARRAY: {}, + XML: {}, + FORM: {}, + }, + files: {}, + userId: '', + }, + statusCode: 200, + }, + ], + }, + }, + }, + { + name: 'pinterest_tag', + description: 'Test 13', + feature: 'processor', + module: 'destination', + version: 'v0', + input: { + request: { + body: [ + { + message: { + type: 'page', + name: 'ApplicationLoaded', + category: 'test category', + channel: 'web', + sentAt: '2020-08-14T05:30:30.118Z', + context: { + source: 'test', + userAgent: 'chrome', + ip: '127.0.0.0', + traits: { + anonymousId: '50be5c78-6c3f-4b60-be84-97805a316fb1', + phone: '+1234589947', + ge: 'male', + db: '19950715', + lastname: 'Rudderlabs', + firstName: 'Test', + address: { city: 'Kolkata', state: 'WB', zip: '700114', country: 'IN' }, + }, + device: { adTrackingEnabled: false }, + library: { name: 'rudder-sdk-ruby-sync', version: '1.0.6' }, + }, + messageId: '7208bbb6-2c4e-45bb-bf5b-ad426f3593e9', + timestamp: '2020-08-14T05:30:30.118Z', + properties: { path: '', referrer: '', search: '', title: '', url: '' }, + anonymousId: '50be5c78-6c3f-4b60-be84-97805a316fb1', + integrations: { All: true }, + }, + destination: { + ID: '1pYpzzvcn7AQ2W9GGIAZSsN6Mfq', + Name: 'PINTEREST_TAG', + Config: { + sendAsTestEvent: false, + tagId: '123456789', + advertiserId: '123456', + appId: '429047995', + sendingUnHashedData: true, + enableDeduplication: true, + deduplicationKey: 'messageId', + enhancedMatch: true, + customProperties: [{ properties: 'presentclass' }, { properties: 'presentgrade' }], + eventsMapping: [{ from: 'ABC Searched', to: 'WatchVideo' }], + }, + Enabled: true, + Transformations: [], + }, + }, + ], + method: 'POST', + }, + pathSuffix: '', + }, + output: { + response: { + status: 200, + body: [ + { + output: { + version: '1', + type: 'REST', + method: 'POST', + endpoint: 'https://ct.pinterest.com/events/v3', + headers: { 'Content-Type': 'application/json' }, + params: {}, + body: { + JSON: { + event_time: 1597383030, + opt_out: true, + event_id: '7208bbb6-2c4e-45bb-bf5b-ad426f3593e9', + action_source: 'web', + event_name: 'view_category', + app_id: '429047995', + advertiser_id: '123456', + user_data: { + ph: ['d164bbe036663cb5c96835e9ccc6501e9a521127ea62f6359744928ba932413b'], + ln: ['dcf000c2386fb76d22cefc0d118a8511bb75999019cd373df52044bccd1bd251'], + fn: ['9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a08'], + ct: ['6689106ca7922c30b2fd2c175c85bc7fc2d52cc4941bdd7bb622c6cdc6284a85'], + st: ['3b45022ab36728cdae12e709e945bba267c50ee8a91e6e4388539a8e03a3fdcd'], + zp: ['1a4292e00780e18d00e76fde9850aee5344e939ba593333cd5e4b4aa2cd33b0c'], + country: ['582967534d0f909d196b97f9e6921342777aea87b46fa52df165389db1fb8ccf'], + client_ip_address: '127.0.0.0', + client_user_agent: 'chrome', + }, + }, + JSON_ARRAY: {}, + XML: {}, + FORM: {}, + }, + files: {}, + userId: '', + }, + statusCode: 200, + }, + ], + }, + }, + }, + { + name: 'pinterest_tag', + description: 'Test 14', + feature: 'processor', + module: 'destination', + version: 'v0', + input: { + request: { + body: [ + { + message: { + type: 'page', + name: 'ApplicationLoaded', + category: 'test category', + channel: 'web', + sentAt: '2020-08-14T05:30:30.118Z', + context: { + source: 'test', + userAgent: 'chrome', + requestIP: '127.0.0.0', + traits: { + anonymousId: '50be5c78-6c3f-4b60-be84-97805a316fb1', + phone: 'Hashed phone', + gender: 'Hashed Gender', + dob: 'Hashed DB', + lastname: 'Hashed Lastname', + firstName: 'Hashed FirstName', + address: { + city: 'Hashed City', + state: 'Hashed State', + zip: 'Hashed Zip', + country: 'Hashed country', + }, + }, + device: { adTrackingEnabled: false, advertisingId: 'Hashed maids' }, + library: { name: 'rudder-sdk-ruby-sync', version: '1.0.6' }, + }, + messageId: '7208bbb6-2c4e-45bb-bf5b-ad426f3593e9', + timestamp: '2020-08-14T05:30:30.118Z', + properties: { path: '', referrer: '', search: '', title: '', url: '' }, + anonymousId: '50be5c78-6c3f-4b60-be84-97805a316fb1', + }, + destination: { + ID: '1pYpzzvcn7AQ2W9GGIAZSsN6Mfq', + Name: 'PINTEREST_TAG', + Config: { + sendAsTestEvent: false, + tagId: '123456789', + advertiserId: '123456', + appId: '429047995', + sendingUnHashedData: false, + enhancedMatch: true, + customProperties: [{ properties: 'presentclass' }, { properties: 'presentgrade' }], + eventsMapping: [{ from: 'ABC Searched', to: 'WatchVideo' }], + }, + Enabled: true, + Transformations: [], + }, + }, + ], + method: 'POST', + }, + pathSuffix: '', + }, + output: { + response: { + status: 200, + body: [ + { + output: { + version: '1', + type: 'REST', + method: 'POST', + endpoint: 'https://ct.pinterest.com/events/v3', + headers: { 'Content-Type': 'application/json' }, + params: {}, + body: { + JSON: { + event_time: 1597383030, + action_source: 'web', + opt_out: true, + event_name: 'view_category', + app_id: '429047995', + advertiser_id: '123456', + event_id: '7208bbb6-2c4e-45bb-bf5b-ad426f3593e9', + user_data: { + ph: ['Hashed phone'], + db: ['Hashed DB'], + ln: ['Hashed Lastname'], + fn: ['Hashed FirstName'], + ct: ['Hashed City'], + st: ['Hashed State'], + zp: ['Hashed Zip'], + country: ['Hashed country'], + hashed_maids: ['Hashed maids'], + ge: ['Hashed Gender'], + client_user_agent: 'chrome', + }, + }, + JSON_ARRAY: {}, + XML: {}, + FORM: {}, + }, + files: {}, + userId: '', + }, + statusCode: 200, + }, + ], + }, + }, + }, + { + name: 'pinterest_tag', + description: 'Test 15', + feature: 'processor', + module: 'destination', + version: 'v0', + input: { + request: { + body: [ + { + message: { + type: 'page', + name: 'ApplicationLoaded', + category: 'test category', + channel: 'web', + sentAt: '2020-08-14T05:30:30.118Z', + context: { + source: 'test', + userAgent: 'chrome', + requestIP: '127.0.0.0', + traits: { + anonymousId: '50be5c78-6c3f-4b60-be84-97805a316fb1', + phone: ['Hashed phone', 'Hashed phone1'], + gender: ['Hashed Gender', 'Hashed Gender1'], + dob: ['Hashed DB', 'Hashed DB1'], + lastname: ['Hashed Lastname', 'Hashed Lastname1'], + firstName: ['Hashed FirstName', 'Hashed FirstName1'], + address: { + city: ['Hashed City', 'Hashed City1'], + state: ['Hashed State', 'Hashed State1'], + zip: ['Hashed Zip', 'Hashed Zip1'], + country: ['Hashed country', 'Hashed country1'], + }, + }, + device: { adTrackingEnabled: false, advertisingId: 'Hashed maids' }, + library: { name: 'rudder-sdk-ruby-sync', version: '1.0.6' }, + }, + messageId: '7208bbb6-2c4e-45bb-bf5b-ad426f3593e9', + timestamp: '2020-08-14T05:30:30.118Z', + properties: { path: '', referrer: '', search: '', title: '', url: '' }, + anonymousId: '50be5c78-6c3f-4b60-be84-97805a316fb1', + }, + destination: { + ID: '1pYpzzvcn7AQ2W9GGIAZSsN6Mfq', + Name: 'PINTEREST_TAG', + Config: { + sendAsTestEvent: false, + tagId: '123456789', + advertiserId: '123456', + appId: '429047995', + sendingUnHashedData: false, + enhancedMatch: true, + customProperties: [{ properties: 'presentclass' }, { properties: 'presentgrade' }], + eventsMapping: [{ from: 'ABC Searched', to: 'WatchVideo' }], + }, + Enabled: true, + Transformations: [], + }, + }, + ], + method: 'POST', + }, + pathSuffix: '', + }, + output: { + response: { + status: 200, + body: [ + { + output: { + version: '1', + type: 'REST', + method: 'POST', + endpoint: 'https://ct.pinterest.com/events/v3', + headers: { 'Content-Type': 'application/json' }, + params: {}, + body: { + JSON: { + event_time: 1597383030, + action_source: 'web', + opt_out: true, + event_name: 'view_category', + app_id: '429047995', + advertiser_id: '123456', + event_id: '7208bbb6-2c4e-45bb-bf5b-ad426f3593e9', + user_data: { + ph: ['Hashed phone', 'Hashed phone1'], + db: ['Hashed DB', 'Hashed DB1'], + ln: ['Hashed Lastname', 'Hashed Lastname1'], + fn: ['Hashed FirstName', 'Hashed FirstName1'], + ct: ['Hashed City', 'Hashed City1'], + st: ['Hashed State', 'Hashed State1'], + zp: ['Hashed Zip', 'Hashed Zip1'], + country: ['Hashed country', 'Hashed country1'], + hashed_maids: ['Hashed maids'], + ge: ['Hashed Gender', 'Hashed Gender1'], + client_user_agent: 'chrome', + }, + }, + JSON_ARRAY: {}, + XML: {}, + FORM: {}, + }, + files: {}, + userId: '', + }, + statusCode: 200, + }, + ], + }, + }, + }, + { + name: 'pinterest_tag', + description: 'Test 16', + feature: 'processor', + module: 'destination', + version: 'v0', + input: { + request: { + body: [ + { + message: { + name: 'Test Tool', + type: 'page', + sentAt: '2023-02-01T00:00:00.379Z', + userId: '', + channel: 'web', + context: { + os: { name: '', version: '' }, + app: { + name: 'RudderLabs JavaScript SDK', + version: '2.22.3', + namespace: 'com.rudderlabs.javascript', + }, + page: { + url: 'https://www.abc.com/s598907', + path: '/test-path/s598907', + title: 'Test Tool + Reviews | Rudderstack', + search: '', + tab_url: 'https://www.abc.com/s598907', + referrer: '$direct', + initial_referrer: '$direct', + referring_domain: '', + initial_referring_domain: '', + }, + locale: 'en-US', + screen: { + width: 1024, + height: 1024, + density: 1, + innerWidth: 1024, + innerHeight: 1024, + }, + traits: {}, + library: { name: 'RudderLabs JavaScript SDK', version: '2.22.3' }, + campaign: {}, + doNotSell: false, + sessionId: 1675209600203, + userAgent: + 'Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko; compatible; Googlebot/2.1; +http://www.google.com/bot.html) Chrome/109.0.5414.101 Safari/537.36', + gaClientId: { + integrations: { + 'Google Ads': { gclid: '' }, + 'Google Analytics': { clientId: '1518934611.1234569600' }, + }, + }, + sessionStart: true, + }, + rudderId: '7291a10f-e7dd-49f9-94ce-0154f53897y6', + messageId: '1c77a616-13a7-4a2e-a8e7-e1a0971897y6', + timestamp: '2023-02-01T12:47:30.030Z', + properties: { + sku: '45790-32', + url: 'https://www.abc.com/23rty', + name: 'Test Tool', + path: '/test-path/tool', + email: '', + title: 'Test Tool + Reviews | Rudderstack', + review: { reviewCount: 2, averageReview: 5, reviewContentID: ['238300132'] }, + search: '', + tab_url: 'https://www.abc/com', + pageInfo: { + pageId: 's592897', + category: { + pageType: 'product', + subCategory: 'Dining & Kitchen Furniture', + pageTemplate: 'product detail grouper', + primaryCategory: 'Furniture', + }, + brandType: 'new brand', + }, + referrer: '', + subCategory: 'Dining & Kitchen Furniture', + primaryCategory: 'Furniture', + initial_referrer: '$direct', + referring_domain: '', + initial_referring_domain: '', + }, + receivedAt: '2023-02-01T12:47:30.038Z', + request_ip: '66.249.72.218', + anonymousId: 'a61c77a6-1613-474a-aee8-e7e1a0971047', + integrations: { All: true }, + originalTimestamp: '2023-02-01T00:00:00.371Z', + }, + destination: { + ID: '1pYpzzvcn7AQ2W9GGIAZSsN6Mfq', + Name: 'PINTEREST_TAG', + Config: { + sendAsTestEvent: false, + tagId: '123456789', + advertiserId: '123478671210', + sendingUnHashedData: false, + enableDeduplication: false, + eventsMapping: [ + { from: 'Product Added', to: 'AddToCart' }, + { from: 'Order Completed', to: 'Checkout' }, + { from: 'Product Viewed', to: 'PageVisit' }, + { from: 'Lead', to: 'Lead' }, + { from: 'Signup', to: 'Signup' }, + ], + enhancedMatch: true, + }, + Enabled: true, + Transformations: [], + }, + }, + ], + method: 'POST', + }, + pathSuffix: '', + }, + output: { + response: { + status: 200, + body: [ + { + output: { + body: { + JSON: { + event_time: 1675255650, + event_source_url: 'https://www.abc.com/s598907', + action_source: 'web', + app_name: 'RudderLabs JavaScript SDK', + app_version: '2.22.3', + language: 'en-US', + event_id: '1c77a616-13a7-4a2e-a8e7-e1a0971897y6', + advertiser_id: '123478671210', + user_data: { + client_ip_address: '66.249.72.218', + client_user_agent: + 'Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko; compatible; Googlebot/2.1; +http://www.google.com/bot.html) Chrome/109.0.5414.101 Safari/537.36', + }, + event_name: 'page_visit', + }, + JSON_ARRAY: {}, + XML: {}, + FORM: {}, + }, + version: '1', + type: 'REST', + method: 'POST', + endpoint: 'https://ct.pinterest.com/events/v3', + headers: { 'Content-Type': 'application/json' }, + params: {}, + files: {}, + userId: '', + }, + statusCode: 200, + }, + ], + }, + }, + }, + { + name: 'pinterest_tag', + description: 'Test 17', + feature: 'processor', + module: 'destination', + version: 'v0', + input: { + request: { + body: [ + { + message: { + type: 'track', + event: 'test', + channel: 'web', + sentAt: '2020-08-14T05:30:30.118Z', + context: { + source: 'test', + userAgent: 'chrome', + traits: { + anonymousId: '50be5c78-6c3f-4b60-be84-97805a316fb1', + email: 'abc@gmail.com', + phone: '+1234589947', + ge: 'male', + db: '19950715', + lastname: 'Rudderlabs', + firstName: 'Test', + address: { city: 'Kolkata', state: 'WB', zip: '700114', country: 'IN' }, + }, + device: { advertisingId: 'abc123' }, + library: { name: 'rudder-sdk-ruby-sync', version: '1.0.6' }, + }, + messageId: '7208bbb6-2c4e-45bb-bf5b-ad426f3593e9', + timestamp: '2020-08-14T05:30:30.118Z', + properties: { + sku: '1234', + tax: 2, + total: 27.5, + coupon: 'hasbros', + revenue: 48, + currency: 'USD', + discount: 2.5, + order_id: '50314b8e9bcf000000000000', + requestIP: '123.0.0.0', + shipping: 3, + subtotal: 22.5, + affiliation: 'Google Store', + checkout_id: 'fksdjfsdjfisjf9sdfjsd9f', + }, + anonymousId: '50be5c78-6c3f-4b60-be84-97805a316fb1', + integrations: { All: true }, + }, + destination: { + ID: '1pYpzzvcn7AQ2W9GGIAZSsN6Mfq', + Name: 'PINTEREST_TAG', + Config: { + sendAsTestEvent: false, + tagId: '123456789', + advertiserId: '123456', + appId: '429047995', + sendingUnHashedData: true, + enableDeduplication: true, + deduplicationKey: 'messageId', + enhancedMatch: true, + sendAsCustomEvent: true, + customProperties: [{ properties: 'presentclass' }, { properties: 'presentgrade' }], + eventsMapping: [{ from: 'ABC Searched', to: 'WatchVideo' }], + }, + Enabled: true, + Transformations: [], + }, + }, + ], + method: 'POST', + }, + pathSuffix: '', + }, + output: { + response: { + status: 200, + body: [ + { + output: { + version: '1', + type: 'REST', + method: 'POST', + endpoint: 'https://ct.pinterest.com/events/v3', + headers: { 'Content-Type': 'application/json' }, + params: {}, + body: { + JSON: { + event_name: 'custom', + event_time: 1597383030, + action_source: 'web', + event_id: '7208bbb6-2c4e-45bb-bf5b-ad426f3593e9', + app_id: '429047995', + advertiser_id: '123456', + user_data: { + em: ['48ddb93f0b30c475423fe177832912c5bcdce3cc72872f8051627967ef278e08'], + ph: ['d164bbe036663cb5c96835e9ccc6501e9a521127ea62f6359744928ba932413b'], + ln: ['dcf000c2386fb76d22cefc0d118a8511bb75999019cd373df52044bccd1bd251'], + fn: ['9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a08'], + ct: ['6689106ca7922c30b2fd2c175c85bc7fc2d52cc4941bdd7bb622c6cdc6284a85'], + st: ['3b45022ab36728cdae12e709e945bba267c50ee8a91e6e4388539a8e03a3fdcd'], + zp: ['1a4292e00780e18d00e76fde9850aee5344e939ba593333cd5e4b4aa2cd33b0c'], + country: ['582967534d0f909d196b97f9e6921342777aea87b46fa52df165389db1fb8ccf'], + hashed_maids: [ + '6ca13d52ca70c883e0f0bb101e425a89e8624de51db2d2392593af6a84118090', + ], + client_user_agent: 'chrome', + }, + custom_data: { + currency: 'USD', + value: '27.5', + order_id: '50314b8e9bcf000000000000', + num_items: 0, + content_ids: ['1234'], + contents: [{ quantity: 1, item_price: 'undefined' }], + }, + }, + JSON_ARRAY: {}, + XML: {}, + FORM: {}, + }, + files: {}, + userId: '', + }, + statusCode: 200, + }, + ], + }, + }, + }, + { + name: 'pinterest_tag', + description: 'Test 18', + feature: 'processor', + module: 'destination', + version: 'v0', + input: { + request: { + body: [ + { + message: { + type: 'track', + event: 'custom event', + channel: 'web', + sentAt: '2020-08-14T05:30:30.118Z', + context: { + source: 'test', + userAgent: 'chrome', + traits: { + anonymousId: '50be5c78-6c3f-4b60-be84-97805a316fb1', + email: 'abc@gmail.com', + phone: '+1234589947', + ge: 'male', + db: '19950715', + lastname: 'Rudderlabs', + firstName: 'Test', + address: { city: 'Kolkata', state: 'WB', zip: '700114', country: 'IN' }, + }, + device: { advertisingId: 'abc123' }, + library: { name: 'rudder-sdk-ruby-sync', version: '1.0.6' }, + }, + messageId: '7208bbb6-2c4e-45bb-bf5b-ad426f3593e9', + timestamp: '2020-08-14T05:30:30.118Z', + properties: { + sku: '1234', + tax: 2, + total: 27.5, + coupon: 'hasbros', + revenue: 48, + currency: 'USD', + discount: 2.5, + order_id: '50314b8e9bcf000000000000', + requestIP: '123.0.0.0', + shipping: 3, + subtotal: 22.5, + affiliation: 'Google Store', + checkout_id: 'fksdjfsdjfisjf9sdfjsd9f', + products: [ + { + sku: '45790-32', + url: 'https://www.example.com/product/path', + name: 'Monopoly: 3rd Edition', + price: 19, + category: 'Games', + quantity: 1, + image_url: 'https:///www.example.com/product/path.jpg', + product_id: '507f1f77bcf86cd799439011', + }, + ], + }, + anonymousId: '50be5c78-6c3f-4b60-be84-97805a316fb1', + integrations: { All: true }, + }, + destination: { + ID: '1pYpzzvcn7AQ2W9GGIAZSsN6Mfq', + Name: 'PINTEREST_TAG', + Config: { + sendAsTestEvent: false, + tagId: '123456789', + advertiserId: '123456', + appId: '429047995', + sendingUnHashedData: true, + enableDeduplication: true, + deduplicationKey: 'messageId', + enhancedMatch: true, + sendAsCustomEvent: true, + customProperties: [{ properties: 'presentclass' }, { properties: 'presentgrade' }], + eventsMapping: [{ from: 'ABC Searched', to: 'WatchVideo' }], + }, + Enabled: true, + Transformations: [], + }, + }, + ], + method: 'POST', + }, + pathSuffix: '', + }, + output: { + response: { + status: 200, + body: [ + { + output: { + version: '1', + type: 'REST', + method: 'POST', + endpoint: 'https://ct.pinterest.com/events/v3', + headers: { 'Content-Type': 'application/json' }, + params: {}, + body: { + JSON: { + event_name: 'custom', + event_time: 1597383030, + action_source: 'web', + event_id: '7208bbb6-2c4e-45bb-bf5b-ad426f3593e9', + app_id: '429047995', + advertiser_id: '123456', + user_data: { + em: ['48ddb93f0b30c475423fe177832912c5bcdce3cc72872f8051627967ef278e08'], + ph: ['d164bbe036663cb5c96835e9ccc6501e9a521127ea62f6359744928ba932413b'], + ln: ['dcf000c2386fb76d22cefc0d118a8511bb75999019cd373df52044bccd1bd251'], + fn: ['9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a08'], + ct: ['6689106ca7922c30b2fd2c175c85bc7fc2d52cc4941bdd7bb622c6cdc6284a85'], + st: ['3b45022ab36728cdae12e709e945bba267c50ee8a91e6e4388539a8e03a3fdcd'], + zp: ['1a4292e00780e18d00e76fde9850aee5344e939ba593333cd5e4b4aa2cd33b0c'], + country: ['582967534d0f909d196b97f9e6921342777aea87b46fa52df165389db1fb8ccf'], + hashed_maids: [ + '6ca13d52ca70c883e0f0bb101e425a89e8624de51db2d2392593af6a84118090', + ], + client_user_agent: 'chrome', + }, + custom_data: { + currency: 'USD', + value: '27.5', + order_id: '50314b8e9bcf000000000000', + num_items: 1, + content_ids: ['507f1f77bcf86cd799439011'], + contents: [{ quantity: 1, item_price: '19' }], + }, + }, + JSON_ARRAY: {}, + XML: {}, + FORM: {}, + }, + files: {}, + userId: '', + }, + statusCode: 200, + }, + ], + }, + }, + }, + { + name: 'pinterest_tag', + description: 'Test 19', + feature: 'processor', + module: 'destination', + version: 'v0', + input: { + request: { + body: [ + { + message: { + type: 'track', + event: 'custom event', + channel: 'web', + sentAt: '2020-08-14T05:30:30.118Z', + context: { + source: 'test', + userAgent: 'chrome', + traits: { + anonymousId: '50be5c78-6c3f-4b60-be84-97805a316fb1', + email: 'abc@gmail.com', + phone: '+1234589947', + ge: 'male', + db: '19950715', + lastname: 'Rudderlabs', + firstName: 'Test', + address: { city: 'Kolkata', state: 'WB', zip: '700114', country: 'IN' }, + }, + device: { advertisingId: 'abc123' }, + library: { name: 'rudder-sdk-ruby-sync', version: '1.0.6' }, + }, + messageId: '7208bbb6-2c4e-45bb-bf5b-ad426f3593e9', + timestamp: '2020-08-14T05:30:30.118Z', + properties: { + tax: 2, + total: 27.5, + coupon: 'hasbros', + revenue: 48, + currency: 'USD', + discount: 2.5, + order_id: '50314b8e9bcf000000000000', + requestIP: '123.0.0.0', + shipping: 3, + subtotal: 22.5, + affiliation: 'Google Store', + checkout_id: 'fksdjfsdjfisjf9sdfjsd9f', + }, + anonymousId: '50be5c78-6c3f-4b60-be84-97805a316fb1', + integrations: { All: true }, + }, + destination: { + ID: '1pYpzzvcn7AQ2W9GGIAZSsN6Mfq', + Name: 'PINTEREST_TAG', + Config: { + sendAsTestEvent: false, + tagId: '123456789', + advertiserId: '123456', + appId: '429047995', + sendingUnHashedData: true, + enableDeduplication: true, + deduplicationKey: 'messageId', + enhancedMatch: true, + customProperties: [{ properties: 'presentclass' }, { properties: 'presentgrade' }], + eventsMapping: [{ from: 'ABC Searched', to: 'WatchVideo' }], + }, + Enabled: true, + Transformations: [], + }, + }, + ], + method: 'POST', + }, + pathSuffix: '', + }, + output: { + response: { + status: 200, + body: [ + { + output: { + body: { + FORM: {}, + JSON: { + action_source: 'web', + advertiser_id: '123456', + app_id: '429047995', + custom_data: { + contents: [{ item_price: 'undefined', quantity: 1 }], + currency: 'USD', + num_items: 0, + order_id: '50314b8e9bcf000000000000', + value: '27.5', + }, + event_id: '7208bbb6-2c4e-45bb-bf5b-ad426f3593e9', + event_name: 'custom event', + event_time: 1597383030, + user_data: { + client_user_agent: 'chrome', + country: ['582967534d0f909d196b97f9e6921342777aea87b46fa52df165389db1fb8ccf'], + ct: ['6689106ca7922c30b2fd2c175c85bc7fc2d52cc4941bdd7bb622c6cdc6284a85'], + em: ['48ddb93f0b30c475423fe177832912c5bcdce3cc72872f8051627967ef278e08'], + fn: ['9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a08'], + hashed_maids: [ + '6ca13d52ca70c883e0f0bb101e425a89e8624de51db2d2392593af6a84118090', + ], + ln: ['dcf000c2386fb76d22cefc0d118a8511bb75999019cd373df52044bccd1bd251'], + ph: ['d164bbe036663cb5c96835e9ccc6501e9a521127ea62f6359744928ba932413b'], + st: ['3b45022ab36728cdae12e709e945bba267c50ee8a91e6e4388539a8e03a3fdcd'], + zp: ['1a4292e00780e18d00e76fde9850aee5344e939ba593333cd5e4b4aa2cd33b0c'], + }, + }, + JSON_ARRAY: {}, + XML: {}, + }, + endpoint: 'https://ct.pinterest.com/events/v3', + files: {}, + headers: { 'Content-Type': 'application/json' }, + method: 'POST', + params: {}, + type: 'REST', + version: '1', + userId: '', + }, + statusCode: 200, + }, + ], + }, + }, + }, + { + name: 'pinterest_tag', + description: 'Test 20', + feature: 'processor', + module: 'destination', + version: 'v0', + input: { + request: { + body: [ + { + description: 'Track call with v5 Api version and send external_id toggle enabled', + message: { + type: 'track', + event: 'ABC Searched', + sentAt: '2020-08-14T05:30:30.118Z', + channel: 'web', + context: { + source: 'test', + userAgent: 'chrome', + traits: { + anonymousId: '50be5c78-6c3f-4b60-be84-97805a316fb1', + email: 'abc@gmail.com', + phone: '+1234589947', + ge: 'male', + db: '19950715', + lastname: 'Rudderlabs', + firstName: 'Test', + address: { city: 'Kolkata', state: 'WB', zip: '700114', country: 'IN' }, + }, + device: { advertisingId: 'abc123' }, + library: { name: 'rudder-sdk-ruby-sync', version: '1.0.6' }, + }, + messageId: '7208bbb6-2c4e-45bb-bf5b-ad426f3593e9', + timestamp: '2020-08-14T05:30:30.118Z', + properties: { + tax: 2, + total: 27.5, + coupon: 'hasbros', + revenue: 48, + price: 25, + quantity: 2, + currency: 'USD', + discount: 2.5, + order_id: '50314b8e9bcf000000000000', + requestIP: '123.0.0.0', + optOutType: 'LDP', + products: [ + { + sku: '45790-32', + url: 'https://www.example.com/product/path', + name: 'Monopoly: 3rd Edition', + price: 19, + category: 'Games', + quantity: 1, + image_url: 'https:///www.example.com/product/path.jpg', + product_id: '507f1f77bcf86cd799439011', + }, + { + sku: '46493-32', + name: 'Uno Card Game', + price: 3, + category: 'Games', + quantity: 2, + product_id: '505bd76785ebb509fc183733', + }, + ], + shipping: 3, + subtotal: 22.5, + affiliation: 'Google Store', + checkout_id: 'fksdjfsdjfisjf9sdfjsd9f', + }, + anonymousId: '50be5c78-6c3f-4b60-be84-97805a316fb1', + integrations: { All: true }, + }, + destination: { + ID: '1pYpzzvcn7AQ2W9GGIAZSsN6Mfq', + Name: 'PINTEREST_TAG', + Config: { + sendAsTestEvent: false, + tagId: '123456789', + apiVersion: 'newApi', + adAccountId: 'accountId123', + conversionToken: 'conversionToken123', + appId: '429047995', + enhancedMatch: true, + enableDeduplication: true, + deduplicationKey: 'messageId', + sendingUnHashedData: true, + sendExternalId: true, + customProperties: [{ properties: 'presentclass' }, { properties: 'presentgrade' }], + eventsMapping: [{ from: 'ABC Searched', to: 'WatchVideo' }], + }, + Enabled: true, + Transformations: [], + }, + }, + ], + method: 'POST', + }, + pathSuffix: '', + }, + output: { + response: { + status: 200, + body: [ + { + output: { + version: '1', + type: 'REST', + method: 'POST', + endpoint: 'https://api.pinterest.com/v5/ad_accounts/accountId123/events', + headers: { + 'Content-Type': 'application/json', + Authorization: 'Bearer conversionToken123', + }, + params: {}, + body: { + JSON: { + action_source: 'web', + event_name: 'watch_video', + event_time: 1597383030, + event_id: '7208bbb6-2c4e-45bb-bf5b-ad426f3593e9', + app_id: '429047995', + user_data: { + em: ['48ddb93f0b30c475423fe177832912c5bcdce3cc72872f8051627967ef278e08'], + ph: ['d164bbe036663cb5c96835e9ccc6501e9a521127ea62f6359744928ba932413b'], + ln: ['dcf000c2386fb76d22cefc0d118a8511bb75999019cd373df52044bccd1bd251'], + fn: ['9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a08'], + ct: ['6689106ca7922c30b2fd2c175c85bc7fc2d52cc4941bdd7bb622c6cdc6284a85'], + st: ['3b45022ab36728cdae12e709e945bba267c50ee8a91e6e4388539a8e03a3fdcd'], + zp: ['1a4292e00780e18d00e76fde9850aee5344e939ba593333cd5e4b4aa2cd33b0c'], + country: ['582967534d0f909d196b97f9e6921342777aea87b46fa52df165389db1fb8ccf'], + hashed_maids: [ + '6ca13d52ca70c883e0f0bb101e425a89e8624de51db2d2392593af6a84118090', + ], + client_user_agent: 'chrome', + external_id: [ + '3217d71a74c219d6e31e28267b313a7ceb6a2c032db1a091c9416b25b2ae2bc8', + ], + }, + custom_data: { + currency: 'USD', + value: '27.5', + order_id: '50314b8e9bcf000000000000', + opt_out_type: 'LDP', + num_items: 3, + content_ids: ['507f1f77bcf86cd799439011', '505bd76785ebb509fc183733'], + contents: [ + { quantity: 1, item_price: '19' }, + { quantity: 2, item_price: '3' }, + ], + }, + }, + JSON_ARRAY: {}, + XML: {}, + FORM: {}, + }, + files: {}, + userId: '', + }, + statusCode: 200, + }, + ], + }, + }, + }, + { + name: 'pinterest_tag', + description: 'Test 21', + feature: 'processor', + module: 'destination', + version: 'v0', + input: { + request: { + body: [ + { + description: 'Custom event with v5 Api version', + message: { + type: 'track', + event: 'random', + sentAt: '2020-08-14T05:30:30.118Z', + channel: 'web', + context: { + source: 'test', + userAgent: 'chrome', + traits: { + anonymousId: '50be5c78-6c3f-4b60-be84-97805a316fb1', + email: 'abc@gmail.com', + phone: '+1234589947', + ge: 'male', + db: '19950715', + lastname: 'Rudderlabs', + firstName: 'Test', + address: { city: 'Kolkata', state: 'WB', zip: '700114', country: 'IN' }, + }, + device: { advertisingId: 'abc123' }, + library: { name: 'rudder-sdk-ruby-sync', version: '1.0.6' }, + }, + messageId: '7208bbb6-2c4e-45bb-bf5b-ad426f3593e9', + timestamp: '2020-08-14T05:30:30.118Z', + properties: { + tax: 2, + total: 27.5, + coupon: 'hasbros', + revenue: 48, + price: 25, + quantity: 2, + currency: 'USD', + discount: 2.5, + order_id: '50314b8e9bcf000000000000', + requestIP: '123.0.0.0', + optOutType: 'LDP', + products: [ + { + sku: '45790-32', + url: 'https://www.example.com/product/path', + name: 'Monopoly: 3rd Edition', + price: 19, + category: 'Games', + quantity: 1, + image_url: 'https:///www.example.com/product/path.jpg', + product_id: '507f1f77bcf86cd799439011', + }, + { + sku: '46493-32', + name: 'Uno Card Game', + price: 3, + category: 'Games', + quantity: 2, + product_id: '505bd76785ebb509fc183733', + }, + ], + shipping: 3, + subtotal: 22.5, + affiliation: 'Google Store', + checkout_id: 'fksdjfsdjfisjf9sdfjsd9f', + }, + anonymousId: '50be5c78-6c3f-4b60-be84-97805a316fb1', + integrations: { All: true }, + }, + destination: { + ID: '1pYpzzvcn7AQ2W9GGIAZSsN6Mfq', + Name: 'PINTEREST_TAG', + Config: { + sendAsTestEvent: false, + tagId: '123456789', + apiVersion: 'newApi', + adAccountId: 'accountId123', + conversionToken: 'conversionToken123', + appId: '429047995', + enhancedMatch: true, + enableDeduplication: true, + deduplicationKey: 'messageId', + sendingUnHashedData: true, + sendAsCustomEvent: true, + customProperties: [{ properties: 'presentclass' }, { properties: 'presentgrade' }], + eventsMapping: [{ from: 'ABC Searched', to: 'WatchVideo' }], + }, + Enabled: true, + Transformations: [], + }, + }, + ], + method: 'POST', + }, + pathSuffix: '', + }, + output: { + response: { + status: 200, + body: [ + { + output: { + version: '1', + type: 'REST', + method: 'POST', + endpoint: 'https://api.pinterest.com/v5/ad_accounts/accountId123/events', + headers: { + 'Content-Type': 'application/json', + Authorization: 'Bearer conversionToken123', + }, + params: {}, + body: { + JSON: { + action_source: 'web', + event_name: 'custom', + event_time: 1597383030, + event_id: '7208bbb6-2c4e-45bb-bf5b-ad426f3593e9', + app_id: '429047995', + user_data: { + em: ['48ddb93f0b30c475423fe177832912c5bcdce3cc72872f8051627967ef278e08'], + ph: ['d164bbe036663cb5c96835e9ccc6501e9a521127ea62f6359744928ba932413b'], + ln: ['dcf000c2386fb76d22cefc0d118a8511bb75999019cd373df52044bccd1bd251'], + fn: ['9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a08'], + ct: ['6689106ca7922c30b2fd2c175c85bc7fc2d52cc4941bdd7bb622c6cdc6284a85'], + st: ['3b45022ab36728cdae12e709e945bba267c50ee8a91e6e4388539a8e03a3fdcd'], + zp: ['1a4292e00780e18d00e76fde9850aee5344e939ba593333cd5e4b4aa2cd33b0c'], + country: ['582967534d0f909d196b97f9e6921342777aea87b46fa52df165389db1fb8ccf'], + hashed_maids: [ + '6ca13d52ca70c883e0f0bb101e425a89e8624de51db2d2392593af6a84118090', + ], + client_user_agent: 'chrome', + }, + custom_data: { + currency: 'USD', + value: '27.5', + order_id: '50314b8e9bcf000000000000', + opt_out_type: 'LDP', + num_items: 3, + content_ids: ['507f1f77bcf86cd799439011', '505bd76785ebb509fc183733'], + contents: [ + { quantity: 1, item_price: '19' }, + { quantity: 2, item_price: '3' }, + ], + }, + }, + JSON_ARRAY: {}, + XML: {}, + FORM: {}, + }, + files: {}, + userId: '', + }, + statusCode: 200, + }, + ], + }, + }, + }, + { + name: 'pinterest_tag', + description: 'Test 22', + feature: 'processor', + module: 'destination', + version: 'v0', + input: { + request: { + body: [ + { + description: + 'Custom event with v5 Api version, with unhashed User Data and the values are an array of strings', + message: { + type: 'track', + event: 'random', + sentAt: '2020-08-14T05:30:30.118Z', + channel: 'web', + context: { + source: 'test', + userAgent: 'chrome', + traits: { + anonymousId: '50be5c78-6c3f-4b60-be84-97805a316fb1', + email: ['abc@gmail.com', 'def@gmail.com'], + phone: ['+1234589947', '+1234589948'], + ge: ['male', 'male'], + db: ['19950715', '19970615'], + lastname: ['Rudderlabs', 'Xu'], + firstName: ['Test', 'Alex'], + address: { + city: ['Kolkata', 'Mumbai'], + state: ['WB', 'MH'], + zip: ['700114', '700115'], + country: ['IN', 'IN'], + }, + }, + device: { advertisingId: 'abc123' }, + library: { name: 'rudder-sdk-ruby-sync', version: '1.0.6' }, + }, + messageId: '7208bbb6-2c4e-45bb-bf5b-ad426f3593e9', + timestamp: '2020-08-14T05:30:30.118Z', + properties: { + tax: 2, + total: 27.5, + coupon: 'hasbros', + revenue: 48, + price: 25, + quantity: 2, + currency: 'USD', + discount: 2.5, + order_id: '50314b8e9bcf000000000000', + requestIP: '123.0.0.0', + optOutType: 'LDP', + products: [ + { + sku: '45790-32', + url: 'https://www.example.com/product/path', + name: 'Monopoly: 3rd Edition', + price: 19, + category: 'Games', + quantity: 1, + image_url: 'https:///www.example.com/product/path.jpg', + product_id: '507f1f77bcf86cd799439011', + }, + { + sku: '46493-32', + name: 'Uno Card Game', + price: 3, + category: 'Games', + quantity: 2, + product_id: '505bd76785ebb509fc183733', + }, + ], + shipping: 3, + subtotal: 22.5, + affiliation: 'Google Store', + checkout_id: 'fksdjfsdjfisjf9sdfjsd9f', + }, + anonymousId: '50be5c78-6c3f-4b60-be84-97805a316fb1', + integrations: { All: true }, + }, + destination: { + ID: '1pYpzzvcn7AQ2W9GGIAZSsN6Mfq', + Name: 'PINTEREST_TAG', + Config: { + sendAsTestEvent: false, + tagId: '123456789', + apiVersion: 'newApi', + adAccountId: 'accountId123', + conversionToken: 'conversionToken123', + appId: '429047995', + enhancedMatch: true, + enableDeduplication: true, + deduplicationKey: 'messageId', + sendingUnHashedData: true, + sendAsCustomEvent: true, + customProperties: [{ properties: 'presentclass' }, { properties: 'presentgrade' }], + eventsMapping: [{ from: 'ABC Searched', to: 'WatchVideo' }], + }, + Enabled: true, + Transformations: [], + }, + }, + ], + method: 'POST', + }, + pathSuffix: '', + }, + output: { + response: { + status: 200, + body: [ + { + output: { + version: '1', + type: 'REST', + method: 'POST', + endpoint: 'https://api.pinterest.com/v5/ad_accounts/accountId123/events', + headers: { + 'Content-Type': 'application/json', + Authorization: 'Bearer conversionToken123', + }, + params: {}, + body: { + JSON: { + action_source: 'web', + event_name: 'custom', + event_time: 1597383030, + event_id: '7208bbb6-2c4e-45bb-bf5b-ad426f3593e9', + app_id: '429047995', + user_data: { + em: [ + '48ddb93f0b30c475423fe177832912c5bcdce3cc72872f8051627967ef278e08', + 'c392e50ebeca7bea4405e9c545023451ac56620031f81263f681269bde14218b', + ], + ph: [ + 'd164bbe036663cb5c96835e9ccc6501e9a521127ea62f6359744928ba932413b', + '22bdde2594851294f2a6f4c34af704e68b398b03129ea9ceb58f0ffe33f6db52', + ], + ln: [ + 'dcf000c2386fb76d22cefc0d118a8511bb75999019cd373df52044bccd1bd251', + '9c2f138690fca4890c3c4a6691610fbbbdf32091cc001f7355cfdf574baa52b9', + ], + fn: [ + '9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a08', + '4135aa9dc1b842a653dea846903ddb95bfb8c5a10c504a7fa16e10bc31d1fdf0', + ], + ct: [ + '6689106ca7922c30b2fd2c175c85bc7fc2d52cc4941bdd7bb622c6cdc6284a85', + 'd209bcc17778fd19fd2bc0c99a3868bf011da5162d3a75037a605768ebc276e2', + ], + st: [ + '3b45022ab36728cdae12e709e945bba267c50ee8a91e6e4388539a8e03a3fdcd', + '1b0316ed1cfed044035c55363e02ccafab26d66b1c2746b94d17285f043324aa', + ], + zp: [ + '1a4292e00780e18d00e76fde9850aee5344e939ba593333cd5e4b4aa2cd33b0c', + '4d6755aa1e85517191f06cc91448696c173e1195ae51f94a1670116ac7b5c47b', + ], + country: [ + '582967534d0f909d196b97f9e6921342777aea87b46fa52df165389db1fb8ccf', + '582967534d0f909d196b97f9e6921342777aea87b46fa52df165389db1fb8ccf', + ], + hashed_maids: [ + '6ca13d52ca70c883e0f0bb101e425a89e8624de51db2d2392593af6a84118090', + ], + client_user_agent: 'chrome', + }, + custom_data: { + currency: 'USD', + value: '27.5', + order_id: '50314b8e9bcf000000000000', + opt_out_type: 'LDP', + num_items: 3, + content_ids: ['507f1f77bcf86cd799439011', '505bd76785ebb509fc183733'], + contents: [ + { quantity: 1, item_price: '19' }, + { quantity: 2, item_price: '3' }, + ], + }, + }, + JSON_ARRAY: {}, + XML: {}, + FORM: {}, + }, + files: {}, + userId: '', + }, + statusCode: 200, + }, + ], + }, + }, + }, + { + name: 'pinterest_tag', + description: 'Test 23', + feature: 'processor', + module: 'destination', + version: 'v0', + input: { + request: { + body: [ + { + description: 'Ad Account Id check in V5', + message: { + type: 'track', + event: 'random', + sentAt: '2020-08-14T05:30:30.118Z', + channel: 'web', + context: { + source: 'test', + userAgent: 'chrome', + traits: { + anonymousId: '50be5c78-6c3f-4b60-be84-97805a316fb1', + email: 'abc@gmail.com', + phone: '+1234589947', + ge: 'male', + db: '19950715', + lastname: 'Rudderlabs', + firstName: 'Test', + address: { city: 'Kolkata', state: 'WB', zip: '700114', country: 'IN' }, + }, + device: { advertisingId: 'abc123' }, + library: { name: 'rudder-sdk-ruby-sync', version: '1.0.6' }, + }, + messageId: '7208bbb6-2c4e-45bb-bf5b-ad426f3593e9', + timestamp: '2020-08-14T05:30:30.118Z', + anonymousId: '50be5c78-6c3f-4b60-be84-97805a316fb1', + integrations: { All: true }, + }, + destination: { + ID: '1pYpzzvcn7AQ2W9GGIAZSsN6Mfq', + Name: 'PINTEREST_TAG', + Config: { + sendAsTestEvent: false, + tagId: '123456789', + apiVersion: 'newApi', + adAccountId: '', + conversionToken: 'conversionToken123', + appId: '429047995', + enhancedMatch: true, + enableDeduplication: true, + deduplicationKey: 'messageId', + sendingUnHashedData: true, + sendAsCustomEvent: true, + customProperties: [{ properties: 'presentclass' }, { properties: 'presentgrade' }], + eventsMapping: [{ from: 'ABC Searched', to: 'WatchVideo' }], + }, + Enabled: true, + Transformations: [], + }, + }, + ], + method: 'POST', + }, + pathSuffix: '', + }, + output: { + response: { + status: 200, + body: [ + { + error: 'Ad Account ID not found. Aborting', + statTags: { + destType: 'PINTEREST_TAG', + errorCategory: 'dataValidation', + errorType: 'configuration', + feature: 'processor', + implementation: 'native', + module: 'destination', + }, + statusCode: 400, + }, + ], + }, + }, + }, + { + name: 'pinterest_tag', + description: 'Test 24', + feature: 'processor', + module: 'destination', + version: 'v0', + input: { + request: { + body: [ + { + description: 'Conversion Token check in V5', + message: { + type: 'track', + event: 'random', + sentAt: '2020-08-14T05:30:30.118Z', + channel: 'web', + context: { + source: 'test', + userAgent: 'chrome', + traits: { + anonymousId: '50be5c78-6c3f-4b60-be84-97805a316fb1', + email: 'abc@gmail.com', + phone: '+1234589947', + ge: 'male', + db: '19950715', + lastname: 'Rudderlabs', + firstName: 'Test', + address: { city: 'Kolkata', state: 'WB', zip: '700114', country: 'IN' }, + }, + device: { advertisingId: 'abc123' }, + library: { name: 'rudder-sdk-ruby-sync', version: '1.0.6' }, + }, + messageId: '7208bbb6-2c4e-45bb-bf5b-ad426f3593e9', + timestamp: '2020-08-14T05:30:30.118Z', + anonymousId: '50be5c78-6c3f-4b60-be84-97805a316fb1', + integrations: { All: true }, + }, + destination: { + ID: '1pYpzzvcn7AQ2W9GGIAZSsN6Mfq', + Name: 'PINTEREST_TAG', + Config: { + sendAsTestEvent: false, + tagId: '123456789', + apiVersion: 'newApi', + adAccountId: 'accountId123', + conversionToken: '', + appId: '429047995', + enhancedMatch: true, + enableDeduplication: true, + deduplicationKey: 'messageId', + sendingUnHashedData: true, + sendAsCustomEvent: true, + customProperties: [{ properties: 'presentclass' }, { properties: 'presentgrade' }], + eventsMapping: [{ from: 'ABC Searched', to: 'WatchVideo' }], + }, + Enabled: true, + Transformations: [], + }, + }, + ], + method: 'POST', + }, + pathSuffix: '', + }, + output: { + response: { + status: 200, + body: [ + { + error: 'Conversion Token not found. Aborting', + statTags: { + destType: 'PINTEREST_TAG', + errorCategory: 'dataValidation', + errorType: 'configuration', + feature: 'processor', + implementation: 'native', + module: 'destination', + }, + statusCode: 400, + }, + ], + }, + }, + }, + { + name: 'pinterest_tag', + description: 'Test 25', + feature: 'processor', + module: 'destination', + version: 'v0', + input: { + request: { + body: [ + { + message: { + type: 'track', + event: 'custom event', + channel: 'web', + sentAt: '2020-08-14T05:30:30.118Z', + context: { + source: 'test', + userAgent: 'chrome', + traits: { + anonymousId: '50be5c78-6c3f-4b60-be84-97805a316fb1', + email: 'abc@gmail.com', + phone: '+1234589947', + ge: 'male', + db: '19950715', + lastname: 'Rudderlabs', + firstName: 'Test', + address: { city: 'Kolkata', state: 'WB', zip: '700114', country: 'IN' }, + }, + device: { advertisingId: 'abc123' }, + library: { name: 'rudder-sdk-ruby-sync', version: '1.0.6' }, + }, + messageId: '7208bbb6-2c4e-45bb-bf5b-ad426f3593e9', + timestamp: '2020-08-14T05:30:30.118Z', + properties: { + tax: 2, + total: 27.5, + coupon: 'hasbros', + revenue: 48, + currency: 'USD', + discount: 2.5, + order_id: '50314b8e9bcf000000000000', + requestIP: '123.0.0.0', + shipping: 3, + subtotal: 22.5, + affiliation: 'Google Store', + checkout_id: 'fksdjfsdjfisjf9sdfjsd9f', + }, + anonymousId: '50be5c78-6c3f-4b60-be84-97805a316fb1', + integrations: { All: true }, + }, + destination: { + ID: '1pYpzzvcn7AQ2W9GGIAZSsN6Mfq', + Name: 'PINTEREST_TAG', + Config: { + sendAsTestEvent: false, + tagId: '123456789', + apiVersion: 'newApi', + adAccountId: 'accountId123', + conversionToken: 'conversionToken123', + appId: '429047995', + enhancedMatch: true, + enableDeduplication: true, + deduplicationKey: 'messageId', + sendingUnHashedData: true, + sendAsCustomEvent: false, + customProperties: [{ properties: 'presentclass' }, { properties: 'presentgrade' }], + eventsMapping: [{ from: 'ABC Searched', to: 'WatchVideo' }], + }, + Enabled: true, + Transformations: [], + }, + }, + ], + method: 'POST', + }, + pathSuffix: '', + }, + output: { + response: { + status: 200, + body: [ + { + error: + "custom event is not mapped in UI. Make sure to map the event in UI or enable the 'send as custom event' setting", + statTags: { + destType: 'PINTEREST_TAG', + errorCategory: 'dataValidation', + errorType: 'configuration', + feature: 'processor', + implementation: 'native', + module: 'destination', + }, + statusCode: 400, + }, + ], + }, + }, + }, +]; From eec0d63cbc95fa94c095bde6953cfba91e34187f Mon Sep 17 00:00:00 2001 From: Mihir Bhalala <77438541+mihir-4116@users.noreply.github.com> Date: Tue, 12 Sep 2023 18:19:40 +0530 Subject: [PATCH 14/37] fix(iterable): updated mappings (#2602) --- .../iterable/data/IterableTrackPurchaseConfig.json | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/v0/destinations/iterable/data/IterableTrackPurchaseConfig.json b/src/v0/destinations/iterable/data/IterableTrackPurchaseConfig.json index 892ae67cd4..00e83d0125 100644 --- a/src/v0/destinations/iterable/data/IterableTrackPurchaseConfig.json +++ b/src/v0/destinations/iterable/data/IterableTrackPurchaseConfig.json @@ -6,7 +6,12 @@ }, { "destKey": "id", - "sourceKeys": ["properties.orderId", "properties.id", "properties.event_id"], + "sourceKeys": [ + "properties.order_id", + "properties.orderId", + "properties.id", + "properties.event_id" + ], "required": false }, { From afe7231cac4a97f969a4c9a8bcb1b13eb215a2ae Mon Sep 17 00:00:00 2001 From: gane5hvarma Date: Thu, 31 Aug 2023 14:20:02 -0400 Subject: [PATCH 15/37] added profiling endpoints to fetch profiles --- package-lock.json | 445 +++++++++++++++++++++++++++++++++++++++++++--- package.json | 1 + src/index.ts | 4 +- src/middleware.js | 47 +++++ 4 files changed, 475 insertions(+), 22 deletions(-) diff --git a/package-lock.json b/package-lock.json index eafd11fbdd..3095613cb7 100644 --- a/package-lock.json +++ b/package-lock.json @@ -18,6 +18,7 @@ "@datadog/pprof": "^3.1.0", "@koa/router": "^12.0.0", "@ndhoule/extend": "^2.0.0", + "@pyroscope/nodejs": "^0.2.6", "ajv": "^8.12.0", "ajv-draft-04": "^1.0.0", "ajv-formats": "^2.1.1", @@ -6051,6 +6052,25 @@ "node": ">= 0.8" } }, + "node_modules/@mapbox/node-pre-gyp": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/@mapbox/node-pre-gyp/-/node-pre-gyp-1.0.11.tgz", + "integrity": "sha512-Yhlar6v9WQgUp/He7BdgzOz8lqMQ8sU+jkCq7Wx8Myc5YFJLbEe7lgui/V7G1qB1DJykHSGwreceSaD60Y0PUQ==", + "dependencies": { + "detect-libc": "^2.0.0", + "https-proxy-agent": "^5.0.0", + "make-dir": "^3.1.0", + "node-fetch": "^2.6.7", + "nopt": "^5.0.0", + "npmlog": "^5.0.1", + "rimraf": "^3.0.2", + "semver": "^7.3.5", + "tar": "^6.1.11" + }, + "bin": { + "node-pre-gyp": "bin/node-pre-gyp" + } + }, "node_modules/@ndhoule/extend": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/@ndhoule/extend/-/extend-2.0.0.tgz", @@ -6110,6 +6130,92 @@ "node": ">=14" } }, + "node_modules/@protobufjs/aspromise": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@protobufjs/aspromise/-/aspromise-1.1.2.tgz", + "integrity": "sha512-j+gKExEuLmKwvz3OgROXtrJ2UG2x8Ch2YZUxahh+s1F2HZ+wAceUNLkvy6zKCPVRkU++ZWQrdxsUeQXmcg4uoQ==" + }, + "node_modules/@protobufjs/base64": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@protobufjs/base64/-/base64-1.1.2.tgz", + "integrity": "sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg==" + }, + "node_modules/@protobufjs/codegen": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@protobufjs/codegen/-/codegen-2.0.4.tgz", + "integrity": "sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg==" + }, + "node_modules/@protobufjs/eventemitter": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/eventemitter/-/eventemitter-1.1.0.tgz", + "integrity": "sha512-j9ednRT81vYJ9OfVuXG6ERSTdEL1xVsNgqpkxMsbIabzSo3goCjDIveeGv5d03om39ML71RdmrGNjG5SReBP/Q==" + }, + "node_modules/@protobufjs/fetch": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/fetch/-/fetch-1.1.0.tgz", + "integrity": "sha512-lljVXpqXebpsijW71PZaCYeIcE5on1w5DlQy5WH6GLbFryLUrBD4932W/E2BSpfRJWseIL4v/KPgBFxDOIdKpQ==", + "dependencies": { + "@protobufjs/aspromise": "^1.1.1", + "@protobufjs/inquire": "^1.1.0" + } + }, + "node_modules/@protobufjs/float": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@protobufjs/float/-/float-1.0.2.tgz", + "integrity": "sha512-Ddb+kVXlXst9d+R9PfTIxh1EdNkgoRe5tOX6t01f1lYWOvJnSPDBlG241QLzcyPdoNTsblLUdujGSE4RzrTZGQ==" + }, + "node_modules/@protobufjs/inquire": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/inquire/-/inquire-1.1.0.tgz", + "integrity": "sha512-kdSefcPdruJiFMVSbn801t4vFK7KB/5gd2fYvrxhuJYg8ILrmn9SKSX2tZdV6V+ksulWqS7aXjBcRXl3wHoD9Q==" + }, + "node_modules/@protobufjs/path": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@protobufjs/path/-/path-1.1.2.tgz", + "integrity": "sha512-6JOcJ5Tm08dOHAbdR3GrvP+yUUfkjG5ePsHYczMFLq3ZmMkAD98cDgcT2iA1lJ9NVwFd4tH/iSSoe44YWkltEA==" + }, + "node_modules/@protobufjs/pool": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/pool/-/pool-1.1.0.tgz", + "integrity": "sha512-0kELaGSIDBKvcgS4zkjz1PeddatrjYcmMWOlAuAPwAeccUrPHdUqo/J6LiymHHEiJT5NrF1UVwxY14f+fy4WQw==" + }, + "node_modules/@protobufjs/utf8": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/utf8/-/utf8-1.1.0.tgz", + "integrity": "sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw==" + }, + "node_modules/@pyroscope/nodejs": { + "version": "0.2.6", + "resolved": "https://registry.npmjs.org/@pyroscope/nodejs/-/nodejs-0.2.6.tgz", + "integrity": "sha512-F37ROH//HzO7zKm2S7CtNG8OAp+i4ADg4erQR9D57BrSgi8+3Jjp5s5PWqyJABC6IzsABgGrentPobBDr8QdsA==", + "dependencies": { + "axios": "^0.26.1", + "debug": "^4.3.3", + "form-data": "^4.0.0", + "pprof": "^3.2.0", + "regenerator-runtime": "^0.13.11", + "source-map": "^0.7.3" + }, + "engines": { + "node": "^12.20.0 || >=14.13.1" + } + }, + "node_modules/@pyroscope/nodejs/node_modules/axios": { + "version": "0.26.1", + "resolved": "https://registry.npmjs.org/axios/-/axios-0.26.1.tgz", + "integrity": "sha512-fPwcX4EvnSHuInCMItEhAGnaSEXRBjtzh9fOtsE6E1G6p7vl7edEeZe11QHf18+6+9gR5PbKV/sGKNaD8YaMeA==", + "dependencies": { + "follow-redirects": "^1.14.8" + } + }, + "node_modules/@pyroscope/nodejs/node_modules/source-map": { + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz", + "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==", + "engines": { + "node": ">= 8" + } + }, "node_modules/@sideway/address": { "version": "4.1.4", "resolved": "https://registry.npmjs.org/@sideway/address/-/address-4.1.4.tgz", @@ -7358,6 +7464,11 @@ "url": "https://opencollective.com/typescript-eslint" } }, + "node_modules/abbrev": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", + "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==" + }, "node_modules/accepts": { "version": "1.3.8", "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", @@ -7505,7 +7616,6 @@ "version": "5.0.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true, "engines": { "node": ">=8" } @@ -7550,6 +7660,36 @@ "integrity": "sha512-gkco+qxENJV+8vFcDiiFhuoSvRXb2a/QPqpSoWhVz829VNJfOTnELbBmPmNKFxf3xdNnw4DWCkzkDaavcX/1YQ==", "dev": true }, + "node_modules/aproba": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/aproba/-/aproba-2.0.0.tgz", + "integrity": "sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==" + }, + "node_modules/are-we-there-yet": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-2.0.0.tgz", + "integrity": "sha512-Ci/qENmwHnsYo9xKIcUJN5LeDKdJ6R1Z1j9V/J5wyq8nh/mYPEpIKJbBZXtZjG04HiK7zV/p6Vs9952MrMeUIw==", + "dependencies": { + "delegates": "^1.0.0", + "readable-stream": "^3.6.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/are-we-there-yet/node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, "node_modules/arg": { "version": "4.1.3", "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", @@ -7850,6 +7990,14 @@ "node": ">=8" } }, + "node_modules/bindings": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", + "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==", + "dependencies": { + "file-uri-to-path": "1.0.0" + } + }, "node_modules/bintrees": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/bintrees/-/bintrees-1.0.2.tgz", @@ -8240,6 +8388,14 @@ "node": ">= 0.8.0" } }, + "node_modules/chownr": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", + "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", + "engines": { + "node": ">=10" + } + }, "node_modules/ci-info": { "version": "3.7.1", "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.7.1.tgz", @@ -8487,6 +8643,14 @@ "simple-swizzle": "^0.2.2" } }, + "node_modules/color-support": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz", + "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==", + "bin": { + "color-support": "bin.js" + } + }, "node_modules/color/node_modules/color-convert": { "version": "1.9.3", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", @@ -8717,6 +8881,11 @@ "integrity": "sha512-JsPKdmh8ZkmnHxDk55FZ1TqVLvEQTvoByJZRN9jzI0UjxK/QgAmsphz7PGtqgPieQZ/CQcHWXCR7ATDNhGe+YA==", "dev": true }, + "node_modules/console-control-strings": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", + "integrity": "sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==" + }, "node_modules/content-disposition": { "version": "0.5.4", "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", @@ -10747,6 +10916,14 @@ "node": ">=8" } }, + "node_modules/detect-libc": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.2.tgz", + "integrity": "sha512-UX6sGumvvqSaXgdKGUsgZWqcUyIXZ/vZTrlRT/iobiKhGL0zL4d3osHj3uqllWJK+i+sixDS/3COVEOFbupFyw==", + "engines": { + "node": ">=8" + } + }, "node_modules/detect-newline": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz", @@ -12120,6 +12297,11 @@ "node": "^10.12.0 || >=12.0.0" } }, + "node_modules/file-uri-to-path": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", + "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==" + }, "node_modules/filing-cabinet": { "version": "3.3.1", "resolved": "https://registry.npmjs.org/filing-cabinet/-/filing-cabinet-3.3.1.tgz", @@ -12210,6 +12392,14 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/findit2": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/findit2/-/findit2-2.2.3.tgz", + "integrity": "sha512-lg/Moejf4qXovVutL0Lz4IsaPoNYMuxt4PA0nGqFxnJ1CTTGGlEO2wKgoDpwknhvZ8k4Q2F+eesgkLbG2Mxfog==", + "engines": { + "node": ">=0.8.22" + } + }, "node_modules/findup-sync": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-4.0.0.tgz", @@ -12381,6 +12571,33 @@ "node": ">=10" } }, + "node_modules/fs-minipass": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", + "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/fs-minipass/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/fs-minipass/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + }, "node_modules/fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", @@ -12432,6 +12649,25 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/gauge": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/gauge/-/gauge-3.0.2.tgz", + "integrity": "sha512-+5J6MS/5XksCuXq++uFRsnUd7Ovu1XenbeuIuNRJxYWjgQbPuFhT14lAvsWfqfAmnwluf1OwMjz39HjfLPci0Q==", + "dependencies": { + "aproba": "^1.0.3 || ^2.0.0", + "color-support": "^1.1.2", + "console-control-strings": "^1.0.0", + "has-unicode": "^2.0.1", + "object-assign": "^4.1.1", + "signal-exit": "^3.0.0", + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1", + "wide-align": "^1.1.2" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/gensync": { "version": "1.0.0-beta.2", "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", @@ -13098,6 +13334,11 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/has-unicode": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", + "integrity": "sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==" + }, "node_modules/has-value": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/has-value/-/has-value-2.0.2.tgz", @@ -15602,6 +15843,11 @@ "triple-beam": "^1.3.0" } }, + "node_modules/long": { + "version": "5.2.3", + "resolved": "https://registry.npmjs.org/long/-/long-5.2.3.tgz", + "integrity": "sha512-lcHwpNoggQTObv5apGNCTdJrO69eHOZMi4BNC+rTLER8iHAqGrUVeLh/irVIM7zTw2bOXA8T6uNPeujwOLg/2Q==" + }, "node_modules/longest": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/longest/-/longest-2.0.1.tgz", @@ -15703,7 +15949,6 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", - "dev": true, "dependencies": { "semver": "^6.0.0" }, @@ -15718,7 +15963,6 @@ "version": "6.3.1", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true, "bin": { "semver": "bin/semver.js" } @@ -15949,6 +16193,45 @@ "node": ">=16 || 14 >=14.17" } }, + "node_modules/minizlib": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", + "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", + "dependencies": { + "minipass": "^3.0.0", + "yallist": "^4.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/minizlib/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minizlib/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + }, + "node_modules/mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "bin": { + "mkdirp": "bin/cmd.js" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/mocked-env": { "version": "1.3.5", "resolved": "https://registry.npmjs.org/mocked-env/-/mocked-env-1.3.5.tgz", @@ -16297,6 +16580,11 @@ "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==", "dev": true }, + "node_modules/nan": { + "version": "2.17.0", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.17.0.tgz", + "integrity": "sha512-2ZTgtl0nJsO0KQCjEpxcIr5D+Yv90plTitZt9JBfQvVJDS5seMl3FOvsh3+9CoYWXf/1l5OaZzzF6nDm4cagaQ==" + }, "node_modules/nanoid": { "version": "3.3.4", "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.4.tgz", @@ -16440,6 +16728,20 @@ "node": ">=6.0" } }, + "node_modules/nopt": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-5.0.0.tgz", + "integrity": "sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==", + "dependencies": { + "abbrev": "1" + }, + "bin": { + "nopt": "bin/nopt.js" + }, + "engines": { + "node": ">=6" + } + }, "node_modules/normalize-package-data": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-3.0.3.tgz", @@ -16490,6 +16792,17 @@ "node": ">=8" } }, + "node_modules/npmlog": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-5.0.1.tgz", + "integrity": "sha512-AqZtDUWOMKs1G/8lwylVjrdYgqA4d9nu8hc+0gzRxlDb1I10+FHBGMXs6aiQHFdCUUlqH99MUMuLfzWDNDtfxw==", + "dependencies": { + "are-we-there-yet": "^2.0.0", + "console-control-strings": "^1.1.0", + "gauge": "^3.0.0", + "set-blocking": "^2.0.0" + } + }, "node_modules/number-is-nan": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", @@ -16508,7 +16821,6 @@ "version": "4.1.1", "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", - "dev": true, "engines": { "node": ">=0.10.0" } @@ -16973,6 +17285,17 @@ "node": ">=0.10" } }, + "node_modules/pify": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-5.0.0.tgz", + "integrity": "sha512-eW/gHNMlxdSP6dmG6uJip6FXN0EQBwm2clYYd8Wul42Cwu/DK8HEftzsapcNdYe2MfLiIwZqsDk2RDEsTE79hA==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/pinkie": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", @@ -17117,11 +17440,40 @@ "postcss": "^8.2.9" } }, + "node_modules/pprof": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/pprof/-/pprof-3.2.1.tgz", + "integrity": "sha512-KnextTM3EHQ2zqN8fUjB0VpE+njcVR7cOfo7DjJSLKzIbKTPelDtokI04ScR/Vd8CLDj+M99tsaKV+K6FHzpzA==", + "hasInstallScript": true, + "dependencies": { + "@mapbox/node-pre-gyp": "^1.0.0", + "bindings": "^1.2.1", + "delay": "^5.0.0", + "findit2": "^2.2.3", + "nan": "^2.14.0", + "p-limit": "^3.0.0", + "pify": "^5.0.0", + "protobufjs": "~7.2.4", + "source-map": "^0.7.3", + "split": "^1.0.1" + }, + "engines": { + "node": ">=10.4.1" + } + }, "node_modules/pprof-format": { "version": "2.0.7", "resolved": "https://registry.npmjs.org/pprof-format/-/pprof-format-2.0.7.tgz", "integrity": "sha512-1qWaGAzwMpaXJP9opRa23nPnt2Egi7RMNoNBptEE/XwHbcn4fC2b/4U4bKc5arkGkIh2ZabpF2bEb+c5GNHEKA==" }, + "node_modules/pprof/node_modules/source-map": { + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz", + "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==", + "engines": { + "node": ">= 8" + } + }, "node_modules/precinct": { "version": "8.3.1", "resolved": "https://registry.npmjs.org/precinct/-/precinct-8.3.1.tgz", @@ -17502,6 +17854,29 @@ "node": ">= 6" } }, + "node_modules/protobufjs": { + "version": "7.2.5", + "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-7.2.5.tgz", + "integrity": "sha512-gGXRSXvxQ7UiPgfw8gevrfRWcTlSbOFg+p/N+JVJEK5VhueL2miT6qTymqAmjr1Q5WbOCyJbyrk6JfWKwlFn6A==", + "hasInstallScript": true, + "dependencies": { + "@protobufjs/aspromise": "^1.1.2", + "@protobufjs/base64": "^1.1.2", + "@protobufjs/codegen": "^2.0.4", + "@protobufjs/eventemitter": "^1.1.0", + "@protobufjs/fetch": "^1.1.0", + "@protobufjs/float": "^1.0.2", + "@protobufjs/inquire": "^1.1.0", + "@protobufjs/path": "^1.1.2", + "@protobufjs/pool": "^1.1.0", + "@protobufjs/utf8": "^1.1.0", + "@types/node": ">=13.7.0", + "long": "^5.0.0" + }, + "engines": { + "node": ">=12.0.0" + } + }, "node_modules/proxy-from-env": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", @@ -17843,6 +18218,11 @@ "node": ">=4" } }, + "node_modules/regenerator-runtime": { + "version": "0.13.11", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz", + "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==" + }, "node_modules/regexp-tree": { "version": "0.1.24", "resolved": "https://registry.npmjs.org/regexp-tree/-/regexp-tree-0.1.24.tgz", @@ -18082,7 +18462,6 @@ "version": "3.0.2", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "dev": true, "dependencies": { "glob": "^7.1.3" }, @@ -18097,7 +18476,6 @@ "version": "7.2.3", "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "dev": true, "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -18310,7 +18688,6 @@ "version": "7.5.3", "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.3.tgz", "integrity": "sha512-QBlUtyVk/5EeHbi7X0fw6liDZc7BBmEaSYn01fMU1OUYbf6GPsbTtd8WmnqbI20SeycoHSeiybkE/q1Q+qlThQ==", - "dev": true, "dependencies": { "lru-cache": "^6.0.0" }, @@ -18343,7 +18720,6 @@ "version": "6.0.0", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, "dependencies": { "yallist": "^4.0.0" }, @@ -18354,14 +18730,12 @@ "node_modules/semver/node_modules/yallist": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" }, "node_modules/set-blocking": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", - "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==", - "dev": true + "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==" }, "node_modules/set-value": { "version": "4.1.0", @@ -18566,7 +18940,6 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/split/-/split-1.0.1.tgz", "integrity": "sha512-mTyOoPbrivtXnwnIxZRFYRrPNtEFKlpB2fvjSnCQUiAA6qAZzqwna5envK4uk6OIeP17CsdF3rSBGYVBsU0Tkg==", - "dev": true, "dependencies": { "through": "2" }, @@ -18897,7 +19270,6 @@ "version": "4.2.3", "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", @@ -18940,14 +19312,12 @@ "node_modules/string-width/node_modules/emoji-regex": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" }, "node_modules/string-width/node_modules/is-fullwidth-code-point": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true, "engines": { "node": ">=8" } @@ -19014,7 +19384,6 @@ "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, "dependencies": { "ansi-regex": "^5.0.1" }, @@ -19351,6 +19720,35 @@ "node": ">=6" } }, + "node_modules/tar": { + "version": "6.1.15", + "resolved": "https://registry.npmjs.org/tar/-/tar-6.1.15.tgz", + "integrity": "sha512-/zKt9UyngnxIT/EAGYuxaMYgOIJiP81ab9ZfkILq4oNLPFX50qyYmu7jRj9qeXoxmJHjGlbH0+cm2uy1WCs10A==", + "dependencies": { + "chownr": "^2.0.0", + "fs-minipass": "^2.0.0", + "minipass": "^5.0.0", + "minizlib": "^2.1.1", + "mkdirp": "^1.0.3", + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/tar/node_modules/minipass": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz", + "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/tar/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + }, "node_modules/tdigest": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/tdigest/-/tdigest-0.1.2.tgz", @@ -19416,8 +19814,7 @@ "node_modules/through": { "version": "2.3.8", "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", - "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==", - "dev": true + "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==" }, "node_modules/through2": { "version": "4.0.2", @@ -20118,6 +20515,14 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/wide-align": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz", + "integrity": "sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==", + "dependencies": { + "string-width": "^1.0.2 || 2 || 3 || 4" + } + }, "node_modules/widest-line": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-3.1.0.tgz", diff --git a/package.json b/package.json index 4540f6b3b3..134b683721 100644 --- a/package.json +++ b/package.json @@ -59,6 +59,7 @@ "@datadog/pprof": "^3.1.0", "@koa/router": "^12.0.0", "@ndhoule/extend": "^2.0.0", + "@pyroscope/nodejs": "^0.2.6", "ajv": "^8.12.0", "ajv-draft-04": "^1.0.0", "ajv-formats": "^2.1.1", diff --git a/src/index.ts b/src/index.ts index 92c54befca..a928c8c3c5 100644 --- a/src/index.ts +++ b/src/index.ts @@ -7,7 +7,7 @@ import cluster from './util/cluster'; import { router } from './legacy/router'; import { testRouter } from './testRouter'; import { metricsRouter } from './routes/metricsRouter'; -import { addStatMiddleware, addRequestSizeMiddleware } from './middleware'; +import { addStatMiddleware, addRequestSizeMiddleware, addPyroscopeMiddleware } from './middleware'; import { logProcessInfo } from './util/utils'; import { applicationRoutes, addSwaggerRoutes } from './routes'; import { RedisDB } from './util/redis/redisConnector'; @@ -30,7 +30,7 @@ app.use( jsonLimit: '200mb', }), ); - +addPyroscopeMiddleware(app); addRequestSizeMiddleware(app); addSwaggerRoutes(app); diff --git a/src/middleware.js b/src/middleware.js index 26ba4ee3bc..4387dbd05c 100644 --- a/src/middleware.js +++ b/src/middleware.js @@ -1,4 +1,50 @@ const stats = require('./util/stats'); +const Pyroscope = require('@pyroscope/nodejs'); + +Pyroscope.init({ + appName: 'rudder-transformer', +}); + +function pyroscopeMiddleware(ctx, next) { + Pyroscope.startHeapCollecting(); + return (ctx, next) => { + if (ctx.method === 'GET' && ctx.path === '/debug/pprof/profile') { + return handlerCpu(ctx).then(() => next()); + } + if (ctx.method === 'GET' && ctx.path === '/debug/pprof/heap') { + return handlerHeap(ctx).then(() => next()); + } + next(); + }; +} + +async function handlerCpu(ctx) { + try { + const p = await Pyroscope.collectCpu(Number(ctx.query.seconds)); + ctx.body = p; + ctx.status = 200; + } + catch (e) { + console.log(e); + ctx.status = 500; + } +} + +async function handlerHeap(ctx) { + try { + const p = await Pyroscope.collectHeap(); + ctx.body = p; + ctx.status = 200; + } + catch (e) { + console.log(e); + ctx.status = 500; + } +} + +function addPyroscopeMiddleware(app) { + app.use(pyroscopeMiddleware()) +} function durationMiddleware() { return async (ctx, next) => { @@ -45,4 +91,5 @@ function addRequestSizeMiddleware(app) { module.exports = { addStatMiddleware, addRequestSizeMiddleware, + addPyroscopeMiddleware, }; From f7d04411a498191c832b75bbf1fb15e0e18be3b1 Mon Sep 17 00:00:00 2001 From: Gauravudia <60897972+Gauravudia@users.noreply.github.com> Date: Wed, 13 Sep 2023 13:09:24 +0530 Subject: [PATCH 16/37] feat: onboard launchdarkly audience (#2529) * feat: onboard launchdarkly audience * docs: add comment * test: add testcases * refactor: update identifier logic * feat: add context kind mapping * fix: use removeUndefinedNullEmptyExclBoolInt util * chore: stop sending audience url * chore: remove extra argument in prepareIdentifiersList * fix: endpoint * fix: testcases * feat: add batching support * chore: add unit test cases --- .../launchdarkly_audience/config.js | 15 + .../launchdarkly_audience/procWorkflow.yaml | 67 +++ .../launchdarkly_audience/utils.js | 87 +++ .../launchdarkly_audience/utils.test.js | 136 +++++ .../__tests__/data/launchdarkly_audience.json | 495 ++++++++++++++++++ .../launchdarkly_audience-cdk.test.ts | 42 ++ 6 files changed, 842 insertions(+) create mode 100644 src/cdk/v2/destinations/launchdarkly_audience/config.js create mode 100644 src/cdk/v2/destinations/launchdarkly_audience/procWorkflow.yaml create mode 100644 src/cdk/v2/destinations/launchdarkly_audience/utils.js create mode 100644 src/cdk/v2/destinations/launchdarkly_audience/utils.test.js create mode 100644 test/__tests__/data/launchdarkly_audience.json create mode 100644 test/__tests__/launchdarkly_audience-cdk.test.ts diff --git a/src/cdk/v2/destinations/launchdarkly_audience/config.js b/src/cdk/v2/destinations/launchdarkly_audience/config.js new file mode 100644 index 0000000000..a1ec48a43c --- /dev/null +++ b/src/cdk/v2/destinations/launchdarkly_audience/config.js @@ -0,0 +1,15 @@ +const SUPPORTED_EVENT_TYPE = 'audiencelist'; +const ACTION_TYPES = ['add', 'remove']; +const IDENTIFIER_KEY = 'identifier'; +// ref:- https://docs.launchdarkly.com/guides/integrations/build-synced-segments?q=othercapabilities#manifest-details +// ref:- https://docs.launchdarkly.com/home/segments#targeting-users-in-segments +const ENDPOINT = 'https://app.launchdarkly.com/api/v2/segment-targets/rudderstack'; +const MAX_IDENTIFIERS = 1000; + +module.exports = { + SUPPORTED_EVENT_TYPE, + ACTION_TYPES, + IDENTIFIER_KEY, + ENDPOINT, + MAX_IDENTIFIERS, +}; diff --git a/src/cdk/v2/destinations/launchdarkly_audience/procWorkflow.yaml b/src/cdk/v2/destinations/launchdarkly_audience/procWorkflow.yaml new file mode 100644 index 0000000000..48aad2bb79 --- /dev/null +++ b/src/cdk/v2/destinations/launchdarkly_audience/procWorkflow.yaml @@ -0,0 +1,67 @@ +bindings: + - name: EventType + path: ../../../../constants + - path: ../../bindings/jsontemplate + exportAll: true + - name: defaultRequestConfig + path: ../../../../v0/util + - name: removeUndefinedNullEmptyExclBoolInt + path: ../../../../v0/util + - path: ./config + exportAll: true + - path: ./utils + exportAll: true + +steps: + - name: validateInput + template: | + let messageType = .message.type; + $.assertConfig(.destination.Config.audienceId, "Audience Id is not present. Aborting"); + $.assertConfig(.destination.Config.audienceName, "Audience Name is not present. Aborting"); + $.assertConfig(.destination.Config.accessToken, "Access Token is not present. Aborting"); + $.assertConfig(.destination.Config.clientSideId, "Launch Darkly Client Side is not present. Aborting"); + $.assert(.message.type, "Message Type is not present. Aborting message."); + $.assert(.message.type.toLowerCase() === $.SUPPORTED_EVENT_TYPE, "Event type " + .message.type.toLowerCase() + " is not supported. Aborting message."); + $.assert(.message.properties, "Message properties is not present. Aborting message."); + $.assert(.message.properties.listData, "`listData` is not present inside properties. Aborting message."); + $.assert($.containsAll(Object.keys(.message.properties.listData), $.ACTION_TYPES), "Unsupported action type. Aborting message.") + $.assert(Object.keys(.message.properties.listData).length > 0, "`listData` is empty. Aborting message.") + + - name: batchIdentifiersList + description: batch identifiers list + template: | + const batchedList = $.batchIdentifiersList(.message.properties.listData); + $.assert(batchedList.length > 0, "`listData` is empty. Aborting message."); + batchedList; + + - name: prepareBasePayload + template: | + const payload = { + environmentId: .destination.Config.clientSideId, + cohortId: .destination.Config.audienceId, + cohortName: .destination.Config.audienceName, + contextKind: .destination.Config.audienceType + }; + $.removeUndefinedNullEmptyExclBoolInt(payload); + + - name: buildResponseForProcessTransformation + description: build multiplexed response depending upon batch size + template: | + $.outputs.batchIdentifiersList.().({ + "body": { + "JSON": {...$.outputs.prepareBasePayload, listData: .}, + "JSON_ARRAY": {}, + "XML": {}, + "FORM": {} + }, + "version": "1", + "type": "REST", + "method": "POST", + "endpoint": {{$.ENDPOINT}}, + "headers": { + "Authorization": ^.destination.Config.accessToken, + "Content-Type": "application/json" + }, + "params": {}, + "files": {} + })[] diff --git a/src/cdk/v2/destinations/launchdarkly_audience/utils.js b/src/cdk/v2/destinations/launchdarkly_audience/utils.js new file mode 100644 index 0000000000..5bbcdfb6a3 --- /dev/null +++ b/src/cdk/v2/destinations/launchdarkly_audience/utils.js @@ -0,0 +1,87 @@ +const _ = require('lodash'); +const { ACTION_TYPES, IDENTIFIER_KEY, MAX_IDENTIFIERS } = require('./config'); + +/** + * Prepares a list of identifiers based on the provided data and identifier key. + * @param {*} listData The data containing lists of members to be added or removed from the audience. + * @returns + * { + "add": [ + { + "id": "test@gmail.com" + } + ], + "remove": [] + } + */ +const prepareIdentifiersList = (listData) => { + const list = {}; + const processList = (actionData) => + actionData + .filter((member) => member.hasOwnProperty(IDENTIFIER_KEY) && member[IDENTIFIER_KEY]) + .map((member) => ({ id: member[IDENTIFIER_KEY] })); + ACTION_TYPES.forEach((action) => { + list[action] = listData?.[action] ? processList(listData[action]) : []; + }); + return list; +}; + +/** + * Batch the identifiers list based on the maximum number of identifiers allowed per request. + * @param {*} listData The data containing lists of members to be added or removed from the audience. + * @returns + * For MAX_IDENTIFIERS = 2 + * [ + { + "add": [ + { + "id": "test1@gmail.com" + } + ], + "remove": [ + { + "id": "test2@gmail.com" + } + ] + }, + { + "add": [ + { + "id": "test3@gmail.com" + } + ], + "remove": [] + } + ] + */ +const batchIdentifiersList = (listData) => { + const audienceList = prepareIdentifiersList(listData); + const combinedList = [ + ...audienceList.add.map((item) => ({ ...item, type: 'add' })), + ...audienceList.remove.map((item) => ({ ...item, type: 'remove' })), + ]; + + const chunkedData = _.chunk(combinedList, MAX_IDENTIFIERS); + + // Group the chunks by action type (add/remove) + const groupedData = chunkedData.map((chunk) => { + const groupedChunk = { + add: [], + remove: [], + }; + + chunk.forEach((item) => { + if (item.type === 'add') { + groupedChunk.add.push({ id: item.id }); + } else if (item.type === 'remove') { + groupedChunk.remove.push({ id: item.id }); + } + }); + + return groupedChunk; + }); + + return groupedData; +}; + +module.exports = { prepareIdentifiersList, batchIdentifiersList }; diff --git a/src/cdk/v2/destinations/launchdarkly_audience/utils.test.js b/src/cdk/v2/destinations/launchdarkly_audience/utils.test.js new file mode 100644 index 0000000000..8c06c99076 --- /dev/null +++ b/src/cdk/v2/destinations/launchdarkly_audience/utils.test.js @@ -0,0 +1,136 @@ +const { prepareIdentifiersList, batchIdentifiersList } = require('./utils'); + +jest.mock(`./config`, () => { + const originalConfig = jest.requireActual(`./config`); + return { + ...originalConfig, + MAX_IDENTIFIERS: 2, + }; +}); + +describe('Unit test cases for prepareIdentifiersList', () => { + it('should return an object with empty "add" and "remove" properties when no data is provided', () => { + const result = prepareIdentifiersList({}); + expect(result).toEqual({ add: [], remove: [] }); + }); + + it('should handle null input and return an object with empty "add" and "remove" identifiers list', () => { + const result = prepareIdentifiersList(null); + expect(result).toEqual({ add: [], remove: [] }); + }); + + it('should handle undefined input and return an object with empty "add" and "remove" identifiers list', () => { + const result = prepareIdentifiersList(undefined); + expect(result).toEqual({ add: [], remove: [] }); + }); + + it('should handle input with missing "add" or "remove" identifiers list and return an object with empty "add" and "remove" identifiers list', () => { + const result = prepareIdentifiersList({ add: [], remove: undefined }); + expect(result).toEqual({ add: [], remove: [] }); + }); + + it('should handle input with empty "add" or "remove" identifiers list and return an object with empty "add" and "remove" identifiers list', () => { + const result = prepareIdentifiersList({ add: [], remove: [] }); + expect(result).toEqual({ add: [], remove: [] }); + }); + + it('should handle input with non empty "add" or "remove" identifiers list and return an object non empty "add" and "remove" identifiers list', () => { + const result = prepareIdentifiersList({ + add: [{ identifier: 'test1@email.com' }, { identifier: 'test2@email.com' }], + remove: [{ identifier: 'test3@email.com' }], + }); + expect(result).toEqual({ + add: [{ id: 'test1@email.com' }, { id: 'test2@email.com' }], + remove: [{ id: 'test3@email.com' }], + }); + }); +}); + +describe('Unit test cases for batchIdentifiersList', () => { + it('should correctly batch a list containing both "add" and "remove" actions', () => { + const listData = { + add: [ + { identifier: 'test1@email.com' }, + { identifier: 'test2@email.com' }, + { identifier: 'test3@email.com' }, + ], + remove: [{ identifier: 'test4@email.com' }, { identifier: 'test5@email.com' }], + }; + + const expectedOutput = [ + { + add: [{ id: 'test1@email.com' }, { id: 'test2@email.com' }], + remove: [], + }, + { + add: [{ id: 'test3@email.com' }], + remove: [{ id: 'test4@email.com' }], + }, + { + add: [], + remove: [{ id: 'test5@email.com' }], + }, + ]; + + expect(batchIdentifiersList(listData)).toEqual(expectedOutput); + }); + + it('should correctly batch a list containing only "add" actions', () => { + const listData = { + add: [ + { identifier: 'test1@email.com' }, + { identifier: 'test2@email.com' }, + { identifier: 'test3@email.com' }, + ], + remove: [], + }; + + const expectedOutput = [ + { + add: [{ id: 'test1@email.com' }, { id: 'test2@email.com' }], + remove: [], + }, + { + add: [{ id: 'test3@email.com' }], + remove: [], + }, + ]; + + expect(batchIdentifiersList(listData)).toEqual(expectedOutput); + }); + + it('should correctly batch a list containing only "remove" actions', () => { + const listData = { + add: [], + remove: [ + { identifier: 'test1@email.com' }, + { identifier: 'test2@email.com' }, + { identifier: 'test3@email.com' }, + ], + }; + + const expectedOutput = [ + { + add: [], + remove: [{ id: 'test1@email.com' }, { id: 'test2@email.com' }], + }, + { + add: [], + remove: [{ id: 'test3@email.com' }], + }, + ]; + + expect(batchIdentifiersList(listData)).toEqual(expectedOutput); + }); + + it('should return an empty list for empty input list data', () => { + const listData = { + add: [{ identifier: '' }], + remove: [], + }; + + const expectedOutput = []; + + expect(batchIdentifiersList(listData)).toEqual(expectedOutput); + }); +}); diff --git a/test/__tests__/data/launchdarkly_audience.json b/test/__tests__/data/launchdarkly_audience.json new file mode 100644 index 0000000000..2f348e01fa --- /dev/null +++ b/test/__tests__/data/launchdarkly_audience.json @@ -0,0 +1,495 @@ +[ + { + "description": "Unsupported event type", + "input": { + "message": { + "userId": "user123", + "type": "abc", + "properties": { + "listData": { + "add": [ + { + "identifier": "alex@email.com" + }, + { + "identifier": "ryan@email.com" + }, + { + "identifier": "van@email.com" + } + ] + } + }, + "context": { + "ip": "14.5.67.21", + "library": { + "name": "http" + } + }, + "timestamp": "2020-02-02T00:23:09.544Z" + }, + "destination": { + "Config": { + "audienceId": "test-audienceId", + "audienceName": "test-audienceName", + "accessToken": "test-accessToken", + "clientSideId": "test-clientSideId" + } + } + }, + "output": { + "error": "Event type abc is not supported. Aborting message." + } + }, + { + "description": "List data is not passed", + "input": { + "message": { + "userId": "user123", + "type": "audiencelist", + "properties": {}, + "context": { + "ip": "14.5.67.21", + "library": { + "name": "http" + } + }, + "timestamp": "2020-02-02T00:23:09.544Z" + }, + "destination": { + "Config": { + "audienceId": "test-audienceId", + "audienceName": "test-audienceName", + "accessToken": "test-accessToken", + "clientSideId": "test-clientSideId" + } + } + }, + "output": { + "error": "`listData` is not present inside properties. Aborting message." + } + }, + { + "description": "List data is empty", + "input": { + "message": { + "userId": "user123", + "type": "audiencelist", + "properties": { + "listData": {} + }, + "context": { + "ip": "14.5.67.21", + "library": { + "name": "http" + } + }, + "timestamp": "2020-02-02T00:23:09.544Z" + }, + "destination": { + "Config": { + "audienceId": "test-audienceId", + "audienceName": "test-audienceName", + "accessToken": "test-accessToken", + "clientSideId": "test-clientSideId" + } + } + }, + "output": { + "error": "`listData` is empty. Aborting message." + } + }, + { + "description": "List data is empty", + "input": { + "message": { + "userId": "user123", + "type": "audiencelist", + "properties": { + "listData": { + "add": [ + { + "identifier": "" + }, + { + "identifier": "" + } + ] + } + }, + "context": { + "ip": "14.5.67.21", + "library": { + "name": "http" + } + }, + "timestamp": "2020-02-02T00:23:09.544Z" + }, + "destination": { + "Config": { + "audienceId": "test-audienceId", + "audienceName": "test-audienceName", + "accessToken": "test-accessToken", + "clientSideId": "test-clientSideId" + } + } + }, + "output": { + "error": "`listData` is empty. Aborting message." + } + }, + { + "description": "Unsupported action type", + "input": { + "message": { + "userId": "user123", + "type": "audiencelist", + "properties": { + "listData": { + "update": [ + { + "identifier": "alex@email.com" + } + ] + } + }, + "context": { + "ip": "14.5.67.21", + "library": { + "name": "http" + } + }, + "timestamp": "2020-02-02T00:23:09.544Z" + }, + "destination": { + "Config": { + "audienceId": "test-audienceId", + "audienceName": "test-audienceName", + "accessToken": "test-accessToken", + "clientSideId": "test-clientSideId" + } + } + }, + "output": { + "error": "Unsupported action type. Aborting message." + } + }, + { + "description": "Add members to the audience list", + "input": { + "message": { + "userId": "user123", + "type": "audiencelist", + "properties": { + "listData": { + "add": [ + { + "identifier": "alex@email.com" + }, + { + "identifier": "ryan@email.com" + }, + { + "identifier": "van@email.com" + } + ] + } + }, + "context": { + "ip": "14.5.67.21", + "library": { + "name": "http" + } + }, + "timestamp": "2020-02-02T00:23:09.544Z" + }, + "destination": { + "Config": { + "audienceId": "test-audienceId", + "audienceName": "test-audienceName", + "accessToken": "test-accessToken", + "clientSideId": "test-clientSideId" + } + } + }, + "output": [ + { + "version": "1", + "type": "REST", + "method": "POST", + "endpoint": "https://app.launchdarkly.com/api/v2/segment-targets/rudderstack", + "headers": { + "Authorization": "test-accessToken", + "Content-Type": "application/json" + }, + "params": {}, + "body": { + "JSON": { + "environmentId": "test-clientSideId", + "cohortId": "test-audienceId", + "cohortName": "test-audienceName", + "listData": { + "add": [ + { + "id": "alex@email.com" + }, + { + "id": "ryan@email.com" + } + ], + "remove": [] + } + }, + "JSON_ARRAY": {}, + "XML": {}, + "FORM": {} + }, + "files": {} + }, + { + "version": "1", + "type": "REST", + "method": "POST", + "endpoint": "https://app.launchdarkly.com/api/v2/segment-targets/rudderstack", + "headers": { + "Authorization": "test-accessToken", + "Content-Type": "application/json" + }, + "params": {}, + "body": { + "JSON": { + "environmentId": "test-clientSideId", + "cohortId": "test-audienceId", + "cohortName": "test-audienceName", + "listData": { + "add": [ + { + "id": "van@email.com" + } + ], + "remove": [] + } + }, + "JSON_ARRAY": {}, + "XML": {}, + "FORM": {} + }, + "files": {} + } + ] + }, + { + "description": "Remove members from the audience list", + "input": { + "message": { + "userId": "user123", + "type": "audiencelist", + "properties": { + "listData": { + "remove": [ + { + "identifier": "alex@email.com" + }, + { + "identifier": "ryan@email.com" + }, + { + "identifier": "van@email.com" + } + ] + } + }, + "context": { + "ip": "14.5.67.21", + "library": { + "name": "http" + } + }, + "timestamp": "2020-02-02T00:23:09.544Z" + }, + "destination": { + "Config": { + "audienceId": "test-audienceId", + "audienceName": "test-audienceName", + "accessToken": "test-accessToken", + "clientSideId": "test-clientSideId" + } + } + }, + "output": [ + { + "version": "1", + "type": "REST", + "method": "POST", + "endpoint": "https://app.launchdarkly.com/api/v2/segment-targets/rudderstack", + "headers": { + "Authorization": "test-accessToken", + "Content-Type": "application/json" + }, + "params": {}, + "body": { + "JSON": { + "environmentId": "test-clientSideId", + "cohortId": "test-audienceId", + "cohortName": "test-audienceName", + "listData": { + "remove": [ + { + "id": "alex@email.com" + }, + { + "id": "ryan@email.com" + } + ], + "add": [] + } + }, + "JSON_ARRAY": {}, + "XML": {}, + "FORM": {} + }, + "files": {} + }, + { + "version": "1", + "type": "REST", + "method": "POST", + "endpoint": "https://app.launchdarkly.com/api/v2/segment-targets/rudderstack", + "headers": { + "Authorization": "test-accessToken", + "Content-Type": "application/json" + }, + "params": {}, + "body": { + "JSON": { + "environmentId": "test-clientSideId", + "cohortId": "test-audienceId", + "cohortName": "test-audienceName", + "listData": { + "remove": [ + { + "id": "van@email.com" + } + ], + "add": [] + } + }, + "JSON_ARRAY": {}, + "XML": {}, + "FORM": {} + }, + "files": {} + } + ] + }, + { + "description": "Add/Remove members", + "input": { + "message": { + "userId": "user123", + "type": "audiencelist", + "properties": { + "listData": { + "add": [ + { + "identifier": "alex@email.com" + }, + { + "userId": "user1" + } + ], + "remove": [ + { + "identifier": "ryan@email.com" + }, + { + "identifier": "van@email.com" + } + ] + } + }, + "context": { + "ip": "14.5.67.21", + "library": { + "name": "http" + } + }, + "timestamp": "2020-02-02T00:23:09.544Z" + }, + "destination": { + "Config": { + "audienceId": "test-audienceId", + "audienceName": "test-audienceName", + "accessToken": "test-accessToken", + "clientSideId": "test-clientSideId" + } + } + }, + "output": [ + { + "version": "1", + "type": "REST", + "method": "POST", + "endpoint": "https://app.launchdarkly.com/api/v2/segment-targets/rudderstack", + "headers": { + "Authorization": "test-accessToken", + "Content-Type": "application/json" + }, + "params": {}, + "body": { + "JSON": { + "environmentId": "test-clientSideId", + "cohortId": "test-audienceId", + "cohortName": "test-audienceName", + "listData": { + "add": [ + { + "id": "alex@email.com" + } + ], + "remove": [ + { + "id": "ryan@email.com" + } + ] + } + }, + "JSON_ARRAY": {}, + "XML": {}, + "FORM": {} + }, + "files": {} + }, + { + "version": "1", + "type": "REST", + "method": "POST", + "endpoint": "https://app.launchdarkly.com/api/v2/segment-targets/rudderstack", + "headers": { + "Authorization": "test-accessToken", + "Content-Type": "application/json" + }, + "params": {}, + "body": { + "JSON": { + "environmentId": "test-clientSideId", + "cohortId": "test-audienceId", + "cohortName": "test-audienceName", + "listData": { + "add": [], + "remove": [ + { + "id": "van@email.com" + } + ] + } + }, + "JSON_ARRAY": {}, + "XML": {}, + "FORM": {} + }, + "files": {} + } + ] + } +] diff --git a/test/__tests__/launchdarkly_audience-cdk.test.ts b/test/__tests__/launchdarkly_audience-cdk.test.ts new file mode 100644 index 0000000000..419b59fbd1 --- /dev/null +++ b/test/__tests__/launchdarkly_audience-cdk.test.ts @@ -0,0 +1,42 @@ +import fs from 'fs'; +import path from 'path'; +import { processCdkV2Workflow } from '../../src/cdk/v2/handler'; +import tags from '../../src/v0/util/tags'; + +const integration = 'launchdarkly_audience'; +const destName = 'LaunchDarkly Audience'; + +// Processor Test files +const testDataFile = fs.readFileSync(path.resolve(__dirname, `./data/${integration}.json`), { + encoding: 'utf8', +}); +const testData = JSON.parse(testDataFile); + +jest.mock(`../../src/cdk/v2/destinations/launchdarkly_audience/config`, () => { + const originalConfig = jest.requireActual( + `../../src/cdk/v2/destinations/launchdarkly_audience/config`, + ); + return { + ...originalConfig, + MAX_IDENTIFIERS: 2, + }; +}); + +describe(`${destName} Tests`, () => { + describe('Processor Tests', () => { + testData.forEach((dataPoint, index) => { + it(`${destName} - payload: ${index}`, async () => { + try { + const output = await processCdkV2Workflow( + integration, + dataPoint.input, + tags.FEATURES.PROCESSOR, + ); + expect(output).toEqual(dataPoint.output); + } catch (error: any) { + expect(error.message).toEqual(dataPoint.output.error); + } + }); + }); + }); +}); From bc01bdf3aca50865ba2888a2818676d1a139533b Mon Sep 17 00:00:00 2001 From: Yashasvi Bajpai <33063622+yashasvibajpai@users.noreply.github.com> Date: Wed, 13 Sep 2023 17:26:10 +0530 Subject: [PATCH 17/37] fix: remove hashing on twclid for twitter ads (#2605) --- src/v0/destinations/twitter_ads/transform.js | 76 ++++++++++---------- test/__tests__/data/twitter_ads.json | 6 +- 2 files changed, 40 insertions(+), 42 deletions(-) diff --git a/src/v0/destinations/twitter_ads/transform.js b/src/v0/destinations/twitter_ads/transform.js index 78c3379c64..363e61072e 100644 --- a/src/v0/destinations/twitter_ads/transform.js +++ b/src/v0/destinations/twitter_ads/transform.js @@ -9,15 +9,15 @@ const { simpleProcessRouterDest, } = require('../../util'); const { EventType } = require('../../../constants'); -const { - ConfigCategories, - mappingConfig, - BASE_URL -} = require('./config'); +const { ConfigCategories, mappingConfig, BASE_URL } = require('./config'); -const { InstrumentationError, OAuthSecretError, ConfigurationError } = require('../../util/errorTypes'); +const { + InstrumentationError, + OAuthSecretError, + ConfigurationError, +} = require('../../util/errorTypes'); const { JSON_MIME_TYPE } = require('../../util/constant'); -const { getAuthHeaderForRequest } = require("./util"); +const { getAuthHeaderForRequest } = require('./util'); const getOAuthFields = ({ secret }) => { if (!secret) { @@ -27,7 +27,7 @@ const getOAuthFields = ({ secret }) => { consumerKey: secret.consumerKey, consumerSecret: secret.consumerSecret, accessToken: secret.accessToken, - accessTokenSecret: secret.accessTokenSecret + accessTokenSecret: secret.accessTokenSecret, }; return oAuthObject; }; @@ -42,7 +42,7 @@ function buildResponse(message, requestJson, metadata, endpointUrl) { const request = { url: response.endpoint, method: response.method, - body: response.body.JSON + body: response.body.JSON, }; const oAuthObject = getOAuthFields(metadata); @@ -60,17 +60,20 @@ function prepareUrl(message, destination) { } function populateEventId(event, requestJson, destination) { - const eventNameToIdMappings = destination.Config.twitterAdsEventNames; - let eventId = ""; + let eventId = ''; if (eventNameToIdMappings) { - const eventObj = eventNameToIdMappings.find(obj => obj.rudderEventName?.trim().toLowerCase() === event?.toString().toLowerCase()); + const eventObj = eventNameToIdMappings.find( + (obj) => obj.rudderEventName?.trim().toLowerCase() === event?.toString().toLowerCase(), + ); eventId = eventObj?.twitterEventId; } - if(!eventId) { - throw new ConfigurationError(`[TWITTER ADS]: Event - '${event}' do not have a corresponding eventId in configuration. Aborting`); + if (!eventId) { + throw new ConfigurationError( + `[TWITTER ADS]: Event - '${event}' do not have a corresponding eventId in configuration. Aborting`, + ); } return eventId; @@ -79,14 +82,16 @@ function populateEventId(event, requestJson, destination) { function populateContents(requestJson) { const reqJson = { ...requestJson }; if (reqJson.contents) { - const transformedContents = requestJson.contents.map(obj => ({ - ...(obj.id && { content_id: obj.id }), - ...(obj.groupId && { content_group_id: obj.groupId }), - ...(obj.name && { content_name: obj.name }), - ...(obj.price && { content_price: parseFloat(obj.price) }), - ...(obj.type && { content_type: obj.type }), - ...(obj.quantity && { num_items: parseInt(obj.quantity, 10) }) - })).filter(tfObj => Object.keys(tfObj).length > 0); + const transformedContents = requestJson.contents + .map((obj) => ({ + ...(obj.id && { content_id: obj.id }), + ...(obj.groupId && { content_group_id: obj.groupId }), + ...(obj.name && { content_name: obj.name }), + ...(obj.price && { content_price: parseFloat(obj.price) }), + ...(obj.type && { content_type: obj.type }), + ...(obj.quantity && { num_items: parseInt(obj.quantity, 10) }), + })) + .filter((tfObj) => Object.keys(tfObj).length > 0); if (transformedContents.length > 0) { reqJson.contents = transformedContents; } @@ -96,13 +101,14 @@ function populateContents(requestJson) { // process track call function processTrack(message, metadata, destination) { - let requestJson = constructPayload(message, mappingConfig[ConfigCategories.TRACK.name]); - requestJson.event_id = requestJson.event_id || populateEventId(message.event, requestJson, destination); + requestJson.event_id = + requestJson.event_id || populateEventId(message.event, requestJson, destination); requestJson.conversion_time = isDefinedAndNotNull(requestJson.conversion_time) - ? requestJson.conversion_time : message.timestamp; + ? requestJson.conversion_time + : message.timestamp; const identifiers = []; @@ -110,19 +116,19 @@ function processTrack(message, metadata, destination) { let email = message.properties.email.trim(); if (email) { email = email.toLowerCase(); - identifiers.push({hashed_email: sha256(email)}) + identifiers.push({ hashed_email: sha256(email) }); } } if (message.properties.phone) { const phone = message.properties.phone.trim(); if (phone) { - identifiers.push({hashed_phone_number: sha256(phone)}) + identifiers.push({ hashed_phone_number: sha256(phone) }); } } if (message.properties.twclid) { - identifiers.push({twclid: sha256(message.properties.twclid)}); + identifiers.push({ twclid: message.properties.twclid }); } requestJson = populateContents(requestJson); @@ -131,33 +137,26 @@ function processTrack(message, metadata, destination) { const endpointUrl = prepareUrl(message, destination); - return buildResponse( - message, - requestJson, - metadata, - endpointUrl - ); + return buildResponse(message, requestJson, metadata, endpointUrl); } function validateRequest(message) { - const { properties } = message; if (!properties) { throw new InstrumentationError( - '[TWITTER ADS]: properties must be present in event. Aborting message', + '[TWITTER ADS]: properties must be present in event. Aborting message', ); } if (!properties.email && !properties.phone && !properties.twclid) { throw new InstrumentationError( - '[TWITTER ADS]: one of twclid, phone or email must be present in properties.', + '[TWITTER ADS]: one of twclid, phone or email must be present in properties.', ); } } function process(event) { - const { message, metadata, destination } = event; validateRequest(message); @@ -169,7 +168,6 @@ function process(event) { } throw new InstrumentationError(`Message type ${messageType} not supported`); - } const processRouterDest = async (inputs, reqMetadata) => { diff --git a/test/__tests__/data/twitter_ads.json b/test/__tests__/data/twitter_ads.json index ed2ab13ddf..53c7c19929 100644 --- a/test/__tests__/data/twitter_ads.json +++ b/test/__tests__/data/twitter_ads.json @@ -136,7 +136,7 @@ "hashed_phone_number": "b308962b96b40cce7981493a372db9478edae79f83c2d8ca6cd15a39566f8c56" }, { - "twclid": "18beb4813723e788a1d79bcbf80802538ec813aa19ded2e9c21cbf08bed6bee3" + "twclid": "543" } ] } @@ -360,7 +360,7 @@ "hashed_phone_number": "b308962b96b40cce7981493a372db9478edae79f83c2d8ca6cd15a39566f8c56" }, { - "twclid": "18beb4813723e788a1d79bcbf80802538ec813aa19ded2e9c21cbf08bed6bee3" + "twclid": "543" } ] } @@ -692,7 +692,7 @@ "hashed_phone_number": "b308962b96b40cce7981493a372db9478edae79f83c2d8ca6cd15a39566f8c56" }, { - "twclid": "18beb4813723e788a1d79bcbf80802538ec813aa19ded2e9c21cbf08bed6bee3" + "twclid": "543" } ] } From 9122dd2bea6addb6091a541f911806fa705c7040 Mon Sep 17 00:00:00 2001 From: Krishna Chaitanya Date: Wed, 13 Sep 2023 20:10:24 +0530 Subject: [PATCH 18/37] chore: fix sonar and lint issues (#2607) --- src/middleware.js | 41 ++++++++++++++++++++--------------------- 1 file changed, 20 insertions(+), 21 deletions(-) diff --git a/src/middleware.js b/src/middleware.js index 4387dbd05c..b8f6a2ac1b 100644 --- a/src/middleware.js +++ b/src/middleware.js @@ -1,31 +1,18 @@ -const stats = require('./util/stats'); const Pyroscope = require('@pyroscope/nodejs'); +const stats = require('./util/stats'); +const logger = require('./logger'); Pyroscope.init({ appName: 'rudder-transformer', }); -function pyroscopeMiddleware(ctx, next) { - Pyroscope.startHeapCollecting(); - return (ctx, next) => { - if (ctx.method === 'GET' && ctx.path === '/debug/pprof/profile') { - return handlerCpu(ctx).then(() => next()); - } - if (ctx.method === 'GET' && ctx.path === '/debug/pprof/heap') { - return handlerHeap(ctx).then(() => next()); - } - next(); - }; -} - async function handlerCpu(ctx) { try { const p = await Pyroscope.collectCpu(Number(ctx.query.seconds)); ctx.body = p; ctx.status = 200; - } - catch (e) { - console.log(e); + } catch (e) { + logger.error(e); ctx.status = 500; } } @@ -35,15 +22,27 @@ async function handlerHeap(ctx) { const p = await Pyroscope.collectHeap(); ctx.body = p; ctx.status = 200; - } - catch (e) { - console.log(e); + } catch (e) { + logger.error(e); ctx.status = 500; } } +function pyroscopeMiddleware() { + Pyroscope.startHeapCollecting(); + return (ctx, next) => { + if (ctx.method === 'GET' && ctx.path === '/debug/pprof/profile') { + return handlerCpu(ctx).then(() => next()); + } + if (ctx.method === 'GET' && ctx.path === '/debug/pprof/heap') { + return handlerHeap(ctx).then(() => next()); + } + return next(); + }; +} + function addPyroscopeMiddleware(app) { - app.use(pyroscopeMiddleware()) + app.use(pyroscopeMiddleware()); } function durationMiddleware() { From 46c4ccc8923eba2525a65f30632346f82ccc0125 Mon Sep 17 00:00:00 2001 From: Gauravudia <60897972+Gauravudia@users.noreply.github.com> Date: Thu, 14 Sep 2023 09:56:38 +0530 Subject: [PATCH 19/37] feat(mixpanel): add incremental properties support (#2550) * feat(mixpanel): add incremental properties support * docs: add comment * test: update testcase --- src/v0/destinations/mp/transform.js | 39 +++++++++++++++++++++++++++++ src/v0/destinations/mp/util.test.js | 5 +--- test/__tests__/data/mp_input.json | 25 +++++++++++++++--- test/__tests__/data/mp_output.json | 20 ++++++++++++++- 4 files changed, 81 insertions(+), 8 deletions(-) diff --git a/src/v0/destinations/mp/transform.js b/src/v0/destinations/mp/transform.js index 0cb06aad93..425b7a8249 100644 --- a/src/v0/destinations/mp/transform.js +++ b/src/v0/destinations/mp/transform.js @@ -130,6 +130,37 @@ const processRevenueEvents = (message, destination, revenueValue) => { return responseBuilderSimple(payload, message, 'revenue', destination.Config); }; +/** + * This function is used to process the incremental properties + * ref :- https://developer.mixpanel.com/reference/profile-numerical-add + * @param {*} message + * @param {*} destination + * @param {*} propIncrements + * @returns + */ +const processIncrementalProperties = (message, destination, propIncrements) => { + const payload = { + $add: {}, + $token: destination.Config.token, + $distinct_id: message.userId || message.anonymousId, + }; + + if (destination?.Config.identityMergeApi === 'simplified') { + payload.$distinct_id = message.userId || `$device:${message.anonymousId}`; + } + + Object.keys(message.properties).forEach((prop) => { + const value = message.properties[prop]; + if (value && propIncrements.includes(prop)) { + payload.$add[prop] = value; + } + }); + + return Object.keys(payload.$add).length > 0 + ? responseBuilderSimple(payload, message, 'incremental_properties', destination.Config) + : null; +}; + const getEventValueForTrackEvent = (message, destination) => { const mappedProperties = constructPayload(message, mPEventPropertiesConfigJson); // This is to conform with SDKs sending timestamp component with messageId @@ -178,6 +209,14 @@ const processTrack = (message, destination) => { if (revenue) { returnValue.push(processRevenueEvents(message, destination, revenue)); } + + if (Array.isArray(destination.Config.propIncrements)) { + const propIncrements = destination.Config.propIncrements.map((item) => item.property); + const response = processIncrementalProperties(message, destination, propIncrements); + if (response) { + returnValue.push(response); + } + } returnValue.push(getEventValueForTrackEvent(message, destination)); return returnValue; }; diff --git a/src/v0/destinations/mp/util.test.js b/src/v0/destinations/mp/util.test.js index 2434564699..c5cd5b61e8 100644 --- a/src/v0/destinations/mp/util.test.js +++ b/src/v0/destinations/mp/util.test.js @@ -1,7 +1,4 @@ -const { - combineBatchRequestsWithSameJobIds, - combineBatchRequestsWithSameJobIds2, -} = require('./util'); +const { combineBatchRequestsWithSameJobIds } = require('./util'); const destinationMock = { Config: { diff --git a/test/__tests__/data/mp_input.json b/test/__tests__/data/mp_input.json index 394fc49b61..6d456858c9 100644 --- a/test/__tests__/data/mp_input.json +++ b/test/__tests__/data/mp_input.json @@ -432,7 +432,18 @@ "apiKey": "dummyApiKey", "token": "dummyApiKey", "prefixProperties": true, - "useNativeSDK": false + "useNativeSDK": false, + "propIncrements": [ + { + "property": "counter" + }, + { + "property": "item_purchased" + }, + { + "property": "number_of_logins" + } + ] }, "DestinationDefinition": { "DisplayName": "Kiss Metrics", @@ -493,7 +504,10 @@ "originalTimestamp": "2020-01-24T06:29:02.364Z", "properties": { "currency": "USD", - "revenue": 45.89 + "revenue": 45.89, + "counter": 1, + "item_purchased": "2", + "number_of_logins": "" }, "receivedAt": "2020-01-24T11:59:02.403+05:30", "request_ip": "[::1]:53710", @@ -582,7 +596,12 @@ "apiKey": "dummyApiKey", "token": "dummyApiKey", "prefixProperties": true, - "useNativeSDK": false + "useNativeSDK": false, + "propIncrements": [ + { + "property": "" + } + ] }, "DestinationDefinition": { "DisplayName": "Kiss Metrics", diff --git a/test/__tests__/data/mp_output.json b/test/__tests__/data/mp_output.json index fe54474dd8..61100a1b84 100644 --- a/test/__tests__/data/mp_output.json +++ b/test/__tests__/data/mp_output.json @@ -128,6 +128,24 @@ "files": {}, "userId": "e6ab2c5e-2cda-44a9-a962-e2f67df78bca" }, + { + "version": "1", + "type": "REST", + "method": "POST", + "endpoint": "https://api.mixpanel.com/engage/", + "headers": {}, + "params": {}, + "body": { + "JSON": {}, + "JSON_ARRAY": { + "batch": "[{\"$add\":{\"counter\":1,\"item_purchased\":\"2\"},\"$token\":\"dummyApiKey\",\"$distinct_id\":\"e6ab2c5e-2cda-44a9-a962-e2f67df78bca\"}]" + }, + "XML": {}, + "FORM": {} + }, + "files": {}, + "userId": "e6ab2c5e-2cda-44a9-a962-e2f67df78bca" + }, { "version": "1", "type": "REST", @@ -138,7 +156,7 @@ "body": { "JSON": {}, "JSON_ARRAY": { - "batch": "[{\"event\":\"test revenue MIXPANEL\",\"properties\":{\"currency\":\"USD\",\"revenue\":45.89,\"city\":\"Disney\",\"country\":\"USA\",\"email\":\"mickey@disney.com\",\"firstName\":\"Mickey\",\"ip\":\"0.0.0.0\",\"$current_url\":\"https://docs.rudderstack.com/destinations/mixpanel\",\"$screen_dpi\":2,\"mp_lib\":\"RudderLabs JavaScript SDK\",\"$app_build_number\":\"1.0.0\",\"$app_version_string\":\"1.0.5\",\"$insert_id\":\"a6a0ad5a-bd26-4f19-8f75-38484e580fc7\",\"token\":\"dummyApiKey\",\"distinct_id\":\"e6ab2c5e-2cda-44a9-a962-e2f67df78bca\",\"time\":1579847342,\"$browser\":\"Chrome\",\"$browser_version\":\"79.0.3945.117\"}}]" + "batch": "[{\"event\":\"test revenue MIXPANEL\",\"properties\":{\"currency\":\"USD\",\"revenue\":45.89,\"counter\":1,\"item_purchased\":\"2\",\"number_of_logins\":\"\",\"city\":\"Disney\",\"country\":\"USA\",\"email\":\"mickey@disney.com\",\"firstName\":\"Mickey\",\"ip\":\"0.0.0.0\",\"$current_url\":\"https://docs.rudderstack.com/destinations/mixpanel\",\"$screen_dpi\":2,\"mp_lib\":\"RudderLabs JavaScript SDK\",\"$app_build_number\":\"1.0.0\",\"$app_version_string\":\"1.0.5\",\"$insert_id\":\"a6a0ad5a-bd26-4f19-8f75-38484e580fc7\",\"token\":\"dummyApiKey\",\"distinct_id\":\"e6ab2c5e-2cda-44a9-a962-e2f67df78bca\",\"time\":1579847342,\"$browser\":\"Chrome\",\"$browser_version\":\"79.0.3945.117\"}}]" }, "XML": {}, "FORM": {} From 735aac15112810369d1482a731081403792c1b4c Mon Sep 17 00:00:00 2001 From: AASHISH MALIK Date: Thu, 14 Sep 2023 14:42:37 +0530 Subject: [PATCH 20/37] feat: google ads v14 upgrade (#2578) --- .../config.js | 2 +- .../config.js | 2 +- .../utils.test.js | 8 ++-- .../config.js | 2 +- .../response.json | 18 ++++----- .../proxy_response.json | 18 ++++----- ...e_adwords_enhanced_conversions_output.json | 8 ++-- ...ords_enhanced_conversions_proxy_input.json | 6 +-- ...ds_enhanced_conversions_router_output.json | 2 +- .../google_adwords_offline_conversions.json | 38 +++++++++---------- ...words_offline_conversions_proxy_input.json | 12 +++--- ...ords_offline_conversions_proxy_output.json | 2 +- ...rds_offline_conversions_router_output.json | 8 ++-- ...ogle_adwords_remarketing_lists_output.json | 38 +++++++++---------- ...adwords_remarketing_lists_proxy_input.json | 6 +-- ...words_remarketing_lists_router_output.json | 10 ++--- ...google_adwords_offline_conversions.test.js | 12 +++--- 17 files changed, 96 insertions(+), 96 deletions(-) diff --git a/src/v0/destinations/google_adwords_enhanced_conversions/config.js b/src/v0/destinations/google_adwords_enhanced_conversions/config.js index a86d0606a6..66d12c34d7 100644 --- a/src/v0/destinations/google_adwords_enhanced_conversions/config.js +++ b/src/v0/destinations/google_adwords_enhanced_conversions/config.js @@ -1,6 +1,6 @@ const { getMappingConfig } = require('../../util'); -const BASE_ENDPOINT = 'https://googleads.googleapis.com/v13/customers'; +const BASE_ENDPOINT = 'https://googleads.googleapis.com/v14/customers'; const CONFIG_CATEGORIES = { TRACK_CONFIG: { type: 'track', name: 'trackConfig' }, diff --git a/src/v0/destinations/google_adwords_offline_conversions/config.js b/src/v0/destinations/google_adwords_offline_conversions/config.js index 1d77af02e6..a02732894f 100644 --- a/src/v0/destinations/google_adwords_offline_conversions/config.js +++ b/src/v0/destinations/google_adwords_offline_conversions/config.js @@ -1,6 +1,6 @@ const { getMappingConfig } = require('../../util'); -const API_VERSION = 'v13'; +const API_VERSION = 'v14'; const BASE_ENDPOINT = `https://googleads.googleapis.com/${API_VERSION}/customers/:customerId`; diff --git a/src/v0/destinations/google_adwords_offline_conversions/utils.test.js b/src/v0/destinations/google_adwords_offline_conversions/utils.test.js index 775e123cfe..8deaa3ab0a 100644 --- a/src/v0/destinations/google_adwords_offline_conversions/utils.test.js +++ b/src/v0/destinations/google_adwords_offline_conversions/utils.test.js @@ -161,7 +161,7 @@ describe('getExisitingUserIdentifier util tests', () => { describe('getClickConversionPayloadAndEndpoint util tests', () => { it('getClickConversionPayloadAndEndpoint flow check when default field identifier is present', () => { let expectedOutput = { - endpoint: 'https://googleads.googleapis.com/v13/customers/9625812972:uploadClickConversions', + endpoint: 'https://googleads.googleapis.com/v14/customers/9625812972:uploadClickConversions', payload: { conversions: [ { @@ -187,7 +187,7 @@ describe('getClickConversionPayloadAndEndpoint util tests', () => { delete fittingPayload.traits.email; delete fittingPayload.properties.email; let expectedOutput = { - endpoint: 'https://googleads.googleapis.com/v13/customers/9625812972:uploadClickConversions', + endpoint: 'https://googleads.googleapis.com/v14/customers/9625812972:uploadClickConversions', payload: { conversions: [ { @@ -215,7 +215,7 @@ describe('getClickConversionPayloadAndEndpoint util tests', () => { delete fittingPayload.traits.phone; delete fittingPayload.properties.email; let expectedOutput = { - endpoint: 'https://googleads.googleapis.com/v13/customers/9625812972:uploadClickConversions', + endpoint: 'https://googleads.googleapis.com/v14/customers/9625812972:uploadClickConversions', payload: { conversions: [ { @@ -251,7 +251,7 @@ describe('getClickConversionPayloadAndEndpoint util tests', () => { }, ]; let expectedOutput = { - endpoint: 'https://googleads.googleapis.com/v13/customers/9625812972:uploadClickConversions', + endpoint: 'https://googleads.googleapis.com/v14/customers/9625812972:uploadClickConversions', payload: { conversions: [ { diff --git a/src/v0/destinations/google_adwords_remarketing_lists/config.js b/src/v0/destinations/google_adwords_remarketing_lists/config.js index 902ac1cbff..94059c69f1 100644 --- a/src/v0/destinations/google_adwords_remarketing_lists/config.js +++ b/src/v0/destinations/google_adwords_remarketing_lists/config.js @@ -1,6 +1,6 @@ const { getMappingConfig } = require('../../util'); -const BASE_ENDPOINT = 'https://googleads.googleapis.com/v13/customers'; +const BASE_ENDPOINT = 'https://googleads.googleapis.com/v14/customers'; const CONFIG_CATEGORIES = { AUDIENCE_LIST: { type: 'audienceList', name: 'offlineDataJobs' }, ADDRESSINFO: { type: 'addressInfo', name: 'addressInfo' }, diff --git a/test/__mocks__/data/google_adwords_offline_conversion/response.json b/test/__mocks__/data/google_adwords_offline_conversion/response.json index d9e763c3ac..285ef56509 100644 --- a/test/__mocks__/data/google_adwords_offline_conversion/response.json +++ b/test/__mocks__/data/google_adwords_offline_conversion/response.json @@ -1,17 +1,17 @@ { - "https://googleads.googleapis.com/v13/customers/11122233331/offlineUserDataJobs:create": { + "https://googleads.googleapis.com/v14/customers/11122233331/offlineUserDataJobs:create": { "data": { "resourceName": "customers/111-222-3333/offlineUserDataJobs/OFFLINE_USER_DATA_JOB_ID_FOR_ADD_FAILURE" }, "status": 200 }, - "https://googleads.googleapis.com/v13/customers/1112223333/offlineUserDataJobs:create": { + "https://googleads.googleapis.com/v14/customers/1112223333/offlineUserDataJobs:create": { "data": { "resourceName": "customers/111-222-3333/offlineUserDataJobs/OFFLINE_USER_DATA_JOB_ID" }, "status": 200 }, - "https://googleads.googleapis.com/v13/customers/customerid/offlineUserDataJobs:create": { + "https://googleads.googleapis.com/v14/customers/customerid/offlineUserDataJobs:create": { "status": 401, "data": { "error": { @@ -21,11 +21,11 @@ } } }, - "https://googleads.googleapis.com/v13/customers/1112223333/offlineUserDataJobs/OFFLINE_USER_DATA_JOB_ID:addOperations": { + "https://googleads.googleapis.com/v14/customers/1112223333/offlineUserDataJobs/OFFLINE_USER_DATA_JOB_ID:addOperations": { "status": 200, "data": {} }, - "https://googleads.googleapis.com/v13/customers/11122233331/offlineUserDataJobs/OFFLINE_USER_DATA_JOB_ID_FOR_ADD_FAILURE:addOperations": { + "https://googleads.googleapis.com/v14/customers/11122233331/offlineUserDataJobs/OFFLINE_USER_DATA_JOB_ID_FOR_ADD_FAILURE:addOperations": { "status": 400, "data": { "error": { @@ -34,7 +34,7 @@ "status": "INVALID_ARGUMENT", "details": [ { - "@type": "type.googleapis.com/google.ads.googleads.v13.errors.GoogleAdsFailure", + "@type": "type.googleapis.com/google.ads.googleads.v14.errors.GoogleAdsFailure", "errors": [ { "errorCode": { @@ -67,13 +67,13 @@ } } }, - "https://googleads.googleapis.com/v13/customers/1112223333/offlineUserDataJobs/OFFLINE_USER_DATA_JOB_ID:run": { + "https://googleads.googleapis.com/v14/customers/1112223333/offlineUserDataJobs/OFFLINE_USER_DATA_JOB_ID:run": { "status": 200, "data": { "name": "customers/111-222-3333/operations/abcd=" } }, - "https://googleads.googleapis.com/v13/customers/customerid/offlineUserDataJobs/OFFLINE_USER_DATA_JOB_ID_ADD_FAILURE:addOperations": { + "https://googleads.googleapis.com/v14/customers/customerid/offlineUserDataJobs/OFFLINE_USER_DATA_JOB_ID_ADD_FAILURE:addOperations": { "status": 400, "data": { "error": { @@ -82,7 +82,7 @@ "status": "INVALID_ARGUMENT", "details": [ { - "@type": "type.googleapis.com/google.ads.googleads.v13.errors.GoogleAdsFailure", + "@type": "type.googleapis.com/google.ads.googleads.v14.errors.GoogleAdsFailure", "errors": [ { "errorCode": { diff --git a/test/__mocks__/data/google_adwords_remarketing_lists/proxy_response.json b/test/__mocks__/data/google_adwords_remarketing_lists/proxy_response.json index 93689bb0cb..246ba7f9fb 100644 --- a/test/__mocks__/data/google_adwords_remarketing_lists/proxy_response.json +++ b/test/__mocks__/data/google_adwords_remarketing_lists/proxy_response.json @@ -1,23 +1,23 @@ { - "https://googleads.googleapis.com/v13/customers/7693729833/offlineUserDataJobs:create": { + "https://googleads.googleapis.com/v14/customers/7693729833/offlineUserDataJobs:create": { "status": 200, "data": { "resourceName": "customers/9249589672/offlineUserDataJobs/18025019461" } }, - "https://googleads.googleapis.com/v13/customers/7693729833/offlineUserDataJobs/18025019461:addOperations": { + "https://googleads.googleapis.com/v14/customers/7693729833/offlineUserDataJobs/18025019461:addOperations": { "status": 200 }, - "https://googleads.googleapis.com/v13/customers/7693729833/offlineUserDataJobs/18025019461:run": { + "https://googleads.googleapis.com/v14/customers/7693729833/offlineUserDataJobs/18025019461:run": { "status": 200 }, - "https://googleads.googleapis.com/v13/customers/7693729834/offlineUserDataJobs:create": { + "https://googleads.googleapis.com/v14/customers/7693729834/offlineUserDataJobs:create": { "status": 200, "data": { "resourceName": "customers/9249589672/offlineUserDataJobs/18025019462" } }, - "https://googleads.googleapis.com/v13/customers/7693729834/offlineUserDataJobs/18025019462:addOperations": { + "https://googleads.googleapis.com/v14/customers/7693729834/offlineUserDataJobs/18025019462:addOperations": { "response": { "data": { "error": { @@ -60,7 +60,7 @@ "status": 400 } }, - "https://googleads.googleapis.com/v13/customers/1234567890/googleAds:searchStream": { + "https://googleads.googleapis.com/v14/customers/1234567890/googleAds:searchStream": { "response": { "data": [ { @@ -74,11 +74,11 @@ "status": 401 } }, - "https://googleads.googleapis.com/v13/customers/1234567899/googleAds:searchStream": { + "https://googleads.googleapis.com/v14/customers/1234567899/googleAds:searchStream": { "response": "", "code": "ECONNREFUSED" }, - "https://googleads.googleapis.com/v13/customers/1234567891/googleAds:searchStream": { + "https://googleads.googleapis.com/v14/customers/1234567891/googleAds:searchStream": { "data": [ { "results": [ @@ -95,7 +95,7 @@ ], "status": 200 }, - "https://googleads.googleapis.com/v13/customers/1234567891:uploadConversionAdjustments": { + "https://googleads.googleapis.com/v14/customers/1234567891:uploadConversionAdjustments": { "data": [ { "adjustmentType": "ENHANCEMENT", diff --git a/test/__tests__/data/google_adwords_enhanced_conversions_output.json b/test/__tests__/data/google_adwords_enhanced_conversions_output.json index f90bcd5901..d260502926 100644 --- a/test/__tests__/data/google_adwords_enhanced_conversions_output.json +++ b/test/__tests__/data/google_adwords_enhanced_conversions_output.json @@ -3,7 +3,7 @@ "version": "1", "type": "REST", "method": "POST", - "endpoint": "https://googleads.googleapis.com/v13/customers/1234567890:uploadConversionAdjustments", + "endpoint": "https://googleads.googleapis.com/v14/customers/1234567890:uploadConversionAdjustments", "headers": { "Authorization": "Bearer abcd1234", "Content-Type": "application/json", @@ -91,7 +91,7 @@ "version": "1", "type": "REST", "method": "POST", - "endpoint": "https://googleads.googleapis.com/v13/customers/1234567890:uploadConversionAdjustments", + "endpoint": "https://googleads.googleapis.com/v14/customers/1234567890:uploadConversionAdjustments", "headers": { "Authorization": "Bearer abcd1234", "Content-Type": "application/json", @@ -204,7 +204,7 @@ "version": "1", "type": "REST", "method": "POST", - "endpoint": "https://googleads.googleapis.com/v13/customers/1234567890:uploadConversionAdjustments", + "endpoint": "https://googleads.googleapis.com/v14/customers/1234567890:uploadConversionAdjustments", "headers": { "Authorization": "Bearer abcd1234", "Content-Type": "application/json", @@ -260,7 +260,7 @@ "version": "1", "type": "REST", "method": "POST", - "endpoint": "https://googleads.googleapis.com/v13/customers/1234567890:uploadConversionAdjustments", + "endpoint": "https://googleads.googleapis.com/v14/customers/1234567890:uploadConversionAdjustments", "headers": { "Authorization": "Bearer abcd1234", "Content-Type": "application/json", diff --git a/test/__tests__/data/google_adwords_enhanced_conversions_proxy_input.json b/test/__tests__/data/google_adwords_enhanced_conversions_proxy_input.json index d9d0575355..612efeb99a 100644 --- a/test/__tests__/data/google_adwords_enhanced_conversions_proxy_input.json +++ b/test/__tests__/data/google_adwords_enhanced_conversions_proxy_input.json @@ -3,7 +3,7 @@ "version": "1", "type": "REST", "method": "POST", - "endpoint": "https://googleads.googleapis.com/v13/customers/1234567890:uploadConversionAdjustments", + "endpoint": "https://googleads.googleapis.com/v14/customers/1234567890:uploadConversionAdjustments", "headers": { "Authorization": "Bearer abcd1234", "Content-Type": "application/json", @@ -56,7 +56,7 @@ "version": "1", "type": "REST", "method": "POST", - "endpoint": "https://googleads.googleapis.com/v13/customers/1234567899:uploadConversionAdjustments", + "endpoint": "https://googleads.googleapis.com/v14/customers/1234567899:uploadConversionAdjustments", "headers": { "Authorization": "Bearer abcd1234", "Content-Type": "application/json", @@ -109,7 +109,7 @@ "version": "1", "type": "REST", "method": "POST", - "endpoint": "https://googleads.googleapis.com/v13/customers/1234567891:uploadConversionAdjustments", + "endpoint": "https://googleads.googleapis.com/v14/customers/1234567891:uploadConversionAdjustments", "headers": { "Authorization": "Bearer abcd1234", "Content-Type": "application/json", diff --git a/test/__tests__/data/google_adwords_enhanced_conversions_router_output.json b/test/__tests__/data/google_adwords_enhanced_conversions_router_output.json index 6ddec019e3..bab6c05cc9 100644 --- a/test/__tests__/data/google_adwords_enhanced_conversions_router_output.json +++ b/test/__tests__/data/google_adwords_enhanced_conversions_router_output.json @@ -4,7 +4,7 @@ "version": "1", "type": "REST", "method": "POST", - "endpoint": "https://googleads.googleapis.com/v13/customers/1234567890:uploadConversionAdjustments", + "endpoint": "https://googleads.googleapis.com/v14/customers/1234567890:uploadConversionAdjustments", "headers": { "Authorization": "Bearer abcd1234", "Content-Type": "application/json", diff --git a/test/__tests__/data/google_adwords_offline_conversions.json b/test/__tests__/data/google_adwords_offline_conversions.json index 53c0f9bf3e..9bdb5cda45 100644 --- a/test/__tests__/data/google_adwords_offline_conversions.json +++ b/test/__tests__/data/google_adwords_offline_conversions.json @@ -159,7 +159,7 @@ "version": "1", "type": "REST", "method": "POST", - "endpoint": "https://googleads.googleapis.com/v13/customers/9625812972:uploadClickConversions", + "endpoint": "https://googleads.googleapis.com/v14/customers/9625812972:uploadClickConversions", "headers": { "Authorization": "Bearer abcd1234", "Content-Type": "application/json", @@ -418,7 +418,7 @@ "version": "1", "type": "REST", "method": "POST", - "endpoint": "https://googleads.googleapis.com/v13/customers/9625812972:uploadClickConversions", + "endpoint": "https://googleads.googleapis.com/v14/customers/9625812972:uploadClickConversions", "headers": { "Authorization": "Bearer abcd1234", "Content-Type": "application/json", @@ -677,7 +677,7 @@ "version": "1", "type": "REST", "method": "POST", - "endpoint": "https://googleads.googleapis.com/v13/customers/9625812972:uploadClickConversions", + "endpoint": "https://googleads.googleapis.com/v14/customers/9625812972:uploadClickConversions", "headers": { "Authorization": "Bearer abcd1234", "Content-Type": "application/json", @@ -936,7 +936,7 @@ "version": "1", "type": "REST", "method": "POST", - "endpoint": "https://googleads.googleapis.com/v13/customers/9625812972:uploadCallConversions", + "endpoint": "https://googleads.googleapis.com/v14/customers/9625812972:uploadCallConversions", "headers": { "Authorization": "Bearer abcd1234", "Content-Type": "application/json", @@ -1796,7 +1796,7 @@ "version": "1", "type": "REST", "method": "POST", - "endpoint": "https://googleads.googleapis.com/v13/customers/9625812972:uploadClickConversions", + "endpoint": "https://googleads.googleapis.com/v14/customers/9625812972:uploadClickConversions", "headers": { "Authorization": "Bearer abcd1234", "Content-Type": "application/json", @@ -1896,7 +1896,7 @@ "version": "1", "type": "REST", "method": "POST", - "endpoint": "https://googleads.googleapis.com/v13/customers/9625812972:uploadCallConversions", + "endpoint": "https://googleads.googleapis.com/v14/customers/9625812972:uploadCallConversions", "headers": { "Authorization": "Bearer abcd1234", "Content-Type": "application/json", @@ -2090,7 +2090,7 @@ "version": "1", "type": "REST", "method": "POST", - "endpoint": "https://googleads.googleapis.com/v13/customers/9625812972:uploadClickConversions", + "endpoint": "https://googleads.googleapis.com/v14/customers/9625812972:uploadClickConversions", "headers": { "Authorization": "Bearer abcd1234", "Content-Type": "application/json", @@ -2257,7 +2257,7 @@ "version": "1", "type": "REST", "method": "POST", - "endpoint": "https://googleads.googleapis.com/v13/customers/9625812972:uploadCallConversions", + "endpoint": "https://googleads.googleapis.com/v14/customers/9625812972:uploadCallConversions", "headers": { "Authorization": "Bearer abcd1234", "Content-Type": "application/json", @@ -2461,7 +2461,7 @@ "version": "1", "type": "REST", "method": "POST", - "endpoint": "https://googleads.googleapis.com/v13/customers/9625812972:uploadCallConversions", + "endpoint": "https://googleads.googleapis.com/v14/customers/9625812972:uploadCallConversions", "headers": { "Authorization": "Bearer abcd1234", "Content-Type": "application/json", @@ -2651,7 +2651,7 @@ "version": "1", "type": "REST", "method": "POST", - "endpoint": "https://googleads.googleapis.com/v13/customers/9625812972:uploadClickConversions", + "endpoint": "https://googleads.googleapis.com/v14/customers/9625812972:uploadClickConversions", "headers": { "Authorization": "Bearer abcd1234", "Content-Type": "application/json", @@ -3077,7 +3077,7 @@ "version": "1", "type": "REST", "method": "POST", - "endpoint": "https://googleads.googleapis.com/v13/customers/9625812972:uploadClickConversions", + "endpoint": "https://googleads.googleapis.com/v14/customers/9625812972:uploadClickConversions", "headers": { "Authorization": "Bearer abcd1234", "Content-Type": "application/json", @@ -3383,7 +3383,7 @@ "version": "1", "type": "REST", "method": "POST", - "endpoint": "https://googleads.googleapis.com/v13/customers/9625812972:uploadClickConversions", + "endpoint": "https://googleads.googleapis.com/v14/customers/9625812972:uploadClickConversions", "headers": { "Authorization": "Bearer abcd1234", "Content-Type": "application/json", @@ -3544,7 +3544,7 @@ "version": "1", "type": "REST", "method": "POST", - "endpoint": "https://googleads.googleapis.com/v13/customers/1112223333/offlineUserDataJobs", + "endpoint": "https://googleads.googleapis.com/v14/customers/1112223333/offlineUserDataJobs", "headers": { "Authorization": "Bearer abcd1234", "Content-Type": "application/json", @@ -3827,7 +3827,7 @@ "version": "1", "type": "REST", "method": "POST", - "endpoint": "https://googleads.googleapis.com/v13/customers/1112223333/offlineUserDataJobs", + "endpoint": "https://googleads.googleapis.com/v14/customers/1112223333/offlineUserDataJobs", "headers": { "Authorization": "Bearer abcd1234", "Content-Type": "application/json", @@ -3993,7 +3993,7 @@ "version": "1", "type": "REST", "method": "POST", - "endpoint": "https://googleads.googleapis.com/v13/customers/1112223333/offlineUserDataJobs", + "endpoint": "https://googleads.googleapis.com/v14/customers/1112223333/offlineUserDataJobs", "headers": { "Authorization": "Bearer abcd1234", "Content-Type": "application/json", @@ -4163,7 +4163,7 @@ "version": "1", "type": "REST", "method": "POST", - "endpoint": "https://googleads.googleapis.com/v13/customers/1112223333/offlineUserDataJobs", + "endpoint": "https://googleads.googleapis.com/v14/customers/1112223333/offlineUserDataJobs", "headers": { "Authorization": "Bearer abcd1234", "Content-Type": "application/json", @@ -4294,7 +4294,7 @@ "version": "1", "type": "REST", "method": "POST", - "endpoint": "https://googleads.googleapis.com/v13/customers/1112223333/offlineUserDataJobs", + "endpoint": "https://googleads.googleapis.com/v14/customers/1112223333/offlineUserDataJobs", "headers": { "Authorization": "Bearer abcd1234", "Content-Type": "application/json", @@ -4421,7 +4421,7 @@ "version": "1", "type": "REST", "method": "POST", - "endpoint": "https://googleads.googleapis.com/v13/customers/1112223333/offlineUserDataJobs", + "endpoint": "https://googleads.googleapis.com/v14/customers/1112223333/offlineUserDataJobs", "headers": { "Authorization": "Bearer abcd1234", "Content-Type": "application/json", @@ -4546,7 +4546,7 @@ "version": "1", "type": "REST", "method": "POST", - "endpoint": "https://googleads.googleapis.com/v13/customers/1112223333/offlineUserDataJobs", + "endpoint": "https://googleads.googleapis.com/v14/customers/1112223333/offlineUserDataJobs", "headers": { "Authorization": "Bearer abcd1234", "Content-Type": "application/json", diff --git a/test/__tests__/data/google_adwords_offline_conversions_proxy_input.json b/test/__tests__/data/google_adwords_offline_conversions_proxy_input.json index a812fdbcc4..5a9f4e4126 100644 --- a/test/__tests__/data/google_adwords_offline_conversions_proxy_input.json +++ b/test/__tests__/data/google_adwords_offline_conversions_proxy_input.json @@ -5,7 +5,7 @@ "version": "1", "type": "REST", "method": "POST", - "endpoint": "https://googleads.googleapis.com/v13/customers/11122233331/offlineUserDataJobs", + "endpoint": "https://googleads.googleapis.com/v14/customers/11122233331/offlineUserDataJobs", "headers": { "Authorization": "Bearer abcd1234", "Content-Type": "application/json", @@ -75,7 +75,7 @@ "version": "1", "type": "REST", "method": "POST", - "endpoint": "https://googleads.googleapis.com/v13/customers/1112223333/offlineUserDataJobs", + "endpoint": "https://googleads.googleapis.com/v14/customers/1112223333/offlineUserDataJobs", "headers": { "Authorization": "Bearer abcd1234", "Content-Type": "application/json", @@ -145,7 +145,7 @@ "version": "1", "type": "REST", "method": "POST", - "endpoint": "https://googleads.googleapis.com/v13/customers/customerid/offlineUserDataJobs", + "endpoint": "https://googleads.googleapis.com/v14/customers/customerid/offlineUserDataJobs", "headers": { "Authorization": "Bearer abcd1234", "Content-Type": "application/json", @@ -215,7 +215,7 @@ "version": "1", "type": "REST", "method": "POST", - "endpoint": "https://googleads.googleapis.com/v13/customers/1234567890:uploadClickConversions", + "endpoint": "https://googleads.googleapis.com/v14/customers/1234567890:uploadClickConversions", "headers": { "Authorization": "Bearer abcd1234", "Content-Type": "application/json", @@ -320,7 +320,7 @@ "version": "1", "type": "REST", "method": "POST", - "endpoint": "https://googleads.googleapis.com/v13/customers/1234567891:uploadClickConversions", + "endpoint": "https://googleads.googleapis.com/v14/customers/1234567891:uploadClickConversions", "headers": { "Authorization": "Bearer abcd1234", "Content-Type": "application/json", @@ -425,7 +425,7 @@ "version": "1", "type": "REST", "method": "POST", - "endpoint": "https://googleads.googleapis.com/v13/customers/1234567891:uploadClickConversions", + "endpoint": "https://googleads.googleapis.com/v14/customers/1234567891:uploadClickConversions", "headers": { "Authorization": "Bearer abcd1234", "Content-Type": "application/json", diff --git a/test/__tests__/data/google_adwords_offline_conversions_proxy_output.json b/test/__tests__/data/google_adwords_offline_conversions_proxy_output.json index 2bdcaeea49..e6d298956f 100644 --- a/test/__tests__/data/google_adwords_offline_conversions_proxy_output.json +++ b/test/__tests__/data/google_adwords_offline_conversions_proxy_output.json @@ -8,7 +8,7 @@ "code": 400, "details": [ { - "@type": "type.googleapis.com/google.ads.googleads.v13.errors.GoogleAdsFailure", + "@type": "type.googleapis.com/google.ads.googleads.v14.errors.GoogleAdsFailure", "errors": [ { "errorCode": { diff --git a/test/__tests__/data/google_adwords_offline_conversions_router_output.json b/test/__tests__/data/google_adwords_offline_conversions_router_output.json index 87c4b671f7..16b07233e3 100644 --- a/test/__tests__/data/google_adwords_offline_conversions_router_output.json +++ b/test/__tests__/data/google_adwords_offline_conversions_router_output.json @@ -4,7 +4,7 @@ "version": "1", "type": "REST", "method": "POST", - "endpoint": "https://googleads.googleapis.com/v13/customers/7693729833/offlineUserDataJobs", + "endpoint": "https://googleads.googleapis.com/v14/customers/7693729833/offlineUserDataJobs", "headers": { "Authorization": "Bearer abcd1234", "Content-Type": "application/json", @@ -130,7 +130,7 @@ "version": "1", "type": "REST", "method": "POST", - "endpoint": "https://googleads.googleapis.com/v13/customers/9625812972:uploadClickConversions", + "endpoint": "https://googleads.googleapis.com/v14/customers/9625812972:uploadClickConversions", "headers": { "Authorization": "Bearer abcd1234", "Content-Type": "application/json", @@ -259,7 +259,7 @@ "version": "1", "type": "REST", "method": "POST", - "endpoint": "https://googleads.googleapis.com/v13/customers/9625812972:uploadCallConversions", + "endpoint": "https://googleads.googleapis.com/v14/customers/9625812972:uploadCallConversions", "headers": { "Authorization": "Bearer abcd1234", "Content-Type": "application/json", @@ -367,7 +367,7 @@ "version": "1", "type": "REST", "method": "POST", - "endpoint": "https://googleads.googleapis.com/v13/customers/7693729833:uploadCallConversions", + "endpoint": "https://googleads.googleapis.com/v14/customers/7693729833:uploadCallConversions", "headers": { "Authorization": "Bearer abcd1234", "Content-Type": "application/json", diff --git a/test/__tests__/data/google_adwords_remarketing_lists_output.json b/test/__tests__/data/google_adwords_remarketing_lists_output.json index 8c938bc3d3..2a6d04bea1 100644 --- a/test/__tests__/data/google_adwords_remarketing_lists_output.json +++ b/test/__tests__/data/google_adwords_remarketing_lists_output.json @@ -4,7 +4,7 @@ "version": "1", "type": "REST", "method": "POST", - "endpoint": "https://googleads.googleapis.com/v13/customers/7693729833/offlineUserDataJobs", + "endpoint": "https://googleads.googleapis.com/v14/customers/7693729833/offlineUserDataJobs", "headers": { "Authorization": "Bearer dummy-access", "Content-Type": "application/json", @@ -52,7 +52,7 @@ "version": "1", "type": "REST", "method": "POST", - "endpoint": "https://googleads.googleapis.com/v13/customers/7693729833/offlineUserDataJobs", + "endpoint": "https://googleads.googleapis.com/v14/customers/7693729833/offlineUserDataJobs", "headers": { "Authorization": "Bearer dummy-access", "Content-Type": "application/json", @@ -90,7 +90,7 @@ "version": "1", "type": "REST", "method": "POST", - "endpoint": "https://googleads.googleapis.com/v13/customers/7693729833/offlineUserDataJobs", + "endpoint": "https://googleads.googleapis.com/v14/customers/7693729833/offlineUserDataJobs", "headers": { "Authorization": "Bearer dummy-access", "Content-Type": "application/json", @@ -197,7 +197,7 @@ "version": "1", "type": "REST", "method": "POST", - "endpoint": "https://googleads.googleapis.com/v13/customers/7693729833/offlineUserDataJobs", + "endpoint": "https://googleads.googleapis.com/v14/customers/7693729833/offlineUserDataJobs", "headers": { "Authorization": "Bearer dummy-access", "Content-Type": "application/json", @@ -1219,7 +1219,7 @@ "version": "1", "type": "REST", "method": "POST", - "endpoint": "https://googleads.googleapis.com/v13/customers/7693729833/offlineUserDataJobs", + "endpoint": "https://googleads.googleapis.com/v14/customers/7693729833/offlineUserDataJobs", "headers": { "Authorization": "Bearer dummy-access", "Content-Type": "application/json", @@ -1278,7 +1278,7 @@ "version": "1", "type": "REST", "method": "POST", - "endpoint": "https://googleads.googleapis.com/v13/customers/7693729833/offlineUserDataJobs", + "endpoint": "https://googleads.googleapis.com/v14/customers/7693729833/offlineUserDataJobs", "headers": { "Authorization": "Bearer dummy-access", "Content-Type": "application/json", @@ -1339,7 +1339,7 @@ "version": "1", "type": "REST", "method": "POST", - "endpoint": "https://googleads.googleapis.com/v13/customers/7693729833/offlineUserDataJobs", + "endpoint": "https://googleads.googleapis.com/v14/customers/7693729833/offlineUserDataJobs", "headers": { "Authorization": "Bearer dummy-access", "Content-Type": "application/json", @@ -2359,7 +2359,7 @@ "version": "1", "type": "REST", "method": "POST", - "endpoint": "https://googleads.googleapis.com/v13/customers/7693729833/offlineUserDataJobs", + "endpoint": "https://googleads.googleapis.com/v14/customers/7693729833/offlineUserDataJobs", "headers": { "Authorization": "Bearer dummy-access", "Content-Type": "application/json", @@ -3381,7 +3381,7 @@ "version": "1", "type": "REST", "method": "POST", - "endpoint": "https://googleads.googleapis.com/v13/customers/7693729833/offlineUserDataJobs", + "endpoint": "https://googleads.googleapis.com/v14/customers/7693729833/offlineUserDataJobs", "headers": { "Authorization": "Bearer dummy-access", "Content-Type": "application/json", @@ -3458,7 +3458,7 @@ "version": "1", "type": "REST", "method": "POST", - "endpoint": "https://googleads.googleapis.com/v13/customers/7693729833/offlineUserDataJobs", + "endpoint": "https://googleads.googleapis.com/v14/customers/7693729833/offlineUserDataJobs", "headers": { "Authorization": "Bearer dummy-access", "Content-Type": "application/json", @@ -4478,7 +4478,7 @@ "version": "1", "type": "REST", "method": "POST", - "endpoint": "https://googleads.googleapis.com/v13/customers/7693729833/offlineUserDataJobs", + "endpoint": "https://googleads.googleapis.com/v14/customers/7693729833/offlineUserDataJobs", "headers": { "Authorization": "Bearer dummy-access", "Content-Type": "application/json", @@ -5500,7 +5500,7 @@ "version": "1", "type": "REST", "method": "POST", - "endpoint": "https://googleads.googleapis.com/v13/customers/7693729833/offlineUserDataJobs", + "endpoint": "https://googleads.googleapis.com/v14/customers/7693729833/offlineUserDataJobs", "headers": { "Authorization": "Bearer dummy-access", "Content-Type": "application/json", @@ -5559,7 +5559,7 @@ "version": "1", "type": "REST", "method": "POST", - "endpoint": "https://googleads.googleapis.com/v13/customers/7693729833/offlineUserDataJobs", + "endpoint": "https://googleads.googleapis.com/v14/customers/7693729833/offlineUserDataJobs", "headers": { "Authorization": "Bearer dummy-access", "Content-Type": "application/json", @@ -5620,7 +5620,7 @@ "version": "1", "type": "REST", "method": "POST", - "endpoint": "https://googleads.googleapis.com/v13/customers/7693729833/offlineUserDataJobs", + "endpoint": "https://googleads.googleapis.com/v14/customers/7693729833/offlineUserDataJobs", "headers": { "Authorization": "Bearer dummy-access", "Content-Type": "application/json", @@ -5678,7 +5678,7 @@ "version": "1", "type": "REST", "method": "POST", - "endpoint": "https://googleads.googleapis.com/v13/customers/7693729833/offlineUserDataJobs", + "endpoint": "https://googleads.googleapis.com/v14/customers/7693729833/offlineUserDataJobs", "headers": { "Authorization": "Bearer dummy-access", "Content-Type": "application/json", @@ -5735,7 +5735,7 @@ "version": "1", "type": "REST", "method": "POST", - "endpoint": "https://googleads.googleapis.com/v13/customers/7693729833/offlineUserDataJobs", + "endpoint": "https://googleads.googleapis.com/v14/customers/7693729833/offlineUserDataJobs", "headers": { "Authorization": "Bearer dummy-access", "Content-Type": "application/json", @@ -5791,7 +5791,7 @@ "version": "1", "type": "REST", "method": "POST", - "endpoint": "https://googleads.googleapis.com/v13/customers/7693729833/offlineUserDataJobs", + "endpoint": "https://googleads.googleapis.com/v14/customers/7693729833/offlineUserDataJobs", "headers": { "Authorization": "Bearer dummy-access", "Content-Type": "application/json", @@ -5835,7 +5835,7 @@ "version": "1", "type": "REST", "method": "POST", - "endpoint": "https://googleads.googleapis.com/v13/customers/7693729833/offlineUserDataJobs", + "endpoint": "https://googleads.googleapis.com/v14/customers/7693729833/offlineUserDataJobs", "headers": { "Authorization": "Bearer dummy-access", "Content-Type": "application/json", @@ -5877,7 +5877,7 @@ "version": "1", "type": "REST", "method": "POST", - "endpoint": "https://googleads.googleapis.com/v13/customers/7693729833/offlineUserDataJobs", + "endpoint": "https://googleads.googleapis.com/v14/customers/7693729833/offlineUserDataJobs", "headers": { "Authorization": "Bearer dummy-access", "Content-Type": "application/json", diff --git a/test/__tests__/data/google_adwords_remarketing_lists_proxy_input.json b/test/__tests__/data/google_adwords_remarketing_lists_proxy_input.json index d9745e9f65..3cd282ec2a 100644 --- a/test/__tests__/data/google_adwords_remarketing_lists_proxy_input.json +++ b/test/__tests__/data/google_adwords_remarketing_lists_proxy_input.json @@ -3,7 +3,7 @@ "version": "1", "type": "REST", "method": "POST", - "endpoint": "https://googleads.googleapis.com/v13/customers/7693729833/offlineUserDataJobs", + "endpoint": "https://googleads.googleapis.com/v14/customers/7693729833/offlineUserDataJobs", "headers": { "Authorization": "Bearer dummy-access", "Content-Type": "application/json", @@ -53,7 +53,7 @@ "version": "1", "type": "REST", "method": "POST", - "endpoint": "https://googleads.googleapis.com/v13/customers/7693729834/offlineUserDataJobs", + "endpoint": "https://googleads.googleapis.com/v14/customers/7693729834/offlineUserDataJobs", "headers": { "Authorization": "Bearer dummy-access", "Content-Type": "application/json", @@ -89,7 +89,7 @@ "version": "1", "type": "REST", "method": "POST", - "endpoint": "https://googleads.googleapis.com/v13/customers/7693729833/offlineUserDataJobs", + "endpoint": "https://googleads.googleapis.com/v14/customers/7693729833/offlineUserDataJobs", "headers": { "Authorization": "Bearer dummy-access", "Content-Type": "application/json", diff --git a/test/__tests__/data/google_adwords_remarketing_lists_router_output.json b/test/__tests__/data/google_adwords_remarketing_lists_router_output.json index 0b5d5265f9..ff6755237f 100644 --- a/test/__tests__/data/google_adwords_remarketing_lists_router_output.json +++ b/test/__tests__/data/google_adwords_remarketing_lists_router_output.json @@ -5,7 +5,7 @@ "version": "1", "type": "REST", "method": "POST", - "endpoint": "https://googleads.googleapis.com/v13/customers/7693729833/offlineUserDataJobs", + "endpoint": "https://googleads.googleapis.com/v14/customers/7693729833/offlineUserDataJobs", "headers": { "Authorization": "Bearer abcd1234", "Content-Type": "application/json", @@ -76,7 +76,7 @@ "version": "1", "type": "REST", "method": "POST", - "endpoint": "https://googleads.googleapis.com/v13/customers/7693729833/offlineUserDataJobs", + "endpoint": "https://googleads.googleapis.com/v14/customers/7693729833/offlineUserDataJobs", "headers": { "Authorization": "Bearer abcd1234", "Content-Type": "application/json", @@ -136,7 +136,7 @@ "version": "1", "type": "REST", "method": "POST", - "endpoint": "https://googleads.googleapis.com/v13/customers/7693729833/offlineUserDataJobs", + "endpoint": "https://googleads.googleapis.com/v14/customers/7693729833/offlineUserDataJobs", "headers": { "Authorization": "Bearer abcd1234", "Content-Type": "application/json", @@ -207,7 +207,7 @@ "version": "1", "type": "REST", "method": "POST", - "endpoint": "https://googleads.googleapis.com/v13/customers/7693729833/offlineUserDataJobs", + "endpoint": "https://googleads.googleapis.com/v14/customers/7693729833/offlineUserDataJobs", "headers": { "Authorization": "Bearer abcd1234", "Content-Type": "application/json", @@ -250,7 +250,7 @@ "version": "1", "type": "REST", "method": "POST", - "endpoint": "https://googleads.googleapis.com/v13/customers/7693729833/offlineUserDataJobs", + "endpoint": "https://googleads.googleapis.com/v14/customers/7693729833/offlineUserDataJobs", "headers": { "Authorization": "Bearer abcd1234", "Content-Type": "application/json", diff --git a/test/__tests__/google_adwords_offline_conversions.test.js b/test/__tests__/google_adwords_offline_conversions.test.js index d1edec7b58..b08b6de968 100644 --- a/test/__tests__/google_adwords_offline_conversions.test.js +++ b/test/__tests__/google_adwords_offline_conversions.test.js @@ -45,7 +45,7 @@ axios.mockImplementation(async config => { // httpSend() -> inside ProxyRequest for google_adwords_offline if ( config.url.includes( - "https://googleads.googleapis.com/v13/customers/1234567891:uploadClickConversions" + "https://googleads.googleapis.com/v14/customers/1234567891:uploadClickConversions" ) ) { return { @@ -74,7 +74,7 @@ axios.post = jest.fn(async (url, data, reqConfig) => { // This mocking is for calls that make use of httpPOST() if ( url.includes( - "https://googleads.googleapis.com/v13/customers/1234567891/googleAds:searchStream" + "https://googleads.googleapis.com/v14/customers/1234567891/googleAds:searchStream" ) ) { // this is for true case @@ -126,7 +126,7 @@ axios.post = jest.fn(async (url, data, reqConfig) => { } } else if ( url.includes( - "https://googleads.googleapis.com/v13/customers/1234567890/googleAds:searchStream" + "https://googleads.googleapis.com/v14/customers/1234567890/googleAds:searchStream" ) ) { // this case is for refresh token expire @@ -145,12 +145,12 @@ axios.post = jest.fn(async (url, data, reqConfig) => { }; } else if ( url.includes( - "https://googleads.googleapis.com/v13/customers/1112223333/googleAds:searchStream" + "https://googleads.googleapis.com/v14/customers/1112223333/googleAds:searchStream" ) || url.includes( - "https://googleads.googleapis.com/v13/customers/111-222-3333/googleAds:searchStream" + "https://googleads.googleapis.com/v14/customers/111-222-3333/googleAds:searchStream" ) || url.includes( - "https://googleads.googleapis.com/v13/customers/customer-id/googleAds:searchStream" + "https://googleads.googleapis.com/v14/customers/customer-id/googleAds:searchStream" ) ) { // this is for store case From e1a60f2a2f64d2288e3086f4c99b18c36f41be82 Mon Sep 17 00:00:00 2001 From: Utsab Chowdhury Date: Thu, 14 Sep 2023 15:20:33 +0530 Subject: [PATCH 21/37] fix: pyroscope endpoints (#2613) --- src/controllers/misc.ts | 18 +++++++++++++++ src/index.ts | 7 +++--- src/middleware.js | 51 ++++++++++------------------------------- src/routes/misc.ts | 2 ++ src/services/misc.ts | 11 ++++++++- 5 files changed, 46 insertions(+), 43 deletions(-) diff --git a/src/controllers/misc.ts b/src/controllers/misc.ts index eff0eee244..92ec33f80f 100644 --- a/src/controllers/misc.ts +++ b/src/controllers/misc.ts @@ -25,4 +25,22 @@ export default class MiscController { ctx.status = 200; return ctx; } + + public static async getCPUProfile(ctx: Context) { + const { seconds } = ctx.query; + let secondsData = 10; + // if seconds is not null and is not array then parseInt + if (seconds && !Array.isArray(seconds)) { + secondsData = parseInt(seconds, 10); + } + ctx.body = await MiscService.getCPUProfile(secondsData); + ctx.status = 200; + return ctx; + } + + public static async getHeapProfile(ctx: Context) { + ctx.body = await MiscService.getHeapProfile(); + ctx.status = 200; + return ctx; + } } diff --git a/src/index.ts b/src/index.ts index a928c8c3c5..d1cc95cc36 100644 --- a/src/index.ts +++ b/src/index.ts @@ -7,7 +7,7 @@ import cluster from './util/cluster'; import { router } from './legacy/router'; import { testRouter } from './testRouter'; import { metricsRouter } from './routes/metricsRouter'; -import { addStatMiddleware, addRequestSizeMiddleware, addPyroscopeMiddleware } from './middleware'; +import { addStatMiddleware, addRequestSizeMiddleware, initPyroscope } from './middleware'; import { logProcessInfo } from './util/utils'; import { applicationRoutes, addSwaggerRoutes } from './routes'; import { RedisDB } from './util/redis/redisConnector'; @@ -15,9 +15,11 @@ import { RedisDB } from './util/redis/redisConnector'; dotenv.config(); const clusterEnabled = process.env.CLUSTER_ENABLED !== 'false'; const useUpdatedRoutes = process.env.ENABLE_NEW_ROUTES !== 'false'; -const port = parseInt(process.env.PORT || '9090', 10); +const port = parseInt(process.env.PORT ?? '9090', 10); const metricsPort = parseInt(process.env.METRICS_PORT || '9091', 10); +initPyroscope(); + const app = new Koa(); addStatMiddleware(app); @@ -30,7 +32,6 @@ app.use( jsonLimit: '200mb', }), ); -addPyroscopeMiddleware(app); addRequestSizeMiddleware(app); addSwaggerRoutes(app); diff --git a/src/middleware.js b/src/middleware.js index b8f6a2ac1b..53aabc90e3 100644 --- a/src/middleware.js +++ b/src/middleware.js @@ -1,48 +1,19 @@ const Pyroscope = require('@pyroscope/nodejs'); const stats = require('./util/stats'); -const logger = require('./logger'); -Pyroscope.init({ - appName: 'rudder-transformer', -}); - -async function handlerCpu(ctx) { - try { - const p = await Pyroscope.collectCpu(Number(ctx.query.seconds)); - ctx.body = p; - ctx.status = 200; - } catch (e) { - logger.error(e); - ctx.status = 500; - } -} - -async function handlerHeap(ctx) { - try { - const p = await Pyroscope.collectHeap(); - ctx.body = p; - ctx.status = 200; - } catch (e) { - logger.error(e); - ctx.status = 500; - } +function initPyroscope() { + Pyroscope.init({ + appName: 'rudder-transformer', + }); + Pyroscope.startHeapCollecting(); } -function pyroscopeMiddleware() { - Pyroscope.startHeapCollecting(); - return (ctx, next) => { - if (ctx.method === 'GET' && ctx.path === '/debug/pprof/profile') { - return handlerCpu(ctx).then(() => next()); - } - if (ctx.method === 'GET' && ctx.path === '/debug/pprof/heap') { - return handlerHeap(ctx).then(() => next()); - } - return next(); - }; +function getCPUProfile(seconds) { + return Pyroscope.collectCpu(seconds); } -function addPyroscopeMiddleware(app) { - app.use(pyroscopeMiddleware()); +function getHeapProfile() { + return Pyroscope.collectHeap(); } function durationMiddleware() { @@ -90,5 +61,7 @@ function addRequestSizeMiddleware(app) { module.exports = { addStatMiddleware, addRequestSizeMiddleware, - addPyroscopeMiddleware, + getHeapProfile, + getCPUProfile, + initPyroscope, }; diff --git a/src/routes/misc.ts b/src/routes/misc.ts index 12ee09b8a9..3e30b9dd39 100644 --- a/src/routes/misc.ts +++ b/src/routes/misc.ts @@ -10,5 +10,7 @@ router.get('/transformerBuildVersion', MiscController.buildVersion); // depricia router.get('/buildVersion', MiscController.buildVersion); router.get('/version', MiscController.version); router.get('/features', MiscController.features); +router.get('/debug/pprof/profile', MiscController.getCPUProfile); +router.get('/debug/pprof/heap', MiscController.getHeapProfile); export const miscRoutes = router.routes(); diff --git a/src/services/misc.ts b/src/services/misc.ts index 6508ced809..2805f58584 100644 --- a/src/services/misc.ts +++ b/src/services/misc.ts @@ -3,6 +3,7 @@ import path from 'path'; import { Context } from 'koa'; import { DestHandlerMap } from '../constants/destinationCanonicalNames'; import { Metadata } from '../types'; +import { getCPUProfile, getHeapProfile, } from '../middleware'; export default class MiscService { public static getDestHandler(dest: string, version: string) { @@ -32,7 +33,7 @@ export default class MiscService { public static getMetaTags(metadata: Metadata) { if (!metadata) { - return {} + return {}; } return { sourceType: metadata.sourceType, @@ -62,4 +63,12 @@ export default class MiscService { const obj = JSON.parse(fs.readFileSync(path.resolve(__dirname, '../features.json'), 'utf8')); return JSON.stringify(obj); } + + public static async getCPUProfile(seconds: number) { + return getCPUProfile(seconds); + } + + public static async getHeapProfile() { + return getHeapProfile() + } } From f0fe7eb6da5a41379ffc98730088e2ccbb9e840f Mon Sep 17 00:00:00 2001 From: lokey Date: Thu, 14 Sep 2023 17:20:57 +0530 Subject: [PATCH 22/37] chore: run build docker image action on self hosted runners (#2534) --- .github/workflows/build-pr-artifacts.yml | 4 +- .github/workflows/build-push-docker-image.yml | 90 ++++++++++++++++--- .github/workflows/prepare-for-dev-deploy.yml | 4 +- 3 files changed, 83 insertions(+), 15 deletions(-) diff --git a/.github/workflows/build-pr-artifacts.yml b/.github/workflows/build-pr-artifacts.yml index b0187beb85..022afcd9f4 100644 --- a/.github/workflows/build-pr-artifacts.yml +++ b/.github/workflows/build-pr-artifacts.yml @@ -43,7 +43,7 @@ jobs: uses: ./.github/workflows/build-push-docker-image.yml with: build_tag: rudderstack/develop-rudder-transformer:${{ needs.generate-tag-names.outputs.tag_name }} - push_tags: rudderstack/develop-rudder-transformer:${{ needs.generate-tag-names.outputs.tag_name }},rudderlabs/develop-rudder-transformer:${{ needs.generate-tag-names.outputs.tag_name }} + push_tags: rudderstack/develop-rudder-transformer:${{ needs.generate-tag-names.outputs.tag_name }} img_tag: ${{ needs.generate-tag-names.outputs.tag_name }} dockerfile: Dockerfile load_target: development @@ -59,7 +59,7 @@ jobs: uses: ./.github/workflows/build-push-docker-image.yml with: build_tag: rudderstack/develop-rudder-transformer:${{ needs.generate-tag-names.outputs.tag_name_ut }} - push_tags: rudderstack/develop-rudder-transformer:${{ needs.generate-tag-names.outputs.tag_name_ut }},rudderlabs/develop-rudder-transformer:${{ needs.generate-tag-names.outputs.tag_name_ut }} + push_tags: rudderstack/develop-rudder-transformer:${{ needs.generate-tag-names.outputs.tag_name_ut }} img_tag: ${{ needs.generate-tag-names.outputs.tag_name_ut }} dockerfile: Dockerfile-ut-func load_target: development diff --git a/.github/workflows/build-push-docker-image.yml b/.github/workflows/build-push-docker-image.yml index 7e36beba76..f65aa0c8ce 100644 --- a/.github/workflows/build-push-docker-image.yml +++ b/.github/workflows/build-push-docker-image.yml @@ -29,9 +29,9 @@ env: DOCKERHUB_USERNAME: rudderlabs jobs: - build-transformer-image: - name: Build Transformer Docker Image - runs-on: ubuntu-latest + build-transformer-image-arm64: + name: Build Transformer Docker Image ARM64 + runs-on: [self-hosted, Linux, ARM64] steps: - name: Checkout uses: actions/checkout@v3.5.3 @@ -55,12 +55,12 @@ jobs: target: ${{ inputs.load_target }} load: true tags: ${{ inputs.build_tag }} - cache-from: type=gha - cache-to: type=gha,mode=max + # cache-from: type=gha + # cache-to: type=gha,mode=max - name: Run Tests run: | - docker run ${{ inputs.build_tag }} npm run test:js:ci + docker run ${{ inputs.build_tag }} npm run test:js:ci docker run ${{ inputs.build_tag }} npm run test:ts:ci - name: Build and Push Multi-platform Images @@ -70,12 +70,80 @@ jobs: file: ${{ inputs.dockerfile }} target: ${{ inputs.push_target }} push: true - tags: ${{ inputs.push_tags }} + tags: ${{ inputs.push_tags }}-arm64 platforms: | - linux/amd64 linux/arm64 build-args: | - version=${{ inputs.img_tag }} + version=${{ inputs.img_tag }}-arm64 GIT_COMMIT_SHA=${{ github.sha }} - cache-from: type=gha - cache-to: type=gha,mode=max + # cache-from: type=gha + # cache-to: type=gha,mode=max + + build-transformer-image-amd64: + name: Build Transformer Docker Image AMD64 + runs-on: [self-hosted, Linux, X64] + steps: + - name: Checkout + uses: actions/checkout@v3.5.3 + with: + fetch-depth: 1 + + - name: Setup Docker Buildx + uses: docker/setup-buildx-action@v2.9.1 + + - name: Login to DockerHub + uses: docker/login-action@v2.1.0 + with: + username: ${{ env.DOCKERHUB_USERNAME }} + password: ${{ secrets.DOCKERHUB_PROD_TOKEN }} + + - name: Build Docker Image + uses: docker/build-push-action@v4.1.1 + with: + context: . + file: ${{ inputs.dockerfile }} + target: ${{ inputs.load_target }} + load: true + tags: ${{ inputs.build_tag }} + # cache-from: type=gha + # cache-to: type=gha,mode=max + + - name: Run Tests + run: | + docker run ${{ inputs.build_tag }} npm run test:js:ci + docker run ${{ inputs.build_tag }} npm run test:ts:ci + + - name: Build and Push Multi-platform Images + uses: docker/build-push-action@v4.1.1 + with: + context: . + file: ${{ inputs.dockerfile }} + target: ${{ inputs.push_target }} + push: true + tags: ${{ inputs.push_tags }}-amd64 + platforms: | + linux/amd64 + build-args: | + version=${{ inputs.img_tag }}-amd64 + GIT_COMMIT_SHA=${{ github.sha }} + # cache-from: type=gha + # cache-to: type=gha,mode=max + + create-manifest: + name: Create multi-arch manifest + runs-on: ubuntu-latest + needs: [build-transformer-image-amd64, build-transformer-image-arm64] + + steps: + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v2.9.1 + + - name: Login to DockerHub + uses: docker/login-action@v2.1.0 + with: + username: ${{ env.DOCKERHUB_USERNAME }} + password: ${{ secrets.DOCKERHUB_PROD_TOKEN }} + + - name: Create multi-arch manifest + run: | + docker buildx imagetools create -t ${{ inputs.push_tags }} ${{ inputs.push_tags }}-amd64 ${{ inputs.push_tags }}-arm64 diff --git a/.github/workflows/prepare-for-dev-deploy.yml b/.github/workflows/prepare-for-dev-deploy.yml index 636ba5a6d8..d45f760c66 100644 --- a/.github/workflows/prepare-for-dev-deploy.yml +++ b/.github/workflows/prepare-for-dev-deploy.yml @@ -51,7 +51,7 @@ jobs: uses: ./.github/workflows/build-push-docker-image.yml with: build_tag: rudderstack/develop-rudder-transformer:${{ needs.generate-tag-names.outputs.tag_name }} - push_tags: rudderstack/develop-rudder-transformer:${{ needs.generate-tag-names.outputs.tag_name }},rudderlabs/develop-rudder-transformer:${{ needs.generate-tag-names.outputs.tag_name }} + push_tags: rudderstack/develop-rudder-transformer:${{ needs.generate-tag-names.outputs.tag_name }} img_tag: ${{ needs.generate-tag-names.outputs.tag_name }} dockerfile: Dockerfile load_target: development @@ -67,7 +67,7 @@ jobs: uses: ./.github/workflows/build-push-docker-image.yml with: build_tag: rudderstack/develop-rudder-transformer:${{ needs.generate-tag-names.outputs.tag_name_ut }} - push_tags: rudderstack/develop-rudder-transformer:${{ needs.generate-tag-names.outputs.tag_name_ut }},rudderlabs/develop-rudder-transformer:${{ needs.generate-tag-names.outputs.tag_name_ut }} + push_tags: rudderstack/develop-rudder-transformer:${{ needs.generate-tag-names.outputs.tag_name_ut }} img_tag: ${{ needs.generate-tag-names.outputs.tag_name_ut }} dockerfile: Dockerfile-ut-func load_target: development From b9f0bbc017ec346add4c97ce3625203afba4e9bc Mon Sep 17 00:00:00 2001 From: Dilip Kola <33080863+koladilip@users.noreply.github.com> Date: Thu, 14 Sep 2023 18:39:28 +0530 Subject: [PATCH 23/37] chore: update workflow engine npm pkg name (#2610) * chore: update workflow engine npm pkg name * fix: workflow engine version in package-lock.json --- package-lock.json | 118 +++++++++++++++++++++++++++--------------- package.json | 2 +- src/cdk/v2/handler.ts | 2 +- src/cdk/v2/utils.ts | 6 ++- 4 files changed, 82 insertions(+), 46 deletions(-) diff --git a/package-lock.json b/package-lock.json index 3095613cb7..0ee369512f 100644 --- a/package-lock.json +++ b/package-lock.json @@ -19,6 +19,7 @@ "@koa/router": "^12.0.0", "@ndhoule/extend": "^2.0.0", "@pyroscope/nodejs": "^0.2.6", + "@rudderstack/workflow-engine": "^0.5.7", "ajv": "^8.12.0", "ajv-draft-04": "^1.0.0", "ajv-formats": "^2.1.1", @@ -58,7 +59,6 @@ "prom-client": "^14.2.0", "qs": "^6.11.1", "rudder-transformer-cdk": "^1.4.11", - "rudder-workflow-engine": "^0.4.7", "set-value": "^4.1.0", "sha256": "^0.2.0", "stacktrace-parser": "^0.1.10", @@ -6216,6 +6216,49 @@ "node": ">= 8" } }, + "node_modules/@rudderstack/json-template-engine": { + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/@rudderstack/json-template-engine/-/json-template-engine-0.5.5.tgz", + "integrity": "sha512-p3HdTqgZiJjjZmjaHN2paa1e87ifGE5UjkA4zdvge4bBzJbKKMQNWqRg6I96SwoA+hsxNkW/f9R83SPLU9t7LA==" + }, + "node_modules/@rudderstack/workflow-engine": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/@rudderstack/workflow-engine/-/workflow-engine-0.5.7.tgz", + "integrity": "sha512-qR4eSiSFgYdOMtldR0rJ5kLGiTfnyufDfkMHNXFybxPb3jpjxBEGapj2lRiiTiRPgSUef7vuKyJ8BzY/VR4noA==", + "dependencies": { + "@aws-crypto/sha256-js": "^4.0.0", + "@rudderstack/json-template-engine": "^0.5.5", + "js-yaml": "^4.1.0", + "jsonata": "^2.0.3", + "lodash": "^4.17.21", + "object-sizeof": "^2.6.3" + } + }, + "node_modules/@rudderstack/workflow-engine/node_modules/@aws-crypto/sha256-js": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/sha256-js/-/sha256-js-4.0.0.tgz", + "integrity": "sha512-MHGJyjE7TX9aaqXj7zk2ppnFUOhaDs5sP+HtNS0evOxn72c+5njUmyJmpGd7TfyoDznZlHMmdo/xGUdu2NIjNQ==", + "dependencies": { + "@aws-crypto/util": "^4.0.0", + "@aws-sdk/types": "^3.222.0", + "tslib": "^1.11.1" + } + }, + "node_modules/@rudderstack/workflow-engine/node_modules/@aws-crypto/util": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/util/-/util-4.0.0.tgz", + "integrity": "sha512-2EnmPy2gsFZ6m8bwUQN4jq+IyXV3quHAcwPOS6ZA3k+geujiqI8aRokO2kFJe+idJ/P3v4qWI186rVMo0+zLDQ==", + "dependencies": { + "@aws-sdk/types": "^3.222.0", + "@aws-sdk/util-utf8-browser": "^3.0.0", + "tslib": "^1.11.1" + } + }, + "node_modules/@rudderstack/workflow-engine/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + }, "node_modules/@sideway/address": { "version": "4.1.4", "resolved": "https://registry.npmjs.org/@sideway/address/-/address-4.1.4.tgz", @@ -16850,6 +16893,37 @@ "node": ">= 0.4" } }, + "node_modules/object-sizeof": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/object-sizeof/-/object-sizeof-2.6.3.tgz", + "integrity": "sha512-GNkVRrLh11Qr5BGr73dwwPE200/78QG2rbx30cnXPnMvt7UuttH4Dup5t+LtcQhARkg8Hbr0c8Kiz52+CFxYmw==", + "dependencies": { + "buffer": "^6.0.3" + } + }, + "node_modules/object-sizeof/node_modules/buffer": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", + "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.2.1" + } + }, "node_modules/object.assign": { "version": "4.1.4", "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.4.tgz", @@ -18508,11 +18582,6 @@ "node": ">=12.0" } }, - "node_modules/rudder-json-template-engine": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/rudder-json-template-engine/-/rudder-json-template-engine-0.5.1.tgz", - "integrity": "sha512-D8zCcTXbhbFd2EhDmmgZKxw5uky6+DfikV/EW8I8HWdutMiyzdxgVMyH1dPo3feLgj3/0g2WNO9t4iPaegw4PQ==" - }, "node_modules/rudder-transformer-cdk": { "version": "1.4.11", "resolved": "https://registry.npmjs.org/rudder-transformer-cdk/-/rudder-transformer-cdk-1.4.11.tgz", @@ -18530,43 +18599,6 @@ "winston": "^3.8.1" } }, - "node_modules/rudder-workflow-engine": { - "version": "0.4.7", - "resolved": "https://registry.npmjs.org/rudder-workflow-engine/-/rudder-workflow-engine-0.4.7.tgz", - "integrity": "sha512-USJ/h4XGxtUmAhaTJgtz1MrICpiju6GTubaFyPS+5hgpjdIsZx/iOOishjrNcOrwHvxcfblccA8wv5JTC8eSpg==", - "dependencies": { - "@aws-crypto/sha256-js": "^4.0.0", - "js-yaml": "^4.1.0", - "jsonata": "^2.0.3", - "lodash": "^4.17.21", - "rudder-json-template-engine": "^0.5.1" - } - }, - "node_modules/rudder-workflow-engine/node_modules/@aws-crypto/sha256-js": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@aws-crypto/sha256-js/-/sha256-js-4.0.0.tgz", - "integrity": "sha512-MHGJyjE7TX9aaqXj7zk2ppnFUOhaDs5sP+HtNS0evOxn72c+5njUmyJmpGd7TfyoDznZlHMmdo/xGUdu2NIjNQ==", - "dependencies": { - "@aws-crypto/util": "^4.0.0", - "@aws-sdk/types": "^3.222.0", - "tslib": "^1.11.1" - } - }, - "node_modules/rudder-workflow-engine/node_modules/@aws-crypto/util": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@aws-crypto/util/-/util-4.0.0.tgz", - "integrity": "sha512-2EnmPy2gsFZ6m8bwUQN4jq+IyXV3quHAcwPOS6ZA3k+geujiqI8aRokO2kFJe+idJ/P3v4qWI186rVMo0+zLDQ==", - "dependencies": { - "@aws-sdk/types": "^3.222.0", - "@aws-sdk/util-utf8-browser": "^3.0.0", - "tslib": "^1.11.1" - } - }, - "node_modules/rudder-workflow-engine/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" - }, "node_modules/run-async": { "version": "2.4.1", "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz", diff --git a/package.json b/package.json index 134b683721..7d5c17c470 100644 --- a/package.json +++ b/package.json @@ -60,6 +60,7 @@ "@koa/router": "^12.0.0", "@ndhoule/extend": "^2.0.0", "@pyroscope/nodejs": "^0.2.6", + "@rudderstack/workflow-engine": "^0.5.7", "ajv": "^8.12.0", "ajv-draft-04": "^1.0.0", "ajv-formats": "^2.1.1", @@ -99,7 +100,6 @@ "prom-client": "^14.2.0", "qs": "^6.11.1", "rudder-transformer-cdk": "^1.4.11", - "rudder-workflow-engine": "^0.4.7", "set-value": "^4.1.0", "sha256": "^0.2.0", "stacktrace-parser": "^0.1.10", diff --git a/src/cdk/v2/handler.ts b/src/cdk/v2/handler.ts index b4da9bc6bf..898e83f7b8 100644 --- a/src/cdk/v2/handler.ts +++ b/src/cdk/v2/handler.ts @@ -4,7 +4,7 @@ import { TemplateType, ExecutionBindings, StepOutput, -} from 'rudder-workflow-engine'; +} from '@rudderstack/workflow-engine'; import tags from '../../v0/util/tags'; diff --git a/src/cdk/v2/utils.ts b/src/cdk/v2/utils.ts index 096e5b7679..9d46f3dace 100644 --- a/src/cdk/v2/utils.ts +++ b/src/cdk/v2/utils.ts @@ -1,6 +1,10 @@ import path from 'path'; import fs from 'fs/promises'; -import { WorkflowExecutionError, WorkflowCreationError, StatusError } from 'rudder-workflow-engine'; +import { + WorkflowExecutionError, + WorkflowCreationError, + StatusError, +} from '@rudderstack/workflow-engine'; import logger from '../../logger'; import { generateErrorObject } from '../../v0/util'; import { PlatformError } from '../../v0/util/errorTypes'; From 8f233c687511b264e90b1ddf75cb92bdbac77e91 Mon Sep 17 00:00:00 2001 From: Debanjan Date: Thu, 14 Sep 2023 18:02:05 +0530 Subject: [PATCH 24/37] fix(redis): add destination_id in the key while preparing the event for profiles<>redis store --- src/v0/destinations/redis/transform.js | 7 ++++--- test/__tests__/data/redis_output.json | 2 +- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/src/v0/destinations/redis/transform.js b/src/v0/destinations/redis/transform.js index f57cadb7e6..124569c8e8 100644 --- a/src/v0/destinations/redis/transform.js +++ b/src/v0/destinations/redis/transform.js @@ -31,9 +31,9 @@ const isSubEventTypeProfiles = (message) => { return sources.profiles_entity && sources.profiles_id_type && sources.profiles_model; }; -const transforrmSubEventTypeProfiles = (message, workspaceId) => { +const transformSubEventTypeProfiles = (message, workspaceId, destinationId) => { // form the hash - const hash = `${workspaceId}:${message.context.sources.profiles_entity}:${message.context.sources.profiles_id_type}:${message.userId}`; + const hash = `${workspaceId}:${destinationId}:${message.context.sources.profiles_entity}:${message.context.sources.profiles_id_type}:${message.userId}`; const key = `${message.context.sources.profiles_model}`; const value = JSON.stringify(message.traits); return { @@ -59,11 +59,12 @@ const process = (event) => { } const { prefix } = destination.Config; + const destinationId = destination.ID; const keyPrefix = isEmpty(prefix) ? '' : `${prefix.trim()}:`; if (isSubEventTypeProfiles(message)) { const { workspaceId } = metadata; - return transforrmSubEventTypeProfiles(message, workspaceId); + return transformSubEventTypeProfiles(message, workspaceId, destinationId); } const hmap = { diff --git a/test/__tests__/data/redis_output.json b/test/__tests__/data/redis_output.json index 57d8387041..69d2aa20c2 100644 --- a/test/__tests__/data/redis_output.json +++ b/test/__tests__/data/redis_output.json @@ -81,7 +81,7 @@ }, { "message": { - "hash": "some-workspace-id:some-entity:some-id-type:some-user-id", + "hash": "some-workspace-id:1WhcOCGgj9asZu850HvugU2C3Aq:some-entity:some-id-type:some-user-id", "key": "some-model", "value": "{\"MODEL_ID\":\"1691755780\",\"VALID_AT\":\"2023-08-11T11:32:44.963062Z\",\"USER_MAIN_ID\":\"rid5530313526204a95efe71d98cd17d5a1\",\"CHURN_SCORE_7_DAYS\":0.027986,\"PERCENTILE_CHURN_SCORE_7_DAYS\":0}" }, From 78294ad368808f481a24a088ce1ab6d5e44a1cb6 Mon Sep 17 00:00:00 2001 From: GitHub Actions Date: Thu, 14 Sep 2023 14:32:24 +0000 Subject: [PATCH 25/37] chore(release): 1.41.1 --- CHANGELOG.md | 7 +++++++ package-lock.json | 4 ++-- package.json | 2 +- 3 files changed, 10 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index fdb53f4527..e66ba72716 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,13 @@ All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines. +### [1.41.1](https://github.com/rudderlabs/rudder-transformer/compare/v1.41.0...v1.41.1) (2023-09-14) + + +### Bug Fixes + +* **redis:** add destination_id in the key ([55629d6](https://github.com/rudderlabs/rudder-transformer/commit/55629d6d871d275de601a11ec223e0c283641d7b)) + ## [1.41.0](https://github.com/rudderlabs/rudder-transformer/compare/v1.40.2...v1.41.0) (2023-09-11) diff --git a/package-lock.json b/package-lock.json index 0ee369512f..3e37fd9d49 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "rudder-transformer", - "version": "1.41.0", + "version": "1.41.1", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "rudder-transformer", - "version": "1.41.0", + "version": "1.41.1", "license": "ISC", "dependencies": { "@amplitude/ua-parser-js": "^0.7.24", diff --git a/package.json b/package.json index 7d5c17c470..264ba226c0 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "rudder-transformer", - "version": "1.41.0", + "version": "1.41.1", "description": "", "homepage": "https://github.com/rudderlabs/rudder-transformer#readme", "bugs": { From 28d402156a6a64c8385683b07099bdaba8ded48a Mon Sep 17 00:00:00 2001 From: Anant Jain <62471433+anantjain45823@users.noreply.github.com> Date: Fri, 15 Sep 2023 09:16:47 +0530 Subject: [PATCH 26/37] chore(INT-631): update redis expiry time (#2609) * chore: update redis expiry time * comment addressed * comment addressed --- sample.env | 1 + src/util/redis/redisConnector.js | 4 ++-- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/sample.env b/sample.env index 02ef06c9c6..71b11fbfca 100644 --- a/sample.env +++ b/sample.env @@ -9,3 +9,4 @@ REDIS_PORT = 6379 REDIS_PASSWORD = 123 REDIS_USERNAME = abc USE_REDIS_DB = true +REDIS_EXPIRY_TIME_IN_SEC = 3600 \ No newline at end of file diff --git a/src/util/redis/redisConnector.js b/src/util/redis/redisConnector.js index 5a61e683b6..749e23ff83 100644 --- a/src/util/redis/redisConnector.js +++ b/src/util/redis/redisConnector.js @@ -32,7 +32,7 @@ const RedisDB = { log.error(`Redis is down at ${this.host}:${this.port}`); return false; // stop retrying }, - tls: {} + tls: {}, }); this.client.on('ready', () => { log.info(`Connected to redis at ${this.host}:${this.port}`); @@ -102,7 +102,7 @@ const RedisDB = { * @param {*} isValJson set to false if value is not a json object * */ - async setVal(key, value, expiryTimeInSec = 60 * 60) { + async setVal(key, value, expiryTimeInSec = process.env.REDIS_EXPIRY_TIME_IN_SEC || 3600) { try { await this.checkAndConnectConnection(); // check if redis is connected and if not, connect if (typeof value === 'object') { From 8716fd09939bfdaa5aeb3c896f115b7025d27ae6 Mon Sep 17 00:00:00 2001 From: Anant Jain <62471433+anantjain45823@users.noreply.github.com> Date: Fri, 15 Sep 2023 10:21:31 +0530 Subject: [PATCH 27/37] fix(INT-523): replaced flag with dropdown for datacenter selection (#2575) added dropdown new option to selct datacenter --- src/v0/destinations/customerio/transform.js | 2 +- test/__tests__/data/customerio_input.json | 526 +++++++++++++++----- 2 files changed, 400 insertions(+), 128 deletions(-) diff --git a/src/v0/destinations/customerio/transform.js b/src/v0/destinations/customerio/transform.js index 1dd5b29973..5f953ee2f0 100644 --- a/src/v0/destinations/customerio/transform.js +++ b/src/v0/destinations/customerio/transform.js @@ -116,7 +116,7 @@ function processSingleMessage(message, destination) { const response = responseBuilder(message, evType, evName, destination, messageType); // replace default domain with EU data center domainc for EU based account - if (destination.Config.datacenterEU) { + if (destination.Config?.datacenter === 'EU' || destination.Config?.datacenterEU) { response.endpoint = response.endpoint.replace('track.customer.io', 'track-eu.customer.io'); } diff --git a/test/__tests__/data/customerio_input.json b/test/__tests__/data/customerio_input.json index 337a1e51e6..ea89411524 100644 --- a/test/__tests__/data/customerio_input.json +++ b/test/__tests__/data/customerio_input.json @@ -15,7 +15,7 @@ }, "destination": { "Config": { - "datacenterEU": false, + "datacenter": "US", "siteID": "46be54768e7d49ab2628", "apiKey": "dummyApiKey" } @@ -87,7 +87,7 @@ }, "destination": { "Config": { - "datacenterEU": false, + "datacenter": "US", "siteID": "46be54768e7d49ab2628" } } @@ -158,7 +158,7 @@ }, "destination": { "Config": { - "datacenterEU": false, + "datacenter": "US", "siteID": "46be54768e7d49ab2628", "apiKey": "dummyApiKey" } @@ -227,7 +227,7 @@ }, "destination": { "Config": { - "datacenterEU": false, + "datacenter": "US", "siteID": "46be54768e7d49ab2628", "apiKey": "dummyApiKey" } @@ -298,7 +298,7 @@ }, "destination": { "Config": { - "datacenterEU": false, + "datacenter": "US", "siteID": "46be54768e7d49ab2628", "apiKey": "dummyApiKey" } @@ -353,7 +353,7 @@ }, "destination": { "Config": { - "datacenterEU": false, + "datacenter": "US", "siteID": "46be54768e7d49ab2628", "apiKey": "dummyApiKey" } @@ -406,7 +406,7 @@ }, "destination": { "Config": { - "datacenterEU": false, + "datacenter": "US", "siteID": "46be54768e7d49ab2628", "apiKey": "dummyApiKey" } @@ -459,7 +459,7 @@ }, "destination": { "Config": { - "datacenterEU": false, + "datacenter": "US", "siteID": "46be54768e7d49ab2628", "apiKey": "dummyApiKey" } @@ -511,7 +511,7 @@ }, "destination": { "Config": { - "datacenterEU": false, + "datacenter": "US", "siteID": "46be54768e7d49ab2628", "apiKey": "dummyApiKey" } @@ -580,7 +580,7 @@ }, "destination": { "Config": { - "datacenterEU": false, + "datacenter": "US", "siteID": "46be54768e7d49ab2628", "apiKey": "dummyApiKey" } @@ -649,7 +649,7 @@ }, "destination": { "Config": { - "datacenterEU": false, + "datacenter": "US", "siteID": "46be54768e7d49ab2628", "apiKey": "dummyApiKey" } @@ -709,7 +709,7 @@ }, "destination": { "Config": { - "datacenterEU": false, + "datacenter": "US", "siteID": "46be54768e7d49ab2628", "apiKey": "dummyApiKey" } @@ -768,7 +768,7 @@ }, "destination": { "Config": { - "datacenterEU": false, + "datacenter": "US", "siteID": "46be54768e7d49ab2628", "apiKey": "dummyApiKey" } @@ -826,7 +826,7 @@ }, "destination": { "Config": { - "datacenterEU": false, + "datacenter": "US", "siteID": "46be54768e7d49ab2628", "apiKey": "dummyApiKey" } @@ -885,7 +885,7 @@ }, "destination": { "Config": { - "datacenterEU": false, + "datacenter": "US", "siteID": "46be54768e7d49ab2628", "apiKey": "dummyApiKey" } @@ -943,7 +943,7 @@ }, "destination": { "Config": { - "datacenterEU": false, + "datacenter": "US", "siteID": "46be54768e7d49ab2628", "apiKey": "dummyApiKey" } @@ -1003,7 +1003,7 @@ }, "destination": { "Config": { - "datacenterEU": false, + "datacenter": "US", "siteID": "46be54768e7d49ab2628", "apiKey": "dummyApiKey" } @@ -1062,7 +1062,7 @@ }, "destination": { "Config": { - "datacenterEU": false, + "datacenter": "US", "siteID": "46be54768e7d49ab2628", "apiKey": "dummyApiKey" } @@ -1121,7 +1121,7 @@ }, "destination": { "Config": { - "datacenterEU": false, + "datacenter": "US", "siteID": "46be54768e7d49ab2628", "apiKey": "dummyApiKey" } @@ -1181,7 +1181,7 @@ }, "destination": { "Config": { - "datacenterEU": false, + "datacenter": "US", "siteID": "46be54768e7d49ab2628", "apiKey": "dummyApiKey" } @@ -1241,7 +1241,7 @@ }, "destination": { "Config": { - "datacenterEU": false, + "datacenter": "US", "siteID": "46be54768e7d49ab2628", "apiKey": "dummyApiKey" } @@ -1312,7 +1312,7 @@ }, "destination": { "Config": { - "datacenterEU": true, + "datacenter": "EU", "siteID": "46be54768e7d49ab2628", "apiKey": "dummyApiKey" } @@ -1367,7 +1367,7 @@ }, "destination": { "Config": { - "datacenterEU": true, + "datacenter": "EU", "siteID": "46be54768e7d49ab2628", "apiKey": "dummyApiKey" } @@ -1420,7 +1420,7 @@ }, "destination": { "Config": { - "datacenterEU": true, + "datacenter": "EU", "siteID": "46be54768e7d49ab2628", "apiKey": "dummyApiKey" } @@ -1473,7 +1473,7 @@ }, "destination": { "Config": { - "datacenterEU": true, + "datacenter": "EU", "siteID": "46be54768e7d49ab2628", "apiKey": "dummyApiKey" } @@ -1525,7 +1525,7 @@ }, "destination": { "Config": { - "datacenterEU": true, + "datacenter": "EU", "siteID": "46be54768e7d49ab2628", "apiKey": "dummyApiKey" } @@ -1594,7 +1594,7 @@ }, "destination": { "Config": { - "datacenterEU": true, + "datacenter": "EU", "siteID": "46be54768e7d49ab2628", "apiKey": "dummyApiKey" } @@ -1663,7 +1663,7 @@ }, "destination": { "Config": { - "datacenterEU": true, + "datacenter": "EU", "siteID": "46be54768e7d49ab2628", "apiKey": "dummyApiKey" } @@ -1723,7 +1723,7 @@ }, "destination": { "Config": { - "datacenterEU": true, + "datacenter": "EU", "siteID": "46be54768e7d49ab2628", "apiKey": "dummyApiKey" } @@ -1781,7 +1781,7 @@ }, "destination": { "Config": { - "datacenterEU": true, + "datacenter": "EU", "siteID": "46be54768e7d49ab2628", "apiKey": "dummyApiKey" } @@ -1840,7 +1840,7 @@ }, "destination": { "Config": { - "datacenterEU": true, + "datacenter": "EU", "siteID": "46be54768e7d49ab2628", "apiKey": "dummyApiKey" } @@ -1898,7 +1898,7 @@ }, "destination": { "Config": { - "datacenterEU": true, + "datacenter": "EU", "siteID": "46be54768e7d49ab2628", "apiKey": "dummyApiKey" } @@ -1958,7 +1958,7 @@ }, "destination": { "Config": { - "datacenterEU": true, + "datacenter": "EU", "siteID": "46be54768e7d49ab2628", "apiKey": "dummyApiKey" } @@ -2017,7 +2017,7 @@ }, "destination": { "Config": { - "datacenterEU": true, + "datacenter": "EU", "siteID": "46be54768e7d49ab2628", "apiKey": "dummyApiKey" } @@ -2076,7 +2076,7 @@ }, "destination": { "Config": { - "datacenterEU": true, + "datacenter": "EU", "siteID": "46be54768e7d49ab2628", "apiKey": "dummyApiKey" } @@ -2136,7 +2136,7 @@ }, "destination": { "Config": { - "datacenterEU": true, + "datacenter": "EU", "siteID": "46be54768e7d49ab2628", "apiKey": "dummyApiKey" } @@ -2196,7 +2196,7 @@ }, "destination": { "Config": { - "datacenterEU": true, + "datacenter": "EU", "siteID": "46be54768e7d49ab2628", "apiKey": "dummyApiKey" } @@ -2247,7 +2247,7 @@ }, "destination": { "Config": { - "datacenterEU": false, + "datacenter": "US", "siteID": "46be54768e7d49ab2628", "apiKey": "dummyApiKey" } @@ -2299,7 +2299,7 @@ }, "destination": { "Config": { - "datacenterEU": false, + "datacenter": "US", "siteID": "46be54768e7d49ab2628", "apiKey": "dummyApiKey" } @@ -2350,7 +2350,7 @@ }, "destination": { "Config": { - "datacenterEU": false, + "datacenter": "US", "siteID": "46be54768e7d49ab2628", "apiKey": "dummyApiKey" } @@ -2402,7 +2402,7 @@ }, "destination": { "Config": { - "datacenterEU": false, + "datacenter": "US", "siteID": "46be54768e7d49ab2628", "apiKey": "dummyApiKey" } @@ -2467,7 +2467,7 @@ }, "destination": { "Config": { - "datacenterEU": false, + "datacenter": "US", "siteID": "abc", "apiKey": "xyz" } @@ -2533,7 +2533,7 @@ }, "destination": { "Config": { - "datacenterEU": true, + "datacenter": "EU", "siteID": "46be54768e7d49ab2628", "apiKey": "dummyApiKey" } @@ -2584,11 +2584,21 @@ "DisplayName": "Customer IO", "Config": { "destConfig": { - "defaultConfig": ["apiKey", "siteID", "datacenterEU"], - "web": ["useNativeSDK"] + "defaultConfig": [ + "apiKey", + "siteID", + "datacenterEU" + ], + "web": [ + "useNativeSDK" + ] }, "excludeKeys": [], - "includeKeys": ["apiKey", "siteID", "datacenterEU"], + "includeKeys": [ + "apiKey", + "siteID", + "datacenterEU" + ], "saveDestinationResponse": true, "secretKeys": [], "supportedSourceTypes": [ @@ -2608,7 +2618,7 @@ }, "Config": { "apiKey": "a292d85ac36de15fc219", - "datacenterEU": false, + "datacenter": "US", "siteID": "eead090ab9e2e35004dc" }, "Enabled": true, @@ -2664,11 +2674,21 @@ "DisplayName": "Customer IO", "Config": { "destConfig": { - "defaultConfig": ["apiKey", "siteID", "datacenterEU"], - "web": ["useNativeSDK"] + "defaultConfig": [ + "apiKey", + "siteID", + "datacenterEU" + ], + "web": [ + "useNativeSDK" + ] }, "excludeKeys": [], - "includeKeys": ["apiKey", "siteID", "datacenterEU"], + "includeKeys": [ + "apiKey", + "siteID", + "datacenterEU" + ], "saveDestinationResponse": true, "secretKeys": [], "supportedSourceTypes": [ @@ -2688,7 +2708,7 @@ }, "Config": { "apiKey": "a292d85ac36de15fc219", - "datacenterEU": false, + "datacenter": "US", "siteID": "eead090ab9e2e35004dc" }, "Enabled": true, @@ -2784,8 +2804,17 @@ "DisplayName": "Customer IO", "Config": { "destConfig": { - "defaultConfig": ["apiKey", "siteID", "datacenterEU", "deviceTokenEventName"], - "web": ["useNativeSDK", "blackListedEvents", "whiteListedEvents"] + "defaultConfig": [ + "apiKey", + "siteID", + "datacenterEU", + "deviceTokenEventName" + ], + "web": [ + "useNativeSDK", + "blackListedEvents", + "whiteListedEvents" + ] }, "excludeKeys": [], "includeKeys": [ @@ -2797,7 +2826,12 @@ ], "saveDestinationResponse": true, "secretKeys": [], - "supportedMessageTypes": ["identify", "page", "screen", "track"], + "supportedMessageTypes": [ + "identify", + "page", + "screen", + "track" + ], "supportedSourceTypes": [ "android", "ios", @@ -2818,7 +2852,7 @@ }, "Config": { "apiKey": "DESAU SAI", - "datacenterEU": false, + "datacenter": "US", "deviceTokenEventName": "device_token_registered", "siteID": "DESU SAI" }, @@ -2911,8 +2945,17 @@ "DisplayName": "Customer IO", "Config": { "destConfig": { - "defaultConfig": ["apiKey", "siteID", "datacenterEU", "deviceTokenEventName"], - "web": ["useNativeSDK", "blackListedEvents", "whiteListedEvents"] + "defaultConfig": [ + "apiKey", + "siteID", + "datacenterEU", + "deviceTokenEventName" + ], + "web": [ + "useNativeSDK", + "blackListedEvents", + "whiteListedEvents" + ] }, "excludeKeys": [], "includeKeys": [ @@ -2924,7 +2967,12 @@ ], "saveDestinationResponse": true, "secretKeys": [], - "supportedMessageTypes": ["identify", "page", "screen", "track"], + "supportedMessageTypes": [ + "identify", + "page", + "screen", + "track" + ], "supportedSourceTypes": [ "android", "ios", @@ -2945,7 +2993,7 @@ }, "Config": { "apiKey": "DESAU SAI", - "datacenterEU": false, + "datacenter": "US", "deviceTokenEventName": "device_token_registered", "siteID": "DESU SAI" }, @@ -3037,8 +3085,17 @@ "DisplayName": "Customer IO", "Config": { "destConfig": { - "defaultConfig": ["apiKey", "siteID", "datacenterEU", "deviceTokenEventName"], - "web": ["useNativeSDK", "blackListedEvents", "whiteListedEvents"] + "defaultConfig": [ + "apiKey", + "siteID", + "datacenterEU", + "deviceTokenEventName" + ], + "web": [ + "useNativeSDK", + "blackListedEvents", + "whiteListedEvents" + ] }, "excludeKeys": [], "includeKeys": [ @@ -3050,7 +3107,12 @@ ], "saveDestinationResponse": true, "secretKeys": [], - "supportedMessageTypes": ["identify", "page", "screen", "track"], + "supportedMessageTypes": [ + "identify", + "page", + "screen", + "track" + ], "supportedSourceTypes": [ "android", "ios", @@ -3071,7 +3133,7 @@ }, "Config": { "apiKey": "DESAU SAI", - "datacenterEU": false, + "datacenter": "US", "deviceTokenEventName": "device_token_registered", "siteID": "DESU SAI" }, @@ -3163,8 +3225,17 @@ "DisplayName": "Customer IO", "Config": { "destConfig": { - "defaultConfig": ["apiKey", "siteID", "datacenterEU", "deviceTokenEventName"], - "web": ["useNativeSDK", "blackListedEvents", "whiteListedEvents"] + "defaultConfig": [ + "apiKey", + "siteID", + "datacenterEU", + "deviceTokenEventName" + ], + "web": [ + "useNativeSDK", + "blackListedEvents", + "whiteListedEvents" + ] }, "excludeKeys": [], "includeKeys": [ @@ -3176,7 +3247,12 @@ ], "saveDestinationResponse": true, "secretKeys": [], - "supportedMessageTypes": ["identify", "page", "screen", "track"], + "supportedMessageTypes": [ + "identify", + "page", + "screen", + "track" + ], "supportedSourceTypes": [ "android", "ios", @@ -3197,7 +3273,7 @@ }, "Config": { "apiKey": "DESAU SAI", - "datacenterEU": false, + "datacenter": "US", "deviceTokenEventName": "device_token_registered", "siteID": "DESU SAI" }, @@ -3286,8 +3362,17 @@ "DisplayName": "Customer IO", "Config": { "destConfig": { - "defaultConfig": ["apiKey", "siteID", "datacenterEU", "deviceTokenEventName"], - "web": ["useNativeSDK", "blackListedEvents", "whiteListedEvents"] + "defaultConfig": [ + "apiKey", + "siteID", + "datacenterEU", + "deviceTokenEventName" + ], + "web": [ + "useNativeSDK", + "blackListedEvents", + "whiteListedEvents" + ] }, "excludeKeys": [], "includeKeys": [ @@ -3299,7 +3384,12 @@ ], "saveDestinationResponse": true, "secretKeys": [], - "supportedMessageTypes": ["identify", "page", "screen", "track"], + "supportedMessageTypes": [ + "identify", + "page", + "screen", + "track" + ], "supportedSourceTypes": [ "android", "ios", @@ -3320,7 +3410,7 @@ }, "Config": { "apiKey": "DESAU SAI", - "datacenterEU": false, + "datacenter": "US", "deviceTokenEventName": "device_token_registered", "siteID": "DESU SAI" }, @@ -3413,8 +3503,17 @@ "DisplayName": "Customer IO", "Config": { "destConfig": { - "defaultConfig": ["apiKey", "siteID", "datacenterEU", "deviceTokenEventName"], - "web": ["useNativeSDK", "blackListedEvents", "whiteListedEvents"] + "defaultConfig": [ + "apiKey", + "siteID", + "datacenterEU", + "deviceTokenEventName" + ], + "web": [ + "useNativeSDK", + "blackListedEvents", + "whiteListedEvents" + ] }, "excludeKeys": [], "includeKeys": [ @@ -3426,7 +3525,12 @@ ], "saveDestinationResponse": true, "secretKeys": [], - "supportedMessageTypes": ["identify", "page", "screen", "track"], + "supportedMessageTypes": [ + "identify", + "page", + "screen", + "track" + ], "supportedSourceTypes": [ "android", "ios", @@ -3447,7 +3551,7 @@ }, "Config": { "apiKey": "DESAU SAI", - "datacenterEU": false, + "datacenter": "US", "deviceTokenEventName": "device_token_registered", "siteID": "DESU SAI" }, @@ -3540,8 +3644,17 @@ "DisplayName": "Customer IO", "Config": { "destConfig": { - "defaultConfig": ["apiKey", "siteID", "datacenterEU", "deviceTokenEventName"], - "web": ["useNativeSDK", "blackListedEvents", "whiteListedEvents"] + "defaultConfig": [ + "apiKey", + "siteID", + "datacenterEU", + "deviceTokenEventName" + ], + "web": [ + "useNativeSDK", + "blackListedEvents", + "whiteListedEvents" + ] }, "excludeKeys": [], "includeKeys": [ @@ -3553,7 +3666,12 @@ ], "saveDestinationResponse": true, "secretKeys": [], - "supportedMessageTypes": ["identify", "page", "screen", "track"], + "supportedMessageTypes": [ + "identify", + "page", + "screen", + "track" + ], "supportedSourceTypes": [ "android", "ios", @@ -3574,7 +3692,7 @@ }, "Config": { "apiKey": "DESAU SAI", - "datacenterEU": false, + "datacenter": "US", "deviceTokenEventName": "device_token_registered", "siteID": "DESU SAI" }, @@ -3667,8 +3785,17 @@ "DisplayName": "Customer IO", "Config": { "destConfig": { - "defaultConfig": ["apiKey", "siteID", "datacenterEU", "deviceTokenEventName"], - "web": ["useNativeSDK", "blackListedEvents", "whiteListedEvents"] + "defaultConfig": [ + "apiKey", + "siteID", + "datacenterEU", + "deviceTokenEventName" + ], + "web": [ + "useNativeSDK", + "blackListedEvents", + "whiteListedEvents" + ] }, "excludeKeys": [], "includeKeys": [ @@ -3680,7 +3807,12 @@ ], "saveDestinationResponse": true, "secretKeys": [], - "supportedMessageTypes": ["identify", "page", "screen", "track"], + "supportedMessageTypes": [ + "identify", + "page", + "screen", + "track" + ], "supportedSourceTypes": [ "android", "ios", @@ -3701,7 +3833,7 @@ }, "Config": { "apiKey": "DESAU SAI", - "datacenterEU": false, + "datacenter": "US", "deviceTokenEventName": "device_token_registered", "siteID": "DESU SAI" }, @@ -3793,8 +3925,17 @@ "DisplayName": "Customer IO", "Config": { "destConfig": { - "defaultConfig": ["apiKey", "siteID", "datacenterEU", "deviceTokenEventName"], - "web": ["useNativeSDK", "blackListedEvents", "whiteListedEvents"] + "defaultConfig": [ + "apiKey", + "siteID", + "datacenterEU", + "deviceTokenEventName" + ], + "web": [ + "useNativeSDK", + "blackListedEvents", + "whiteListedEvents" + ] }, "excludeKeys": [], "includeKeys": [ @@ -3806,7 +3947,12 @@ ], "saveDestinationResponse": true, "secretKeys": [], - "supportedMessageTypes": ["identify", "page", "screen", "track"], + "supportedMessageTypes": [ + "identify", + "page", + "screen", + "track" + ], "supportedSourceTypes": [ "android", "ios", @@ -3827,7 +3973,7 @@ }, "Config": { "apiKey": "DESAU SAI", - "datacenterEU": false, + "datacenter": "US", "deviceTokenEventName": "device_token_registered", "siteID": "DESU SAI" }, @@ -3916,8 +4062,17 @@ "DisplayName": "Customer IO", "Config": { "destConfig": { - "defaultConfig": ["apiKey", "siteID", "datacenterEU", "deviceTokenEventName"], - "web": ["useNativeSDK", "blackListedEvents", "whiteListedEvents"] + "defaultConfig": [ + "apiKey", + "siteID", + "datacenterEU", + "deviceTokenEventName" + ], + "web": [ + "useNativeSDK", + "blackListedEvents", + "whiteListedEvents" + ] }, "excludeKeys": [], "includeKeys": [ @@ -3929,7 +4084,12 @@ ], "saveDestinationResponse": true, "secretKeys": [], - "supportedMessageTypes": ["identify", "page", "screen", "track"], + "supportedMessageTypes": [ + "identify", + "page", + "screen", + "track" + ], "supportedSourceTypes": [ "android", "ios", @@ -3950,7 +4110,7 @@ }, "Config": { "apiKey": "DESAU SAI", - "datacenterEU": false, + "datacenter": "US", "deviceTokenEventName": "device_token_registered", "siteID": "DESU SAI" }, @@ -4043,8 +4203,17 @@ "DisplayName": "Customer IO", "Config": { "destConfig": { - "defaultConfig": ["apiKey", "siteID", "datacenterEU", "deviceTokenEventName"], - "web": ["useNativeSDK", "blackListedEvents", "whiteListedEvents"] + "defaultConfig": [ + "apiKey", + "siteID", + "datacenterEU", + "deviceTokenEventName" + ], + "web": [ + "useNativeSDK", + "blackListedEvents", + "whiteListedEvents" + ] }, "excludeKeys": [], "includeKeys": [ @@ -4056,7 +4225,12 @@ ], "saveDestinationResponse": true, "secretKeys": [], - "supportedMessageTypes": ["identify", "page", "screen", "track"], + "supportedMessageTypes": [ + "identify", + "page", + "screen", + "track" + ], "supportedSourceTypes": [ "android", "ios", @@ -4077,7 +4251,7 @@ }, "Config": { "apiKey": "DESAU SAI", - "datacenterEU": false, + "datacenter": "US", "deviceTokenEventName": "device_token_registered", "siteID": "DESU SAI" }, @@ -4134,8 +4308,17 @@ "DisplayName": "Customer IO", "Config": { "destConfig": { - "defaultConfig": ["apiKey", "siteID", "datacenterEU", "deviceTokenEventName"], - "web": ["useNativeSDK", "blackListedEvents", "whiteListedEvents"] + "defaultConfig": [ + "apiKey", + "siteID", + "datacenterEU", + "deviceTokenEventName" + ], + "web": [ + "useNativeSDK", + "blackListedEvents", + "whiteListedEvents" + ] }, "excludeKeys": [], "includeKeys": [ @@ -4147,7 +4330,12 @@ ], "saveDestinationResponse": true, "secretKeys": [], - "supportedMessageTypes": ["identify", "page", "screen", "track"], + "supportedMessageTypes": [ + "identify", + "page", + "screen", + "track" + ], "supportedSourceTypes": [ "android", "ios", @@ -4168,7 +4356,7 @@ }, "Config": { "apiKey": "ef32c3f60fb98f39ef35", - "datacenterEU": false, + "datacenter": "US", "deviceTokenEventName": "device_token_registered", "siteID": "c0efdbd20b9fbe24a7e2" }, @@ -4225,8 +4413,17 @@ "DisplayName": "Customer IO", "Config": { "destConfig": { - "defaultConfig": ["apiKey", "siteID", "datacenterEU", "deviceTokenEventName"], - "web": ["useNativeSDK", "blackListedEvents", "whiteListedEvents"] + "defaultConfig": [ + "apiKey", + "siteID", + "datacenterEU", + "deviceTokenEventName" + ], + "web": [ + "useNativeSDK", + "blackListedEvents", + "whiteListedEvents" + ] }, "excludeKeys": [], "includeKeys": [ @@ -4238,7 +4435,12 @@ ], "saveDestinationResponse": true, "secretKeys": [], - "supportedMessageTypes": ["identify", "page", "screen", "track"], + "supportedMessageTypes": [ + "identify", + "page", + "screen", + "track" + ], "supportedSourceTypes": [ "android", "ios", @@ -4259,7 +4461,7 @@ }, "Config": { "apiKey": "ef32c3f60fb98f39ef35", - "datacenterEU": false, + "datacenter": "US", "deviceTokenEventName": "device_token_registered", "siteID": "c0efdbd20b9fbe24a7e2" }, @@ -4319,8 +4521,17 @@ "DisplayName": "Customer IO", "Config": { "destConfig": { - "defaultConfig": ["apiKey", "siteID", "datacenterEU", "deviceTokenEventName"], - "web": ["useNativeSDK", "blackListedEvents", "whiteListedEvents"] + "defaultConfig": [ + "apiKey", + "siteID", + "datacenterEU", + "deviceTokenEventName" + ], + "web": [ + "useNativeSDK", + "blackListedEvents", + "whiteListedEvents" + ] }, "excludeKeys": [], "includeKeys": [ @@ -4332,7 +4543,12 @@ ], "saveDestinationResponse": true, "secretKeys": [], - "supportedMessageTypes": ["identify", "page", "screen", "track"], + "supportedMessageTypes": [ + "identify", + "page", + "screen", + "track" + ], "supportedSourceTypes": [ "android", "ios", @@ -4353,7 +4569,7 @@ }, "Config": { "apiKey": "ef32c3f60fb98f39ef35", - "datacenterEU": false, + "datacenter": "US", "deviceTokenEventName": "device_token_registered", "siteID": "c0efdbd20b9fbe24a7e2" }, @@ -4413,8 +4629,17 @@ "DisplayName": "Customer IO", "Config": { "destConfig": { - "defaultConfig": ["apiKey", "siteID", "datacenterEU", "deviceTokenEventName"], - "web": ["useNativeSDK", "blackListedEvents", "whiteListedEvents"] + "defaultConfig": [ + "apiKey", + "siteID", + "datacenterEU", + "deviceTokenEventName" + ], + "web": [ + "useNativeSDK", + "blackListedEvents", + "whiteListedEvents" + ] }, "excludeKeys": [], "includeKeys": [ @@ -4426,7 +4651,12 @@ ], "saveDestinationResponse": true, "secretKeys": [], - "supportedMessageTypes": ["identify", "page", "screen", "track"], + "supportedMessageTypes": [ + "identify", + "page", + "screen", + "track" + ], "supportedSourceTypes": [ "android", "ios", @@ -4447,7 +4677,7 @@ }, "Config": { "apiKey": "ef32c3f60fb98f39ef35", - "datacenterEU": false, + "datacenter": "US", "deviceTokenEventName": "device_token_registered", "siteID": "c0efdbd20b9fbe24a7e2" }, @@ -4508,8 +4738,17 @@ "DisplayName": "Customer IO", "Config": { "destConfig": { - "defaultConfig": ["apiKey", "siteID", "datacenterEU", "deviceTokenEventName"], - "web": ["useNativeSDK", "blackListedEvents", "whiteListedEvents"] + "defaultConfig": [ + "apiKey", + "siteID", + "datacenterEU", + "deviceTokenEventName" + ], + "web": [ + "useNativeSDK", + "blackListedEvents", + "whiteListedEvents" + ] }, "excludeKeys": [], "includeKeys": [ @@ -4521,7 +4760,12 @@ ], "saveDestinationResponse": true, "secretKeys": [], - "supportedMessageTypes": ["identify", "page", "screen", "track"], + "supportedMessageTypes": [ + "identify", + "page", + "screen", + "track" + ], "supportedSourceTypes": [ "android", "ios", @@ -4542,7 +4786,7 @@ }, "Config": { "apiKey": "ef32c3f60fb98f39ef35", - "datacenterEU": false, + "datacenter": "US", "deviceTokenEventName": "device_token_registered", "siteID": "c0efdbd20b9fbe24a7e2" }, @@ -4603,8 +4847,17 @@ "DisplayName": "Customer IO", "Config": { "destConfig": { - "defaultConfig": ["apiKey", "siteID", "datacenterEU", "deviceTokenEventName"], - "web": ["useNativeSDK", "blackListedEvents", "whiteListedEvents"] + "defaultConfig": [ + "apiKey", + "siteID", + "datacenterEU", + "deviceTokenEventName" + ], + "web": [ + "useNativeSDK", + "blackListedEvents", + "whiteListedEvents" + ] }, "excludeKeys": [], "includeKeys": [ @@ -4616,7 +4869,12 @@ ], "saveDestinationResponse": true, "secretKeys": [], - "supportedMessageTypes": ["identify", "page", "screen", "track"], + "supportedMessageTypes": [ + "identify", + "page", + "screen", + "track" + ], "supportedSourceTypes": [ "android", "ios", @@ -4637,7 +4895,7 @@ }, "Config": { "apiKey": "ef32c3f60fb98f39ef35", - "datacenterEU": false, + "datacenter": "US", "deviceTokenEventName": "device_token_registered", "siteID": "c0efdbd20b9fbe24a7e2" }, @@ -4698,8 +4956,17 @@ "DisplayName": "Customer IO", "Config": { "destConfig": { - "defaultConfig": ["apiKey", "siteID", "datacenterEU", "deviceTokenEventName"], - "web": ["useNativeSDK", "blackListedEvents", "whiteListedEvents"] + "defaultConfig": [ + "apiKey", + "siteID", + "datacenterEU", + "deviceTokenEventName" + ], + "web": [ + "useNativeSDK", + "blackListedEvents", + "whiteListedEvents" + ] }, "excludeKeys": [], "includeKeys": [ @@ -4711,7 +4978,12 @@ ], "saveDestinationResponse": true, "secretKeys": [], - "supportedMessageTypes": ["identify", "page", "screen", "track"], + "supportedMessageTypes": [ + "identify", + "page", + "screen", + "track" + ], "supportedSourceTypes": [ "android", "ios", @@ -4732,7 +5004,7 @@ }, "Config": { "apiKey": "ef32c3f60fb98f39ef35", - "datacenterEU": true, + "datacenter": "EU", "deviceTokenEventName": "device_token_registered", "siteID": "c0efdbd20b9fbe24a7e2" }, @@ -4789,7 +5061,7 @@ }, "destination": { "Config": { - "datacenterEU": false, + "datacenter": "US", "siteID": "46be54768e7d49ab2628", "apiKey": "dummyApiKey" } @@ -4842,7 +5114,7 @@ }, "destination": { "Config": { - "datacenterEU": false, + "datacenter": "US", "siteID": "46be54768e7d49ab2628", "apiKey": "dummyApiKey" } @@ -4889,10 +5161,10 @@ }, "destination": { "Config": { - "datacenterEU": false, + "datacenter": "US", "siteID": "46be54768e7d49ab2628", "apiKey": "dummyApiKey" } } } -] +] \ No newline at end of file From d543f4786513433180cdf56910672c9ca12249bc Mon Sep 17 00:00:00 2001 From: Anant Jain <62471433+anantjain45823@users.noreply.github.com> Date: Fri, 15 Sep 2023 10:24:47 +0530 Subject: [PATCH 28/37] fix(INT-339): marketo response handler to handle static list removed and skipped statuses (#2606) fix: marketo response handler --- src/v0/destinations/marketo/util.js | 77 +++++++++++-------- .../marketo_static_list/proxy_response.json | 34 +++++++- .../data/marketo_static_list_proxy_input.json | 20 +++++ .../marketo_static_list_proxy_output.json | 67 ++++++++++++---- 4 files changed, 146 insertions(+), 52 deletions(-) diff --git a/src/v0/destinations/marketo/util.js b/src/v0/destinations/marketo/util.js index ab39aafc15..1da9dc0f7e 100644 --- a/src/v0/destinations/marketo/util.js +++ b/src/v0/destinations/marketo/util.js @@ -19,6 +19,8 @@ const tags = require('../../util/tags'); * https://developers.marketo.com/rest-api/error-codes/ */ +const ERROR_CODE_TO_PASS = ['1015']; + const MARKETO_RETRYABLE_CODES = ['601', '602', '604', '611']; const MARKETO_ABORTABLE_CODES = [ '600', @@ -34,29 +36,28 @@ const MARKETO_ABORTABLE_CODES = [ ]; const MARKETO_THROTTLED_CODES = ['502', '606', '607', '608', '615']; -const RECORD_LEVEL_ABORTBALE_ERRORS = [ - '1001', - '1002', - '1003', - '1004', - '1005', - '1006', - '1007', - '1008', - '1011', - '1013', - '1014', - '1015', - '1016', - '1017', - '1018', - '1021', - '1026', - '1027', - '1028', - '1036', - '1049', -]; +// Keeping here for reference const RECORD_LEVEL_ABORTBALE_ERRORS = [ +// '1001', +// '1002', +// '1003', +// '1004', +// '1005', +// '1006', +// '1007', +// '1008', +// '1011', +// '1013', +// '1014', +// '1016', +// '1017', +// '1018', +// '1021', +// '1026', +// '1027', +// '1028', +// '1036', +// '1049', +// ]; const { DESTINATION } = require('./config'); const logger = require('../../../logger'); @@ -86,7 +87,7 @@ const marketoApplicationErrorHandler = (marketoResponse, sourceMessage, destinat }; /** * this function checks the status of individual responses and throws error if any - * response ststus does not match the expected status + * response status does not match the expected status * doc1: https://developers.marketo.com/rest-api/lead-database/custom-objects/#create_and_update * doc2: https://developers.marketo.com/rest-api/lead-database/#create_and_update * Structure of marketoResponse: { @@ -122,17 +123,27 @@ const marketoApplicationErrorHandler = (marketoResponse, sourceMessage, destinat const nestedResponseHandler = (marketoResponse, sourceMessage) => { const checkStatus = (res) => { const { status } = res; - if (status && status !== 'updated' && status !== 'created' && status !== 'added') { + const allowedStatus = ['updated', 'added', 'removed', 'created']; + if ( + status && + !allowedStatus.includes(status) + // we need to check the case where the id are not in list + ) { const { reasons } = res; let statusCode = 400; - if (reasons && RECORD_LEVEL_ABORTBALE_ERRORS.includes(reasons[0].code)) { - statusCode = 400; - } else if (reasons && MARKETO_ABORTABLE_CODES.includes(reasons[0].code)) { - statusCode = 400; - } else if (reasons && MARKETO_THROTTLED_CODES.includes(reasons[0].code)) { - statusCode = 429; - } else if (reasons && MARKETO_RETRYABLE_CODES.includes(reasons[0].code)) { - statusCode = 500; + if (reasons) { + const errorCodesFromDest = reasons.map((reason) => reason.code); + const filteredErrorCode = errorCodesFromDest.find( + (errorCode) => !ERROR_CODE_TO_PASS.includes(errorCode), + ); + if (!filteredErrorCode) { + return; + } + if (MARKETO_THROTTLED_CODES.includes(filteredErrorCode.code)) { + statusCode = 429; + } else if (MARKETO_RETRYABLE_CODES.includes(filteredErrorCode.code)) { + statusCode = 500; + } } throw new InstrumentationError( `Request failed during: ${sourceMessage}, error: ${JSON.stringify(reasons)}`, diff --git a/test/__mocks__/data/marketo_static_list/proxy_response.json b/test/__mocks__/data/marketo_static_list/proxy_response.json index 5c00ced941..2a58d99da2 100644 --- a/test/__mocks__/data/marketo_static_list/proxy_response.json +++ b/test/__mocks__/data/marketo_static_list/proxy_response.json @@ -1,4 +1,31 @@ { + "https://marketo_acct_id_success.mktorest.com/rest/v1/lists/1234/leads.json?id=110&id=111&id=112": { + "data": { + "requestId": "b6d1#18a8d2c10e7", + "result": [ + { + "id": 110, + "status": "skipped", + "reasons": [ + { + "code": "1015", + "message": "Lead not in list" + } + ] + }, + { + "id": 111, + "status": "removed" + }, + { + "id": 112, + "status": "removed" + } + ], + "success": true + }, + "status": 200 + }, "https://marketo_acct_id_success.mktorest.com/rest/v1/lists/1234/leads.json?id=1&id=2&id=3": { "data": { "requestId": "68d8#1846058ee27", @@ -60,14 +87,13 @@ "status": "skipped", "reasons": [ { - "code": "1004", - "message": "Lead not found" + "code": "1015", + "message": "Lead not in list" } ] }, - "success": true }, "status": 200 } -} +} \ No newline at end of file diff --git a/test/__tests__/data/marketo_static_list_proxy_input.json b/test/__tests__/data/marketo_static_list_proxy_input.json index 85142d68d7..6f84e7416d 100644 --- a/test/__tests__/data/marketo_static_list_proxy_input.json +++ b/test/__tests__/data/marketo_static_list_proxy_input.json @@ -1,4 +1,24 @@ [ + { + "type": "REST", + "endpoint": "https://marketo_acct_id_success.mktorest.com/rest/v1/lists/1234/leads.json?id=110&id=111&id=112", + "method": "POST", + "userId": "", + "headers": { + "Authorization": "Bearer Incorrect_token", + "Content-Type": "application/json" + }, + "body": { + "FORM": {}, + "JSON": {}, + "JSON_ARRAY": {}, + "XML": {} + }, + "files": {}, + "params": { + "destination": "marketo_static_list" + } + }, { "type": "REST", "endpoint": "https://marketo_acct_id_success.mktorest.com/rest/v1/lists/1234/leads.json?id=1&id=2&id=3", diff --git a/test/__tests__/data/marketo_static_list_proxy_output.json b/test/__tests__/data/marketo_static_list_proxy_output.json index 2dfbee0e8e..8ac482b5be 100644 --- a/test/__tests__/data/marketo_static_list_proxy_output.json +++ b/test/__tests__/data/marketo_static_list_proxy_output.json @@ -1,4 +1,37 @@ [ + { + "output": { + "message": "Request Processed Successfully", + "destinationResponse": { + "response": { + "requestId": "b6d1#18a8d2c10e7", + "result": [ + { + "id": 110, + "status": "skipped", + "reasons": [ + { + "code": "1015", + "message": "Lead not in list" + } + ] + }, + { + "id": 111, + "status": "removed" + }, + { + "id": 112, + "status": "removed" + } + ], + "success": true + }, + "status": 200 + }, + "status": 200 + } + }, { "output": { "status": 500, @@ -72,21 +105,25 @@ }, { "output": { - "destinationResponse": "", - "message": "Request failed during: during Marketo Static List Response Handling, error: [{\"code\":\"1004\",\"message\":\"Lead not found\"}]", - "statTags": { - "destType": "MARKETO_STATIC_LIST", - "errorCategory": "dataValidation", - "destinationId": "Non-determininable", - "workspaceId": "Non-determininable", - "errorType": "instrumentation", - "feature": "dataDelivery", - "implementation": "native", - "destinationId": "Non-determininable", - "workspaceId": "Non-determininable", - "module": "destination" - }, - "status": 400 + "status": 200, + "message": "Request Processed Successfully", + "destinationResponse": { + "response": { + "requestId": "12d3c#1846057dce2", + "result": { + "id": 5, + "status": "skipped", + "reasons": [ + { + "code": "1015", + "message": "Lead not in list" + } + ] + }, + "success": true + }, + "status": 200 + } } } ] \ No newline at end of file From 9babaf87deca6c45f3bf17638fafac3561ab2e00 Mon Sep 17 00:00:00 2001 From: Yashasvi Bajpai <33063622+yashasvibajpai@users.noreply.github.com> Date: Fri, 15 Sep 2023 12:13:24 +0530 Subject: [PATCH 29/37] feat: onboard fullstory cloud mode (#2536) * feat: onboard fullstory cloud mode * test: add more tests for identify --- .../destinations/fullstory/procWorkflow.yaml | 104 +++++ test/__tests__/data/fullstory.json | 354 ++++++++++++++++++ test/__tests__/fullstory-cdk.test.ts | 32 ++ 3 files changed, 490 insertions(+) create mode 100644 src/cdk/v2/destinations/fullstory/procWorkflow.yaml create mode 100644 test/__tests__/data/fullstory.json create mode 100644 test/__tests__/fullstory-cdk.test.ts diff --git a/src/cdk/v2/destinations/fullstory/procWorkflow.yaml b/src/cdk/v2/destinations/fullstory/procWorkflow.yaml new file mode 100644 index 0000000000..50ac2a8163 --- /dev/null +++ b/src/cdk/v2/destinations/fullstory/procWorkflow.yaml @@ -0,0 +1,104 @@ +bindings: + - name: EventType + path: ../../../../constants + - path: ../../bindings/jsontemplate + exportAll: true + - name: removeUndefinedAndNullValues + path: ../../../../v0/util + +steps: + - name: validateInput + template: | + $.assert(.message.type, "message Type is not present. Aborting message."); + $.assert(.message.type in {{$.EventType.([.TRACK, .IDENTIFY])}}, + "message type " + .message.type + " is not supported"); + - name: prepareContext + template: | + $.context.messageType = .message.type.toLowerCase(); + $.context.payload = {}; + $.context.finalHeaders = { + "authorization": "Basic " + .destination.Config.apiKey, + "content-type": "application/json" + }; + - name: identifyPayload + condition: $.context.messageType == "identify" + template: | + $.context.endpoint = "https://api.fullstory.com/v2/users"; + $.context.payload.properties = .message.traits ?? .message.context.traits; + $.context.payload.uid = .message.userId; + $.context.payload.email = .message.context.traits.email; + $.context.payload.display_name = .message.context.traits.name; + + - name: trackPayload + condition: $.context.messageType == "track" + template: | + $.context.endpoint = "https://api.fullstory.com/v2/events"; + $.context.payload.name = .message.event; + $.context.payload.properties = .message.properties; + $.context.payload.timestamp = .message.originalTimestamp; + $.context.payload.context = {}; + + - name: validateEventName + condition: $.context.messageType == "track" + template: | + $.assert(.message.event, "event is required for track call") + + - name: mapContextFieldsForTrack + condition: $.context.messageType == "track" + template: | + $.context.payload.context.browser = { + "url": .message.context.page.url, + "user_agent": .message.context.userAgent, + "initial_referrer": .message.context.page.initial_referrer, + }; + $.context.payload.context.mobile = { + "app_name": .message.context.app.name, + "app_version": .message.context.app.version, + }; + $.context.payload.context.device = { + "manufacturer": .message.context.device.manufacturer, + "model": .message.context.device.model, + }; + $.context.payload.context.location = { + "ip_address": .message.context.ip, + "latitude": .message.properties.latitude, + "longitude": .message.properties.longitude, + "city": .message.properties.city, + "region": .message.properties.region, + "country": .message.properties.country, + }; + + - name: mapIdsForTrack + condition: $.context.messageType == "track" + template: | + $.context.payload.session = { + "id": .message.properties.sessionId, + "use_most_recent": .message.properties.useMostRecent, + }; + $.context.payload.user = { + "id": .message.properties.userId ?? .message.userId, + } + + - name: cleanPayload + template: | + $.context.payload = $.removeUndefinedAndNullValues($.context.payload); + - name: buildResponseForProcessTransformation + template: | + $.context.payload.({ + "body": { + "JSON": ., + "JSON_ARRAY": {}, + "XML": {}, + "FORM": {} + }, + "version": "1", + "type": "REST", + "method": "POST", + "endpoint": $.context.endpoint, + "headers": $.context.finalHeaders, + "params": {}, + "files": {} + }) + + + diff --git a/test/__tests__/data/fullstory.json b/test/__tests__/data/fullstory.json new file mode 100644 index 0000000000..b6e462005b --- /dev/null +++ b/test/__tests__/data/fullstory.json @@ -0,0 +1,354 @@ +[ + { + "description": "Complete track event", + "input": { + "message": { + "anonymousId": "78c53c15-32a1-4b65-adac-bec2d7bb8fab", + "channel": "web", + "context": { + "app": { + "name": "RSPM", + "version": "1.9.0" + }, + "campaign": { + "name": "sales campaign", + "source": "google", + "medium": "medium", + "term": "event data", + "content": "Make sense of the modern data stack" + }, + "ip": "192.0.2.0", + "library": { + "name": "RudderLabs JavaScript SDK", + "version": "2.9.1" + }, + "locale": "en-US", + "device": { + "manufacturer": "Nokia", + "model": "N2023" + }, + "page": { + "path": "/best-seller/1", + "initial_referrer": "https://www.google.com/search", + "initial_referring_domain": "google.com", + "referrer": "https://www.google.com/search?q=estore+bestseller", + "referring_domain": "google.com", + "search": "estore bestseller", + "title": "The best sellers offered by EStore", + "url": "https://www.estore.com/best-seller/1" + }, + "screen": { + "density": 420, + "height": 1794, + "width": 1080, + "innerHeight": 200, + "innerWidth": 100 + }, + "userAgent": "Dalvik/2.1.0 (Linux; U; Android 9; Android SDK built for x86 Build/PSR1.180720.075)" + }, + "event": "Product Reviewed", + "integrations": { + "All": true + }, + "messageId": "1578564113557-af022c68-429e-4af4-b99b-2b9174056383", + "properties": { + "userId": "u001", + "sessionId": "s001", + "review_id": "review_id_1", + "product_id": "product_id_1", + "rating": 5.0, + "review_body": "Sample Review Body", + "latitude": 44.56, + "longitude": 54.46, + "region": "Atlas", + "city": "NY", + "country": "USA" + }, + "originalTimestamp": "2020-01-09T10:01:53.558Z", + "type": "track", + "sentAt": "2020-01-09T10:02:03.257Z" + }, + "destination": { + "ID": "1pYpzzvcn7AQ2W9GGIAZSsN6Mfq", + "Name": "Fullstory", + "DestinationDefinition": { + "Config": { + "cdkV2Enabled": true + } + }, + "Config": { + "apiKey": "dummyfullstoryAPIKey" + }, + "Enabled": true, + "Transformations": [] + }, + "metadata": { + "sourceType": "fddf", + "destinationType": "fdf", + "k8_namespace": "fdfd" + } + }, + "output": { + "body": { + "JSON": { + "name": "Product Reviewed", + "properties": { + "userId": "u001", + "sessionId": "s001", + "review_id": "review_id_1", + "product_id": "product_id_1", + "rating": 5, + "review_body": "Sample Review Body", + "latitude": 44.56, + "longitude": 54.46, + "region": "Atlas", + "city": "NY", + "country": "USA" + }, + "timestamp": "2020-01-09T10:01:53.558Z", + "context": { + "browser": { + "url": "https://www.estore.com/best-seller/1", + "user_agent": "Dalvik/2.1.0 (Linux; U; Android 9; Android SDK built for x86 Build/PSR1.180720.075)", + "initial_referrer": "https://www.google.com/search" + }, + "mobile": { + "app_name": "RSPM", + "app_version": "1.9.0" + }, + "device": { + "manufacturer": "Nokia", + "model": "N2023" + }, + "location": { + "ip_address": "192.0.2.0", + "latitude": 44.56, + "longitude": 54.46, + "city": "NY", + "region": "Atlas", + "country": "USA" + } + }, + "session": { + "id": "s001" + }, + "user": { + "id": "u001" + } + }, + "JSON_ARRAY": {}, + "XML": {}, + "FORM": {} + }, + "method": "POST", + "params": {}, + "version": "1", + "type": "REST", + "endpoint": "https://api.fullstory.com/v2/events", + "headers": { + "authorization": "Basic dummyfullstoryAPIKey", + "content-type": "application/json" + }, + "files": {} + } + }, + { + "description": "Missing event name", + "input": { + "message": { + "channel": "web", + "context": { + "device": { + "manufacturer": "Nokia", + "model": "N2023" + }, + "userAgent": "Dalvik/2.1.0 (Linux; U; Android 9; Android SDK built for x86 Build/PSR1.180720.075)" + }, + "integrations": { + "All": true + }, + "properties": { + "userId": "u001", + "latitude": 44.56, + "longitude": 54.46, + "region": "Atlas", + "city": "NY", + "country": "USA" + }, + "originalTimestamp": "2020-01-09T10:01:53.558Z", + "type": "track", + "sentAt": "2020-01-09T10:02:03.257Z" + }, + "destination": { + "ID": "1pYpzzvcn7AQ2W9GGIAZSsN6Mfq", + "Name": "Fullstory", + "DestinationDefinition": { + "Config": { + "cdkV2Enabled": true + } + }, + "Config": { + "apiKey": "dummyfullstoryAPIKey" + }, + "Enabled": true, + "Transformations": [] + }, + "metadata": { + "sourceType": "fddf", + "destinationType": "fdf", + "k8_namespace": "fdfd" + } + }, + "output": { + "error": "event is required for track call: Workflow: procWorkflow, Step: validateEventName, ChildStep: undefined, OriginalError: event is required for track call" + } + }, + { + "description": "Complete identify event", + "input": { + "message": { + "userId": "dummy-user001", + "channel": "web", + "context": { + "traits": { + "company": "Initech", + "address": { + "country": "USA", + "state": "CA", + "street": "101 dummy street" + }, + "email": "dummyuser@domain.com", + "name": "dummy user", + "phone": "099-999-9999" + }, + "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.130 Safari/537.36" + }, + "integrations": { + "All": true + }, + "originalTimestamp": "2020-01-27T12:20:55.301Z", + "receivedAt": "2020-01-27T17:50:58.657+05:30", + "request_ip": "14.98.244.60", + "sentAt": "2020-01-27T12:20:56.849Z", + "timestamp": "2020-01-27T17:50:57.109+05:30", + "type": "identify" + }, + "destination": { + "ID": "1pYpzzvcn7AQ2W9GGIAZSsN6Mfq", + "Name": "Fullstory", + "DestinationDefinition": { + "Config": { + "cdkV2Enabled": true + } + }, + "Config": { + "apiKey": "fullstoryAPIKey" + }, + "Enabled": true, + "Transformations": [] + }, + "metadata": { + "sourceType": "fddf", + "destinationType": "fdf", + "k8_namespace": "fdfd" + } + }, + "output": { + "body": { + "JSON": { + "properties": { + "company": "Initech", + "address": { + "country": "USA", + "state": "CA", + "street": "101 dummy street" + }, + "email": "dummyuser@domain.com", + "name": "dummy user", + "phone": "099-999-9999" + }, + "uid": "dummy-user001", + "email": "dummyuser@domain.com", + "display_name": "dummy user" + }, + "JSON_ARRAY": {}, + "XML": {}, + "FORM": {} + }, + "version": "1", + "type": "REST", + "method": "POST", + "endpoint": "https://api.fullstory.com/v2/users", + "headers": { + "authorization": "Basic fullstoryAPIKey", + "content-type": "application/json" + }, + "params": {}, + "files": {} + } + }, + { + "description": "Identify event with needed traits", + "input": { + "message": { + "userId": "dummy-user001", + "channel": "web", + "context": { + "traits": { + "email": "dummyuser@domain.com", + "name": "dummy user", + "phone": "099-999-9999" + } + }, + "timestamp": "2020-01-27T17:50:57.109+05:30", + "type": "identify" + }, + "destination": { + "ID": "1pYpzzvcn7AQ2W9GGIAZSsN6Mfq", + "Name": "Fullstory", + "DestinationDefinition": { + "Config": { + "cdkV2Enabled": true + } + }, + "Config": { + "apiKey": "fullstoryAPIKey" + }, + "Enabled": true, + "Transformations": [] + }, + "metadata": { + "sourceType": "fddf", + "destinationType": "fdf", + "k8_namespace": "fdfd" + } + }, + "output": { + "body": { + "JSON": { + "properties": { + "email": "dummyuser@domain.com", + "name": "dummy user", + "phone": "099-999-9999" + }, + "uid": "dummy-user001", + "email": "dummyuser@domain.com", + "display_name": "dummy user" + }, + "JSON_ARRAY": {}, + "XML": {}, + "FORM": {} + }, + "version": "1", + "type": "REST", + "method": "POST", + "endpoint": "https://api.fullstory.com/v2/users", + "headers": { + "authorization": "Basic fullstoryAPIKey", + "content-type": "application/json" + }, + "params": {}, + "files": {} + } + } +] diff --git a/test/__tests__/fullstory-cdk.test.ts b/test/__tests__/fullstory-cdk.test.ts new file mode 100644 index 0000000000..f7e0491aac --- /dev/null +++ b/test/__tests__/fullstory-cdk.test.ts @@ -0,0 +1,32 @@ +import fs from 'fs'; +import path from 'path'; +import { processCdkV2Workflow } from '../../src/cdk/v2/handler'; +import tags from '../../src/v0/util/tags'; + +const integration = 'fullstory'; +const destName = 'Fullstory'; + +// Processor Test files +const testDataFile = fs.readFileSync(path.resolve(__dirname, `./data/${integration}.json`), { + encoding: 'utf8', +}); +const testData = JSON.parse(testDataFile); + +describe(`${destName} Tests`, () => { + describe('Processor Tests', () => { + testData.forEach((dataPoint, index) => { + it(`${destName} - payload: ${index}`, async () => { + try { + const output = await processCdkV2Workflow( + integration, + dataPoint.input, + tags.FEATURES.PROCESSOR, + ); + expect(output).toEqual(dataPoint.output); + } catch (error: any) { + expect(error.message).toEqual(dataPoint.output.error); + } + }); + }); + }); +}); From c8b3b5a3f1f2f12c0807eba337c305d1a0c78c33 Mon Sep 17 00:00:00 2001 From: Anant Jain <62471433+anantjain45823@users.noreply.github.com> Date: Fri, 15 Sep 2023 12:57:12 +0530 Subject: [PATCH 30/37] Revert "fix(INT-339): marketo response handler to handle static list removed and skipped statuses" (#2619) Revert "fix(INT-339): marketo response handler to handle static list removed and skipped statuses (#2606)" This reverts commit e3fed49d2725a6c60409db00cfda2a997da78e71. --- src/v0/destinations/marketo/util.js | 77 ++++++++----------- .../marketo_static_list/proxy_response.json | 34 +------- .../data/marketo_static_list_proxy_input.json | 20 ----- .../marketo_static_list_proxy_output.json | 67 ++++------------ 4 files changed, 52 insertions(+), 146 deletions(-) diff --git a/src/v0/destinations/marketo/util.js b/src/v0/destinations/marketo/util.js index 1da9dc0f7e..ab39aafc15 100644 --- a/src/v0/destinations/marketo/util.js +++ b/src/v0/destinations/marketo/util.js @@ -19,8 +19,6 @@ const tags = require('../../util/tags'); * https://developers.marketo.com/rest-api/error-codes/ */ -const ERROR_CODE_TO_PASS = ['1015']; - const MARKETO_RETRYABLE_CODES = ['601', '602', '604', '611']; const MARKETO_ABORTABLE_CODES = [ '600', @@ -36,28 +34,29 @@ const MARKETO_ABORTABLE_CODES = [ ]; const MARKETO_THROTTLED_CODES = ['502', '606', '607', '608', '615']; -// Keeping here for reference const RECORD_LEVEL_ABORTBALE_ERRORS = [ -// '1001', -// '1002', -// '1003', -// '1004', -// '1005', -// '1006', -// '1007', -// '1008', -// '1011', -// '1013', -// '1014', -// '1016', -// '1017', -// '1018', -// '1021', -// '1026', -// '1027', -// '1028', -// '1036', -// '1049', -// ]; +const RECORD_LEVEL_ABORTBALE_ERRORS = [ + '1001', + '1002', + '1003', + '1004', + '1005', + '1006', + '1007', + '1008', + '1011', + '1013', + '1014', + '1015', + '1016', + '1017', + '1018', + '1021', + '1026', + '1027', + '1028', + '1036', + '1049', +]; const { DESTINATION } = require('./config'); const logger = require('../../../logger'); @@ -87,7 +86,7 @@ const marketoApplicationErrorHandler = (marketoResponse, sourceMessage, destinat }; /** * this function checks the status of individual responses and throws error if any - * response status does not match the expected status + * response ststus does not match the expected status * doc1: https://developers.marketo.com/rest-api/lead-database/custom-objects/#create_and_update * doc2: https://developers.marketo.com/rest-api/lead-database/#create_and_update * Structure of marketoResponse: { @@ -123,27 +122,17 @@ const marketoApplicationErrorHandler = (marketoResponse, sourceMessage, destinat const nestedResponseHandler = (marketoResponse, sourceMessage) => { const checkStatus = (res) => { const { status } = res; - const allowedStatus = ['updated', 'added', 'removed', 'created']; - if ( - status && - !allowedStatus.includes(status) - // we need to check the case where the id are not in list - ) { + if (status && status !== 'updated' && status !== 'created' && status !== 'added') { const { reasons } = res; let statusCode = 400; - if (reasons) { - const errorCodesFromDest = reasons.map((reason) => reason.code); - const filteredErrorCode = errorCodesFromDest.find( - (errorCode) => !ERROR_CODE_TO_PASS.includes(errorCode), - ); - if (!filteredErrorCode) { - return; - } - if (MARKETO_THROTTLED_CODES.includes(filteredErrorCode.code)) { - statusCode = 429; - } else if (MARKETO_RETRYABLE_CODES.includes(filteredErrorCode.code)) { - statusCode = 500; - } + if (reasons && RECORD_LEVEL_ABORTBALE_ERRORS.includes(reasons[0].code)) { + statusCode = 400; + } else if (reasons && MARKETO_ABORTABLE_CODES.includes(reasons[0].code)) { + statusCode = 400; + } else if (reasons && MARKETO_THROTTLED_CODES.includes(reasons[0].code)) { + statusCode = 429; + } else if (reasons && MARKETO_RETRYABLE_CODES.includes(reasons[0].code)) { + statusCode = 500; } throw new InstrumentationError( `Request failed during: ${sourceMessage}, error: ${JSON.stringify(reasons)}`, diff --git a/test/__mocks__/data/marketo_static_list/proxy_response.json b/test/__mocks__/data/marketo_static_list/proxy_response.json index 2a58d99da2..5c00ced941 100644 --- a/test/__mocks__/data/marketo_static_list/proxy_response.json +++ b/test/__mocks__/data/marketo_static_list/proxy_response.json @@ -1,31 +1,4 @@ { - "https://marketo_acct_id_success.mktorest.com/rest/v1/lists/1234/leads.json?id=110&id=111&id=112": { - "data": { - "requestId": "b6d1#18a8d2c10e7", - "result": [ - { - "id": 110, - "status": "skipped", - "reasons": [ - { - "code": "1015", - "message": "Lead not in list" - } - ] - }, - { - "id": 111, - "status": "removed" - }, - { - "id": 112, - "status": "removed" - } - ], - "success": true - }, - "status": 200 - }, "https://marketo_acct_id_success.mktorest.com/rest/v1/lists/1234/leads.json?id=1&id=2&id=3": { "data": { "requestId": "68d8#1846058ee27", @@ -87,13 +60,14 @@ "status": "skipped", "reasons": [ { - "code": "1015", - "message": "Lead not in list" + "code": "1004", + "message": "Lead not found" } ] }, + "success": true }, "status": 200 } -} \ No newline at end of file +} diff --git a/test/__tests__/data/marketo_static_list_proxy_input.json b/test/__tests__/data/marketo_static_list_proxy_input.json index 6f84e7416d..85142d68d7 100644 --- a/test/__tests__/data/marketo_static_list_proxy_input.json +++ b/test/__tests__/data/marketo_static_list_proxy_input.json @@ -1,24 +1,4 @@ [ - { - "type": "REST", - "endpoint": "https://marketo_acct_id_success.mktorest.com/rest/v1/lists/1234/leads.json?id=110&id=111&id=112", - "method": "POST", - "userId": "", - "headers": { - "Authorization": "Bearer Incorrect_token", - "Content-Type": "application/json" - }, - "body": { - "FORM": {}, - "JSON": {}, - "JSON_ARRAY": {}, - "XML": {} - }, - "files": {}, - "params": { - "destination": "marketo_static_list" - } - }, { "type": "REST", "endpoint": "https://marketo_acct_id_success.mktorest.com/rest/v1/lists/1234/leads.json?id=1&id=2&id=3", diff --git a/test/__tests__/data/marketo_static_list_proxy_output.json b/test/__tests__/data/marketo_static_list_proxy_output.json index 8ac482b5be..2dfbee0e8e 100644 --- a/test/__tests__/data/marketo_static_list_proxy_output.json +++ b/test/__tests__/data/marketo_static_list_proxy_output.json @@ -1,37 +1,4 @@ [ - { - "output": { - "message": "Request Processed Successfully", - "destinationResponse": { - "response": { - "requestId": "b6d1#18a8d2c10e7", - "result": [ - { - "id": 110, - "status": "skipped", - "reasons": [ - { - "code": "1015", - "message": "Lead not in list" - } - ] - }, - { - "id": 111, - "status": "removed" - }, - { - "id": 112, - "status": "removed" - } - ], - "success": true - }, - "status": 200 - }, - "status": 200 - } - }, { "output": { "status": 500, @@ -105,25 +72,21 @@ }, { "output": { - "status": 200, - "message": "Request Processed Successfully", - "destinationResponse": { - "response": { - "requestId": "12d3c#1846057dce2", - "result": { - "id": 5, - "status": "skipped", - "reasons": [ - { - "code": "1015", - "message": "Lead not in list" - } - ] - }, - "success": true - }, - "status": 200 - } + "destinationResponse": "", + "message": "Request failed during: during Marketo Static List Response Handling, error: [{\"code\":\"1004\",\"message\":\"Lead not found\"}]", + "statTags": { + "destType": "MARKETO_STATIC_LIST", + "errorCategory": "dataValidation", + "destinationId": "Non-determininable", + "workspaceId": "Non-determininable", + "errorType": "instrumentation", + "feature": "dataDelivery", + "implementation": "native", + "destinationId": "Non-determininable", + "workspaceId": "Non-determininable", + "module": "destination" + }, + "status": 400 } } ] \ No newline at end of file From d044663230fe49730cdac4f1b7ac04f5faca6226 Mon Sep 17 00:00:00 2001 From: Anant Jain <62471433+anantjain45823@users.noreply.github.com> Date: Fri, 15 Sep 2023 15:17:47 +0530 Subject: [PATCH 31/37] fix(INT-568): slack send event to event specific channel based on channel webhook (#2563) * fix: slack send event to event specific channel * small fixes * incorporated legacy method * added test cases and small fixes * fixed payload for modern webhooks for not sending app details * feat:added blacklisted event option --- src/v0/destinations/slack/transform.js | 173 +++-- src/v0/destinations/slack/util.js | 6 +- test/__tests__/data/slack_input.json | 887 ++++++++++++++++++++++--- test/__tests__/data/slack_output.json | 105 ++- test/__tests__/slack.test.js | 2 +- 5 files changed, 1014 insertions(+), 159 deletions(-) diff --git a/src/v0/destinations/slack/transform.js b/src/v0/destinations/slack/transform.js index ee58b63dff..b56ebfbc48 100644 --- a/src/v0/destinations/slack/transform.js +++ b/src/v0/destinations/slack/transform.js @@ -16,25 +16,38 @@ const { defaultRequestConfig, getFieldValueFromMessage, simpleProcessRouterDest, + isDefinedAndNotNull, } = require('../../util'); const { InstrumentationError, ConfigurationError } = require('../../util/errorTypes'); // build the response to be sent to backend, url encoded header is required as slack accepts payload in this format // add the username and image for Rudder // image currently served from prod CDN -const buildResponse = (payloadJSON, message, destination) => { - const endpoint = destination.Config.webhookUrl; +const buildResponse = ( + payloadJSON, + message, + destination, + channelWebhook = null, + sendAppNameAndIcon = true, +) => { + const endpoint = channelWebhook || destination.Config.webhookUrl; const response = defaultRequestConfig(); response.endpoint = endpoint; response.method = defaultPostRequestConfig.requestMethod; response.headers = { 'Content-Type': 'application/x-www-form-urlencoded' }; response.userId = message.userId ? message.userId : message.anonymousId; + const payload = + sendAppNameAndIcon === true + ? JSON.stringify({ + ...payloadJSON, + username: SLACK_USER_NAME, + icon_url: SLACK_RUDDER_IMAGE_URL, + }) + : JSON.stringify({ + ...payloadJSON, + }); response.body.FORM = { - payload: JSON.stringify({ - ...payloadJSON, - username: SLACK_USER_NAME, - icon_url: SLACK_RUDDER_IMAGE_URL, - }), + payload, }; response.statusCode = 200; logger.debug(response); @@ -42,21 +55,15 @@ const buildResponse = (payloadJSON, message, destination) => { }; const processIdentify = (message, destination) => { - // debug(JSON.stringify(destination)); const identifyTemplateConfig = destination.Config.identifyTemplate; const traitsList = getWhiteListedTraits(destination); const defaultIdentifyTemplate = 'Identified {{name}}'; logger.debug('defaulTraitsList:: ', traitsList); const uName = getName(message); - // required traitlist ?? - /* if (!traitsList || traitsList.length == 0) { - throw Error("traits list in config not present"); - } */ - const template = Handlebars.compile( (identifyTemplateConfig - ? identifyTemplateConfig.trim().length === 0 + ? identifyTemplateConfig.trim()?.length === 0 ? undefined : identifyTemplateConfig : undefined) || @@ -69,7 +76,7 @@ const processIdentify = (message, destination) => { logger.debug( 'identifyTemplateConfig: ', (identifyTemplateConfig - ? identifyTemplateConfig.trim().length === 0 + ? identifyTemplateConfig.trim()?.length === 0 ? undefined : identifyTemplateConfig : undefined) || @@ -95,18 +102,40 @@ const processIdentify = (message, destination) => { return buildResponse({ text: resultText }, message, destination); }; -function buildChannelList(channelListToSendThisEvent, eventChannelConfig, eventName) { - eventChannelConfig.forEach((channelConfig) => { - const configEventName = channelConfig.eventName - ? channelConfig.eventName.trim().length > 0 - ? channelConfig.eventName - : undefined - : undefined; - const configEventChannel = channelConfig.eventChannel - ? channelConfig.eventChannel.trim().length > 0 - ? channelConfig.eventChannel - : undefined - : undefined; +const isEventNameMatchesRegex = (eventName, regex) => eventName.match(regex)?.length > 0; + +const getChannelForEventName = (eventChannelSettings, eventName) => { + for (const channelConfig of eventChannelSettings) { + const configEventName = + channelConfig?.eventName?.trim()?.length > 0 ? channelConfig.eventName : null; + const channelWebhook = + channelConfig?.eventChannelWebhook?.length > 0 ? channelConfig.eventChannelWebhook : null; + + if (configEventName && isDefinedAndNotNull(channelWebhook)) { + if (channelConfig.eventRegex) { + logger.debug('regex: ', `${configEventName} trying to match with ${eventName}`); + logger.debug( + 'match:: ', + configEventName, + eventName, + eventName.match(new RegExp(configEventName, 'g')), + ); + if (isEventNameMatchesRegex(eventName, new RegExp(configEventName, 'g'))) { + return channelWebhook; + } + } else if (channelConfig.eventName === eventName) { + return channelWebhook; + } + } + } + return null; +}; +const getChannelNameForEvent = (eventChannelSettings, eventName) => { + for (const channelConfig of eventChannelSettings) { + const configEventName = + channelConfig?.eventName?.trim()?.length > 0 ? channelConfig.eventName : null; + const configEventChannel = + channelConfig?.eventChannel?.trim()?.length > 0 ? channelConfig.eventChannel : null; if (configEventName && configEventChannel) { if (channelConfig.eventRegex) { logger.debug('regex: ', `${configEventName} trying to match with ${eventName}`); @@ -116,37 +145,29 @@ function buildChannelList(channelListToSendThisEvent, eventChannelConfig, eventN eventName, eventName.match(new RegExp(configEventName, 'g')), ); - if ( - eventName.match(new RegExp(configEventName, 'g')) && - eventName.match(new RegExp(configEventName, 'g')).length > 0 - ) { - channelListToSendThisEvent.add(configEventChannel); + if (isEventNameMatchesRegex(eventName, new RegExp(configEventName, 'g'))) { + return configEventChannel; } } else if (configEventName === eventName) { - channelListToSendThisEvent.add(configEventChannel); + return configEventChannel; } } - }); -} + } + return null; +}; -function buildtemplateList(templateListForThisEvent, eventTemplateConfig, eventName) { - eventTemplateConfig.forEach((templateConfig) => { - const configEventName = templateConfig.eventName - ? templateConfig.eventName.trim().length > 0 - ? templateConfig.eventName - : undefined - : undefined; +const buildtemplateList = (templateListForThisEvent, eventTemplateSettings, eventName) => { + eventTemplateSettings.forEach((templateConfig) => { + const configEventName = + templateConfig?.eventName?.trim()?.length > 0 ? templateConfig.eventName : undefined; const configEventTemplate = templateConfig.eventTemplate - ? templateConfig.eventTemplate.trim().length > 0 + ? templateConfig.eventTemplate.trim()?.length > 0 ? templateConfig.eventTemplate : undefined : undefined; if (configEventName && configEventTemplate) { if (templateConfig.eventRegex) { - if ( - eventName.match(new RegExp(configEventName, 'g')) && - eventName.match(new RegExp(configEventName, 'g')).length > 0 - ) { + if (isEventNameMatchesRegex(eventName, new RegExp(configEventName, 'g'))) { templateListForThisEvent.add(configEventTemplate); } } else if (configEventName === eventName) { @@ -154,32 +175,47 @@ function buildtemplateList(templateListForThisEvent, eventTemplateConfig, eventN } } }); -} +}; const processTrack = (message, destination) => { // logger.debug(JSON.stringify(destination)); - const eventChannelConfig = destination.Config.eventChannelSettings; - const eventTemplateConfig = destination.Config.eventTemplateSettings; + const { Config } = destination; + const { eventChannelSettings, eventTemplateSettings, incomingWebhooksType, blacklistedEvents } = + Config; + const eventName = message.event; - if (!message.event) { + if (!eventName) { throw new InstrumentationError('Event name is required'); } - const eventName = message.event; - const channelListToSendThisEvent = new Set(); + if (blacklistedEvents?.length > 0) { + const blackListedEvents = blacklistedEvents.map((item) => item.eventName); + if (blackListedEvents.includes(eventName)) { + throw new ConfigurationError('Event is blacklisted. Please check configuration.'); + } + } + const templateListForThisEvent = new Set(); const traitsList = getWhiteListedTraits(destination); - // Add global context to regex always - // build the channel list and templatelist for the event, pick the first in case of multiple - // using set to filter out - // document this behaviour + /* Add global context to regex always + * build the channel list and template list for the event, pick the first in case of multiple + * using set to filter out + * document this behaviour + */ - // building channel list - buildChannelList(channelListToSendThisEvent, eventChannelConfig, eventName); - const channelListArray = Array.from(channelListToSendThisEvent); + // getting specific channel for event if available + + let channelWebhook; + let channelName; + if (incomingWebhooksType && incomingWebhooksType === 'modern') { + channelWebhook = getChannelForEventName(eventChannelSettings, eventName); + } else { + // default + channelName = getChannelNameForEvent(eventChannelSettings, eventName); + } // building templatelist - buildtemplateList(templateListForThisEvent, eventTemplateConfig, eventName); + buildtemplateList(templateListForThisEvent, eventTemplateSettings, eventName); const templateListArray = Array.from(templateListForThisEvent); logger.debug( @@ -187,8 +223,6 @@ const processTrack = (message, destination) => { templateListArray, templateListArray.length > 0 ? templateListArray[0] : undefined, ); - logger.debug('channelListToSendThisEvent: ', channelListArray); - // track event default handlebar expression const defaultTemplate = '{{name}} did {{event}}'; const template = templateListArray @@ -219,9 +253,16 @@ const processTrack = (message, destination) => { } catch (err) { throw new ConfigurationError(`Something is wrong with the event template: '${template}'`); } - - if (channelListArray && channelListArray.length > 0) { - return buildResponse({ channel: channelListArray[0], text: resultText }, message, destination); + if (incomingWebhooksType === 'modern' && channelWebhook) { + return buildResponse({ text: resultText }, message, destination, channelWebhook, false); + } + if (channelName) { + return buildResponse( + { channel: channelName, text: resultText }, + message, + destination, + channelWebhook, + ); } return buildResponse({ text: resultText }, message, destination); }; diff --git a/src/v0/destinations/slack/util.js b/src/v0/destinations/slack/util.js index b327d1d867..658ffe4d37 100644 --- a/src/v0/destinations/slack/util.js +++ b/src/v0/destinations/slack/util.js @@ -72,8 +72,10 @@ const stringifyJSON = (json, whiteListedTraits) => { return output; }; -// build default identify template -// if whitelisted traits are present build on it else build the entire traits object +/* build default identify template + * if whitelisted traits are present build on it + * else build the entire traits object + */ const buildDefaultTraitTemplate = (traitsList, traits, template) => { let generatedStringFromTemplate = template; // build template with whitelisted traits diff --git a/test/__tests__/data/slack_input.json b/test/__tests__/data/slack_input.json index 4e6195a37d..9b1ec52664 100644 --- a/test/__tests__/data/slack_input.json +++ b/test/__tests__/data/slack_input.json @@ -7,17 +7,130 @@ "ID": "1ZQUiJVMlmF7lfsdfXg7KXQnlLV", "Name": "SLACK", "DisplayName": "Slack", - "Config": { "excludeKeys": [], "includeKeys": [] } + "Config": { + "excludeKeys": [], + "includeKeys": [] + } }, "Config": { "eventChannelSettings": [ { - "eventChannel": "#slack_integration", + "eventChannelWebhook": "https://hooks.slack.com/services/example/test/demo", "eventName": "is", "eventRegex": true + } + ], + "eventTemplateSettings": [ + { + "eventName": "is", + "eventRegex": true, + "eventTemplate": "{{name}} performed {{event}} with {{properties.key1}} {{properties.key2}}" + }, + { + "eventName": "", + "eventRegex": false, + "eventTemplate": "" + } + ], + "webhookUrl": "https://hooks.slack.com/services/THZM86VSS/BV9HZ2UN6/demo", + "whitelistedTraitsSettings": [ + { + "trait": "hiji" }, - { "eventChannel": "", "eventName": "", "eventRegex": false }, - { "eventChannel": "", "eventName": "", "eventRegex": false } + { + "trait": "" + } + ] + }, + "Enabled": true, + "Transformations": [], + "IsProcessorEnabled": true + }, + "message": { + "anonymousId": "4de817fb-7f8e-4e23-b9be-f6736dbda20f", + "channel": "web", + "context": { + "app": { + "build": "1.0.0", + "name": "RudderLabs JavaScript SDK", + "namespace": "com.rudderlabs.javascript", + "version": "1.1.1-rc.1" + }, + "library": { + "name": "RudderLabs JavaScript SDK", + "version": "1.1.1-rc.1" + }, + "locale": "en-US", + "os": { + "name": "", + "version": "" + }, + "page": { + "path": "/tests/html/script-test.html", + "referrer": "http://localhost:1111/tests/html/", + "search": "", + "title": "", + "url": "http://localhost:1111/tests/html/script-test.html" + }, + "screen": { + "density": 1.7999999523162842 + }, + "traits": { + "country": "India", + "email": "name@domain.com", + "hiji": "hulala", + "name": "my-name" + }, + "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.149 Safari/537.36" + }, + "integrations": { + "All": true + }, + "messageId": "9ecc0183-89ed-48bd-87eb-b2d8e1ca6780", + "originalTimestamp": "2020-03-23T03:46:30.916Z", + "properties": { + "path": "/tests/html/script-test.html", + "referrer": "http://localhost:1111/tests/html/", + "search": "", + "title": "", + "url": "http://localhost:1111/tests/html/script-test.html" + }, + "receivedAt": "2020-03-23T09:16:31.041+05:30", + "request_ip": "[::1]:52056", + "sentAt": "2020-03-23T03:46:30.916Z", + "timestamp": "2020-03-23T09:16:31.041+05:30", + "type": "identify", + "userId": "12345" + }, + "metadata": { + "anonymousId": "4de817fb-7f8e-4e23-b9be-f6736dbda20f", + "destinationId": "1ZQVSU9SXNg6KYgZALaqjAO3PIL", + "destinationType": "SLACK", + "jobId": 126, + "messageId": "9ecc0183-89ed-48bd-87eb-b2d8e1ca6780", + "sourceId": "1YhwKyDcKstudlGxkeN5p2wgsrp" + } + }, + { + "destination": { + "ID": "1ZQVSU9SXNg6KYgZALaqjAO3PIL", + "Name": "test-slack", + "DestinationDefinition": { + "ID": "1ZQUiJVMlmF7lfsdfXg7KXQnlLV", + "Name": "SLACK", + "DisplayName": "Slack", + "Config": { + "excludeKeys": [], + "includeKeys": [] + } + }, + "Config": { + "eventChannelSettings": [ + { + "eventChannelWebhook": "https://hooks.slack.com/services/example/test/demo", + "eventName": "is", + "eventRegex": true + } ], "eventTemplateSettings": [ { @@ -25,11 +138,27 @@ "eventRegex": true, "eventTemplate": "{{name}} performed {{event}} with {{properties.key1}} {{properties.key2}}" }, - { "eventName": "", "eventRegex": false, "eventTemplate": "" } + { + "eventName": "", + "eventRegex": false, + "eventTemplate": "" + } ], "identifyTemplate": "identified {{name}} with {{traits}}", "webhookUrl": "https://hooks.slack.com/services/THZM86VSS/BV9HZ2UN6/demo", - "whitelistedTraitsSettings": [{ "trait": "hiji" }, { "trait": "" }] + "whitelistedTraitsSettings": [ + { + "trait": "hiji" + }, + { + "trait": "" + } + ], + "blacklistedEvents": [ + { + "eventName": "black_event" + } + ] }, "Enabled": true, "Transformations": [], @@ -50,7 +179,10 @@ "version": "1.1.1-rc.1" }, "locale": "en-US", - "os": { "name": "", "version": "" }, + "os": { + "name": "", + "version": "" + }, "page": { "path": "/tests/html/script-test.html", "referrer": "http://localhost:1111/tests/html/", @@ -58,7 +190,9 @@ "title": "", "url": "http://localhost:1111/tests/html/script-test.html" }, - "screen": { "density": 1.7999999523162842 }, + "screen": { + "density": 1.7999999523162842 + }, "traits": { "country": "India", "email": "name@domain.com", @@ -67,7 +201,9 @@ }, "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.149 Safari/537.36" }, - "integrations": { "All": true }, + "integrations": { + "All": true + }, "messageId": "9ecc0183-89ed-48bd-87eb-b2d8e1ca6780", "originalTimestamp": "2020-03-23T03:46:30.916Z", "properties": { @@ -101,17 +237,18 @@ "ID": "1ZQUiJVMlmF7lfsdfXg7KXQnlLV", "Name": "SLACK", "DisplayName": "Slack", - "Config": { "excludeKeys": [], "includeKeys": [] } + "Config": { + "excludeKeys": [], + "includeKeys": [] + } }, "Config": { "eventChannelSettings": [ { - "eventChannel": "#slack_integration", + "eventChannelWebhook": "https://hooks.slack.com/services/id1/id2/example", "eventName": "is", "eventRegex": true - }, - { "eventChannel": "", "eventName": "", "eventRegex": false }, - { "eventChannel": "", "eventName": "", "eventRegex": false } + } ], "eventTemplateSettings": [ { @@ -119,11 +256,22 @@ "eventRegex": true, "eventTemplate": "{{name}} performed {{event}} with {{properties.key1}} {{properties.key2}}" }, - { "eventName": "", "eventRegex": false, "eventTemplate": "" } + { + "eventName": "", + "eventRegex": false, + "eventTemplate": "" + } ], "identifyTemplate": "identified {{name}} with {{traits}}", "webhookUrl": "https://hooks.slack.com/services/THZM86VSS/BV9HZ2UN6/demo", - "whitelistedTraitsSettings": [{ "trait": "hiji" }, { "trait": "" }] + "whitelistedTraitsSettings": [ + { + "trait": "hiji" + }, + { + "trait": "" + } + ] }, "Enabled": true, "Transformations": [], @@ -144,7 +292,10 @@ "version": "1.1.1-rc.1" }, "locale": "en-US", - "os": { "name": "", "version": "" }, + "os": { + "name": "", + "version": "" + }, "page": { "path": "", "referrer": "", @@ -152,7 +303,389 @@ "title": "", "url": "" }, - "screen": { "density": 1.7999999523162842 }, + "screen": { + "density": 1.7999999523162842 + }, + "traits": { + "country": "India", + "email": "name@domain.com", + "hiji": "hulala", + "name": "my-name" + }, + "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.149 Safari/537.36" + }, + "traits": { + "country": "USA", + "email": "test@domain.com", + "hiji": "hulala-1", + "name": "my-name-1" + }, + "integrations": { + "All": true + }, + "messageId": "4aaecff2-a513-4bbf-9824-c471f4ac9777", + "originalTimestamp": "2020-03-23T03:41:46.122Z", + "receivedAt": "2020-03-23T09:11:46.244+05:30", + "request_ip": "[::1]:52055", + "sentAt": "2020-03-23T03:41:46.123Z", + "timestamp": "2020-03-23T09:11:46.243+05:30", + "type": "identify", + "userId": "12345" + }, + "metadata": { + "anonymousId": "12345", + "destinationId": "1ZQVSU9SXNg6KYgZALaqjAO3PIL", + "destinationType": "SLACK", + "jobId": 123, + "messageId": "4aaecff2-a513-4bbf-9824-c471f4ac9777", + "sourceId": "1YhwKyDcKstudlGxkeN5p2wgsrp" + } + }, + { + "destination": { + "ID": "1ZQVSU9SXNg6KYgZALaqjAO3PIL", + "Name": "test-slack", + "DestinationDefinition": { + "ID": "1ZQUiJVMlmF7lfsdfXg7KXQnlLV", + "Name": "SLACK", + "DisplayName": "Slack", + "Config": { + "excludeKeys": [], + "includeKeys": [] + } + }, + "Config": { + "incomingWebhooksType": "modern", + "eventChannelSettings": [ + { + "eventChannelWebhook": "https://hooks.slack.com/services/id1/id2/demo", + "eventName": "is", + "eventRegex": true + }, + { + "eventChannelWebhook": "https://hooks.slack.com/services/id1/id2/example+1", + "eventName": "is", + "eventRegex": true + } + ], + "eventTemplateSettings": [ + { + "eventName": "is", + "eventRegex": true, + "eventTemplate": "{{name}} performed {{event}} with {{properties.key1}} {{properties.key2}} and traits {{traitsList.hiji}}" + }, + { + "eventName": "", + "eventRegex": false, + "eventTemplate": "" + } + ], + "identifyTemplate": "identified {{name}} with {{traits}}", + "webhookUrl": "https://hooks.slack.com/services/THZM86VSS/BV9HZ2UN6/demo", + "whitelistedTraitsSettings": [ + { + "trait": "hiji" + }, + { + "trait": "" + } + ], + "blacklistedEvents": [ + { + "eventName": "black_event" + } + ] + }, + "Enabled": true, + "Transformations": [], + "IsProcessorEnabled": true + }, + "message": { + "anonymousId": "00000000000000000000000000", + "channel": "web", + "context": { + "app": { + "build": "1.0.0", + "name": "RudderLabs JavaScript SDK", + "namespace": "com.rudderlabs.javascript", + "version": "1.1.1-rc.1" + }, + "ip": "0.0.0.0", + "library": { + "name": "RudderLabs JavaScript SDK", + "version": "1.1.1-rc.1" + }, + "locale": "en-US", + "os": { + "name": "", + "version": "" + }, + "page": { + "path": "/tests/html/script-test.html", + "referrer": "http://localhost:1111/tests/html/", + "search": "", + "title": "", + "url": "http://localhost:1111/tests/html/script-test.html" + }, + "screen": { + "density": 1.7999999523162842 + }, + "traits": { + "country": "India", + "email": "name@domain.com", + "hiji": "hulala", + "name": "my-name" + }, + "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.149 Safari/537.36" + }, + "event": "test_isent1", + "integrations": { + "All": true + }, + "messageId": "78102118-56ac-4c5a-a495-8cd7c8f71cc2", + "originalTimestamp": "2020-03-23T03:46:30.921Z", + "properties": { + "currency": "USD", + "key1": "test_val1", + "key2": "test_val2", + "revenue": 30, + "user_actual_id": 12345 + }, + "receivedAt": "2020-03-23T09:16:31.064+05:30", + "request_ip": "[::1]:52057", + "sentAt": "2020-03-23T03:46:30.921Z", + "timestamp": "2020-03-23T09:16:31.064+05:30", + "type": "track", + "userId": "12345" + }, + "metadata": { + "anonymousId": "00000000000000000000000000", + "destinationId": "1ZQVSU9SXNg6KYgZALaqjAO3PIL", + "destinationType": "SLACK", + "jobId": 128, + "messageId": "78102118-56ac-4c5a-a495-8cd7c8f71cc2", + "sourceId": "1YhwKyDcKstudlGxkeN5p2wgsrp" + } + }, + { + "destination": { + "ID": "1ZQVSU9SXNg6KYgZALaqjAO3PIL", + "Name": "test-slack", + "DestinationDefinition": { + "ID": "1ZQUiJVMlmF7lfsdfXg7KXQnlLV", + "Name": "SLACK", + "DisplayName": "Slack", + "Config": { + "excludeKeys": [], + "includeKeys": [] + } + }, + "Config": { + "incomingWebhooksType": "modern", + "eventChannelSettings": [ + { + "eventChannelWebhook": "https://hooks.slack.com/services/id1/id2/example", + "eventName": "is", + "eventChannel": "example_channel", + "eventRegex": true + }, + { + "eventChannelWebhook": "https://hooks.slack.com/services/id1/id2/example+1", + "eventName": "is", + "eventChannel": "example_channel", + "eventRegex": true + } + ], + "eventTemplateSettings": [ + { + "eventName": "is", + "eventRegex": true, + "eventTemplate": "{{name}} performed {{event}} with {{properties.key1}} {{properties.key2}}" + }, + { + "eventName": "", + "eventRegex": false, + "eventTemplate": "" + } + ], + "identifyTemplate": "identified {{name}} with {{traits}}", + "webhookUrl": "https://hooks.slack.com/services/THZM86VSS/BV9HZ2UN6/demo", + "whitelistedTraitsSettings": [ + { + "trait": "hiji" + }, + { + "trait": "" + } + ], + "blacklistedEvents": [ + { + "eventName": "black_event" + } + ] + }, + "Enabled": true, + "Transformations": [], + "IsProcessorEnabled": true + }, + "message": { + "anonymousId": "00000000000000000000000000", + "channel": "web", + "context": { + "app": { + "build": "1.0.0", + "name": "RudderLabs JavaScript SDK", + "namespace": "com.rudderlabs.javascript", + "version": "1.1.1-rc.1" + }, + "ip": "0.0.0.0", + "library": { + "name": "RudderLabs JavaScript SDK", + "version": "1.1.1-rc.1" + }, + "locale": "en-US", + "os": { + "name": "", + "version": "" + }, + "page": { + "path": "/tests/html/script-test.html", + "referrer": "http://localhost:1111/tests/html/", + "search": "", + "title": "", + "url": "http://localhost:1111/tests/html/script-test.html" + }, + "screen": { + "density": 1.7999999523162842 + }, + "traits": { + "country": "India", + "email": "name@domain.com", + "hiji": "hulala", + "name": "my-name" + }, + "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.149 Safari/537.36" + }, + "event": "test_eventing_testis", + "integrations": { + "All": true + }, + "messageId": "8b8d5937-09bc-49dc-a35e-8cd6370575f8", + "originalTimestamp": "2020-03-23T03:46:30.922Z", + "properties": { + "currency": "USD", + "key1": "test_val1", + "key2": "test_val2", + "revenue": 30, + "user_actual_id": 12345 + }, + "receivedAt": "2020-03-23T09:16:31.064+05:30", + "request_ip": "[::1]:52054", + "sentAt": "2020-03-23T03:46:30.923Z", + "timestamp": "2020-03-23T09:16:31.063+05:30", + "type": "track", + "userId": "12345" + }, + "metadata": { + "anonymousId": "00000000000000000000000000", + "destinationId": "1ZQVSU9SXNg6KYgZALaqjAO3PIL", + "destinationType": "SLACK", + "jobId": 129, + "messageId": "8b8d5937-09bc-49dc-a35e-8cd6370575f8", + "sourceId": "1YhwKyDcKstudlGxkeN5p2wgsrp" + } + }, + { + "destination": { + "ID": "1ZQVSU9SXNg6KYgZALaqjAO3PIL", + "Name": "test-slack", + "DestinationDefinition": { + "ID": "1ZQUiJVMlmF7lfsdfXg7KXQnlLV", + "Name": "SLACK", + "DisplayName": "Slack", + "Config": { + "excludeKeys": [], + "includeKeys": [] + } + }, + "Config": { + "incomingWebhooksType": "modern", + "eventChannelSettings": [ + { + "eventChannelWebhook": "https://hooks.slack.com/services/id1/id2/example", + "eventName": "test_eventing_test", + "eventChannel": "example_channel", + "eventRegex": false + }, + { + "eventChannelWebhook": "https://hooks.slack.com/services/id1/id2/example+1", + "eventName": "", + "eventChannel": "example_channel", + "eventRegex": true + } + ], + "eventTemplateSettings": [ + { + "eventName": "is", + "eventRegex": true, + "eventTemplate": "{{name}} performed {{event}} with {{properties.key1}} {{properties.key2}}" + }, + { + "eventName": "", + "eventRegex": false, + "eventTemplate": "" + } + ], + "identifyTemplate": "identified {{name}} with {{traits}}", + "webhookUrl": "https://hooks.slack.com/services/THZM86VSS/BV9HZ2UN6/demo", + "whitelistedTraitsSettings": [ + { + "trait": "hiji" + }, + { + "trait": "" + } + ], + "blacklistedEvents": [ + { + "eventName": "black_event" + } + ] + }, + "Enabled": true, + "Transformations": [], + "IsProcessorEnabled": true + }, + "message": { + "anonymousId": "00000000000000000000000000", + "channel": "web", + "context": { + "app": { + "build": "1.0.0", + "name": "RudderLabs JavaScript SDK", + "namespace": "com.rudderlabs.javascript", + "version": "1.1.1-rc.1" + }, + "ip": "0.0.0.0", + "library": { + "name": "RudderLabs JavaScript SDK", + "version": "1.1.1-rc.1" + }, + "locale": "en-US", + "os": { + "name": "", + "version": "" + }, + "page": { + "path": "/tests/html/script-test.html", + "referrer": "http://localhost:1111/tests/html/", + "search": "", + "title": "", + "url": "http://localhost:1111/tests/html/script-test.html" + }, + "screen": { + "density": 1.7999999523162842 + }, "traits": { "country": "India", "email": "name@domain.com", @@ -161,28 +694,32 @@ }, "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.149 Safari/537.36" }, - "traits": { - "country": "USA", - "email": "test@domain.com", - "hiji": "hulala-1", - "name": "my-name-1" + "event": "test_eventing_test", + "integrations": { + "All": true }, - "integrations": { "All": true }, - "messageId": "4aaecff2-a513-4bbf-9824-c471f4ac9777", - "originalTimestamp": "2020-03-23T03:41:46.122Z", - "receivedAt": "2020-03-23T09:11:46.244+05:30", - "request_ip": "[::1]:52055", - "sentAt": "2020-03-23T03:41:46.123Z", - "timestamp": "2020-03-23T09:11:46.243+05:30", - "type": "identify", + "messageId": "8b8d5937-09bc-49dc-a35e-8cd6370575f8", + "originalTimestamp": "2020-03-23T03:46:30.922Z", + "properties": { + "currency": "USD", + "key1": "test_val1", + "key2": "test_val2", + "revenue": 30, + "user_actual_id": 12345 + }, + "receivedAt": "2020-03-23T09:16:31.064+05:30", + "request_ip": "[::1]:52054", + "sentAt": "2020-03-23T03:46:30.923Z", + "timestamp": "2020-03-23T09:16:31.063+05:30", + "type": "track", "userId": "12345" }, "metadata": { - "anonymousId": "12345", + "anonymousId": "00000000000000000000000000", "destinationId": "1ZQVSU9SXNg6KYgZALaqjAO3PIL", "destinationType": "SLACK", - "jobId": 123, - "messageId": "4aaecff2-a513-4bbf-9824-c471f4ac9777", + "jobId": 129, + "messageId": "8b8d5937-09bc-49dc-a35e-8cd6370575f8", "sourceId": "1YhwKyDcKstudlGxkeN5p2wgsrp" } }, @@ -194,17 +731,24 @@ "ID": "1ZQUiJVMlmF7lfsdfXg7KXQnlLV", "Name": "SLACK", "DisplayName": "Slack", - "Config": { "excludeKeys": [], "includeKeys": [] } + "Config": { + "excludeKeys": [], + "includeKeys": [] + } }, "Config": { + "incomingWebhooksType": "legacy", "eventChannelSettings": [ { - "eventChannel": "#slack_integration", + "eventChannelWebhook": "https://hooks.slack.com/services/id1/id2/demo", "eventName": "is", "eventRegex": true }, - { "eventChannel": "", "eventName": "", "eventRegex": false }, - { "eventChannel": "", "eventName": "", "eventRegex": false } + { + "eventChannelWebhook": "https://hooks.slack.com/services/id1/id2/example+1", + "eventName": "is", + "eventRegex": true + } ], "eventTemplateSettings": [ { @@ -212,11 +756,27 @@ "eventRegex": true, "eventTemplate": "{{name}} performed {{event}} with {{properties.key1}} {{properties.key2}} and traits {{traitsList.hiji}}" }, - { "eventName": "", "eventRegex": false, "eventTemplate": "" } + { + "eventName": "", + "eventRegex": false, + "eventTemplate": "" + } ], "identifyTemplate": "identified {{name}} with {{traits}}", "webhookUrl": "https://hooks.slack.com/services/THZM86VSS/BV9HZ2UN6/demo", - "whitelistedTraitsSettings": [{ "trait": "hiji" }, { "trait": "" }] + "whitelistedTraitsSettings": [ + { + "trait": "hiji" + }, + { + "trait": "" + } + ], + "blacklistedEvents": [ + { + "eventName": "black_event" + } + ] }, "Enabled": true, "Transformations": [], @@ -238,7 +798,10 @@ "version": "1.1.1-rc.1" }, "locale": "en-US", - "os": { "name": "", "version": "" }, + "os": { + "name": "", + "version": "" + }, "page": { "path": "/tests/html/script-test.html", "referrer": "http://localhost:1111/tests/html/", @@ -246,7 +809,9 @@ "title": "", "url": "http://localhost:1111/tests/html/script-test.html" }, - "screen": { "density": 1.7999999523162842 }, + "screen": { + "density": 1.7999999523162842 + }, "traits": { "country": "India", "email": "name@domain.com", @@ -256,7 +821,9 @@ "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.149 Safari/537.36" }, "event": "test_isent1", - "integrations": { "All": true }, + "integrations": { + "All": true + }, "messageId": "78102118-56ac-4c5a-a495-8cd7c8f71cc2", "originalTimestamp": "2020-03-23T03:46:30.921Z", "properties": { @@ -290,17 +857,25 @@ "ID": "1ZQUiJVMlmF7lfsdfXg7KXQnlLV", "Name": "SLACK", "DisplayName": "Slack", - "Config": { "excludeKeys": [], "includeKeys": [] } + "Config": { + "excludeKeys": [], + "includeKeys": [] + } }, "Config": { + "incomingWebhooksType": "legacy", "eventChannelSettings": [ { - "eventChannel": "#slack_integration", + "eventChannelWebhook": "https://hooks.slack.com/services/id1/id2/example", "eventName": "is", "eventRegex": true }, - { "eventChannel": "", "eventName": "", "eventRegex": false }, - { "eventChannel": "", "eventName": "", "eventRegex": false } + { + "eventChannelWebhook": "https://hooks.slack.com/services/id1/id2/example+1", + "eventChannel": "example-of-legacy", + "eventName": "is", + "eventRegex": true + } ], "eventTemplateSettings": [ { @@ -308,11 +883,27 @@ "eventRegex": true, "eventTemplate": "{{name}} performed {{event}} with {{properties.key1}} {{properties.key2}}" }, - { "eventName": "", "eventRegex": false, "eventTemplate": "" } + { + "eventName": "", + "eventRegex": false, + "eventTemplate": "" + } ], "identifyTemplate": "identified {{name}} with {{traits}}", "webhookUrl": "https://hooks.slack.com/services/THZM86VSS/BV9HZ2UN6/demo", - "whitelistedTraitsSettings": [{ "trait": "hiji" }, { "trait": "" }] + "whitelistedTraitsSettings": [ + { + "trait": "hiji" + }, + { + "trait": "" + } + ], + "blacklistedEvents": [ + { + "eventName": "black_event" + } + ] }, "Enabled": true, "Transformations": [], @@ -334,7 +925,10 @@ "version": "1.1.1-rc.1" }, "locale": "en-US", - "os": { "name": "", "version": "" }, + "os": { + "name": "", + "version": "" + }, "page": { "path": "/tests/html/script-test.html", "referrer": "http://localhost:1111/tests/html/", @@ -342,7 +936,9 @@ "title": "", "url": "http://localhost:1111/tests/html/script-test.html" }, - "screen": { "density": 1.7999999523162842 }, + "screen": { + "density": 1.7999999523162842 + }, "traits": { "country": "India", "email": "name@domain.com", @@ -352,7 +948,9 @@ "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.149 Safari/537.36" }, "event": "test_eventing_testis", - "integrations": { "All": true }, + "integrations": { + "All": true + }, "messageId": "8b8d5937-09bc-49dc-a35e-8cd6370575f8", "originalTimestamp": "2020-03-23T03:46:30.922Z", "properties": { @@ -394,19 +992,9 @@ "Config": { "eventChannelSettings": [ { - "eventChannel": "#slack_integration", + "eventChannelWebhook": "https://hooks.slack.com/services/example/test/demo", "eventName": "is", "eventRegex": true - }, - { - "eventChannel": "", - "eventName": "", - "eventRegex": false - }, - { - "eventChannel": "", - "eventName": "", - "eventRegex": false } ], "eventTemplateSettings": [ @@ -510,17 +1098,18 @@ "ID": "1ZQUiJVMlmF7lfsdfXg7KXQnlLV", "Name": "SLACK", "DisplayName": "Slack", - "Config": { "excludeKeys": [], "includeKeys": [] } + "Config": { + "excludeKeys": [], + "includeKeys": [] + } }, "Config": { "eventChannelSettings": [ { - "eventChannel": "#slack_integration", + "eventChannelWebhook": "https://hooks.slack.com/services/example/test/demo", "eventName": "is", "eventRegex": true - }, - { "eventChannel": "", "eventName": "", "eventRegex": false }, - { "eventChannel": "", "eventName": "", "eventRegex": false } + } ], "eventTemplateSettings": [ { @@ -528,11 +1117,22 @@ "eventRegex": true, "eventTemplate": "{{name}} performed {{event}} with {{properties.key1}} {{properties.key2}}" }, - { "eventName": "", "eventRegex": false, "eventTemplate": "" } + { + "eventName": "", + "eventRegex": false, + "eventTemplate": "" + } ], "identifyTemplate": "identified {{name}} with {{traits}}", "webhookUrl": "https://hooks.slack.com/services/THZM86VSS/BV9HZ2UN6/demo", - "whitelistedTraitsSettings": [{ "trait": "hiji" }, { "trait": "" }] + "whitelistedTraitsSettings": [ + { + "trait": "hiji" + }, + { + "trait": "" + } + ] }, "Enabled": true, "Transformations": [], @@ -554,7 +1154,10 @@ "version": "1.1.1-rc.1" }, "locale": "en-US", - "os": { "name": "", "version": "" }, + "os": { + "name": "", + "version": "" + }, "page": { "path": "/tests/html/script-test.html", "referrer": "http://localhost:1111/tests/html/", @@ -562,7 +1165,9 @@ "title": "", "url": "http://localhost:1111/tests/html/script-test.html" }, - "screen": { "density": 1.7999999523162842 }, + "screen": { + "density": 1.7999999523162842 + }, "traits": { "country": "India", "email": "name@domain.com", @@ -571,7 +1176,9 @@ }, "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.149 Safari/537.36" }, - "integrations": { "All": true }, + "integrations": { + "All": true + }, "messageId": "8b8d5937-09bc-49dc-a35e-8cd6370575f8", "originalTimestamp": "2020-03-23T03:46:30.922Z", "properties": { @@ -605,17 +1212,18 @@ "ID": "1ZQUiJVMlmF7lfsdfXg7KXQnlLV", "Name": "SLACK", "DisplayName": "Slack", - "Config": { "excludeKeys": [], "includeKeys": [] } + "Config": { + "excludeKeys": [], + "includeKeys": [] + } }, "Config": { "eventChannelSettings": [ { - "eventChannel": "#slack_integration", + "eventChannelWebhook": "https://hooks.slack.com/services/example/test/demo", "eventName": "is", "eventRegex": true - }, - { "eventChannel": "", "eventName": "", "eventRegex": false }, - { "eventChannel": "", "eventName": "", "eventRegex": false } + } ], "eventTemplateSettings": [ { @@ -623,11 +1231,22 @@ "eventRegex": true, "eventTemplate": "{{name}} performed {{event}} with {{properties. key1}} {{properties.key2}} and traits {{traitsList.hiji}}" }, - { "eventName": "", "eventRegex": false, "eventTemplate": "" } + { + "eventName": "", + "eventRegex": false, + "eventTemplate": "" + } ], "identifyTemplate": "identified {{name}} with {{traits}}", "webhookUrl": "https://hooks.slack.com/services/THZM86VSS/BV9HZ2UN6/demo", - "whitelistedTraitsSettings": [{ "trait": "hiji" }, { "trait": "" }] + "whitelistedTraitsSettings": [ + { + "trait": "hiji" + }, + { + "trait": "" + } + ] }, "Enabled": true, "Transformations": [], @@ -649,7 +1268,10 @@ "version": "1.1.1-rc.1" }, "locale": "en-US", - "os": { "name": "", "version": "" }, + "os": { + "name": "", + "version": "" + }, "page": { "path": "/tests/html/script-test.html", "referrer": "http://localhost:1111/tests/html/", @@ -657,7 +1279,9 @@ "title": "", "url": "http://localhost:1111/tests/html/script-test.html" }, - "screen": { "density": 1.7999999523162842 }, + "screen": { + "density": 1.7999999523162842 + }, "traits": { "country": "India", "email": "name@domain.com", @@ -667,7 +1291,9 @@ "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.149 Safari/537.36" }, "event": "test_isent1", - "integrations": { "All": true }, + "integrations": { + "All": true + }, "messageId": "78102118-56ac-4c5a-a495-8cd7c8f71cc2", "originalTimestamp": "2020-03-23T03:46:30.921Z", "properties": { @@ -692,5 +1318,98 @@ "messageId": "78102118-56ac-4c5a-a495-8cd7c8f71cc2", "sourceId": "1YhwKyDcKstudlGxkeN5p2wgsrp" } + }, + { + "destination": { + "ID": "1ZQVSU9SXNg6KYgZALaqjAO3PIL", + "Name": "test-slack", + "DestinationDefinition": { + "ID": "1ZQUiJVMlmF7lfsdfXg7KXQnlLV", + "Name": "SLACK", + "DisplayName": "Slack", + "Config": { + "excludeKeys": [], + "includeKeys": [] + } + }, + "Config": { + "incomingWebhooksType": "legacy", + "eventChannelSettings": [ + { + "eventChannelWebhook": "https://hooks.slack.com/services/id1/id2/example", + "eventName": "is", + "eventRegex": true + }, + { + "eventChannelWebhook": "https://hooks.slack.com/services/id1/id2/example+1", + "eventChannel": "example-of-legacy", + "eventName": "is", + "eventRegex": true + } + ], + "eventTemplateSettings": [ + { + "eventName": "is", + "eventRegex": true, + "eventTemplate": "{{name}} performed {{event}} with {{properties.key1}} {{properties.key2}}" + }, + { + "eventName": "", + "eventRegex": false, + "eventTemplate": "" + } + ], + "identifyTemplate": "identified {{name}} with {{traits}}", + "webhookUrl": "https://hooks.slack.com/services/THZM86VSS/BV9HZ2UN6/demo", + "whitelistedTraitsSettings": [ + { + "trait": "hiji" + }, + { + "trait": "" + } + ], + "blacklistedEvents": [ + { + "eventName": "black_event" + } + ] + }, + "Enabled": true, + "Transformations": [], + "IsProcessorEnabled": true + }, + "message": { + "anonymousId": "00000000000000000000000000", + "channel": "web", + "context": {}, + "event": "black_event", + "integrations": { + "All": true + }, + "messageId": "8b8d5937-09bc-49dc-a35e-8cd6370575f8", + "originalTimestamp": "2020-03-23T03:46:30.922Z", + "properties": { + "currency": "USD", + "key1": "test_val1", + "key2": "test_val2", + "revenue": 30, + "user_actual_id": 12345 + }, + "receivedAt": "2020-03-23T09:16:31.064+05:30", + "request_ip": "[::1]:52054", + "sentAt": "2020-03-23T03:46:30.923Z", + "timestamp": "2020-03-23T09:16:31.063+05:30", + "type": "track", + "userId": "12345" + }, + "metadata": { + "anonymousId": "00000000000000000000000000", + "destinationId": "1ZQVSU9SXNg6KYgZALaqjAO3PIL", + "destinationType": "SLACK", + "jobId": 129, + "messageId": "8b8d5937-09bc-49dc-a35e-8cd6370575f8", + "sourceId": "1YhwKyDcKstudlGxkeN5p2wgsrp" + } } -] +] \ No newline at end of file diff --git a/test/__tests__/data/slack_output.json b/test/__tests__/data/slack_output.json index 5c8495c757..853daf7801 100644 --- a/test/__tests__/data/slack_output.json +++ b/test/__tests__/data/slack_output.json @@ -1,4 +1,25 @@ [ + { + "version": "1", + "type": "REST", + "method": "POST", + "endpoint": "https://hooks.slack.com/services/THZM86VSS/BV9HZ2UN6/demo", + "headers": { + "Content-Type": "application/x-www-form-urlencoded" + }, + "params": {}, + "body": { + "JSON": {}, + "XML": {}, + "JSON_ARRAY": {}, + "FORM": { + "payload": "{\"text\":\"Identified my-namehiji: hulala \",\"username\":\"RudderStack\",\"icon_url\":\"https://cdn.rudderlabs.com/rudderstack.png\"}" + } + }, + "files": {}, + "userId": "12345", + "statusCode": 200 + }, { "error": "Event type page is not supported" }, @@ -7,7 +28,9 @@ "type": "REST", "method": "POST", "endpoint": "https://hooks.slack.com/services/THZM86VSS/BV9HZ2UN6/demo", - "headers": { "Content-Type": "application/x-www-form-urlencoded" }, + "headers": { + "Content-Type": "application/x-www-form-urlencoded" + }, "params": {}, "body": { "JSON": {}, @@ -21,19 +44,84 @@ "userId": "12345", "statusCode": 200 }, + { + "version": "1", + "type": "REST", + "method": "POST", + "endpoint": "https://hooks.slack.com/services/id1/id2/demo", + "headers": { + "Content-Type": "application/x-www-form-urlencoded" + }, + "params": {}, + "body": { + "JSON": {}, + "XML": {}, + "JSON_ARRAY": {}, + "FORM": { + "payload": "{\"text\":\"my-name performed test_isent1 with test_val1 test_val2 and traits hulala\"}" + } + }, + "files": {}, + "userId": "12345", + "statusCode": 200 + }, + { + "version": "1", + "type": "REST", + "method": "POST", + "endpoint": "https://hooks.slack.com/services/id1/id2/example", + "headers": { + "Content-Type": "application/x-www-form-urlencoded" + }, + "params": {}, + "body": { + "JSON": {}, + "XML": {}, + "JSON_ARRAY": {}, + "FORM": { + "payload": "{\"text\":\"my-name performed test_eventing_testis with test_val1 test_val2\"}" + } + }, + "files": {}, + "userId": "12345", + "statusCode": 200 + }, + { + "version": "1", + "type": "REST", + "method": "POST", + "endpoint": "https://hooks.slack.com/services/id1/id2/example", + "headers": { + "Content-Type": "application/x-www-form-urlencoded" + }, + "params": {}, + "body": { + "JSON": {}, + "XML": {}, + "JSON_ARRAY": {}, + "FORM": { + "payload": "{\"text\":\"my-name did test_eventing_test\"}" + } + }, + "files": {}, + "userId": "12345", + "statusCode": 200 + }, { "version": "1", "type": "REST", "method": "POST", "endpoint": "https://hooks.slack.com/services/THZM86VSS/BV9HZ2UN6/demo", - "headers": { "Content-Type": "application/x-www-form-urlencoded" }, + "headers": { + "Content-Type": "application/x-www-form-urlencoded" + }, "params": {}, "body": { "JSON": {}, "XML": {}, "JSON_ARRAY": {}, "FORM": { - "payload": "{\"channel\":\"#slack_integration\",\"text\":\"my-name performed test_isent1 with test_val1 test_val2 and traits hulala\",\"username\":\"RudderStack\",\"icon_url\":\"https://cdn.rudderlabs.com/rudderstack.png\"}" + "payload": "{\"text\":\"my-name performed test_isent1 with test_val1 test_val2 and traits hulala\",\"username\":\"RudderStack\",\"icon_url\":\"https://cdn.rudderlabs.com/rudderstack.png\"}" } }, "files": {}, @@ -45,14 +133,16 @@ "type": "REST", "method": "POST", "endpoint": "https://hooks.slack.com/services/THZM86VSS/BV9HZ2UN6/demo", - "headers": { "Content-Type": "application/x-www-form-urlencoded" }, + "headers": { + "Content-Type": "application/x-www-form-urlencoded" + }, "params": {}, "body": { "JSON": {}, "XML": {}, "JSON_ARRAY": {}, "FORM": { - "payload": "{\"channel\":\"#slack_integration\",\"text\":\"my-name performed test_eventing_testis with test_val1 test_val2\",\"username\":\"RudderStack\",\"icon_url\":\"https://cdn.rudderlabs.com/rudderstack.png\"}" + "payload": "{\"channel\":\"example-of-legacy\",\"text\":\"my-name performed test_eventing_testis with test_val1 test_val2\",\"username\":\"RudderStack\",\"icon_url\":\"https://cdn.rudderlabs.com/rudderstack.png\"}" } }, "files": {}, @@ -67,5 +157,8 @@ }, { "error": "Something is wrong with the event template: '{{name}} performed {{event}} with {{properties. key1}} {{properties.key2}} and traits {{traitsList.hiji}}'" + }, + { + "error": "Event is blacklisted. Please check configuration." } -] +] \ No newline at end of file diff --git a/test/__tests__/slack.test.js b/test/__tests__/slack.test.js index c2b5b91ede..eec0f4054f 100644 --- a/test/__tests__/slack.test.js +++ b/test/__tests__/slack.test.js @@ -29,7 +29,7 @@ const inputRouterData = JSON.parse(inputRouterDataFile); const expectedRouterData = JSON.parse(outputRouterDataFile); inputData.forEach((input, index) => { - test(`${name} Tests - payload: %{index}`, () => { + test(`${name} Tests - payload: ${index}`, () => { try { const output = transformer.process(input); expect(output).toEqual([expectedData[index]]); From c03686b2cb329a5d18e96f5212f0d9b8ddd305a8 Mon Sep 17 00:00:00 2001 From: Sankeerth Date: Fri, 15 Sep 2023 17:58:08 +0530 Subject: [PATCH 32/37] =?UTF-8?q?feat:=20introduce=20de-activation=20of=20?= =?UTF-8?q?authStatus=20for=20access=5Fdenied=20or=20inva=E2=80=A6=20(#259?= =?UTF-8?q?8)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * feat: introduce de-activation of authStatus for access_denied or invalid_grant errors Signed-off-by: Sai Sankeerth * fix: test-cases-1 Signed-off-by: Sai Sankeerth * chore: remove all references of disable_dest and remove the const disable_dest Signed-off-by: Sai Sankeerth * chore: refactor to use util methods for getting auth error category and access-token Signed-off-by: Sai Sankeerth * fix: pardot router component test failure and remove unnecessary code Signed-off-by: Sai Sankeerth * fix: remove unused code --------- Signed-off-by: Sai Sankeerth Co-authored-by: Sai Sankeerth --- src/adapters/networkhandler/authConstants.js | 2 +- src/v0/destinations/bqstream/util.js | 11 ++-- .../campaign_manager/networkHandler.js | 19 +------ .../campaign_manager/transform.js | 12 +--- .../networkHandler.js | 22 ++------ .../transform.js | 25 +-------- .../networkHandler.js | 25 ++------- .../utils.js | 37 ++----------- .../networkHandler.js | 22 ++------ .../transform.js | 37 +++---------- src/v0/destinations/pardot/transform.js | 24 +------- .../networkHandler.js | 24 ++------ .../snapchat_custom_audience/transform.js | 26 +-------- src/v0/util/index.js | 55 ++++++++++++++++++- ...e_adwords_enhanced_conversions_output.json | 2 +- ...ds_enhanced_conversions_router_output.json | 2 +- ...ogle_adwords_remarketing_lists_output.json | 2 +- test/__tests__/data/pardot_router_output.json | 2 +- ...snapchat_custom_audience_proxy_output.json | 1 + .../destinations/pardot/router/data.ts | 2 +- 20 files changed, 112 insertions(+), 240 deletions(-) diff --git a/src/adapters/networkhandler/authConstants.js b/src/adapters/networkhandler/authConstants.js index c9a6a57835..f88361107a 100644 --- a/src/adapters/networkhandler/authConstants.js +++ b/src/adapters/networkhandler/authConstants.js @@ -2,6 +2,6 @@ * This class is used for handling Auth related errors */ module.exports = { - DISABLE_DEST: 'DISABLE_DESTINATION', REFRESH_TOKEN: 'REFRESH_TOKEN', + AUTH_STATUS_INACTIVE: 'AUTH_STATUS_INACTIVE', }; diff --git a/src/v0/destinations/bqstream/util.js b/src/v0/destinations/bqstream/util.js index cc3aba78b2..2448d72d76 100644 --- a/src/v0/destinations/bqstream/util.js +++ b/src/v0/destinations/bqstream/util.js @@ -4,7 +4,10 @@ const { getDynamicErrorType, processAxiosResponse, } = require('../../../adapters/utils/networkUtils'); -const { DISABLE_DEST, REFRESH_TOKEN } = require('../../../adapters/networkhandler/authConstants'); +const { + REFRESH_TOKEN, + AUTH_STATUS_INACTIVE, +} = require('../../../adapters/networkhandler/authConstants'); const { isHttpStatusSuccess } = require('../../util'); const { proxyRequest } = require('../../../adapters/network'); const { UnhandledStatusCodeError, NetworkError, AbortedError } = require('../../util/errorTypes'); @@ -24,7 +27,7 @@ const trimBqStreamResponse = (response) => ({ * Obtains the Destination OAuth Error Category based on the error code obtained from destination * * - If an error code is such that the user will not be allowed inside the destination, - * such error codes fall under DISABLE_DESTINATION + * such error codes fall under AUTH_STATUS_INACTIVE * - If an error code is such that upon refresh we can get a new token which can be used to send event, * such error codes fall under REFRESH_TOKEN category * - If an error code doesn't fall under both categories, we can return an empty string @@ -34,7 +37,7 @@ const trimBqStreamResponse = (response) => ({ const getDestAuthCategory = (errorCategory) => { switch (errorCategory) { case 'PERMISSION_DENIED': - return DISABLE_DEST; + return AUTH_STATUS_INACTIVE; case 'UNAUTHENTICATED': return REFRESH_TOKEN; default: @@ -88,7 +91,7 @@ const getStatusAndCategory = (dresponse, status) => { * Retryable -> 5[0-9][02-9], 401(UNAUTHENTICATED) * "Special Cases": * status=200, resp.insertErrors.length > 0 === Failure - * 403 => AccessDenied -> DISABLE_DEST, other 403 => Just abort + * 403 => AccessDenied -> AUTH_STATUS_INACTIVE, other 403 => Just abort * */ const processResponse = ({ dresponse, status } = {}) => { diff --git a/src/v0/destinations/campaign_manager/networkHandler.js b/src/v0/destinations/campaign_manager/networkHandler.js index d324c6300b..a80fff6fe4 100644 --- a/src/v0/destinations/campaign_manager/networkHandler.js +++ b/src/v0/destinations/campaign_manager/networkHandler.js @@ -1,6 +1,5 @@ const { prepareProxyRequest, proxyRequest } = require('../../../adapters/network'); -const { isHttpStatusSuccess } = require('../../util/index'); -const { REFRESH_TOKEN } = require('../../../adapters/networkhandler/authConstants'); +const { isHttpStatusSuccess, getAuthErrCategoryFromStCode } = require('../../util/index'); const { processAxiosResponse, @@ -9,20 +8,6 @@ const { const { AbortedError, RetryableError, NetworkError } = require('../../util/errorTypes'); const tags = require('../../util/tags'); -/** - * This function helps to detarmine type of error occured. According to the response - * we set authErrorCategory to take decision if we need to refresh the access_token - * or need to disable the destination. - * @param {*} code - * @returns - */ -const getAuthErrCategory = (code) => { - if (code === 401) { - return REFRESH_TOKEN; - } - return ''; -}; - function checkIfFailuresAreRetryable(response) { try { if (Array.isArray(response.status) && Array.isArray(response.status[0].errors)) { @@ -73,7 +58,7 @@ const responseHandler = (destinationResponse) => { [tags.TAG_NAMES.ERROR_TYPE]: getDynamicErrorType(status), }, destinationResponse, - getAuthErrCategory(status), + getAuthErrCategoryFromStCode(status), ); }; diff --git a/src/v0/destinations/campaign_manager/transform.js b/src/v0/destinations/campaign_manager/transform.js index 93ec3e8ea3..99e5fe9c57 100644 --- a/src/v0/destinations/campaign_manager/transform.js +++ b/src/v0/destinations/campaign_manager/transform.js @@ -7,6 +7,7 @@ const { removeUndefinedAndNullValues, isDefinedAndNotNull, simpleProcessRouterDest, + getAccessToken, } = require('../../util'); const { @@ -17,16 +18,9 @@ const { EncryptionSource, } = require('./config'); -const { InstrumentationError, OAuthSecretError } = require('../../util/errorTypes'); +const { InstrumentationError } = require('../../util/errorTypes'); const { JSON_MIME_TYPE } = require('../../util/constant'); -const getAccessToken = ({ secret }) => { - if (!secret) { - throw new OAuthSecretError('[CAMPAIGN MANAGER (DCM)]:: OAuth - access token not found'); - } - return secret.access_token; -}; - function isEmptyObject(obj) { return Object.keys(obj).length === 0 && obj.constructor === Object; } @@ -36,7 +30,7 @@ function buildResponse(requestJson, metadata, endpointUrl, requestType, encrypti const response = defaultRequestConfig(); response.endpoint = endpointUrl; response.headers = { - Authorization: `Bearer ${getAccessToken(metadata)}`, + Authorization: `Bearer ${getAccessToken(metadata, 'access_token')}`, 'Content-Type': JSON_MIME_TYPE, }; response.method = defaultPostRequestConfig.requestMethod; diff --git a/src/v0/destinations/google_adwords_enhanced_conversions/networkHandler.js b/src/v0/destinations/google_adwords_enhanced_conversions/networkHandler.js index 5349b74178..e79c568238 100644 --- a/src/v0/destinations/google_adwords_enhanced_conversions/networkHandler.js +++ b/src/v0/destinations/google_adwords_enhanced_conversions/networkHandler.js @@ -1,8 +1,10 @@ const { get, set } = require('lodash'); const sha256 = require('sha256'); const { prepareProxyRequest, handleHttpRequest } = require('../../../adapters/network'); -const { isHttpStatusSuccess } = require('../../util/index'); -const { REFRESH_TOKEN } = require('../../../adapters/networkhandler/authConstants'); +const { + isHttpStatusSuccess, + getAuthErrCategoryFromErrDetailsAndStCode, +} = require('../../util/index'); const { CONVERSION_ACTION_ID_CACHE_TTL } = require('./config'); const Cache = require('../../util/cache'); @@ -15,18 +17,6 @@ const { const { BASE_ENDPOINT } = require('./config'); const { NetworkError, NetworkInstrumentationError } = require('../../util/errorTypes'); const tags = require('../../util/tags'); -/** - * This function helps to detarmine type of error occured. According to the response - * we set authErrorCategory to take decision if we need to refresh the access_token - * or need to disable the destination. - * @param {*} code - * @param {*} response - * @returns - */ -const getAuthErrCategory = (code, response) => { - if (code === 401 && !get(response, 'error.details')) return REFRESH_TOKEN; - return ''; -}; /** * This function is used for collecting the conversionActionId using the conversion name @@ -68,7 +58,7 @@ const getConversionActionId = async (method, headers, params) => { [tags.TAG_NAMES.ERROR_TYPE]: getDynamicErrorType(gaecConversionActionIdResponse.status), }, gaecConversionActionIdResponse.response, - getAuthErrCategory( + getAuthErrCategoryFromErrDetailsAndStCode( get(gaecConversionActionIdResponse, 'status'), get(gaecConversionActionIdResponse, 'response[0].error.message'), ), @@ -134,7 +124,7 @@ const responseHandler = (destinationResponse) => { [tags.TAG_NAMES.ERROR_TYPE]: getDynamicErrorType(status), }, response, - getAuthErrCategory(status, response), + getAuthErrCategoryFromErrDetailsAndStCode(status, response), ); }; // eslint-disable-next-line func-names diff --git a/src/v0/destinations/google_adwords_enhanced_conversions/transform.js b/src/v0/destinations/google_adwords_enhanced_conversions/transform.js index 96ef089001..24993a3006 100644 --- a/src/v0/destinations/google_adwords_enhanced_conversions/transform.js +++ b/src/v0/destinations/google_adwords_enhanced_conversions/transform.js @@ -8,12 +8,12 @@ const { getValueFromMessage, removeHyphens, simpleProcessRouterDest, + getAccessToken, } = require('../../util'); const { InstrumentationError, ConfigurationError, - OAuthSecretError, } = require('../../util/errorTypes'); const { trackMapping, BASE_ENDPOINT } = require('./config'); @@ -36,34 +36,13 @@ const updateMappingJson = (mapping) => { return newMapping; }; -/** - * Get access token to be bound to the event req headers - * - * Note: - * This method needs to be implemented particular to the destination - * As the schema that we'd get in `metadata.secret` can be different - * for different destinations - * - * @param {Object} metadata - * @returns - */ -const getAccessToken = (metadata) => { - // OAuth for this destination - const { secret } = metadata; - // we would need to verify if secret is present and also if the access token field is present in secret - if (!secret || !secret.access_token) { - throw new OAuthSecretError('Empty/Invalid access token'); - } - return secret.access_token; -}; - const responseBuilder = async (metadata, message, { Config }, payload) => { const response = defaultRequestConfig(); const { event } = message; const filteredCustomerId = removeHyphens(Config.customerId); response.endpoint = `${BASE_ENDPOINT}/${filteredCustomerId}:uploadConversionAdjustments`; response.body.JSON = payload; - const accessToken = getAccessToken(metadata); + const accessToken = getAccessToken(metadata, 'access_token'); response.headers = { Authorization: `Bearer ${accessToken}`, 'Content-Type': JSON_MIME_TYPE, diff --git a/src/v0/destinations/google_adwords_offline_conversions/networkHandler.js b/src/v0/destinations/google_adwords_offline_conversions/networkHandler.js index 963721f024..71fdccff20 100644 --- a/src/v0/destinations/google_adwords_offline_conversions/networkHandler.js +++ b/src/v0/destinations/google_adwords_offline_conversions/networkHandler.js @@ -2,11 +2,11 @@ const set = require('set-value'); const get = require('get-value'); const sha256 = require('sha256'); const { prepareProxyRequest, httpSend, httpPOST } = require('../../../adapters/network'); -const { REFRESH_TOKEN } = require('../../../adapters/networkhandler/authConstants'); const { isHttpStatusSuccess, getHashFromArray, isDefinedAndNotNullAndNotEmpty, + getAuthErrCategoryFromStCode, } = require('../../util'); const { getConversionActionId } = require('./utils'); const Cache = require('../../util/cache'); @@ -24,21 +24,6 @@ const tags = require('../../util/tags'); const conversionCustomVariableCache = new Cache(CONVERSION_CUSTOM_VARIABLE_CACHE_TTL); -/** - * This function helps to determine the type of error occurred. We set the authErrorCategory - * as per the destination response that is received and take the decision whether - * to refresh the access_token or disable the destination. - * @param {*} status - * @returns - */ -const getAuthErrCategory = (status) => { - if (status === 401) { - // UNAUTHORIZED - return REFRESH_TOKEN; - } - return ''; -}; - const createJob = async (endpoint, headers, payload) => { const endPoint = `${endpoint}:create`; let createJobResponse = await httpPOST( @@ -57,7 +42,7 @@ const createJob = async (endpoint, headers, payload) => { `[Google Ads Offline Conversions]:: ${response?.error?.message} during google_ads_offline_store_conversions Job Creation`, status, response, - getAuthErrCategory(status), + getAuthErrCategoryFromStCode(status), ); } return response.resourceName.split('/')[3]; @@ -80,7 +65,7 @@ const addConversionToJob = async (endpoint, headers, jobId, payload) => { `[Google Ads Offline Conversions]:: ${addConversionToJobResponse.response?.error?.message} during google_ads_offline_store_conversions Add Conversion`, addConversionToJobResponse.status, addConversionToJobResponse.response, - getAuthErrCategory(get(addConversionToJobResponse, 'status')), + getAuthErrCategoryFromStCode(get(addConversionToJobResponse, 'status')), ); } return true; @@ -131,7 +116,7 @@ const getConversionCustomVariable = async (headers, params) => { [tags.TAG_NAMES.ERROR_TYPE]: getDynamicErrorType(searchStreamResponse.status), }, searchStreamResponse?.response || searchStreamResponse, - getAuthErrCategory(searchStreamResponse.status), + getAuthErrCategoryFromStCode(searchStreamResponse.status), ); } const conversionCustomVariable = get(searchStreamResponse, 'response.0.results'); @@ -292,7 +277,7 @@ const responseHandler = (destinationResponse) => { `[Google Ads Offline Conversions]:: ${response?.error?.message} during google_ads_offline_conversions response transformation`, status, response, - getAuthErrCategory(status), + getAuthErrCategoryFromStCode(status), ); }; diff --git a/src/v0/destinations/google_adwords_offline_conversions/utils.js b/src/v0/destinations/google_adwords_offline_conversions/utils.js index 6131b5dde7..37f17c9fd0 100644 --- a/src/v0/destinations/google_adwords_offline_conversions/utils.js +++ b/src/v0/destinations/google_adwords_offline_conversions/utils.js @@ -11,8 +11,9 @@ const { getFieldValueFromMessage, isDefinedAndNotNullAndNotEmpty, isDefinedAndNotNull, + getAuthErrCategoryFromStCode, + getAccessToken, } = require('../../util'); -const { REFRESH_TOKEN } = require('../../../adapters/networkhandler/authConstants'); const { SEARCH_STREAM, CONVERSION_ACTION_ID_CACHE_TTL, @@ -26,7 +27,6 @@ const { processAxiosResponse } = require('../../../adapters/utils/networkUtils') const Cache = require('../../util/cache'); const { AbortedError, - OAuthSecretError, ConfigurationError, InstrumentationError, } = require('../../util/errorTypes'); @@ -43,34 +43,6 @@ const validateDestinationConfig = ({ Config }) => { } }; -/** - * for OAuth destination - * get access_token from metadata.secret{ ... } - * @param {*} param0 - * @returns - */ -const getAccessToken = ({ secret }) => { - if (!secret) { - throw new OAuthSecretError('OAuth - access token not found'); - } - return secret.access_token; -}; - -/** - * This function helps to determine the type of error occured. We set the authErrorCategory - * as per the destination response that is received and take the decision whether - * to refresh the access_token or disable the destination. - * @param {*} status - * @returns - */ -const getAuthErrCategory = (status) => { - if (status === 401) { - // UNAUTHORIZED - return REFRESH_TOKEN; - } - return ''; -}; - /** * get conversionAction using the conversion name using searchStream endpoint * @param {*} customerId @@ -100,7 +72,7 @@ const getConversionActionId = async (headers, params) => { )} during google_ads_offline_conversions response transformation`, searchStreamResponse.status, searchStreamResponse.response, - getAuthErrCategory(get(searchStreamResponse, 'status')), + getAuthErrCategoryFromStCode(get(searchStreamResponse, 'status')), ); } const conversionAction = get( @@ -194,7 +166,7 @@ const requestBuilder = ( } response.body.JSON = payload; response.headers = { - Authorization: `Bearer ${getAccessToken(metadata)}`, + Authorization: `Bearer ${getAccessToken(metadata, 'access_token')}`, 'Content-Type': 'application/json', 'developer-token': get(metadata, 'secret.developer_token'), }; @@ -390,7 +362,6 @@ const getClickConversionPayloadAndEndpoint = (message, Config, filteredCustomerI module.exports = { validateDestinationConfig, generateItemListFromProducts, - getAccessToken, getConversionActionId, removeHashToSha256TypeFromMappingJson, getStoreConversionPayload, diff --git a/src/v0/destinations/google_adwords_remarketing_lists/networkHandler.js b/src/v0/destinations/google_adwords_remarketing_lists/networkHandler.js index ceea51f6a2..979f263fcc 100644 --- a/src/v0/destinations/google_adwords_remarketing_lists/networkHandler.js +++ b/src/v0/destinations/google_adwords_remarketing_lists/networkHandler.js @@ -1,7 +1,8 @@ const { httpSend, prepareProxyRequest } = require('../../../adapters/network'); -const { isHttpStatusSuccess } = require('../../util/index'); - -const { REFRESH_TOKEN } = require('../../../adapters/networkhandler/authConstants'); +const { + isHttpStatusSuccess, + getAuthErrCategoryFromErrDetailsAndStCode, +} = require('../../util/index'); const { processAxiosResponse, @@ -117,19 +118,6 @@ const gaAudienceProxyRequest = async (request) => { return thirdResponse; }; -/** - * This function helps to detarmine type of error occured. According to the response - * we set authErrorCategory to take decision if we need to refresh the access_token - * or need to disable the destination. - * @param {*} code - * @param {*} response - * @returns - */ -const getAuthErrCategory = (code, response) => { - if (code === 401 && !response.error.details) return REFRESH_TOKEN; - return ''; -}; - const gaAudienceRespHandler = (destResponse, stageMsg) => { const { status, response } = destResponse; // const respAttributes = response["@attributes"] || null; @@ -142,7 +130,7 @@ const gaAudienceRespHandler = (destResponse, stageMsg) => { [tags.TAG_NAMES.ERROR_TYPE]: getDynamicErrorType(status), }, response, - getAuthErrCategory(status, response), + getAuthErrCategoryFromErrDetailsAndStCode(status, response), ); }; diff --git a/src/v0/destinations/google_adwords_remarketing_lists/transform.js b/src/v0/destinations/google_adwords_remarketing_lists/transform.js index e847e9f72a..f8cd7c7037 100644 --- a/src/v0/destinations/google_adwords_remarketing_lists/transform.js +++ b/src/v0/destinations/google_adwords_remarketing_lists/transform.js @@ -1,6 +1,6 @@ const sha256 = require('sha256'); -const logger = require('../../../logger'); const get = require('get-value'); +const logger = require('../../../logger'); const { isDefinedAndNotNullAndNotEmpty, returnArrayOfSubarrays, @@ -11,13 +11,10 @@ const { removeHyphens, simpleProcessRouterDest, getDestinationExternalIDInfoForRetl, + getAccessToken, } = require('../../util'); -const { - InstrumentationError, - ConfigurationError, - OAuthSecretError, -} = require('../../util/errorTypes'); +const { InstrumentationError, ConfigurationError } = require('../../util/errorTypes'); const { offlineDataJobsMapping, addressInfoMapping, @@ -38,27 +35,6 @@ const hashEncrypt = (object) => { }); }; -/** - * Get access token to be bound to the event req headers - * - * Note: - * This method needs to be implemented particular to the destination - * As the schema that we'd get in `metadata.secret` can be different - * for different destinations - * - * @param {Object} metadata - * @returns - */ -const getAccessToken = (metadata) => { - // OAuth for this destination - const { secret } = metadata; - // we would need to verify if secret is present and also if the access token field is present in secret - if (!secret || !secret.access_token) { - throw new OAuthSecretError('Empty/Invalid access token'); - } - return secret.access_token; -}; - /** * This function is used for building the response. It create a default rudder response * and populate headers, params and body.JSON @@ -73,11 +49,14 @@ const responseBuilder = (metadata, body, { Config }, message) => { const filteredCustomerId = removeHyphens(Config.customerId); response.endpoint = `${BASE_ENDPOINT}/${filteredCustomerId}/offlineUserDataJobs`; response.body.JSON = removeUndefinedAndNullValues(payload); - const accessToken = getAccessToken(metadata); + const accessToken = getAccessToken(metadata, 'access_token'); let operationAudienceId = Config.audienceId || Config.listId; const mappedToDestination = get(message, MappedToDestinationKey); if (!operationAudienceId && mappedToDestination) { - const { objectType } = getDestinationExternalIDInfoForRetl(message, 'GOOGLE_ADWORDS_REMARKETING_LISTS'); + const { objectType } = getDestinationExternalIDInfoForRetl( + message, + 'GOOGLE_ADWORDS_REMARKETING_LISTS', + ); operationAudienceId = objectType; } if (!isDefinedAndNotNullAndNotEmpty(operationAudienceId)) { diff --git a/src/v0/destinations/pardot/transform.js b/src/v0/destinations/pardot/transform.js index 128d72cb14..b9f78a6c34 100644 --- a/src/v0/destinations/pardot/transform.js +++ b/src/v0/destinations/pardot/transform.js @@ -45,34 +45,14 @@ const { getSuccessRespEvents, checkInvalidRtTfEvents, handleRtTfSingleEventError, + getAccessToken, } = require('../../util'); const { CONFIG_CATEGORIES } = require('./config'); const { - OAuthSecretError, ConfigurationError, InstrumentationError, } = require('../../util/errorTypes'); -/** - * Get access token to be bound to the event req headers - * - * Note: - * This method needs to be implemented particular to the destination - * As the schema that we'd get in `metadata.secret` can be different - * for different destinations - * - * @param {Object} metadata - * @returns - */ -const getAccessToken = (metadata) => { - // OAuth for this destination - const { secret } = metadata; - if (!secret) { - throw new OAuthSecretError('Empty/Invalid access token'); - } - return secret.access_token; -}; - const buildResponse = (payload, url, destination, token) => { const responseBody = removeUndefinedValues(payload); const response = defaultRequestConfig(); @@ -122,7 +102,7 @@ const getUrl = (urlParams) => { const processIdentify = ({ message, metadata }, destination, category) => { const { campaignId } = destination.Config; - const accessToken = getAccessToken(metadata); + const accessToken = getAccessToken(metadata, 'access_token'); let extId = get(message, 'context.externalId'); extId = extId && extId.length > 0 ? extId[0] : null; diff --git a/src/v0/destinations/snapchat_custom_audience/networkHandler.js b/src/v0/destinations/snapchat_custom_audience/networkHandler.js index 0f75d36a56..49ea452550 100644 --- a/src/v0/destinations/snapchat_custom_audience/networkHandler.js +++ b/src/v0/destinations/snapchat_custom_audience/networkHandler.js @@ -1,7 +1,9 @@ -const { removeUndefinedValues } = require('../../util'); +const { removeUndefinedValues, getAuthErrCategoryFromErrDetailsAndStCode } = require('../../util'); const { prepareProxyRequest, getPayloadData, httpSend } = require('../../../adapters/network'); const { isHttpStatusSuccess } = require('../../util/index'); -const { REFRESH_TOKEN } = require('../../../adapters/networkhandler/authConstants'); +const { + REFRESH_TOKEN, +} = require('../../../adapters/networkhandler/authConstants'); const tags = require('../../util/tags'); const { getDynamicErrorType, @@ -30,22 +32,6 @@ const prepareProxyReq = (request) => { }); }; -/** - * This function helps to determine type of error occurred. According to the response - * we set authErrorCategory to take decision if we need to refresh the access_token - * or need to disable the destination. - * @param {*} code - * @param {*} response - * @returns - */ -const getAuthErrCategory = (code, response) => { - let authErrCategory = ''; - if (code === 401) { - authErrCategory = !response.error?.details ? REFRESH_TOKEN : ''; - } - return authErrCategory; -}; - const scAudienceProxyRequest = async (request) => { const { endpoint, data, method, params, headers } = prepareProxyReq(request); @@ -65,7 +51,7 @@ const scAudienceProxyRequest = async (request) => { const scaAudienceRespHandler = (destResponse, stageMsg) => { const { status, response } = destResponse; - const authErrCategory = getAuthErrCategory(status, response); + const authErrCategory = getAuthErrCategoryFromErrDetailsAndStCode(status, response); if (authErrCategory === REFRESH_TOKEN) { throw new RetryableError( diff --git a/src/v0/destinations/snapchat_custom_audience/transform.js b/src/v0/destinations/snapchat_custom_audience/transform.js index 1c16115494..7938236594 100644 --- a/src/v0/destinations/snapchat_custom_audience/transform.js +++ b/src/v0/destinations/snapchat_custom_audience/transform.js @@ -4,33 +4,13 @@ const { removeUndefinedAndNullValues, simpleProcessRouterDest, isDefinedAndNotNullAndNotEmpty, + getAccessToken, } = require('../../util'); -const { ConfigurationError, OAuthSecretError } = require('../../util/errorTypes'); +const { ConfigurationError } = require('../../util/errorTypes'); const { BASE_URL, schemaType } = require('./config'); const { validatePayload, validateFields } = require('./utils'); const { JSON_MIME_TYPE } = require('../../util/constant'); -/** - * Get access token to be bound to the event req headers - * - * Note: - * This method needs to be implemented particular to the destination - * As the schema that we'd get in `metadata.secret` can be different - * for different destinations - * - * @param {Object} metadata - * @returns - */ -const getAccessToken = (metadata) => { - // OAuth for this destination - const { secret } = metadata; - // we would need to verify if secret is present and also if the access token field is present in secret - if (!secret || !secret.access_token) { - throw new OAuthSecretError('Empty/Invalid access token'); - } - return secret.access_token; -}; - const generateResponse = (groupedData, schema, segmentId, metadata, type) => { const payload = { users: [] }; const userPayload = { schema: [schema], data: groupedData }; @@ -43,7 +23,7 @@ const generateResponse = (groupedData, schema, segmentId, metadata, type) => { response.endpoint = `${BASE_URL}/segments/${segmentId}/users`; response.body.JSON = removeUndefinedAndNullValues(payload); - const accessToken = getAccessToken(metadata); + const accessToken = getAccessToken(metadata, 'access_token'); response.headers = { Authorization: `Bearer ${accessToken}`, 'Content-Type': JSON_MIME_TYPE, diff --git a/src/v0/util/index.js b/src/v0/util/index.js index b04d64deb6..8a20104dd0 100644 --- a/src/v0/util/index.js +++ b/src/v0/util/index.js @@ -28,6 +28,10 @@ const { } = require('./errorTypes'); const { client: errNotificationClient } = require('../../util/errorNotifier'); const { HTTP_STATUS_CODES } = require('./constant'); +const { + REFRESH_TOKEN, + AUTH_STATUS_INACTIVE, +} = require('../../adapters/networkhandler/authConstants'); // ======================================================================== // INLINERS // ======================================================================== @@ -1829,8 +1833,8 @@ const getAccessToken = (metadata, accessTokenKey) => { // OAuth for this destination const { secret } = metadata; // we would need to verify if secret is present and also if the access token field is present in secret - if (!secret || !secret[accessTokenKey]) { - throw new OAuthSecretError('Empty/Invalid access token'); + if (!secret?.[accessTokenKey]) { + throw new OAuthSecretError('OAuth - access token not found'); } return secret[accessTokenKey]; }; @@ -1912,6 +1916,51 @@ const batchMultiplexedEvents = (transformedEventsList, maxBatchSize) => { return batchedEvents; }; +/** + * This function helps to detarmine type of error occured. According to the response + * we set authErrorCategory to take decision if we need to refresh the access_token + * or need to de-activate authStatus for the destination. + * + * **Scenarios**: + * - statusCode=401, response.error.details !== "" -> REFRESH_TOKEN + * - statusCode=403, response.error.details !== "" -> AUTH_STATUS_INACTIVE + * + * @param {*} code + * @param {*} response + * @returns + */ +const getAuthErrCategoryFromErrDetailsAndStCode = (code, response) => { + if (code === 401 && (!get(response, 'error.details') || typeof response === 'string')) + return REFRESH_TOKEN; + if (code === 403 && (!get(response, 'error.details') || typeof response === 'string')) + return AUTH_STATUS_INACTIVE; + return ''; +}; + +/** + * This function helps to determine the type of error occurred. We set the authErrorCategory + * as per the destination response that is received and take the decision whether + * to refresh the access_token or de-activate authStatus. + * + * **Scenarios**: + * - statusCode=401 -> REFRESH_TOKEN + * - statusCode=403 -> AUTH_STATUS_INACTIVE + * + * @param {*} status + * @returns + */ +const getAuthErrCategoryFromStCode = (status) => { + if (status === 401) { + // UNAUTHORIZED + return REFRESH_TOKEN; + } + if (status === 403) { + // ACCESS_DENIED + return AUTH_STATUS_INACTIVE; + } + return ''; +}; + // ======================================================================== // EXPORTS // ======================================================================== @@ -2012,4 +2061,6 @@ module.exports = { checkAndCorrectUserId, getAccessToken, formatValues, + getAuthErrCategoryFromErrDetailsAndStCode, + getAuthErrCategoryFromStCode, }; diff --git a/test/__tests__/data/google_adwords_enhanced_conversions_output.json b/test/__tests__/data/google_adwords_enhanced_conversions_output.json index d260502926..292a849673 100644 --- a/test/__tests__/data/google_adwords_enhanced_conversions_output.json +++ b/test/__tests__/data/google_adwords_enhanced_conversions_output.json @@ -177,7 +177,7 @@ "secret": null }, "statusCode": 400, - "error": "Empty/Invalid access token", + "error": "OAuth - access token not found", "statTags": { "destination": "google_adwords_enhanced_conversions", "stage": "transform", diff --git a/test/__tests__/data/google_adwords_enhanced_conversions_router_output.json b/test/__tests__/data/google_adwords_enhanced_conversions_router_output.json index bab6c05cc9..c283549e50 100644 --- a/test/__tests__/data/google_adwords_enhanced_conversions_router_output.json +++ b/test/__tests__/data/google_adwords_enhanced_conversions_router_output.json @@ -137,7 +137,7 @@ }, "batched": false, "statusCode": 500, - "error": "Empty/Invalid access token", + "error": "OAuth - access token not found", "statTags": { "errorCategory": "platform", "errorType": "oAuthSecret" diff --git a/test/__tests__/data/google_adwords_remarketing_lists_output.json b/test/__tests__/data/google_adwords_remarketing_lists_output.json index 2a6d04bea1..cd92d314b6 100644 --- a/test/__tests__/data/google_adwords_remarketing_lists_output.json +++ b/test/__tests__/data/google_adwords_remarketing_lists_output.json @@ -5779,7 +5779,7 @@ "secret": null }, "statusCode": 500, - "error": "Empty/Invalid access token", + "error": "OAuth - access token not found", "statTags": { "destination": "google_adwords_remarketing_lists", "stage": "transform", diff --git a/test/__tests__/data/pardot_router_output.json b/test/__tests__/data/pardot_router_output.json index 913e35ce94..889cc8fd96 100644 --- a/test/__tests__/data/pardot_router_output.json +++ b/test/__tests__/data/pardot_router_output.json @@ -376,7 +376,7 @@ ], "batched": false, "statusCode": 500, - "error": "Empty/Invalid access token", + "error": "OAuth - access token not found", "statTags": { "errorCategory": "platform", "errorType": "oAuthSecret" diff --git a/test/__tests__/data/snapchat_custom_audience_proxy_output.json b/test/__tests__/data/snapchat_custom_audience_proxy_output.json index 654d94c45c..e5bcc4faa8 100644 --- a/test/__tests__/data/snapchat_custom_audience_proxy_output.json +++ b/test/__tests__/data/snapchat_custom_audience_proxy_output.json @@ -43,6 +43,7 @@ }, { "output": { + "authErrorCategory": "AUTH_STATUS_INACTIVE", "status": 400, "destinationResponse": { "response": { diff --git a/test/integrations/destinations/pardot/router/data.ts b/test/integrations/destinations/pardot/router/data.ts index 573f9192b5..28680deafc 100644 --- a/test/integrations/destinations/pardot/router/data.ts +++ b/test/integrations/destinations/pardot/router/data.ts @@ -999,7 +999,7 @@ export const data = [ ], batched: false, statusCode: 500, - error: 'Empty/Invalid access token', + error: 'OAuth - access token not found', statTags: { destType: 'PARDOT', feature: 'router', From c49bb104d0b7e37f97c58a279752aaaa53500cf9 Mon Sep 17 00:00:00 2001 From: Anant Jain <62471433+anantjain45823@users.noreply.github.com> Date: Fri, 15 Sep 2023 18:02:47 +0530 Subject: [PATCH 33/37] fix(INT-339): marketo response handler to handle static list removed and skipped statuses (#2620) * fix: marketo response handler * small fix * chore: comment addressed --- src/v0/destinations/marketo/util.js | 81 +++++++++++-------- .../marketo_static_list/proxy_response.json | 34 +++++++- .../data/marketo_static_list_proxy_input.json | 20 +++++ .../marketo_static_list_proxy_output.json | 67 +++++++++++---- 4 files changed, 149 insertions(+), 53 deletions(-) diff --git a/src/v0/destinations/marketo/util.js b/src/v0/destinations/marketo/util.js index ab39aafc15..0de14e2072 100644 --- a/src/v0/destinations/marketo/util.js +++ b/src/v0/destinations/marketo/util.js @@ -19,6 +19,8 @@ const tags = require('../../util/tags'); * https://developers.marketo.com/rest-api/error-codes/ */ +const ERROR_CODE_TO_PASS = ['1015']; + const MARKETO_RETRYABLE_CODES = ['601', '602', '604', '611']; const MARKETO_ABORTABLE_CODES = [ '600', @@ -34,29 +36,28 @@ const MARKETO_ABORTABLE_CODES = [ ]; const MARKETO_THROTTLED_CODES = ['502', '606', '607', '608', '615']; -const RECORD_LEVEL_ABORTBALE_ERRORS = [ - '1001', - '1002', - '1003', - '1004', - '1005', - '1006', - '1007', - '1008', - '1011', - '1013', - '1014', - '1015', - '1016', - '1017', - '1018', - '1021', - '1026', - '1027', - '1028', - '1036', - '1049', -]; +// Keeping here for reference const RECORD_LEVEL_ABORTBALE_ERRORS = [ +// '1001', +// '1002', +// '1003', +// '1004', +// '1005', +// '1006', +// '1007', +// '1008', +// '1011', +// '1013', +// '1014', +// '1016', +// '1017', +// '1018', +// '1021', +// '1026', +// '1027', +// '1028', +// '1036', +// '1049', +// ]; const { DESTINATION } = require('./config'); const logger = require('../../../logger'); @@ -86,7 +87,7 @@ const marketoApplicationErrorHandler = (marketoResponse, sourceMessage, destinat }; /** * this function checks the status of individual responses and throws error if any - * response ststus does not match the expected status + * response status does not match the expected status * doc1: https://developers.marketo.com/rest-api/lead-database/custom-objects/#create_and_update * doc2: https://developers.marketo.com/rest-api/lead-database/#create_and_update * Structure of marketoResponse: { @@ -122,20 +123,32 @@ const marketoApplicationErrorHandler = (marketoResponse, sourceMessage, destinat const nestedResponseHandler = (marketoResponse, sourceMessage) => { const checkStatus = (res) => { const { status } = res; - if (status && status !== 'updated' && status !== 'created' && status !== 'added') { + const allowedStatus = ['updated', 'added', 'removed', 'created']; + if ( + status && + !allowedStatus.includes(status) + // we need to check the case where the id are not in list + ) { const { reasons } = res; let statusCode = 400; - if (reasons && RECORD_LEVEL_ABORTBALE_ERRORS.includes(reasons[0].code)) { - statusCode = 400; - } else if (reasons && MARKETO_ABORTABLE_CODES.includes(reasons[0].code)) { - statusCode = 400; - } else if (reasons && MARKETO_THROTTLED_CODES.includes(reasons[0].code)) { - statusCode = 429; - } else if (reasons && MARKETO_RETRYABLE_CODES.includes(reasons[0].code)) { - statusCode = 500; + if (reasons) { + const errorCodesFromDest = reasons.map((reason) => reason.code); + const filteredErrorCode = errorCodesFromDest.find( + (errorCode) => !ERROR_CODE_TO_PASS.includes(errorCode), + ); + if (!filteredErrorCode) { + return; + } + if (MARKETO_THROTTLED_CODES.includes(filteredErrorCode)) { + statusCode = 429; + } else if (MARKETO_RETRYABLE_CODES.includes(filteredErrorCode)) { + statusCode = 500; + } } throw new InstrumentationError( - `Request failed during: ${sourceMessage}, error: ${JSON.stringify(reasons)}`, + `Request failed during: ${sourceMessage}, error: ${ + JSON.stringify(reasons) || 'Reason(s) not Found' + }`, statusCode, { [tags.TAG_NAMES.ERROR_TYPE]: getDynamicErrorType(statusCode), diff --git a/test/__mocks__/data/marketo_static_list/proxy_response.json b/test/__mocks__/data/marketo_static_list/proxy_response.json index 5c00ced941..2a58d99da2 100644 --- a/test/__mocks__/data/marketo_static_list/proxy_response.json +++ b/test/__mocks__/data/marketo_static_list/proxy_response.json @@ -1,4 +1,31 @@ { + "https://marketo_acct_id_success.mktorest.com/rest/v1/lists/1234/leads.json?id=110&id=111&id=112": { + "data": { + "requestId": "b6d1#18a8d2c10e7", + "result": [ + { + "id": 110, + "status": "skipped", + "reasons": [ + { + "code": "1015", + "message": "Lead not in list" + } + ] + }, + { + "id": 111, + "status": "removed" + }, + { + "id": 112, + "status": "removed" + } + ], + "success": true + }, + "status": 200 + }, "https://marketo_acct_id_success.mktorest.com/rest/v1/lists/1234/leads.json?id=1&id=2&id=3": { "data": { "requestId": "68d8#1846058ee27", @@ -60,14 +87,13 @@ "status": "skipped", "reasons": [ { - "code": "1004", - "message": "Lead not found" + "code": "1015", + "message": "Lead not in list" } ] }, - "success": true }, "status": 200 } -} +} \ No newline at end of file diff --git a/test/__tests__/data/marketo_static_list_proxy_input.json b/test/__tests__/data/marketo_static_list_proxy_input.json index 85142d68d7..6f84e7416d 100644 --- a/test/__tests__/data/marketo_static_list_proxy_input.json +++ b/test/__tests__/data/marketo_static_list_proxy_input.json @@ -1,4 +1,24 @@ [ + { + "type": "REST", + "endpoint": "https://marketo_acct_id_success.mktorest.com/rest/v1/lists/1234/leads.json?id=110&id=111&id=112", + "method": "POST", + "userId": "", + "headers": { + "Authorization": "Bearer Incorrect_token", + "Content-Type": "application/json" + }, + "body": { + "FORM": {}, + "JSON": {}, + "JSON_ARRAY": {}, + "XML": {} + }, + "files": {}, + "params": { + "destination": "marketo_static_list" + } + }, { "type": "REST", "endpoint": "https://marketo_acct_id_success.mktorest.com/rest/v1/lists/1234/leads.json?id=1&id=2&id=3", diff --git a/test/__tests__/data/marketo_static_list_proxy_output.json b/test/__tests__/data/marketo_static_list_proxy_output.json index 2dfbee0e8e..8ac482b5be 100644 --- a/test/__tests__/data/marketo_static_list_proxy_output.json +++ b/test/__tests__/data/marketo_static_list_proxy_output.json @@ -1,4 +1,37 @@ [ + { + "output": { + "message": "Request Processed Successfully", + "destinationResponse": { + "response": { + "requestId": "b6d1#18a8d2c10e7", + "result": [ + { + "id": 110, + "status": "skipped", + "reasons": [ + { + "code": "1015", + "message": "Lead not in list" + } + ] + }, + { + "id": 111, + "status": "removed" + }, + { + "id": 112, + "status": "removed" + } + ], + "success": true + }, + "status": 200 + }, + "status": 200 + } + }, { "output": { "status": 500, @@ -72,21 +105,25 @@ }, { "output": { - "destinationResponse": "", - "message": "Request failed during: during Marketo Static List Response Handling, error: [{\"code\":\"1004\",\"message\":\"Lead not found\"}]", - "statTags": { - "destType": "MARKETO_STATIC_LIST", - "errorCategory": "dataValidation", - "destinationId": "Non-determininable", - "workspaceId": "Non-determininable", - "errorType": "instrumentation", - "feature": "dataDelivery", - "implementation": "native", - "destinationId": "Non-determininable", - "workspaceId": "Non-determininable", - "module": "destination" - }, - "status": 400 + "status": 200, + "message": "Request Processed Successfully", + "destinationResponse": { + "response": { + "requestId": "12d3c#1846057dce2", + "result": { + "id": 5, + "status": "skipped", + "reasons": [ + { + "code": "1015", + "message": "Lead not in list" + } + ] + }, + "success": true + }, + "status": 200 + } } } ] \ No newline at end of file From bf9d038d66e885e3f21bdc619d435deff17548ca Mon Sep 17 00:00:00 2001 From: Jayachand Date: Sat, 16 Sep 2023 01:37:57 +0530 Subject: [PATCH 34/37] fix(transformation): block ipv6 requests in user transformer (#2618) * fix(transformation): block ipv6 requests in user transformer * test cases * block ips starting with localhost octet * assign to variable --- src/util/utils.js | 36 +++++++++++++------ .../user_transformation_fetch.test.js | 7 ++-- 2 files changed, 28 insertions(+), 15 deletions(-) diff --git a/src/util/utils.js b/src/util/utils.js index ee4b0f46be..160bbae3c9 100644 --- a/src/util/utils.js +++ b/src/util/utils.js @@ -10,17 +10,22 @@ const stats = require('./stats'); const resolver = new Resolver(); -const LOCALHOST_IP = '127.0.0.1'; -const LOCALHOST_URL = `http://localhost`; +const BLOCK_HOST_NAMES = process.env.BLOCK_HOST_NAMES || ''; +const BLOCK_HOST_NAMES_LIST = BLOCK_HOST_NAMES.split(','); +const LOCAL_HOST_NAMES_LIST = ['localhost', '127.0.0.1', '[::]', '[::1]']; +const LOCALHOST_OCTET = '127.'; const RECORD_TYPE_A = 4; // ipv4 const staticLookup = (transformerVersionId) => async (hostname, _, cb) => { let ips; const resolveStartTime = new Date(); try { - ips = await resolver.resolve(hostname); + ips = await resolver.resolve4(hostname); } catch (error) { - stats.timing('fetch_dns_resolve_time', resolveStartTime, { transformerVersionId, error: 'true' }); + stats.timing('fetch_dns_resolve_time', resolveStartTime, { + transformerVersionId, + error: 'true', + }); cb(null, `unable to resolve IP address for ${hostname}`, RECORD_TYPE_A); return; } @@ -32,8 +37,8 @@ const staticLookup = (transformerVersionId) => async (hostname, _, cb) => { } for (const ip of ips) { - if (ip.includes(LOCALHOST_IP)) { - cb(null, `cannot use ${LOCALHOST_IP} as IP address`, RECORD_TYPE_A); + if (ip.startsWith(LOCALHOST_OCTET)) { + cb(null, `cannot use ${ip} as IP address`, RECORD_TYPE_A); return; } } @@ -47,8 +52,17 @@ const httpAgentWithDnsLookup = (scheme, transformerVersionId) => { }; const blockLocalhostRequests = (url) => { - if (url.includes(LOCALHOST_URL) || url.includes(LOCALHOST_IP)) { - throw new Error('localhost requests are not allowed'); + try { + const parseUrl = new URL(url); + const { hostname } = parseUrl; + if (LOCAL_HOST_NAMES_LIST.includes(hostname) || hostname.startsWith(LOCALHOST_OCTET)) { + throw new Error('localhost requests are not allowed'); + } + if (BLOCK_HOST_NAMES_LIST.includes(hostname)) { + throw new Error('blocked host requests are not allowed'); + } + } catch (error) { + throw new Error(`invalid url, ${error.message}`); } }; @@ -163,14 +177,14 @@ const extractStackTraceUptoLastSubstringMatch = (trace, stringLiterals) => { const traceLines = trace.split('\n'); let lastRelevantIndex = 0; - for(let i = traceLines.length - 1; i >= 0; i -= 1) { - if (stringLiterals.some(str => traceLines[i].includes(str))) { + for (let i = traceLines.length - 1; i >= 0; i -= 1) { + if (stringLiterals.some((str) => traceLines[i].includes(str))) { lastRelevantIndex = i; break; } } - return traceLines.slice(0, lastRelevantIndex + 1).join("\n"); + return traceLines.slice(0, lastRelevantIndex + 1).join('\n'); }; module.exports = { diff --git a/test/__tests__/user_transformation_fetch.test.js b/test/__tests__/user_transformation_fetch.test.js index d5849639d7..e37b42ea1e 100644 --- a/test/__tests__/user_transformation_fetch.test.js +++ b/test/__tests__/user_transformation_fetch.test.js @@ -4,8 +4,7 @@ jest.mock("dns", () => { promises: { Resolver: function() { return { - resolve: mockResolver, - setServers: () => {}, + resolve4: mockResolver, }; } } @@ -121,7 +120,7 @@ describe("User transformation fetch tests", () => { } ` }; - const errMsg = "localhost requests are not allowed"; + const errMsg = "invalid url, localhost requests are not allowed"; const output = await userTransformHandler(inputData, versionId, [], trRevCode, true); @@ -278,7 +277,7 @@ describe("User transformation fetch tests", () => { } ` }; - const errMsg = "localhost requests are not allowed"; + const errMsg = "invalid url, localhost requests are not allowed"; const output = await userTransformHandler(inputData, versionId, [], trRevCode, true); From 39c3e24392377d867d560b46a0f6ed6b2e0ae38d Mon Sep 17 00:00:00 2001 From: Yashasvi Bajpai <33063622+yashasvibajpai@users.noreply.github.com> Date: Mon, 18 Sep 2023 19:26:51 +0530 Subject: [PATCH 35/37] fix: seperate build steps for ruddestack and rudderlabs repo (#2625) --- .github/workflows/prepare-for-prod-deploy.yml | 24 ++++++++-- .../workflows/prepare-for-prod-ut-deploy.yml | 25 ++++++++-- .../workflows/prepare-for-staging-deploy.yml | 47 ++++++++++++++++--- 3 files changed, 81 insertions(+), 15 deletions(-) diff --git a/.github/workflows/prepare-for-prod-deploy.yml b/.github/workflows/prepare-for-prod-deploy.yml index df96daa8a9..818bd32bd1 100644 --- a/.github/workflows/prepare-for-prod-deploy.yml +++ b/.github/workflows/prepare-for-prod-deploy.yml @@ -39,15 +39,31 @@ jobs: echo "Tag Name: $tag_name" echo "tag_name=$tag_name" >> $GITHUB_OUTPUT - build-transformer-image: - name: Build Transformer Docker Image - Prod + build-rudderstack-transformer-image: + name: Build Transformer Docker Image for Rudderstack org- Prod # Only merged pull requests from release candidate branches must trigger if: ((startsWith(github.event.pull_request.head.ref, 'release/') || startsWith(github.event.pull_request.head.ref, 'hotfix-release/')) && github.event.pull_request.merged == true) needs: [generate-tag-names] uses: ./.github/workflows/build-push-docker-image.yml with: build_tag: rudderstack/rudder-transformer:${{ needs.generate-tag-names.outputs.tag_name }} - push_tags: rudderstack/rudder-transformer:${{ needs.generate-tag-names.outputs.tag_name }},rudderstack/rudder-transformer:latest,rudderlabs/rudder-transformer:${{ needs.generate-tag-names.outputs.tag_name }},rudderlabs/rudder-transformer:latest + push_tags: rudderstack/rudder-transformer:${{ needs.generate-tag-names.outputs.tag_name }},rudderstack/rudder-transformer:latest + img_tag: ${{ needs.generate-tag-names.outputs.tag_name }} + dockerfile: Dockerfile + load_target: development + push_target: production + secrets: + DOCKERHUB_PROD_TOKEN: ${{ secrets.DOCKERHUB_PROD_TOKEN }} + + build-rudderlabs-transformer-image: + name: Build Transformer Docker Image for Rudderlabs org - Prod + # Only merged pull requests from release candidate branches must trigger + if: ((startsWith(github.event.pull_request.head.ref, 'release/') || startsWith(github.event.pull_request.head.ref, 'hotfix-release/')) && github.event.pull_request.merged == true) + needs: [generate-tag-names] + uses: ./.github/workflows/build-push-docker-image.yml + with: + build_tag: rudderstack/rudder-transformer:${{ needs.generate-tag-names.outputs.tag_name }} + push_tags: rudderlabs/rudder-transformer:${{ needs.generate-tag-names.outputs.tag_name }},rudderlabs/rudder-transformer:latest img_tag: ${{ needs.generate-tag-names.outputs.tag_name }} dockerfile: Dockerfile load_target: development @@ -58,7 +74,7 @@ jobs: create-pull-request: name: Update Helm Charts For Production and Create Pull Request runs-on: ubuntu-latest - needs: [generate-tag-names, build-transformer-image] + needs: [generate-tag-names, build-rudderstack-transformer-image, build-rudderlabs-transformer-image] env: TAG_NAME: ${{ needs.generate-tag-names.outputs.tag_name }} TF_IMAGE_REPOSITORY: rudderstack/rudder-transformer diff --git a/.github/workflows/prepare-for-prod-ut-deploy.yml b/.github/workflows/prepare-for-prod-ut-deploy.yml index 2016b35231..511e21d6dd 100644 --- a/.github/workflows/prepare-for-prod-ut-deploy.yml +++ b/.github/workflows/prepare-for-prod-ut-deploy.yml @@ -42,15 +42,15 @@ jobs: echo "UT Tag Name: $tag_name_ut" echo "tag_name_ut=$tag_name_ut" >> $GITHUB_OUTPUT - build-user-transformer-image: - name: Build User Transformer Docker Image - Prod + build-rudderstack-user-transformer-image: + name: Build User Transformer Docker Image for Rudderstack org - Prod # Only merged pull requests from release candidate branches must trigger if: ((startsWith(github.event.pull_request.head.ref, 'release/') || startsWith(github.event.pull_request.head.ref, 'hotfix-release/')) && github.event.pull_request.merged == true) needs: [generate-tag-names] uses: ./.github/workflows/build-push-docker-image.yml with: build_tag: rudderstack/rudder-transformer:${{ needs.generate-tag-names.outputs.tag_name_ut }} - push_tags: rudderstack/rudder-transformer:${{ needs.generate-tag-names.outputs.tag_name_ut }},rudderstack/rudder-transformer:ut-latest,rudderlabs/rudder-transformer:${{ needs.generate-tag-names.outputs.tag_name_ut }},rudderlabs/rudder-transformer:ut-latest + push_tags: rudderstack/rudder-transformer:${{ needs.generate-tag-names.outputs.tag_name_ut }},rudderstack/rudder-transformer:ut-latest img_tag: ${{ needs.generate-tag-names.outputs.tag_name_ut }} dockerfile: Dockerfile-ut-func load_target: development @@ -58,10 +58,27 @@ jobs: secrets: DOCKERHUB_PROD_TOKEN: ${{ secrets.DOCKERHUB_PROD_TOKEN }} + build-rudderlabs-user-transformer-image: + name: Build User Transformer Docker Image for Rudderlabs org - Prod + # Only merged pull requests from release candidate branches must trigger + if: ((startsWith(github.event.pull_request.head.ref, 'release/') || startsWith(github.event.pull_request.head.ref, 'hotfix-release/')) && github.event.pull_request.merged == true) + needs: [generate-tag-names] + uses: ./.github/workflows/build-push-docker-image.yml + with: + build_tag: rudderstack/rudder-transformer:${{ needs.generate-tag-names.outputs.tag_name_ut }} + push_tags: rudderlabs/rudder-transformer:${{ needs.generate-tag-names.outputs.tag_name_ut }},rudderlabs/rudder-transformer:ut-latest + img_tag: ${{ needs.generate-tag-names.outputs.tag_name_ut }} + dockerfile: Dockerfile-ut-func + load_target: development + push_target: production + secrets: + DOCKERHUB_PROD_TOKEN: ${{ secrets.DOCKERHUB_PROD_TOKEN }} + + create-pull-request: name: Update Helm Charts For Production and Create Pull Request runs-on: ubuntu-latest - needs: [generate-tag-names, build-user-transformer-image] + needs: [generate-tag-names, build-rudderstack-user-transformer-image, build-rudderlabs-user-transformer-image] env: UT_TAG_NAME: ${{ needs.generate-tag-names.outputs.tag_name_ut }} TF_IMAGE_REPOSITORY: rudderstack/rudder-transformer diff --git a/.github/workflows/prepare-for-staging-deploy.yml b/.github/workflows/prepare-for-staging-deploy.yml index 786110944f..4b63b70640 100644 --- a/.github/workflows/prepare-for-staging-deploy.yml +++ b/.github/workflows/prepare-for-staging-deploy.yml @@ -35,15 +35,15 @@ jobs: echo "UT Tag Name: $tag_name_ut" echo "tag_name_ut=$tag_name_ut" >> $GITHUB_OUTPUT - build-transformer-image: - name: Build Transformer Docker Image - Staging + build-rudderstack-transformer-image: + name: Build Transformer Docker Image For Rudderstack org - Staging # Only pull requests from release candidate branches must trigger if: (startsWith(github.event.pull_request.head.ref, 'release/') || startsWith(github.event.pull_request.head.ref, 'hotfix-release/')) needs: [generate-tag-names] uses: ./.github/workflows/build-push-docker-image.yml with: build_tag: rudderstack/rudder-transformer:${{ needs.generate-tag-names.outputs.tag_name }} - push_tags: rudderstack/rudder-transformer:${{ needs.generate-tag-names.outputs.tag_name }},rudderlabs/rudder-transformer:${{ needs.generate-tag-names.outputs.tag_name }} + push_tags: rudderstack/rudder-transformer:${{ needs.generate-tag-names.outputs.tag_name }} img_tag: ${{ needs.generate-tag-names.outputs.tag_name }} dockerfile: Dockerfile load_target: development @@ -51,8 +51,41 @@ jobs: secrets: DOCKERHUB_PROD_TOKEN: ${{ secrets.DOCKERHUB_PROD_TOKEN }} - build-user-transformer-image: - name: Build User Transformer Docker Image - Staging + build-rudderlabs-transformer-image: + name: Build Transformer Docker Image For Rudderlabs org - Staging + # Only pull requests from release candidate branches must trigger + if: (startsWith(github.event.pull_request.head.ref, 'release/') || startsWith(github.event.pull_request.head.ref, 'hotfix-release/')) + needs: [generate-tag-names] + uses: ./.github/workflows/build-push-docker-image.yml + with: + build_tag: rudderstack/rudder-transformer:${{ needs.generate-tag-names.outputs.tag_name }} + push_tags: rudderlabs/rudder-transformer:${{ needs.generate-tag-names.outputs.tag_name }} + img_tag: ${{ needs.generate-tag-names.outputs.tag_name }} + dockerfile: Dockerfile + load_target: development + push_target: production + secrets: + DOCKERHUB_PROD_TOKEN: ${{ secrets.DOCKERHUB_PROD_TOKEN }} + + build-rudderstack-user-transformer-image: + name: Build User Transformer Docker Image For Rudderstack org - Staging + # Only pull requests from release candidate branches must trigger + if: (startsWith(github.event.pull_request.head.ref, 'release/') || startsWith(github.event.pull_request.head.ref, 'hotfix-release/')) + + needs: [generate-tag-names] + uses: ./.github/workflows/build-push-docker-image.yml + with: + build_tag: rudderstack/rudder-transformer:${{ needs.generate-tag-names.outputs.tag_name_ut }} + push_tags: rudderstack/rudder-transformer:${{ needs.generate-tag-names.outputs.tag_name_ut }} + img_tag: ${{ needs.generate-tag-names.outputs.tag_name_ut }} + dockerfile: Dockerfile-ut-func + load_target: development + push_target: production + secrets: + DOCKERHUB_PROD_TOKEN: ${{ secrets.DOCKERHUB_PROD_TOKEN }} + + build-rudderlabs-user-transformer-image: + name: Build User Transformer Docker Image For Rudderlabs org - Staging # Only pull requests from release candidate branches must trigger if: (startsWith(github.event.pull_request.head.ref, 'release/') || startsWith(github.event.pull_request.head.ref, 'hotfix-release/')) @@ -60,7 +93,7 @@ jobs: uses: ./.github/workflows/build-push-docker-image.yml with: build_tag: rudderstack/rudder-transformer:${{ needs.generate-tag-names.outputs.tag_name_ut }} - push_tags: rudderstack/rudder-transformer:${{ needs.generate-tag-names.outputs.tag_name_ut }},rudderlabs/rudder-transformer:${{ needs.generate-tag-names.outputs.tag_name_ut }} + push_tags: rudderlabs/rudder-transformer:${{ needs.generate-tag-names.outputs.tag_name_ut }} img_tag: ${{ needs.generate-tag-names.outputs.tag_name_ut }} dockerfile: Dockerfile-ut-func load_target: development @@ -71,7 +104,7 @@ jobs: create-pull-request: name: Update Helm Charts For Staging and Create Pull Request runs-on: ubuntu-latest - needs: [generate-tag-names, build-transformer-image, build-user-transformer-image] + needs: [generate-tag-names, build-rudderstack-transformer-image, build-rudderlabs-transformer-image, build-rudderstack-user-transformer-image, build-rudderlabs-user-transformer-image] env: TAG_NAME: ${{ needs.generate-tag-names.outputs.tag_name }} UT_TAG_NAME: ${{ needs.generate-tag-names.outputs.tag_name_ut }} From 3a790238c925701d633c10ba42aa7f9df7150f44 Mon Sep 17 00:00:00 2001 From: Gauravudia <60897972+Gauravudia@users.noreply.github.com> Date: Mon, 18 Sep 2023 21:23:34 +0530 Subject: [PATCH 36/37] fix(mixpanel): batch event ordering (#2608) --- src/v0/destinations/iterable/transform.js | 2 +- src/v0/destinations/iterable/util.js | 34 -- src/v0/destinations/iterable/util.test.js | 98 --- src/v0/destinations/mp/transform.js | 172 ++---- src/v0/destinations/mp/util.js | 64 ++ src/v0/destinations/mp/util.test.js | 243 +++++++- src/v0/util/index.js | 33 ++ src/v0/util/index.test.js | 1 + src/v0/util/testdata/groupEventsByType.json | 624 ++++++++++++++++++++ test/__tests__/data/mp_router_output.json | 158 ++++- 10 files changed, 1147 insertions(+), 282 deletions(-) create mode 100644 src/v0/util/testdata/groupEventsByType.json diff --git a/src/v0/destinations/iterable/transform.js b/src/v0/destinations/iterable/transform.js index 907030db9f..af666044d3 100644 --- a/src/v0/destinations/iterable/transform.js +++ b/src/v0/destinations/iterable/transform.js @@ -1,7 +1,6 @@ const _ = require('lodash'); const get = require('get-value'); const { - batchEvents, getCatalogEndpoint, hasMultipleResponses, pageEventPayloadBuilder, @@ -23,6 +22,7 @@ const { handleRtTfSingleEventError, removeUndefinedAndNullValues, getDestinationExternalIDInfoForRetl, + groupEventsByType: batchEvents, } = require('../../util'); const { JSON_MIME_TYPE } = require('../../util/constant'); const { mappingConfig, ConfigCategory } = require('./config'); diff --git a/src/v0/destinations/iterable/util.js b/src/v0/destinations/iterable/util.js index abff7f2838..3fe793d561 100644 --- a/src/v0/destinations/iterable/util.js +++ b/src/v0/destinations/iterable/util.js @@ -736,41 +736,7 @@ const filterEventsAndPrepareBatchRequests = (transformedEvents) => { return prepareBatchRequests(filteredEvents); }; -/** - * Groups events with the same message type together in batches. - * Each batch contains events that have the same message type and are from different users. - * - * @param {Array} inputs - An array of events - * @returns {Array} - An array of batches - */ -const batchEvents = (inputs) => { - const batches = []; - let currentInputsArray = inputs; - while (currentInputsArray.length > 0) { - const remainingInputsArray = []; - const userOrderTracker = {}; - const event = currentInputsArray.shift(); - const messageType = event.message.type; - const batch = [event]; - currentInputsArray.forEach((currentInput) => { - const currentMessageType = currentInput.message.type; - const currentUser = currentInput.metadata.userId; - if (currentMessageType === messageType && !userOrderTracker[currentUser]) { - batch.push(currentInput); - } else { - remainingInputsArray.push(currentInput); - userOrderTracker[currentUser] = true; - } - }); - batches.push(batch); - currentInputsArray = remainingInputsArray; - } - - return batches; -}; - module.exports = { - batchEvents, getCatalogEndpoint, hasMultipleResponses, pageEventPayloadBuilder, diff --git a/src/v0/destinations/iterable/util.test.js b/src/v0/destinations/iterable/util.test.js index e7a1ea5862..098960ac77 100644 --- a/src/v0/destinations/iterable/util.test.js +++ b/src/v0/destinations/iterable/util.test.js @@ -1,5 +1,4 @@ const { - batchEvents, pageEventPayloadBuilder, trackEventPayloadBuilder, screenEventPayloadBuilder, @@ -108,103 +107,6 @@ const getTestEcommMessage = () => { return message; }; -const orderEventsFuncData = [ - { - inputs: [ - { message: { type: 'identify' }, metadata: { userId: '1' } }, - { message: { type: 'track' }, metadata: { userId: '1' } }, - { message: { type: 'identify' }, metadata: { userId: '2' } }, - { message: { type: 'track' }, metadata: { userId: '2' } }, - { message: { type: 'track' }, metadata: { userId: '2' } }, - { message: { type: 'identify' }, metadata: { userId: '3' } }, - { message: { type: 'track' }, metadata: { userId: '3' } }, - { message: { type: 'identify' }, metadata: { userId: '4' } }, - { message: { type: 'track' }, metadata: { userId: '4' } }, - { message: { type: 'identify' }, metadata: { userId: '5' } }, - { message: { type: 'track' }, metadata: { userId: '5' } }, - { message: { type: 'identify' }, metadata: { userId: '5' } }, - { message: { type: 'identify' }, metadata: { userId: '6' } }, - { message: { type: 'identify' }, metadata: { userId: '6' } }, - { message: { type: 'identify' }, metadata: { userId: '6' } }, - ], - output: [ - [ - { message: { type: 'identify' }, metadata: { userId: '1' } }, - { message: { type: 'identify' }, metadata: { userId: '2' } }, - { message: { type: 'identify' }, metadata: { userId: '3' } }, - { message: { type: 'identify' }, metadata: { userId: '4' } }, - { message: { type: 'identify' }, metadata: { userId: '5' } }, - { message: { type: 'identify' }, metadata: { userId: '6' } }, - { message: { type: 'identify' }, metadata: { userId: '6' } }, - { message: { type: 'identify' }, metadata: { userId: '6' } }, - ], - [ - { message: { type: 'track' }, metadata: { userId: '1' } }, - { message: { type: 'track' }, metadata: { userId: '2' } }, - { message: { type: 'track' }, metadata: { userId: '2' } }, - { message: { type: 'track' }, metadata: { userId: '3' } }, - { message: { type: 'track' }, metadata: { userId: '4' } }, - { message: { type: 'track' }, metadata: { userId: '5' } }, - ], - [ - { message: { type: 'identify' }, metadata: { userId: '5' } }, - ] - ] - }, - { - inputs: [ - { message: { type: 'track' }, metadata: { userId: '3' } }, - { message: { type: 'identify' }, metadata: { userId: '3' } }, - { message: { type: 'identify' }, metadata: { userId: '1' } }, - { message: { type: 'track' }, metadata: { userId: '1' } }, - { message: { type: 'identify' }, metadata: { userId: '5' } }, - { message: { type: 'track' }, metadata: { userId: '5' } }, - { message: { type: 'identify' }, metadata: { userId: '5' } }, - { message: { type: 'identify' }, metadata: { userId: '2' } }, - { message: { type: 'track' }, metadata: { userId: '2' } }, - { message: { type: 'track' }, metadata: { userId: '2' } }, - { message: { type: 'track' }, metadata: { userId: '4' } }, - { message: { type: 'identify' }, metadata: { userId: '4' } }, - { message: { type: 'identify' }, metadata: { userId: '6' } }, - { message: { type: 'identify' }, metadata: { userId: '6' } }, - { message: { type: 'identify' }, metadata: { userId: '6' } }, - ], - output: [ - [ - { message: { type: 'track' }, metadata: { userId: '3' } }, - { message: { type: 'track' }, metadata: { userId: '4' } }, - ], - [ - { message: { type: 'identify' }, metadata: { userId: '3' } }, - { message: { type: 'identify' }, metadata: { userId: '1' } }, - { message: { type: 'identify' }, metadata: { userId: '5' } }, - { message: { type: 'identify' }, metadata: { userId: '2' } }, - { message: { type: 'identify' }, metadata: { userId: '4' } }, - { message: { type: 'identify' }, metadata: { userId: '6' } }, - { message: { type: 'identify' }, metadata: { userId: '6' } }, - { message: { type: 'identify' }, metadata: { userId: '6' } }, - ], - [ - { message: { type: 'track' }, metadata: { userId: '1' } }, - { message: { type: 'track' }, metadata: { userId: '5' } }, - { message: { type: 'track' }, metadata: { userId: '2' } }, - { message: { type: 'track' }, metadata: { userId: '2' } }, - ], - [ - { message: { type: 'identify' }, metadata: { userId: '5' } }, - ] - ] - } -] - -describe('Order Event Tests', () => { - it('Order Event func tests', () => { - orderEventsFuncData.forEach((data) => { - expect(batchEvents(data.inputs)).toEqual(data.output); - }) - }); -}); - describe('iterable utils test', () => { describe('Unit test cases for iterable registerDeviceTokenEventPayloadBuilder', () => { it('for no device type', async () => { diff --git a/src/v0/destinations/mp/transform.js b/src/v0/destinations/mp/transform.js index 425b7a8249..6f31c5b2ab 100644 --- a/src/v0/destinations/mp/transform.js +++ b/src/v0/destinations/mp/transform.js @@ -1,3 +1,4 @@ +const _ = require('lodash'); const get = require('get-value'); const { EventType } = require('../../../constants'); const { @@ -14,9 +15,7 @@ const { getFieldValueFromMessage, checkInvalidRtTfEvents, handleRtTfSingleEventError, - batchMultiplexedEvents, - getSuccessRespEvents, - defaultBatchRequestConfig, + groupEventsByType, } = require('../../util'); const { ConfigCategory, @@ -32,6 +31,8 @@ const { createIdentifyResponse, isImportAuthCredentialsAvailable, combineBatchRequestsWithSameJobIds, + groupEventsByEndpoint, + batchEvents, } = require('./util'); const { InstrumentationError, ConfigurationError } = require('../../util/errorTypes'); const { CommonUtils } = require('../../../util/common'); @@ -378,29 +379,7 @@ const processGroupEvents = (message, type, destination) => { return returnValue; }; -const generateBatchedPayloadForArray = (events) => { - const { batchedRequest } = defaultBatchRequestConfig(); - const batchResponseList = events.flatMap((event) => JSON.parse(event.body.JSON_ARRAY.batch)); - batchedRequest.body.JSON_ARRAY = { batch: JSON.stringify(batchResponseList) }; - batchedRequest.endpoint = events[0].endpoint; - batchedRequest.headers = events[0].headers; - batchedRequest.params = events[0].params; - return batchedRequest; -}; - -const batchEvents = (successRespList, maxBatchSize) => { - const batchResponseList = []; - const batchedEvents = batchMultiplexedEvents(successRespList, maxBatchSize); - batchedEvents.forEach((batch) => { - const batchedRequest = generateBatchedPayloadForArray(batch.events); - batchResponseList.push( - getSuccessRespEvents(batchedRequest, batch.metadata, batch.destination, true), - ); - }); - return batchResponseList; -}; - -const processSingleMessage = async (message, destination) => { +const processSingleMessage = (message, destination) => { const clonedMessage = { ...message }; if (clonedMessage.userId) { clonedMessage.userId = String(clonedMessage.userId); @@ -431,74 +410,7 @@ const processSingleMessage = async (message, destination) => { } }; -const process = async (event) => processSingleMessage(event.message, event.destination); - -const processEvents = async (inputs, reqMetadata) => - await Promise.all( - inputs.map(async (event) => { - try { - if (event.message.statusCode) { - // already transformed event - return { output: event }; - } - - // if not transformed - return { - output: { - message: await process(event), - metadata: event.metadata, - destination: event.destination, - }, - }; - } catch (error) { - const errRespEvent = handleRtTfSingleEventError(event, error, reqMetadata); - return { error: errRespEvent }; - } - }), - ); - -const processAndChunkEvents = async (inputs, reqMetadata) => { - const processedEvents = await processEvents(inputs, reqMetadata); - const engageEventChunks = []; - const groupsEventChunks = []; - const trackEventChunks = []; - const importEventChunks = []; - const batchErrorRespList = []; - processedEvents.forEach((result) => { - if (result.output) { - const event = result.output; - const { destination, metadata } = event; - let { message } = event; - message = CommonUtils.toArray(message); - message.forEach((msg) => { - // eslint-disable-next-line default-case - switch (true) { - case msg.endpoint.includes('engage'): - engageEventChunks.push({ message: msg, destination, metadata }); - break; - case msg.endpoint.includes('groups'): - groupsEventChunks.push({ message: msg, destination, metadata }); - break; - case msg.endpoint.includes('track'): - trackEventChunks.push({ message: msg, destination, metadata }); - break; - case msg.endpoint.includes('import'): - importEventChunks.push({ message: msg, destination, metadata }); - break; - } - }); - } else if (result.error) { - batchErrorRespList.push(result.error); - } - }); - return { - engageEventChunks, - groupsEventChunks, - trackEventChunks, - importEventChunks, - batchErrorRespList, - }; -}; +const process = (event) => processSingleMessage(event.message, event.destination); // Documentation about how Mixpanel handles the utm parameters // Ref: https://help.mixpanel.com/hc/en-us/articles/115004613766-Default-Properties-Collected-by-Mixpanel @@ -509,28 +421,56 @@ const processRouterDest = async (inputs, reqMetadata) => { return errorRespEvents; } - const { - engageEventChunks, - groupsEventChunks, - trackEventChunks, - importEventChunks, - batchErrorRespList, - } = await processAndChunkEvents(inputs, reqMetadata); - - const engageRespList = batchEvents(engageEventChunks, ENGAGE_MAX_BATCH_SIZE); - const groupsRespList = batchEvents(groupsEventChunks, GROUPS_MAX_BATCH_SIZE); - const trackRespList = batchEvents(trackEventChunks, TRACK_MAX_BATCH_SIZE); - const importRespList = batchEvents(importEventChunks, IMPORT_MAX_BATCH_SIZE); - - let batchSuccessRespList = [ - ...engageRespList, - ...groupsRespList, - ...trackRespList, - ...importRespList, - ]; - batchSuccessRespList = combineBatchRequestsWithSameJobIds(batchSuccessRespList); - - return [...batchSuccessRespList, ...batchErrorRespList]; + const groupedEvents = groupEventsByType(inputs); + const response = await Promise.all( + groupedEvents.map(async (listOfEvents) => { + let transformedPayloads = await Promise.all( + listOfEvents.map(async (event) => { + try { + if (event.message.statusCode) { + // already transformed event + return { + message: event.message, + metadata: event.metadata, + destination: event.destination, + }; + } + + let processedEvents = await process(event); + processedEvents = CommonUtils.toArray(processedEvents); + return processedEvents.map((response) => ({ + message: response, + metadata: event.metadata, + destination: event.destination, + })); + } catch (error) { + return handleRtTfSingleEventError(event, error, reqMetadata); + } + }), + ); + + transformedPayloads = _.flatMap(transformedPayloads); + const { engageEvents, groupsEvents, trackEvents, importEvents, batchErrorRespList } = + groupEventsByEndpoint(transformedPayloads); + + const engageRespList = batchEvents(engageEvents, ENGAGE_MAX_BATCH_SIZE); + const groupsRespList = batchEvents(groupsEvents, GROUPS_MAX_BATCH_SIZE); + const trackRespList = batchEvents(trackEvents, TRACK_MAX_BATCH_SIZE); + const importRespList = batchEvents(importEvents, IMPORT_MAX_BATCH_SIZE); + const batchSuccessRespList = [ + ...engageRespList, + ...groupsRespList, + ...trackRespList, + ...importRespList, + ]; + + return [...batchSuccessRespList, ...batchErrorRespList]; + }), + ); + + // Flatten the response array containing batched events from multiple groups + const allBatchedEvents = _.flatMap(response); + return combineBatchRequestsWithSameJobIds(allBatchedEvents); }; module.exports = { process, processRouterDest }; diff --git a/src/v0/destinations/mp/util.js b/src/v0/destinations/mp/util.js index 5a96c8d64b..c5fc7e04be 100644 --- a/src/v0/destinations/mp/util.js +++ b/src/v0/destinations/mp/util.js @@ -8,6 +8,9 @@ const { isAppleFamily, getBrowserInfo, toUnixTimestamp, + batchMultiplexedEvents, + getSuccessRespEvents, + defaultBatchRequestConfig, } = require('../../util'); const { ConfigCategory, @@ -16,6 +19,7 @@ const { mappingConfig, } = require('./config'); const { InstrumentationError } = require('../../util/errorTypes'); +const { CommonUtils } = require('../../../util/common'); const mPIdentifyConfigJson = mappingConfig[ConfigCategory.IDENTIFY.name]; const mPProfileAndroidConfigJson = mappingConfig[ConfigCategory.PROFILE_ANDROID.name]; @@ -166,6 +170,64 @@ const removeDuplicateMetadata = (mergedBatches) => { } }; +/** + * Group events with the same endpoint together in batches + * @param {*} events - An array of events + * @returns + */ +const groupEventsByEndpoint = (events) => { + const eventMap = { + engage: [], + groups: [], + track: [], + import: [], + }; + const batchErrorRespList = []; + + events.forEach((result) => { + if (result.message) { + const { destination, metadata } = result; + const message = CommonUtils.toArray(result.message); + + message.forEach((msg) => { + const endpoint = Object.keys(eventMap).find((key) => msg.endpoint.includes(key)); + + if (endpoint) { + eventMap[endpoint].push({ message: msg, destination, metadata }); + } + }); + } else if (result.error) { + batchErrorRespList.push(result); + } + }); + + return { + engageEvents: eventMap.engage, + groupsEvents: eventMap.groups, + trackEvents: eventMap.track, + importEvents: eventMap.import, + batchErrorRespList, + }; +}; + +const generateBatchedPayloadForArray = (events) => { + const { batchedRequest } = defaultBatchRequestConfig(); + const batchResponseList = events.flatMap((event) => JSON.parse(event.body.JSON_ARRAY.batch)); + batchedRequest.body.JSON_ARRAY = { batch: JSON.stringify(batchResponseList) }; + batchedRequest.endpoint = events[0].endpoint; + batchedRequest.headers = events[0].headers; + batchedRequest.params = events[0].params; + return batchedRequest; +}; + +const batchEvents = (successRespList, maxBatchSize) => { + const batchedEvents = batchMultiplexedEvents(successRespList, maxBatchSize); + return batchedEvents.map((batch) => { + const batchedRequest = generateBatchedPayloadForArray(batch.events); + return getSuccessRespEvents(batchedRequest, batch.metadata, batch.destination, true); + }); +}; + /** * Combines batched requests with the same JobIds. * @param {*} inputBatches The array of batched request objects. @@ -221,5 +283,7 @@ const combineBatchRequestsWithSameJobIds = (inputBatches) => { module.exports = { createIdentifyResponse, isImportAuthCredentialsAvailable, + groupEventsByEndpoint, + batchEvents, combineBatchRequestsWithSameJobIds, }; diff --git a/src/v0/destinations/mp/util.test.js b/src/v0/destinations/mp/util.test.js index c5cd5b61e8..43594fba6d 100644 --- a/src/v0/destinations/mp/util.test.js +++ b/src/v0/destinations/mp/util.test.js @@ -1,4 +1,9 @@ -const { combineBatchRequestsWithSameJobIds } = require('./util'); +const { + combineBatchRequestsWithSameJobIds, + groupEventsByType, + groupEventsByEndpoint, + batchEvents, +} = require('./util'); const destinationMock = { Config: { @@ -18,7 +23,243 @@ const destinationMock = { Transformations: [], }; +const maxBatchSizeMock = 2; + describe('Mixpanel utils test', () => { + describe('Unit test cases for groupEventsByEndpoint', () => { + it('should return an object with empty arrays for all properties when the events array is empty', () => { + const events = []; + const result = groupEventsByEndpoint(events); + expect(result).toEqual({ + engageEvents: [], + groupsEvents: [], + trackEvents: [], + importEvents: [], + batchErrorRespList: [], + }); + }); + + it('should return an object with all properties containing their respective events when the events array contains events of all types', () => { + const events = [ + { + message: { + endpoint: '/engage', + body: { + JSON_ARRAY: { + batch: '[{prop:1}]', + }, + }, + userId: 'user1', + }, + }, + { + message: { + endpoint: '/engage', + body: { + JSON_ARRAY: { + batch: '[{prop:2}]', + }, + }, + userId: 'user2', + }, + }, + { + message: { + endpoint: '/groups', + body: { + JSON_ARRAY: { + batch: '[{prop:3}]', + }, + }, + userId: 'user1', + }, + }, + { + message: { + endpoint: '/track', + body: { + JSON_ARRAY: { + batch: '[{prop:4}]', + }, + }, + userId: 'user1', + }, + }, + { + message: { + endpoint: '/import', + body: { + JSON_ARRAY: { + batch: '[{prop:5}]', + }, + }, + userId: 'user2', + }, + }, + { error: 'Message type abc not supported' }, + ]; + const result = groupEventsByEndpoint(events); + expect(result).toEqual({ + engageEvents: [ + { + message: { + endpoint: '/engage', + body: { + JSON_ARRAY: { + batch: '[{prop:1}]', + }, + }, + userId: 'user1', + }, + }, + { + message: { + endpoint: '/engage', + body: { + JSON_ARRAY: { + batch: '[{prop:2}]', + }, + }, + userId: 'user2', + }, + }, + ], + groupsEvents: [ + { + message: { + endpoint: '/groups', + body: { + JSON_ARRAY: { + batch: '[{prop:3}]', + }, + }, + userId: 'user1', + }, + }, + ], + trackEvents: [ + { + message: { + endpoint: '/track', + body: { + JSON_ARRAY: { + batch: '[{prop:4}]', + }, + }, + userId: 'user1', + }, + }, + ], + importEvents: [ + { + message: { + endpoint: '/import', + body: { + JSON_ARRAY: { + batch: '[{prop:5}]', + }, + }, + userId: 'user2', + }, + }, + ], + batchErrorRespList: [{ error: 'Message type abc not supported' }], + }); + }); + }); + + describe('Unit test cases for batchEvents', () => { + it('should return an array of batched events with correct payload and metadata', () => { + const successRespList = [ + { + message: { + endpoint: '/engage', + body: { + JSON_ARRAY: { + batch: '[{"prop":1}]', + }, + }, + headers: {}, + params: {}, + userId: 'user1', + }, + metadata: { jobId: 3 }, + }, + { + message: { + endpoint: '/engage', + body: { + JSON_ARRAY: { + batch: '[{"prop":2}]', + }, + }, + headers: {}, + params: {}, + userId: 'user2', + }, + metadata: { jobId: 4 }, + }, + { + message: { + endpoint: '/engage', + body: { + JSON_ARRAY: { + batch: '[{"prop":3}]', + }, + }, + headers: {}, + params: {}, + userId: 'user2', + }, + metadata: { jobId: 6 }, + }, + ]; + + const result = batchEvents(successRespList, maxBatchSizeMock); + + expect(result).toEqual([ + { + batched: true, + batchedRequest: { + body: { FORM: {}, JSON: {}, JSON_ARRAY: { batch: '[{"prop":1},{"prop":2}]' }, XML: {} }, + endpoint: '/engage', + files: {}, + headers: {}, + method: 'POST', + params: {}, + type: 'REST', + version: '1', + }, + destination: undefined, + metadata: [{ jobId: 3 }, { jobId: 4 }], + statusCode: 200, + }, + { + batched: true, + batchedRequest: { + body: { FORM: {}, JSON: {}, JSON_ARRAY: { batch: '[{"prop":3}]' }, XML: {} }, + endpoint: '/engage', + files: {}, + headers: {}, + method: 'POST', + params: {}, + type: 'REST', + version: '1', + }, + destination: undefined, + metadata: [{ jobId: 6 }], + statusCode: 200, + }, + ]); + }); + + it('should return an empty array when successRespList is empty', () => { + const successRespList = []; + const result = batchEvents(successRespList, maxBatchSizeMock); + expect(result).toEqual([]); + }); + }); + describe('Unit test cases for combineBatchRequestsWithSameJobIds', () => { it('Combine batch request with same jobIds', async () => { const input = [ diff --git a/src/v0/util/index.js b/src/v0/util/index.js index 8a20104dd0..5ddd3cf5ff 100644 --- a/src/v0/util/index.js +++ b/src/v0/util/index.js @@ -1916,6 +1916,38 @@ const batchMultiplexedEvents = (transformedEventsList, maxBatchSize) => { return batchedEvents; }; +/** + * Groups events with the same message type together in batches. + * Each batch contains events that have the same message type and are from different users. + * @param {*} inputs - An array of events + * @returns {*} - An array of batches + */ +const groupEventsByType = (inputs) => { + const batches = []; + let currentInputsArray = inputs; + while (currentInputsArray.length > 0) { + const remainingInputsArray = []; + const userOrderTracker = {}; + const event = currentInputsArray.shift(); + const messageType = event.message.type; + const batch = [event]; + currentInputsArray.forEach((currentInput) => { + const currentMessageType = currentInput.message.type; + const currentUser = currentInput.metadata.userId; + if (currentMessageType === messageType && !userOrderTracker[currentUser]) { + batch.push(currentInput); + } else { + remainingInputsArray.push(currentInput); + userOrderTracker[currentUser] = true; + } + }); + batches.push(batch); + currentInputsArray = remainingInputsArray; + } + + return batches; +}; + /** * This function helps to detarmine type of error occured. According to the response * we set authErrorCategory to take decision if we need to refresh the access_token @@ -2061,6 +2093,7 @@ module.exports = { checkAndCorrectUserId, getAccessToken, formatValues, + groupEventsByType, getAuthErrCategoryFromErrDetailsAndStCode, getAuthErrCategoryFromStCode, }; diff --git a/src/v0/util/index.test.js b/src/v0/util/index.test.js index b575f006fa..9c257d5fd3 100644 --- a/src/v0/util/index.test.js +++ b/src/v0/util/index.test.js @@ -11,6 +11,7 @@ const functionNames = [ 'extractCustomFields', 'batchMultiplexedEvents', 'removeUndefinedNullValuesAndEmptyObjectArray', + 'groupEventsByType', ]; // Names of the utility functions to test which expects multiple arguments as values and not objects diff --git a/src/v0/util/testdata/groupEventsByType.json b/src/v0/util/testdata/groupEventsByType.json new file mode 100644 index 0000000000..168b875036 --- /dev/null +++ b/src/v0/util/testdata/groupEventsByType.json @@ -0,0 +1,624 @@ +[ + { + "description": "Should return an empty array when given an empty events array", + "input": [[]], + "output": [] + }, + { + "description": "Should group multiple events with the different message type and different users together in a batch: Scenario 1", + "input": [ + [ + { + "message": { + "type": "identify", + "userId": "user1" + }, + "metadata": { + "jobId": "1" + } + }, + { + "message": { + "type": "identify", + "userId": "user2" + }, + "metadata": { + "jobId": "2" + } + }, + { + "message": { + "type": "track", + "userId": "user1" + }, + "metadata": { + "jobId": "3" + } + }, + { + "message": { + "type": "identify", + "userId": "user1" + }, + "metadata": { + "jobId": "4" + } + }, + { + "message": { + "type": "identify", + "userId": "user2" + }, + "metadata": { + "jobId": "5" + } + } + ] + ], + "output": [ + [ + { + "message": { + "type": "identify", + "userId": "user1" + }, + "metadata": { + "jobId": "1" + } + }, + { + "message": { + "type": "identify", + "userId": "user2" + }, + "metadata": { + "jobId": "2" + } + } + ], + [ + { + "message": { + "type": "track", + "userId": "user1" + }, + "metadata": { + "jobId": "3" + } + } + ], + [ + { + "message": { + "type": "identify", + "userId": "user1" + }, + "metadata": { + "jobId": "4" + } + }, + { + "message": { + "type": "identify", + "userId": "user2" + }, + "metadata": { + "jobId": "5" + } + } + ] + ] + }, + { + "description": "Should group multiple events with the different message type and different users together in a batch: Scenario 2", + "input": [ + [ + { + "message": { + "type": "identify" + }, + "metadata": { + "userId": "1" + } + }, + { + "message": { + "type": "track" + }, + "metadata": { + "userId": "1" + } + }, + { + "message": { + "type": "identify" + }, + "metadata": { + "userId": "2" + } + }, + { + "message": { + "type": "track" + }, + "metadata": { + "userId": "2" + } + }, + { + "message": { + "type": "track" + }, + "metadata": { + "userId": "2" + } + }, + { + "message": { + "type": "identify" + }, + "metadata": { + "userId": "3" + } + }, + { + "message": { + "type": "track" + }, + "metadata": { + "userId": "3" + } + }, + { + "message": { + "type": "identify" + }, + "metadata": { + "userId": "4" + } + }, + { + "message": { + "type": "track" + }, + "metadata": { + "userId": "4" + } + }, + { + "message": { + "type": "identify" + }, + "metadata": { + "userId": "5" + } + }, + { + "message": { + "type": "track" + }, + "metadata": { + "userId": "5" + } + }, + { + "message": { + "type": "identify" + }, + "metadata": { + "userId": "5" + } + }, + { + "message": { + "type": "identify" + }, + "metadata": { + "userId": "6" + } + }, + { + "message": { + "type": "identify" + }, + "metadata": { + "userId": "6" + } + }, + { + "message": { + "type": "identify" + }, + "metadata": { + "userId": "6" + } + } + ] + ], + "output": [ + [ + { + "message": { + "type": "identify" + }, + "metadata": { + "userId": "1" + } + }, + { + "message": { + "type": "identify" + }, + "metadata": { + "userId": "2" + } + }, + { + "message": { + "type": "identify" + }, + "metadata": { + "userId": "3" + } + }, + { + "message": { + "type": "identify" + }, + "metadata": { + "userId": "4" + } + }, + { + "message": { + "type": "identify" + }, + "metadata": { + "userId": "5" + } + }, + { + "message": { + "type": "identify" + }, + "metadata": { + "userId": "6" + } + }, + { + "message": { + "type": "identify" + }, + "metadata": { + "userId": "6" + } + }, + { + "message": { + "type": "identify" + }, + "metadata": { + "userId": "6" + } + } + ], + [ + { + "message": { + "type": "track" + }, + "metadata": { + "userId": "1" + } + }, + { + "message": { + "type": "track" + }, + "metadata": { + "userId": "2" + } + }, + { + "message": { + "type": "track" + }, + "metadata": { + "userId": "2" + } + }, + { + "message": { + "type": "track" + }, + "metadata": { + "userId": "3" + } + }, + { + "message": { + "type": "track" + }, + "metadata": { + "userId": "4" + } + }, + { + "message": { + "type": "track" + }, + "metadata": { + "userId": "5" + } + } + ], + [ + { + "message": { + "type": "identify" + }, + "metadata": { + "userId": "5" + } + } + ] + ] + }, + { + "description": "Should group multiple events with the different message type and different users together in a batch: Scenario 3", + "input": [ + [ + { + "message": { + "type": "track" + }, + "metadata": { + "userId": "3" + } + }, + { + "message": { + "type": "identify" + }, + "metadata": { + "userId": "3" + } + }, + { + "message": { + "type": "identify" + }, + "metadata": { + "userId": "1" + } + }, + { + "message": { + "type": "track" + }, + "metadata": { + "userId": "1" + } + }, + { + "message": { + "type": "identify" + }, + "metadata": { + "userId": "5" + } + }, + { + "message": { + "type": "track" + }, + "metadata": { + "userId": "5" + } + }, + { + "message": { + "type": "identify" + }, + "metadata": { + "userId": "5" + } + }, + { + "message": { + "type": "identify" + }, + "metadata": { + "userId": "2" + } + }, + { + "message": { + "type": "track" + }, + "metadata": { + "userId": "2" + } + }, + { + "message": { + "type": "track" + }, + "metadata": { + "userId": "2" + } + }, + { + "message": { + "type": "track" + }, + "metadata": { + "userId": "4" + } + }, + { + "message": { + "type": "identify" + }, + "metadata": { + "userId": "4" + } + }, + { + "message": { + "type": "identify" + }, + "metadata": { + "userId": "6" + } + }, + { + "message": { + "type": "identify" + }, + "metadata": { + "userId": "6" + } + }, + { + "message": { + "type": "identify" + }, + "metadata": { + "userId": "6" + } + } + ] + ], + "output": [ + [ + { + "message": { + "type": "track" + }, + "metadata": { + "userId": "3" + } + }, + { + "message": { + "type": "track" + }, + "metadata": { + "userId": "4" + } + } + ], + [ + { + "message": { + "type": "identify" + }, + "metadata": { + "userId": "3" + } + }, + { + "message": { + "type": "identify" + }, + "metadata": { + "userId": "1" + } + }, + { + "message": { + "type": "identify" + }, + "metadata": { + "userId": "5" + } + }, + { + "message": { + "type": "identify" + }, + "metadata": { + "userId": "2" + } + }, + { + "message": { + "type": "identify" + }, + "metadata": { + "userId": "4" + } + }, + { + "message": { + "type": "identify" + }, + "metadata": { + "userId": "6" + } + }, + { + "message": { + "type": "identify" + }, + "metadata": { + "userId": "6" + } + }, + { + "message": { + "type": "identify" + }, + "metadata": { + "userId": "6" + } + } + ], + [ + { + "message": { + "type": "track" + }, + "metadata": { + "userId": "1" + } + }, + { + "message": { + "type": "track" + }, + "metadata": { + "userId": "5" + } + }, + { + "message": { + "type": "track" + }, + "metadata": { + "userId": "2" + } + }, + { + "message": { + "type": "track" + }, + "metadata": { + "userId": "2" + } + } + ], + [ + { + "message": { + "type": "identify" + }, + "metadata": { + "userId": "5" + } + } + ] + ] + } +] diff --git a/test/__tests__/data/mp_router_output.json b/test/__tests__/data/mp_router_output.json index acd6912c01..d1af209e8b 100644 --- a/test/__tests__/data/mp_router_output.json +++ b/test/__tests__/data/mp_router_output.json @@ -1,4 +1,55 @@ [ + { + "batchedRequest": { + "version": "1", + "type": "REST", + "method": "POST", + "endpoint": "https://api.mixpanel.com/import/", + "headers": { + "Content-Type": "application/json", + "Authorization": "Basic dGVzdF9hcGlfc2VjcmV0Og==" + }, + "params": { + "strict": 1 + }, + "body": { + "JSON": {}, + "JSON_ARRAY": { + "batch": "[{\"event\":\"Loaded a Page\",\"properties\":{\"ip\":\"0.0.0.0\",\"$user_id\":\"hjikl\",\"$current_url\":\"https://docs.rudderstack.com/destinations/mixpanel\",\"$screen_dpi\":2,\"mp_lib\":\"RudderLabs JavaScript SDK\",\"$app_build_number\":\"1.0.0\",\"$app_version_string\":\"1.0.5\",\"$insert_id\":\"dd266c67-9199-4a52-ba32-f46ddde67312\",\"token\":\"test_api_token\",\"distinct_id\":\"hjikl\",\"time\":1688624942,\"name\":\"Contact Us\",\"$browser\":\"Chrome\",\"$browser_version\":\"79.0.3945.117\"}}]" + }, + "XML": {}, + "FORM": {} + }, + "files": {} + }, + "metadata": [ + { + "jobId": 1, + "additionalProp": 1 + } + ], + "batched": true, + "statusCode": 200, + "destination": { + "Config": { + "apiSecret": "test_api_secret", + "token": "test_api_token", + "prefixProperties": true, + "useNativeSDK": false, + "useOldMapping": true, + "strictMode": true + }, + "DestinationDefinition": { + "DisplayName": "Mixpanel", + "ID": "1WhbSZ6uA3H5ChVifHpfL2H6sie", + "Name": "MP" + }, + "Enabled": true, + "ID": "1WhcOCGgj9asZu850HvugU2C3Aq", + "Name": "Mixpanel", + "Transformations": [] + } + }, { "batchedRequest": [ { @@ -11,7 +62,7 @@ "body": { "JSON": {}, "JSON_ARRAY": { - "batch": "[{\"$append\":{\"$transactions\":{\"$time\":\"2023-07-06T06:29:02.402Z\",\"$amount\":18.9}},\"$token\":\"test_api_token\",\"$distinct_id\":\"userId01\"},{\"$set\":{\"$email\":\"mickey@disney.com\",\"$country_code\":\"USA\",\"$city\":\"Disney\",\"$initial_referrer\":\"https://docs.rudderstack.com\",\"$initial_referring_domain\":\"docs.rudderstack.com\",\"$firstName\":\"Mickey\",\"$browser\":\"Chrome\",\"$browser_version\":\"79.0.3945.117\"},\"$token\":\"test_api_token\",\"$distinct_id\":\"e6ab2c5e-2cda-44a9-a962-e2f67df78bca\",\"$ip\":\"0.0.0.0\",\"$time\":1688624942},{\"$set\":{\"$created\":\"2020-01-23T08:54:02.362Z\",\"$email\":\"mickey@disney.com\",\"$country_code\":\"USA\",\"$city\":\"Disney\",\"$initial_referrer\":\"https://docs.rudderstack.com\",\"$initial_referring_domain\":\"docs.rudderstack.com\",\"$name\":\"Mickey Mouse\",\"$firstName\":\"Mickey\",\"$lastName\":\"Mouse\",\"$browser\":\"Chrome\",\"$browser_version\":\"79.0.3945.117\"},\"$token\":\"test_api_token\",\"$distinct_id\":\"$device:anonId01\",\"$ip\":\"0.0.0.0\",\"$time\":1688624942}]" + "batch": "[{\"$append\":{\"$transactions\":{\"$time\":\"2023-07-06T06:29:02.402Z\",\"$amount\":18.9}},\"$token\":\"test_api_token\",\"$distinct_id\":\"userId01\"}]" }, "XML": {}, "FORM": {} @@ -33,7 +84,7 @@ "body": { "JSON": {}, "JSON_ARRAY": { - "batch": "[{\"event\":\"Loaded a Page\",\"properties\":{\"ip\":\"0.0.0.0\",\"$user_id\":\"hjikl\",\"$current_url\":\"https://docs.rudderstack.com/destinations/mixpanel\",\"$screen_dpi\":2,\"mp_lib\":\"RudderLabs JavaScript SDK\",\"$app_build_number\":\"1.0.0\",\"$app_version_string\":\"1.0.5\",\"$insert_id\":\"dd266c67-9199-4a52-ba32-f46ddde67312\",\"token\":\"test_api_token\",\"distinct_id\":\"hjikl\",\"time\":1688624942,\"name\":\"Contact Us\",\"$browser\":\"Chrome\",\"$browser_version\":\"79.0.3945.117\"}},{\"event\":\"Product Viewed\",\"properties\":{\"name\":\"T-Shirt\",\"revenue\":18.9,\"$user_id\":\"userId01\",\"$os\":\"iOS\",\"$screen_height\":1794,\"$screen_width\":1080,\"$screen_dpi\":420,\"$carrier\":\"Android\",\"$os_version\":\"8.1.0\",\"$device\":\"generic_x86\",\"$manufacturer\":\"Google\",\"$model\":\"Android SDK built for x86\",\"mp_device_model\":\"Android SDK built for x86\",\"$wifi\":true,\"$bluetooth_enabled\":false,\"mp_lib\":\"com.rudderstack.android.sdk.core\",\"$app_build_number\":\"1\",\"$app_version_string\":\"1.0\",\"$insert_id\":\"id2\",\"token\":\"test_api_token\",\"distinct_id\":\"userId01\",\"time\":1688624942,\"$device_id\":\"anonId01\"}}]" + "batch": "[{\"event\":\"Product Viewed\",\"properties\":{\"name\":\"T-Shirt\",\"revenue\":18.9,\"$user_id\":\"userId01\",\"$os\":\"iOS\",\"$screen_height\":1794,\"$screen_width\":1080,\"$screen_dpi\":420,\"$carrier\":\"Android\",\"$os_version\":\"8.1.0\",\"$device\":\"generic_x86\",\"$manufacturer\":\"Google\",\"$model\":\"Android SDK built for x86\",\"mp_device_model\":\"Android SDK built for x86\",\"$wifi\":true,\"$bluetooth_enabled\":false,\"mp_lib\":\"com.rudderstack.android.sdk.core\",\"$app_build_number\":\"1\",\"$app_version_string\":\"1.0\",\"$insert_id\":\"id2\",\"token\":\"test_api_token\",\"distinct_id\":\"userId01\",\"time\":1688624942,\"$device_id\":\"anonId01\"}}]" }, "XML": {}, "FORM": {} @@ -45,18 +96,6 @@ { "jobId": 2, "additionalProp": 2 - }, - { - "jobId": 3, - "additionalProp": 3 - }, - { - "jobId": 4, - "additionalProp": 4 - }, - { - "jobId": 1, - "additionalProp": 1 } ], "batched": true, @@ -92,7 +131,7 @@ "body": { "JSON": {}, "JSON_ARRAY": { - "batch": "[{\"$set\":{\"$carrier\":\"Android\",\"$manufacturer\":\"Google\",\"$model\":\"Android SDK built for x86\",\"$screen_height\":1794,\"$screen_width\":1080,\"$wifi\":true,\"anonymousId\":\"5094f5704b9cf2b3\",\"userId\":\"test_user_id\",\"$ios_devices\":[\"test_device_token\"],\"$os\":\"iOS\",\"$ios_device_model\":\"Android SDK built for x86\",\"$ios_version\":\"8.1.0\",\"$ios_app_release\":\"1\",\"$ios_app_version\":\"1.0\"},\"$token\":\"test_api_token\",\"$distinct_id\":\"test_user_id\",\"$time\":null},{\"$token\":\"test_api_token\",\"$distinct_id\":\"userId06\",\"$set\":{\"company\":[\"testComp\"]},\"$ip\":\"0.0.0.0\"}]" + "batch": "[{\"$set\":{\"$email\":\"mickey@disney.com\",\"$country_code\":\"USA\",\"$city\":\"Disney\",\"$initial_referrer\":\"https://docs.rudderstack.com\",\"$initial_referring_domain\":\"docs.rudderstack.com\",\"$firstName\":\"Mickey\",\"$browser\":\"Chrome\",\"$browser_version\":\"79.0.3945.117\"},\"$token\":\"test_api_token\",\"$distinct_id\":\"e6ab2c5e-2cda-44a9-a962-e2f67df78bca\",\"$ip\":\"0.0.0.0\",\"$time\":1688624942},{\"$set\":{\"$created\":\"2020-01-23T08:54:02.362Z\",\"$email\":\"mickey@disney.com\",\"$country_code\":\"USA\",\"$city\":\"Disney\",\"$initial_referrer\":\"https://docs.rudderstack.com\",\"$initial_referring_domain\":\"docs.rudderstack.com\",\"$name\":\"Mickey Mouse\",\"$firstName\":\"Mickey\",\"$lastName\":\"Mouse\",\"$browser\":\"Chrome\",\"$browser_version\":\"79.0.3945.117\"},\"$token\":\"test_api_token\",\"$distinct_id\":\"$device:anonId01\",\"$ip\":\"0.0.0.0\",\"$time\":1688624942},{\"$set\":{\"$carrier\":\"Android\",\"$manufacturer\":\"Google\",\"$model\":\"Android SDK built for x86\",\"$screen_height\":1794,\"$screen_width\":1080,\"$wifi\":true,\"anonymousId\":\"5094f5704b9cf2b3\",\"userId\":\"test_user_id\",\"$ios_devices\":[\"test_device_token\"],\"$os\":\"iOS\",\"$ios_device_model\":\"Android SDK built for x86\",\"$ios_version\":\"8.1.0\",\"$ios_app_release\":\"1\",\"$ios_app_version\":\"1.0\"},\"$token\":\"test_api_token\",\"$distinct_id\":\"test_user_id\",\"$time\":null}]" }, "XML": {}, "FORM": {} @@ -103,13 +142,74 @@ "version": "1", "type": "REST", "method": "POST", - "endpoint": "https://api.mixpanel.com/groups/", + "endpoint": "https://api.mixpanel.com/import/", + "headers": { + "Content-Type": "application/json", + "Authorization": "Basic dGVzdF9hcGlfc2VjcmV0Og==" + }, + "params": { + "strict": 1 + }, + "body": { + "JSON": {}, + "JSON_ARRAY": { + "batch": "[{\"event\":\"$merge\",\"properties\":{\"$distinct_ids\":[\"test_user_id\",\"5094f5704b9cf2b3\"],\"token\":\"test_api_token\"}}]" + }, + "XML": {}, + "FORM": {} + }, + "files": {} + } + ], + "metadata": [ + { + "jobId": 3, + "additionalProp": 3 + }, + { + "jobId": 4, + "additionalProp": 4 + }, + { + "jobId": 5, + "additionalProp": 5 + } + ], + "batched": true, + "statusCode": 200, + "destination": { + "Config": { + "apiSecret": "test_api_secret", + "token": "test_api_token", + "prefixProperties": true, + "useNativeSDK": false, + "useOldMapping": true, + "strictMode": true + }, + "DestinationDefinition": { + "DisplayName": "Mixpanel", + "ID": "1WhbSZ6uA3H5ChVifHpfL2H6sie", + "Name": "MP" + }, + "Enabled": true, + "ID": "1WhcOCGgj9asZu850HvugU2C3Aq", + "Name": "Mixpanel", + "Transformations": [] + } + }, + { + "batchedRequest": [ + { + "version": "1", + "type": "REST", + "method": "POST", + "endpoint": "https://api.mixpanel.com/engage/", "headers": {}, "params": {}, "body": { "JSON": {}, "JSON_ARRAY": { - "batch": "[{\"$token\":\"test_api_token\",\"$group_key\":\"company\",\"$group_id\":\"testComp\",\"$set\":{\"company\":\"testComp\"}}]" + "batch": "[{\"$token\":\"test_api_token\",\"$distinct_id\":\"userId06\",\"$set\":{\"company\":[\"testComp\"]},\"$ip\":\"0.0.0.0\"}]" }, "XML": {}, "FORM": {} @@ -120,18 +220,13 @@ "version": "1", "type": "REST", "method": "POST", - "endpoint": "https://api.mixpanel.com/import/", - "headers": { - "Content-Type": "application/json", - "Authorization": "Basic dGVzdF9hcGlfc2VjcmV0Og==" - }, - "params": { - "strict": 1 - }, + "endpoint": "https://api.mixpanel.com/groups/", + "headers": {}, + "params": {}, "body": { "JSON": {}, "JSON_ARRAY": { - "batch": "[{\"event\":\"$merge\",\"properties\":{\"$distinct_ids\":[\"test_user_id\",\"5094f5704b9cf2b3\"],\"token\":\"test_api_token\"}}]" + "batch": "[{\"$token\":\"test_api_token\",\"$group_key\":\"company\",\"$group_id\":\"testComp\",\"$set\":{\"company\":\"testComp\"}}]" }, "XML": {}, "FORM": {} @@ -140,10 +235,6 @@ } ], "metadata": [ - { - "jobId": 5, - "additionalProp": 5 - }, { "jobId": 6, "additionalProp": 6 @@ -155,8 +246,11 @@ "Config": { "apiSecret": "test_api_secret", "token": "test_api_token", - "prefixProperties": true, - "useNativeSDK": false, + "groupKeySettings": [ + { + "groupKey": "company" + } + ], "strictMode": true }, "DestinationDefinition": { From 9440e39834f41082e4bb55dfef07f15f0cf26e82 Mon Sep 17 00:00:00 2001 From: Sanjay <71065320+Sanjay-Veernala@users.noreply.github.com> Date: Tue, 19 Sep 2023 16:15:30 +0530 Subject: [PATCH 37/37] fix(snyk): upgraded versiions for aws packages --- package-lock.json | 5301 ++++++++++++++++++++++++++++++--------------- package.json | 3 + 2 files changed, 3502 insertions(+), 1802 deletions(-) diff --git a/package-lock.json b/package-lock.json index 3e37fd9d49..ef0cb08127 100644 --- a/package-lock.json +++ b/package-lock.json @@ -10,6 +10,7 @@ "license": "ISC", "dependencies": { "@amplitude/ua-parser-js": "^0.7.24", + "@aws-sdk/client-lambda": "^3.276.0", "@aws-sdk/client-personalize": "^3.391.0", "@aws-sdk/client-s3": "^3.370.0", "@aws-sdk/credential-providers": "^3.391.0", @@ -23,6 +24,7 @@ "ajv": "^8.12.0", "ajv-draft-04": "^1.0.0", "ajv-formats": "^2.1.1", + "aws-sdk": "^2.1354.0", "axios": "^1.4.0", "btoa": "^1.2.1", "component-each": "^0.2.6", @@ -56,6 +58,7 @@ "oauth-1.0a": "^2.2.6", "object-hash": "^3.0.0", "parse-static-imports": "^1.1.0", + "pprof": "^3.2.1", "prom-client": "^14.2.0", "qs": "^6.11.1", "rudder-transformer-cdk": "^1.4.11", @@ -350,43 +353,44 @@ } }, "node_modules/@aws-sdk/client-cognito-identity": { - "version": "3.391.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-cognito-identity/-/client-cognito-identity-3.391.0.tgz", - "integrity": "sha512-5mlkdrLP6sTG6D+q/qFw6vPVegFGSy1XcVUdERmWo6fvR7mYlRNETGC5sNsGPcMhnN3MCviqxCJmXpwnsP7okg==", + "version": "3.414.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-cognito-identity/-/client-cognito-identity-3.414.0.tgz", + "integrity": "sha512-U9J0R/22eftQjY6JeAzXXYSgA+T6vx/jDsBBWBIKTjCZPBmmVOb2A4/d4sxHMxjh6Ms3DolpocE5FCbB9eGBEg==", "dependencies": { "@aws-crypto/sha256-browser": "3.0.0", "@aws-crypto/sha256-js": "3.0.0", - "@aws-sdk/client-sts": "3.391.0", - "@aws-sdk/credential-provider-node": "3.391.0", - "@aws-sdk/middleware-host-header": "3.391.0", - "@aws-sdk/middleware-logger": "3.391.0", - "@aws-sdk/middleware-recursion-detection": "3.391.0", - "@aws-sdk/middleware-signing": "3.391.0", - "@aws-sdk/middleware-user-agent": "3.391.0", - "@aws-sdk/types": "3.391.0", - "@aws-sdk/util-endpoints": "3.391.0", - "@aws-sdk/util-user-agent-browser": "3.391.0", - "@aws-sdk/util-user-agent-node": "3.391.0", - "@smithy/config-resolver": "^2.0.3", - "@smithy/fetch-http-handler": "^2.0.3", - "@smithy/hash-node": "^2.0.3", - "@smithy/invalid-dependency": "^2.0.3", - "@smithy/middleware-content-length": "^2.0.3", - "@smithy/middleware-endpoint": "^2.0.3", - "@smithy/middleware-retry": "^2.0.3", - "@smithy/middleware-serde": "^2.0.3", + "@aws-sdk/client-sts": "3.414.0", + "@aws-sdk/credential-provider-node": "3.414.0", + "@aws-sdk/middleware-host-header": "3.413.0", + "@aws-sdk/middleware-logger": "3.413.0", + "@aws-sdk/middleware-recursion-detection": "3.413.0", + "@aws-sdk/middleware-signing": "3.413.0", + "@aws-sdk/middleware-user-agent": "3.413.0", + "@aws-sdk/region-config-resolver": "3.413.0", + "@aws-sdk/types": "3.413.0", + "@aws-sdk/util-endpoints": "3.413.0", + "@aws-sdk/util-user-agent-browser": "3.413.0", + "@aws-sdk/util-user-agent-node": "3.413.0", + "@smithy/config-resolver": "^2.0.8", + "@smithy/fetch-http-handler": "^2.1.3", + "@smithy/hash-node": "^2.0.7", + "@smithy/invalid-dependency": "^2.0.7", + "@smithy/middleware-content-length": "^2.0.9", + "@smithy/middleware-endpoint": "^2.0.7", + "@smithy/middleware-retry": "^2.0.10", + "@smithy/middleware-serde": "^2.0.7", "@smithy/middleware-stack": "^2.0.0", - "@smithy/node-config-provider": "^2.0.3", - "@smithy/node-http-handler": "^2.0.3", - "@smithy/protocol-http": "^2.0.3", - "@smithy/smithy-client": "^2.0.3", - "@smithy/types": "^2.2.0", - "@smithy/url-parser": "^2.0.3", + "@smithy/node-config-provider": "^2.0.10", + "@smithy/node-http-handler": "^2.1.3", + "@smithy/protocol-http": "^3.0.3", + "@smithy/smithy-client": "^2.1.4", + "@smithy/types": "^2.3.1", + "@smithy/url-parser": "^2.0.7", "@smithy/util-base64": "^2.0.0", "@smithy/util-body-length-browser": "^2.0.0", - "@smithy/util-body-length-node": "^2.0.0", - "@smithy/util-defaults-mode-browser": "^2.0.3", - "@smithy/util-defaults-mode-node": "^2.0.3", + "@smithy/util-body-length-node": "^2.1.0", + "@smithy/util-defaults-mode-browser": "^2.0.8", + "@smithy/util-defaults-mode-node": "^2.0.10", "@smithy/util-retry": "^2.0.0", "@smithy/util-utf8": "^2.0.0", "tslib": "^2.5.0" @@ -395,777 +399,690 @@ "node": ">=14.0.0" } }, - "node_modules/@aws-sdk/client-cognito-identity/node_modules/@aws-sdk/client-sso": { - "version": "3.391.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso/-/client-sso-3.391.0.tgz", - "integrity": "sha512-aT+O1CbWIWYlCtWK6g3ZaMvFNImOgFGurOEPscuedqzG5UQc1bRtRrGYShLyzcZgfXP+s0cKYJqgGeRNoWiwqA==", + "node_modules/@aws-sdk/client-cognito-identity/node_modules/@aws-sdk/types": { + "version": "3.413.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.413.0.tgz", + "integrity": "sha512-j1xib0f/TazIFc5ySIKOlT1ujntRbaoG4LJFeEezz4ji03/wSJMI8Vi4KjzpBp8J1tTu0oRDnsxRIGixsUBeYQ==", "dependencies": { - "@aws-crypto/sha256-browser": "3.0.0", - "@aws-crypto/sha256-js": "3.0.0", - "@aws-sdk/middleware-host-header": "3.391.0", - "@aws-sdk/middleware-logger": "3.391.0", - "@aws-sdk/middleware-recursion-detection": "3.391.0", - "@aws-sdk/middleware-user-agent": "3.391.0", - "@aws-sdk/types": "3.391.0", - "@aws-sdk/util-endpoints": "3.391.0", - "@aws-sdk/util-user-agent-browser": "3.391.0", - "@aws-sdk/util-user-agent-node": "3.391.0", - "@smithy/config-resolver": "^2.0.3", - "@smithy/fetch-http-handler": "^2.0.3", - "@smithy/hash-node": "^2.0.3", - "@smithy/invalid-dependency": "^2.0.3", - "@smithy/middleware-content-length": "^2.0.3", - "@smithy/middleware-endpoint": "^2.0.3", - "@smithy/middleware-retry": "^2.0.3", - "@smithy/middleware-serde": "^2.0.3", - "@smithy/middleware-stack": "^2.0.0", - "@smithy/node-config-provider": "^2.0.3", - "@smithy/node-http-handler": "^2.0.3", - "@smithy/protocol-http": "^2.0.3", - "@smithy/smithy-client": "^2.0.3", - "@smithy/types": "^2.2.0", - "@smithy/url-parser": "^2.0.3", - "@smithy/util-base64": "^2.0.0", - "@smithy/util-body-length-browser": "^2.0.0", - "@smithy/util-body-length-node": "^2.0.0", - "@smithy/util-defaults-mode-browser": "^2.0.3", - "@smithy/util-defaults-mode-node": "^2.0.3", - "@smithy/util-retry": "^2.0.0", - "@smithy/util-utf8": "^2.0.0", + "@smithy/types": "^2.3.1", "tslib": "^2.5.0" }, "engines": { "node": ">=14.0.0" } }, - "node_modules/@aws-sdk/client-cognito-identity/node_modules/@aws-sdk/client-sts": { - "version": "3.391.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-sts/-/client-sts-3.391.0.tgz", - "integrity": "sha512-y+KmorcUx9o5O99sXVPbhGUpsLpfhzYRaYCqxArLsyzZTCO6XDXMi8vg/xtS+b703j9lWEl5GxAv2oBaEwEnhQ==", + "node_modules/@aws-sdk/client-cognito-identity/node_modules/@smithy/abort-controller": { + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/@smithy/abort-controller/-/abort-controller-2.0.8.tgz", + "integrity": "sha512-2SOdVj5y0zE37Y9scSXoizoxgi6mgnDabi7a/SOfhl0p+50I0rIkuJTfyAuTPDtQ7e5dD6tSZPCLB3c/YM6Zig==", "dependencies": { - "@aws-crypto/sha256-browser": "3.0.0", - "@aws-crypto/sha256-js": "3.0.0", - "@aws-sdk/credential-provider-node": "3.391.0", - "@aws-sdk/middleware-host-header": "3.391.0", - "@aws-sdk/middleware-logger": "3.391.0", - "@aws-sdk/middleware-recursion-detection": "3.391.0", - "@aws-sdk/middleware-sdk-sts": "3.391.0", - "@aws-sdk/middleware-signing": "3.391.0", - "@aws-sdk/middleware-user-agent": "3.391.0", - "@aws-sdk/types": "3.391.0", - "@aws-sdk/util-endpoints": "3.391.0", - "@aws-sdk/util-user-agent-browser": "3.391.0", - "@aws-sdk/util-user-agent-node": "3.391.0", - "@smithy/config-resolver": "^2.0.3", - "@smithy/fetch-http-handler": "^2.0.3", - "@smithy/hash-node": "^2.0.3", - "@smithy/invalid-dependency": "^2.0.3", - "@smithy/middleware-content-length": "^2.0.3", - "@smithy/middleware-endpoint": "^2.0.3", - "@smithy/middleware-retry": "^2.0.3", - "@smithy/middleware-serde": "^2.0.3", - "@smithy/middleware-stack": "^2.0.0", - "@smithy/node-config-provider": "^2.0.3", - "@smithy/node-http-handler": "^2.0.3", - "@smithy/protocol-http": "^2.0.3", - "@smithy/smithy-client": "^2.0.3", - "@smithy/types": "^2.2.0", - "@smithy/url-parser": "^2.0.3", - "@smithy/util-base64": "^2.0.0", - "@smithy/util-body-length-browser": "^2.0.0", - "@smithy/util-body-length-node": "^2.0.0", - "@smithy/util-defaults-mode-browser": "^2.0.3", - "@smithy/util-defaults-mode-node": "^2.0.3", - "@smithy/util-retry": "^2.0.0", - "@smithy/util-utf8": "^2.0.0", - "fast-xml-parser": "4.2.5", + "@smithy/types": "^2.3.2", "tslib": "^2.5.0" }, "engines": { "node": ">=14.0.0" } }, - "node_modules/@aws-sdk/client-cognito-identity/node_modules/@aws-sdk/credential-provider-env": { - "version": "3.391.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-env/-/credential-provider-env-3.391.0.tgz", - "integrity": "sha512-mAzICedcg4bfL0mM5O6QTd9mQ331NLse1DMr6XL21ZZiLB48ej19L7AGV2xq5QwVbqKU3IVv1myRyhvpDM9jMg==", + "node_modules/@aws-sdk/client-cognito-identity/node_modules/@smithy/config-resolver": { + "version": "2.0.9", + "resolved": "https://registry.npmjs.org/@smithy/config-resolver/-/config-resolver-2.0.9.tgz", + "integrity": "sha512-QBkGPLUqyPmis9Erz8v4q5lo/ErnF7+GD5WZHa6JZiXopUPfaaM+B21n8gzS5xCkIXZmnwzNQhObP9xQPu8oqQ==", "dependencies": { - "@aws-sdk/types": "3.391.0", - "@smithy/property-provider": "^2.0.0", - "@smithy/types": "^2.2.0", + "@smithy/node-config-provider": "^2.0.11", + "@smithy/types": "^2.3.2", + "@smithy/util-config-provider": "^2.0.0", + "@smithy/util-middleware": "^2.0.1", "tslib": "^2.5.0" }, "engines": { "node": ">=14.0.0" } }, - "node_modules/@aws-sdk/client-cognito-identity/node_modules/@aws-sdk/credential-provider-ini": { - "version": "3.391.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.391.0.tgz", - "integrity": "sha512-DJZmbmRMqNSfSV7UF8eBVhADz16KAMCTxnFuvgioHHfYUTZQEhCxRHI8jJqYWxhLTriS7AuTBIWr+1AIbwsCTA==", + "node_modules/@aws-sdk/client-cognito-identity/node_modules/@smithy/credential-provider-imds": { + "version": "2.0.11", + "resolved": "https://registry.npmjs.org/@smithy/credential-provider-imds/-/credential-provider-imds-2.0.11.tgz", + "integrity": "sha512-uJJs8dnM5iXkn8a2GaKvlKMhcOJ+oJPYqY9gY3CM/EieCVObIDjxUtR/g8lU/k/A+OauA78GzScAfulmFjPOYA==", "dependencies": { - "@aws-sdk/credential-provider-env": "3.391.0", - "@aws-sdk/credential-provider-process": "3.391.0", - "@aws-sdk/credential-provider-sso": "3.391.0", - "@aws-sdk/credential-provider-web-identity": "3.391.0", - "@aws-sdk/types": "3.391.0", - "@smithy/credential-provider-imds": "^2.0.0", - "@smithy/property-provider": "^2.0.0", - "@smithy/shared-ini-file-loader": "^2.0.0", - "@smithy/types": "^2.2.0", + "@smithy/node-config-provider": "^2.0.11", + "@smithy/property-provider": "^2.0.9", + "@smithy/types": "^2.3.2", + "@smithy/url-parser": "^2.0.8", "tslib": "^2.5.0" }, "engines": { "node": ">=14.0.0" } }, - "node_modules/@aws-sdk/client-cognito-identity/node_modules/@aws-sdk/credential-provider-node": { - "version": "3.391.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.391.0.tgz", - "integrity": "sha512-LXHQwsTw4WBwRzD9swu8254Hao5MoIaGXIzbhX4EQ84dtOkKYbwiY4pDpLfcHcw3B1lFKkVclMze8WAs4EdEww==", + "node_modules/@aws-sdk/client-cognito-identity/node_modules/@smithy/fetch-http-handler": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@smithy/fetch-http-handler/-/fetch-http-handler-2.1.4.tgz", + "integrity": "sha512-SL24M9W5ERByoXaVicRx+bj9GJVujDnPn+QO7GY7adhY0mPGa6DSF58pVKsgIh4r5Tx/k3SWCPlH4BxxSxA/fQ==", "dependencies": { - "@aws-sdk/credential-provider-env": "3.391.0", - "@aws-sdk/credential-provider-ini": "3.391.0", - "@aws-sdk/credential-provider-process": "3.391.0", - "@aws-sdk/credential-provider-sso": "3.391.0", - "@aws-sdk/credential-provider-web-identity": "3.391.0", - "@aws-sdk/types": "3.391.0", - "@smithy/credential-provider-imds": "^2.0.0", - "@smithy/property-provider": "^2.0.0", - "@smithy/shared-ini-file-loader": "^2.0.0", - "@smithy/types": "^2.2.0", + "@smithy/protocol-http": "^3.0.4", + "@smithy/querystring-builder": "^2.0.8", + "@smithy/types": "^2.3.2", + "@smithy/util-base64": "^2.0.0", "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" } }, - "node_modules/@aws-sdk/client-cognito-identity/node_modules/@aws-sdk/credential-provider-process": { - "version": "3.391.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-process/-/credential-provider-process-3.391.0.tgz", - "integrity": "sha512-KMlzPlBI+hBmXDo+EoFZdLgCVRkRa9B9iEE6x0+hQQ6g9bW6HI7cDRVdceR1ZoPasSaNAZ9QOXMTIBxTpn0sPQ==", + "node_modules/@aws-sdk/client-cognito-identity/node_modules/@smithy/hash-node": { + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/@smithy/hash-node/-/hash-node-2.0.8.tgz", + "integrity": "sha512-yZL/nmxZzjZV5/QX5JWSgXlt0HxuMTwFO89CS++jOMMPiCMZngf6VYmtNdccs8IIIAMmfQeTzwu07XgUE/Zd3Q==", "dependencies": { - "@aws-sdk/types": "3.391.0", - "@smithy/property-provider": "^2.0.0", - "@smithy/shared-ini-file-loader": "^2.0.0", - "@smithy/types": "^2.2.0", + "@smithy/types": "^2.3.2", + "@smithy/util-buffer-from": "^2.0.0", + "@smithy/util-utf8": "^2.0.0", "tslib": "^2.5.0" }, "engines": { "node": ">=14.0.0" } }, - "node_modules/@aws-sdk/client-cognito-identity/node_modules/@aws-sdk/credential-provider-sso": { - "version": "3.391.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.391.0.tgz", - "integrity": "sha512-FT/WoiRHiKys+FcRwvjui0yKuzNtJdn2uGuI1hYE0gpW1wVmW02ouufLckJTmcw09THUZ4w53OoCVU5OY00p8A==", + "node_modules/@aws-sdk/client-cognito-identity/node_modules/@smithy/invalid-dependency": { + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/@smithy/invalid-dependency/-/invalid-dependency-2.0.8.tgz", + "integrity": "sha512-88VOS7W3KzUz/bNRc+Sl/F/CDIasFspEE4G39YZRHIh9YmsXF7GUyVaAKURfMNulTie62ayk6BHC9O0nOBAVgQ==", "dependencies": { - "@aws-sdk/client-sso": "3.391.0", - "@aws-sdk/token-providers": "3.391.0", - "@aws-sdk/types": "3.391.0", - "@smithy/property-provider": "^2.0.0", - "@smithy/shared-ini-file-loader": "^2.0.0", - "@smithy/types": "^2.2.0", + "@smithy/types": "^2.3.2", "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" } }, - "node_modules/@aws-sdk/client-cognito-identity/node_modules/@aws-sdk/credential-provider-web-identity": { - "version": "3.391.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.391.0.tgz", - "integrity": "sha512-n0vYg82B8bc4rxKltVbVqclev7hx+elyS9pEnZs3YbnbWJq0qqsznXmDfLqd1TcWpa09PGXcah0nsRDolVThsA==", + "node_modules/@aws-sdk/client-cognito-identity/node_modules/@smithy/is-array-buffer": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-2.0.0.tgz", + "integrity": "sha512-z3PjFjMyZNI98JFRJi/U0nGoLWMSJlDjAW4QUX2WNZLas5C0CmVV6LJ01JI0k90l7FvpmixjWxPFmENSClQ7ug==", "dependencies": { - "@aws-sdk/types": "3.391.0", - "@smithy/property-provider": "^2.0.0", - "@smithy/types": "^2.2.0", "tslib": "^2.5.0" }, "engines": { "node": ">=14.0.0" } }, - "node_modules/@aws-sdk/client-cognito-identity/node_modules/@aws-sdk/middleware-host-header": { - "version": "3.391.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-host-header/-/middleware-host-header-3.391.0.tgz", - "integrity": "sha512-+nyNr0rb2ixY7mU48nibr7L7gsw37y4oELhqgnNKhcjZDJ34imBwKIMFa64n21FdftmhcjR8IdSpzXE9xrkJ8g==", + "node_modules/@aws-sdk/client-cognito-identity/node_modules/@smithy/middleware-content-length": { + "version": "2.0.10", + "resolved": "https://registry.npmjs.org/@smithy/middleware-content-length/-/middleware-content-length-2.0.10.tgz", + "integrity": "sha512-EGSbysyA4jH0p3xI6G0jdXoj9Iz9GUnAta6aEaHtXm3wVWtenRf80y2TeVvNkVSr5jwKOdSCjKIRI2l1A/oZLA==", "dependencies": { - "@aws-sdk/types": "3.391.0", - "@smithy/protocol-http": "^2.0.3", - "@smithy/types": "^2.2.0", + "@smithy/protocol-http": "^3.0.4", + "@smithy/types": "^2.3.2", "tslib": "^2.5.0" }, "engines": { "node": ">=14.0.0" } }, - "node_modules/@aws-sdk/client-cognito-identity/node_modules/@aws-sdk/middleware-logger": { - "version": "3.391.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-logger/-/middleware-logger-3.391.0.tgz", - "integrity": "sha512-KOwl5zo16b17JDhqILHBStccBQ2w35em7+/6vdkJdUII6OU8aVIFTlIQT9wOUvd4do6biIRBMZG3IK0Rg7mRDQ==", + "node_modules/@aws-sdk/client-cognito-identity/node_modules/@smithy/middleware-endpoint": { + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/@smithy/middleware-endpoint/-/middleware-endpoint-2.0.8.tgz", + "integrity": "sha512-yOpogfG2d2V0cbJdAJ6GLAWkNOc9pVsL5hZUfXcxJu408N3CUCsXzIAFF6+70ZKSE+lCfG3GFErcSXv/UfUbjw==", "dependencies": { - "@aws-sdk/types": "3.391.0", - "@smithy/types": "^2.2.0", + "@smithy/middleware-serde": "^2.0.8", + "@smithy/types": "^2.3.2", + "@smithy/url-parser": "^2.0.8", + "@smithy/util-middleware": "^2.0.1", "tslib": "^2.5.0" }, "engines": { "node": ">=14.0.0" } }, - "node_modules/@aws-sdk/client-cognito-identity/node_modules/@aws-sdk/middleware-recursion-detection": { - "version": "3.391.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.391.0.tgz", - "integrity": "sha512-hVR3z59G7pX4pjDQs9Ag1tMgbLeGXOzeAAaNP9fEtHSd3KBMAGQgN3K3b9WPjzE2W0EoloHRJMK4qxZErdde2g==", + "node_modules/@aws-sdk/client-cognito-identity/node_modules/@smithy/middleware-retry": { + "version": "2.0.11", + "resolved": "https://registry.npmjs.org/@smithy/middleware-retry/-/middleware-retry-2.0.11.tgz", + "integrity": "sha512-pknfokumZ+wvBERSuKAI2vVr+aK3ZgPiWRg6+0ZG4kKJogBRpPmDGWw+Jht0izS9ZaEbIobNzueIb4wD33JJVg==", "dependencies": { - "@aws-sdk/types": "3.391.0", - "@smithy/protocol-http": "^2.0.3", - "@smithy/types": "^2.2.0", - "tslib": "^2.5.0" + "@smithy/node-config-provider": "^2.0.11", + "@smithy/protocol-http": "^3.0.4", + "@smithy/service-error-classification": "^2.0.1", + "@smithy/types": "^2.3.2", + "@smithy/util-middleware": "^2.0.1", + "@smithy/util-retry": "^2.0.1", + "tslib": "^2.5.0", + "uuid": "^8.3.2" }, "engines": { "node": ">=14.0.0" } }, - "node_modules/@aws-sdk/client-cognito-identity/node_modules/@aws-sdk/middleware-sdk-sts": { - "version": "3.391.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-sdk-sts/-/middleware-sdk-sts-3.391.0.tgz", - "integrity": "sha512-6ZXI3Z4QU+TnT5PwKWloGmRHG81tWeI18/zxf9wWzrO2NhYFvITzEJH0vWLLiXdWtn/BYfLULXtDvkTaepbI5A==", + "node_modules/@aws-sdk/client-cognito-identity/node_modules/@smithy/middleware-serde": { + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/@smithy/middleware-serde/-/middleware-serde-2.0.8.tgz", + "integrity": "sha512-Is0sm+LiNlgsc0QpstDzifugzL9ehno1wXp109GgBgpnKTK3j+KphiparBDI4hWTtH9/7OUsxuspNqai2yyhcg==", "dependencies": { - "@aws-sdk/middleware-signing": "3.391.0", - "@aws-sdk/types": "3.391.0", - "@smithy/types": "^2.2.0", + "@smithy/types": "^2.3.2", "tslib": "^2.5.0" }, "engines": { "node": ">=14.0.0" } }, - "node_modules/@aws-sdk/client-cognito-identity/node_modules/@aws-sdk/middleware-signing": { - "version": "3.391.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-signing/-/middleware-signing-3.391.0.tgz", - "integrity": "sha512-2pAJJlZqaHc0d+cz2FTVrQmWi8ygKfqfczHUo/loCtOaMNtWXBHb/JsLEecs6cXdizy6gi3YsLz6VZYwY4Ssxw==", + "node_modules/@aws-sdk/client-cognito-identity/node_modules/@smithy/middleware-stack": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@smithy/middleware-stack/-/middleware-stack-2.0.1.tgz", + "integrity": "sha512-UexsfY6/oQZRjTQL56s9AKtMcR60tBNibSgNYX1I2WXaUaXg97W9JCkFyth85TzBWKDBTyhLfenrukS/kyu54A==", "dependencies": { - "@aws-sdk/types": "3.391.0", - "@smithy/property-provider": "^2.0.0", - "@smithy/protocol-http": "^2.0.3", - "@smithy/signature-v4": "^2.0.0", - "@smithy/types": "^2.2.0", - "@smithy/util-middleware": "^2.0.0", + "@smithy/types": "^2.3.2", "tslib": "^2.5.0" }, "engines": { "node": ">=14.0.0" } }, - "node_modules/@aws-sdk/client-cognito-identity/node_modules/@aws-sdk/middleware-user-agent": { - "version": "3.391.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.391.0.tgz", - "integrity": "sha512-LdK9uMNA14zqRw3B79Mhy7GX36qld/GYo93xuu+lr+AQ98leZEdc6GUbrtNDI3fP1Z8TMQcyHUKBml4/B+wXpQ==", + "node_modules/@aws-sdk/client-cognito-identity/node_modules/@smithy/node-config-provider": { + "version": "2.0.11", + "resolved": "https://registry.npmjs.org/@smithy/node-config-provider/-/node-config-provider-2.0.11.tgz", + "integrity": "sha512-CaR1dciSSGKttjhcefpytYjsfI/Yd5mqL8am4wfmyFCDxSiPsvnEWHl8UjM/RbcAjX0klt+CeIKPSHEc0wGvJA==", "dependencies": { - "@aws-sdk/types": "3.391.0", - "@aws-sdk/util-endpoints": "3.391.0", - "@smithy/protocol-http": "^2.0.3", - "@smithy/types": "^2.2.0", + "@smithy/property-provider": "^2.0.9", + "@smithy/shared-ini-file-loader": "^2.0.10", + "@smithy/types": "^2.3.2", "tslib": "^2.5.0" }, "engines": { "node": ">=14.0.0" } }, - "node_modules/@aws-sdk/client-cognito-identity/node_modules/@aws-sdk/token-providers": { - "version": "3.391.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/token-providers/-/token-providers-3.391.0.tgz", - "integrity": "sha512-kgfArsKLDJE71qQjfXiHiM5cZqgDHlMsqEx35+A65GmTWJaS1PGDqu3ZvVVU8E5mxnCCLw7vho21fsjvH6TBpg==", + "node_modules/@aws-sdk/client-cognito-identity/node_modules/@smithy/node-http-handler": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@smithy/node-http-handler/-/node-http-handler-2.1.4.tgz", + "integrity": "sha512-8Rw/AusvWDyC6SK8esAcVBeTlQHf94NMFv805suFUJCQ2gwlh0oLDNh+6s2MDOrxcjvLxjjzv1mytM0Mt+0cPQ==", "dependencies": { - "@aws-crypto/sha256-browser": "3.0.0", - "@aws-crypto/sha256-js": "3.0.0", - "@aws-sdk/middleware-host-header": "3.391.0", - "@aws-sdk/middleware-logger": "3.391.0", - "@aws-sdk/middleware-recursion-detection": "3.391.0", - "@aws-sdk/middleware-user-agent": "3.391.0", - "@aws-sdk/types": "3.391.0", - "@aws-sdk/util-endpoints": "3.391.0", - "@aws-sdk/util-user-agent-browser": "3.391.0", - "@aws-sdk/util-user-agent-node": "3.391.0", - "@smithy/config-resolver": "^2.0.3", - "@smithy/fetch-http-handler": "^2.0.3", - "@smithy/hash-node": "^2.0.3", - "@smithy/invalid-dependency": "^2.0.3", - "@smithy/middleware-content-length": "^2.0.3", - "@smithy/middleware-endpoint": "^2.0.3", - "@smithy/middleware-retry": "^2.0.3", - "@smithy/middleware-serde": "^2.0.3", - "@smithy/middleware-stack": "^2.0.0", - "@smithy/node-config-provider": "^2.0.3", - "@smithy/node-http-handler": "^2.0.3", - "@smithy/property-provider": "^2.0.0", - "@smithy/protocol-http": "^2.0.3", - "@smithy/shared-ini-file-loader": "^2.0.0", - "@smithy/smithy-client": "^2.0.3", - "@smithy/types": "^2.2.0", - "@smithy/url-parser": "^2.0.3", - "@smithy/util-base64": "^2.0.0", - "@smithy/util-body-length-browser": "^2.0.0", - "@smithy/util-body-length-node": "^2.0.0", - "@smithy/util-defaults-mode-browser": "^2.0.3", - "@smithy/util-defaults-mode-node": "^2.0.3", - "@smithy/util-retry": "^2.0.0", - "@smithy/util-utf8": "^2.0.0", + "@smithy/abort-controller": "^2.0.8", + "@smithy/protocol-http": "^3.0.4", + "@smithy/querystring-builder": "^2.0.8", + "@smithy/types": "^2.3.2", "tslib": "^2.5.0" }, "engines": { "node": ">=14.0.0" } }, - "node_modules/@aws-sdk/client-cognito-identity/node_modules/@aws-sdk/types": { - "version": "3.391.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.391.0.tgz", - "integrity": "sha512-QpYVFKMOnzHz/JMj/b8wb18qxiT92U/5r5MmtRz2R3LOH6ooTO96k4ozXCrYr0qNed1PAnOj73rPrrH2wnCJKQ==", + "node_modules/@aws-sdk/client-cognito-identity/node_modules/@smithy/property-provider": { + "version": "2.0.9", + "resolved": "https://registry.npmjs.org/@smithy/property-provider/-/property-provider-2.0.9.tgz", + "integrity": "sha512-25pPZ8f8DeRwYI5wbPRZaoMoR+3vrw8DwbA0TjP+GsdiB2KxScndr4HQehiJ5+WJ0giOTWhLz0bd+7Djv1qpUQ==", "dependencies": { - "@smithy/types": "^2.2.0", + "@smithy/types": "^2.3.2", "tslib": "^2.5.0" }, "engines": { "node": ">=14.0.0" } }, - "node_modules/@aws-sdk/client-cognito-identity/node_modules/@aws-sdk/util-endpoints": { - "version": "3.391.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-endpoints/-/util-endpoints-3.391.0.tgz", - "integrity": "sha512-zv4sYDTQhNxyLoekcE02/nk3xvoo6yCHDy1kDJk0MFxOKaqUB+CvZdQBR4YBLSDlD4o4DUBmdYgKT58FfbM8sQ==", + "node_modules/@aws-sdk/client-cognito-identity/node_modules/@smithy/protocol-http": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-3.0.4.tgz", + "integrity": "sha512-CGfSWk6TRlbwa8YgrSXdn80Yu7pov3EV/h7TSfiCHhq6/LO3WymmqnzgH1f0qV2bdTDipIkTNp5dGCGN3Af/5g==", "dependencies": { - "@aws-sdk/types": "3.391.0", + "@smithy/types": "^2.3.2", "tslib": "^2.5.0" }, "engines": { "node": ">=14.0.0" } }, - "node_modules/@aws-sdk/client-cognito-identity/node_modules/@aws-sdk/util-user-agent-browser": { - "version": "3.391.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.391.0.tgz", - "integrity": "sha512-6ipHOB1WdCBNeAMJauN7l2qNE0WLVaTNhkD290/ElXm1FHGTL8yw6lIDIjhIFO1bmbZxDiKApwDiG7ROhaJoxQ==", - "dependencies": { - "@aws-sdk/types": "3.391.0", - "@smithy/types": "^2.2.0", - "bowser": "^2.11.0", - "tslib": "^2.5.0" - } - }, - "node_modules/@aws-sdk/client-cognito-identity/node_modules/@aws-sdk/util-user-agent-node": { - "version": "3.391.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.391.0.tgz", - "integrity": "sha512-PVvAK/Lf4BdB1eJIZtyFpGSslGQwKpYt9/hKs5NlR+qxBMXU9T0DnTqH4GiXZaazvXr7OUVWitIF2b7iKBMTow==", + "node_modules/@aws-sdk/client-cognito-identity/node_modules/@smithy/querystring-builder": { + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/@smithy/querystring-builder/-/querystring-builder-2.0.8.tgz", + "integrity": "sha512-+vzIMwjC8Saz97/ptPn+IJRCRRZ+pP95ZIWDRqEqZV/a6hiKbaFoMSa2iCKsnKzR696U2JZXrDqMu3e/FD1+2g==", "dependencies": { - "@aws-sdk/types": "3.391.0", - "@smithy/node-config-provider": "^2.0.3", - "@smithy/types": "^2.2.0", + "@smithy/types": "^2.3.2", + "@smithy/util-uri-escape": "^2.0.0", "tslib": "^2.5.0" }, "engines": { "node": ">=14.0.0" - }, - "peerDependencies": { - "aws-crt": ">=1.0.0" - }, - "peerDependenciesMeta": { - "aws-crt": { - "optional": true - } } }, - "node_modules/@aws-sdk/client-cognito-identity/node_modules/@smithy/abort-controller": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/@smithy/abort-controller/-/abort-controller-2.0.6.tgz", - "integrity": "sha512-4I7g0lyGUlW2onf8mD76IzU37oRWSHsQ5zlW5MjDzgg4I4J9bOK4500Gx6qOuoN7+GulAnGLe1YwyrIluzhakg==", + "node_modules/@aws-sdk/client-cognito-identity/node_modules/@smithy/querystring-parser": { + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/@smithy/querystring-parser/-/querystring-parser-2.0.8.tgz", + "integrity": "sha512-ArbanNuR7O/MmTd90ZqhDqGOPPDYmxx3huHxD+R3cuCnazcK/1tGQA+SnnR5307T7ZRb5WTpB6qBggERuibVSA==", "dependencies": { - "@smithy/types": "^2.3.0", + "@smithy/types": "^2.3.2", "tslib": "^2.5.0" }, "engines": { "node": ">=14.0.0" } }, - "node_modules/@aws-sdk/client-cognito-identity/node_modules/@smithy/config-resolver": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/@smithy/config-resolver/-/config-resolver-2.0.7.tgz", - "integrity": "sha512-J4J1AWiqaApC+3I9U++SuxAQ3BOoM5VoYnpFzCZcb63aLF80Zpc/nq2pFR1OsEIYyg2UYNdcBKKfHABmwo4WgQ==", + "node_modules/@aws-sdk/client-cognito-identity/node_modules/@smithy/service-error-classification": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@smithy/service-error-classification/-/service-error-classification-2.0.1.tgz", + "integrity": "sha512-QHa9+t+v4s0cMuDCcbjIJN67mNZ42/+fc3jKe8P6ZMPXZl5ksKk6a8vhZ/m494GZng5eFTc3OePv+NF9cG83yg==", "dependencies": { - "@smithy/node-config-provider": "^2.0.9", - "@smithy/types": "^2.3.0", - "@smithy/util-config-provider": "^2.0.0", - "@smithy/util-middleware": "^2.0.0", - "tslib": "^2.5.0" + "@smithy/types": "^2.3.2" }, "engines": { "node": ">=14.0.0" } }, - "node_modules/@aws-sdk/client-cognito-identity/node_modules/@smithy/credential-provider-imds": { - "version": "2.0.9", - "resolved": "https://registry.npmjs.org/@smithy/credential-provider-imds/-/credential-provider-imds-2.0.9.tgz", - "integrity": "sha512-K7WZRkHS5HZofRgK+O8W4YXXyaVexU1K6hp9vlUL/8CsnrFbZS9quyH/6hTROrYh2PuJr24yii1kc83NJdxMGQ==", + "node_modules/@aws-sdk/client-cognito-identity/node_modules/@smithy/shared-ini-file-loader": { + "version": "2.0.10", + "resolved": "https://registry.npmjs.org/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-2.0.10.tgz", + "integrity": "sha512-jWASteSezRKohJ7GdA7pHDvmr7Q7tw3b5mu3xLHIkZy/ICftJ+O7aqNaF8wklhI7UNFoQ7flFRM3Rd0KA+1BbQ==", "dependencies": { - "@smithy/node-config-provider": "^2.0.9", - "@smithy/property-provider": "^2.0.7", - "@smithy/types": "^2.3.0", - "@smithy/url-parser": "^2.0.6", + "@smithy/types": "^2.3.2", "tslib": "^2.5.0" }, "engines": { "node": ">=14.0.0" } }, - "node_modules/@aws-sdk/client-cognito-identity/node_modules/@smithy/eventstream-codec": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/@smithy/eventstream-codec/-/eventstream-codec-2.0.6.tgz", - "integrity": "sha512-J9xL82mlYRUMXFnB9VaThXkD7z2JLr52FIVZMoQQ1dxZG5ub+NOGmzaTTZC/cMmKXI/nwCoFuwDWCTjwQhYhQA==", - "dependencies": { - "@aws-crypto/crc32": "3.0.0", - "@smithy/types": "^2.3.0", - "@smithy/util-hex-encoding": "^2.0.0", - "tslib": "^2.5.0" - } - }, - "node_modules/@aws-sdk/client-cognito-identity/node_modules/@smithy/fetch-http-handler": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/@smithy/fetch-http-handler/-/fetch-http-handler-2.1.2.tgz", - "integrity": "sha512-3Gm3pQm4viUPU+e7KkRScS9t5phBxSNRS8rQSZ+HeCwK/busrX0/2HJZiwLvGblqPqi1laJB0lD18AdiOioJww==", - "dependencies": { - "@smithy/protocol-http": "^3.0.2", - "@smithy/querystring-builder": "^2.0.6", - "@smithy/types": "^2.3.0", - "@smithy/util-base64": "^2.0.0", - "tslib": "^2.5.0" - } - }, - "node_modules/@aws-sdk/client-cognito-identity/node_modules/@smithy/fetch-http-handler/node_modules/@smithy/protocol-http": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-3.0.2.tgz", - "integrity": "sha512-LUOWCPRihvJBkdSs+ivK9m1f/rMfF3n9Zpzg8qdry2eIG4HQqqLBMWQyF9bgk7JhsrrOa3//jJKhXzvL7wL5Xw==", + "node_modules/@aws-sdk/client-cognito-identity/node_modules/@smithy/smithy-client": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@smithy/smithy-client/-/smithy-client-2.1.5.tgz", + "integrity": "sha512-7S865uKzsxApM8W8Q6zkij7tcUFgaG8PuADMFdMt1yL/ku3d0+s6Zwrg3N7iXCPM08Gu/mf0BIfTXIu/9i450Q==", "dependencies": { - "@smithy/types": "^2.3.0", + "@smithy/middleware-stack": "^2.0.1", + "@smithy/types": "^2.3.2", + "@smithy/util-stream": "^2.0.11", "tslib": "^2.5.0" }, "engines": { "node": ">=14.0.0" } }, - "node_modules/@aws-sdk/client-cognito-identity/node_modules/@smithy/hash-node": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/@smithy/hash-node/-/hash-node-2.0.6.tgz", - "integrity": "sha512-xz7fzFxSzxohKGGyKPbLReRrY01JOZgRDHIXSks3PxQxG9c8PJMa5nUw0stH8UOySUgkofmMy0n7vTUsF5Mdqg==", + "node_modules/@aws-sdk/client-cognito-identity/node_modules/@smithy/types": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-2.3.2.tgz", + "integrity": "sha512-iH0cdKi7HQlzfAM3w2shFk/qZYKAqJWswtpmQpPtlruF+uFZeGEpMJjgDRyhWiddfVM4e2oP4nMaOBsMy6lXgg==", "dependencies": { - "@smithy/types": "^2.3.0", - "@smithy/util-buffer-from": "^2.0.0", - "@smithy/util-utf8": "^2.0.0", "tslib": "^2.5.0" }, "engines": { "node": ">=14.0.0" } }, - "node_modules/@aws-sdk/client-cognito-identity/node_modules/@smithy/invalid-dependency": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/@smithy/invalid-dependency/-/invalid-dependency-2.0.6.tgz", - "integrity": "sha512-L5MUyl9mzawIvBxr0Hg3J/Q5qZFXKcBgMk0PacfK3Mthp4WAR6h7iMxdSQ23Q7X/kxOrpZuoYEdh1BWLKbDc8Q==", + "node_modules/@aws-sdk/client-cognito-identity/node_modules/@smithy/url-parser": { + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/@smithy/url-parser/-/url-parser-2.0.8.tgz", + "integrity": "sha512-wQw7j004ScCrBRJ+oNPXlLE9mtofxyadSZ9D8ov/rHkyurS7z1HTNuyaGRj6OvKsEk0SVQsuY0C9+EfM75XTkw==", "dependencies": { - "@smithy/types": "^2.3.0", + "@smithy/querystring-parser": "^2.0.8", + "@smithy/types": "^2.3.2", "tslib": "^2.5.0" } }, - "node_modules/@aws-sdk/client-cognito-identity/node_modules/@smithy/is-array-buffer": { + "node_modules/@aws-sdk/client-cognito-identity/node_modules/@smithy/util-base64": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-2.0.0.tgz", - "integrity": "sha512-z3PjFjMyZNI98JFRJi/U0nGoLWMSJlDjAW4QUX2WNZLas5C0CmVV6LJ01JI0k90l7FvpmixjWxPFmENSClQ7ug==", + "resolved": "https://registry.npmjs.org/@smithy/util-base64/-/util-base64-2.0.0.tgz", + "integrity": "sha512-Zb1E4xx+m5Lud8bbeYi5FkcMJMnn+1WUnJF3qD7rAdXpaL7UjkFQLdmW5fHadoKbdHpwH9vSR8EyTJFHJs++tA==", "dependencies": { + "@smithy/util-buffer-from": "^2.0.0", "tslib": "^2.5.0" }, "engines": { "node": ">=14.0.0" } }, - "node_modules/@aws-sdk/client-cognito-identity/node_modules/@smithy/middleware-content-length": { - "version": "2.0.8", - "resolved": "https://registry.npmjs.org/@smithy/middleware-content-length/-/middleware-content-length-2.0.8.tgz", - "integrity": "sha512-fHJFsscHXrYhUSWMFJNXfsZW8KsyhWQfBgU3b0nvDfpm+NAeQLqKYNhywGrDwZQc1k+lt7Fw9faAquhNPxTZRA==", + "node_modules/@aws-sdk/client-cognito-identity/node_modules/@smithy/util-body-length-browser": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-body-length-browser/-/util-body-length-browser-2.0.0.tgz", + "integrity": "sha512-JdDuS4ircJt+FDnaQj88TzZY3+njZ6O+D3uakS32f2VNnDo3vyEuNdBOh/oFd8Df1zSZOuH1HEChk2AOYDezZg==", + "dependencies": { + "tslib": "^2.5.0" + } + }, + "node_modules/@aws-sdk/client-cognito-identity/node_modules/@smithy/util-body-length-node": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@smithy/util-body-length-node/-/util-body-length-node-2.1.0.tgz", + "integrity": "sha512-/li0/kj/y3fQ3vyzn36NTLGmUwAICb7Jbe/CsWCktW363gh1MOcpEcSO3mJ344Gv2dqz8YJCLQpb6hju/0qOWw==", "dependencies": { - "@smithy/protocol-http": "^3.0.2", - "@smithy/types": "^2.3.0", "tslib": "^2.5.0" }, "engines": { "node": ">=14.0.0" } }, - "node_modules/@aws-sdk/client-cognito-identity/node_modules/@smithy/middleware-content-length/node_modules/@smithy/protocol-http": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-3.0.2.tgz", - "integrity": "sha512-LUOWCPRihvJBkdSs+ivK9m1f/rMfF3n9Zpzg8qdry2eIG4HQqqLBMWQyF9bgk7JhsrrOa3//jJKhXzvL7wL5Xw==", + "node_modules/@aws-sdk/client-cognito-identity/node_modules/@smithy/util-buffer-from": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-2.0.0.tgz", + "integrity": "sha512-/YNnLoHsR+4W4Vf2wL5lGv0ksg8Bmk3GEGxn2vEQt52AQaPSCuaO5PM5VM7lP1K9qHRKHwrPGktqVoAHKWHxzw==", "dependencies": { - "@smithy/types": "^2.3.0", + "@smithy/is-array-buffer": "^2.0.0", "tslib": "^2.5.0" }, "engines": { "node": ">=14.0.0" } }, - "node_modules/@aws-sdk/client-cognito-identity/node_modules/@smithy/middleware-endpoint": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/@smithy/middleware-endpoint/-/middleware-endpoint-2.0.6.tgz", - "integrity": "sha512-MuSPPtEHFal/M77tR3ffLsdOfX29IZpA990nGuoPj5zQnAYrA4PYBGoqqrASQKm8Xb3C0NwuYzOATT7WX4f5Pg==", + "node_modules/@aws-sdk/client-cognito-identity/node_modules/@smithy/util-config-provider": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-config-provider/-/util-config-provider-2.0.0.tgz", + "integrity": "sha512-xCQ6UapcIWKxXHEU4Mcs2s7LcFQRiU3XEluM2WcCjjBtQkUN71Tb+ydGmJFPxMUrW/GWMgQEEGipLym4XG0jZg==", "dependencies": { - "@smithy/middleware-serde": "^2.0.6", - "@smithy/types": "^2.3.0", - "@smithy/url-parser": "^2.0.6", - "@smithy/util-middleware": "^2.0.0", "tslib": "^2.5.0" }, "engines": { "node": ">=14.0.0" } }, - "node_modules/@aws-sdk/client-cognito-identity/node_modules/@smithy/middleware-retry": { + "node_modules/@aws-sdk/client-cognito-identity/node_modules/@smithy/util-defaults-mode-browser": { "version": "2.0.9", - "resolved": "https://registry.npmjs.org/@smithy/middleware-retry/-/middleware-retry-2.0.9.tgz", - "integrity": "sha512-gneEqWj4l/ZjHdZPk0BFMXoTalRArdQ8i579/KqJgBAc6Ux5vnR/SSppkMCkj2kOQYwdypvzSPeqEW3ZrvIg6g==", + "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-browser/-/util-defaults-mode-browser-2.0.9.tgz", + "integrity": "sha512-JONLJVQWT8165XoSV36ERn3SVlZLJJ4D6IeGsCSePv65Uxa93pzSLE0UMSR9Jwm4zix7rst9AS8W5QIypZWP8Q==", "dependencies": { - "@smithy/node-config-provider": "^2.0.9", - "@smithy/protocol-http": "^3.0.2", - "@smithy/service-error-classification": "^2.0.0", - "@smithy/types": "^2.3.0", - "@smithy/util-middleware": "^2.0.0", - "@smithy/util-retry": "^2.0.0", - "tslib": "^2.5.0", - "uuid": "^8.3.2" + "@smithy/property-provider": "^2.0.9", + "@smithy/smithy-client": "^2.1.5", + "@smithy/types": "^2.3.2", + "bowser": "^2.11.0", + "tslib": "^2.5.0" }, "engines": { - "node": ">=14.0.0" + "node": ">= 10.0.0" } }, - "node_modules/@aws-sdk/client-cognito-identity/node_modules/@smithy/middleware-retry/node_modules/@smithy/protocol-http": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-3.0.2.tgz", - "integrity": "sha512-LUOWCPRihvJBkdSs+ivK9m1f/rMfF3n9Zpzg8qdry2eIG4HQqqLBMWQyF9bgk7JhsrrOa3//jJKhXzvL7wL5Xw==", - "dependencies": { - "@smithy/types": "^2.3.0", + "node_modules/@aws-sdk/client-cognito-identity/node_modules/@smithy/util-defaults-mode-node": { + "version": "2.0.11", + "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-node/-/util-defaults-mode-node-2.0.11.tgz", + "integrity": "sha512-tmqjNsfj+bgZN6jXBe6efZnukzILA7BUytHkzqikuRLNtR+0VVchQHvawD0w6vManh76rO81ydhioe7i4oBzuA==", + "dependencies": { + "@smithy/config-resolver": "^2.0.9", + "@smithy/credential-provider-imds": "^2.0.11", + "@smithy/node-config-provider": "^2.0.11", + "@smithy/property-provider": "^2.0.9", + "@smithy/smithy-client": "^2.1.5", + "@smithy/types": "^2.3.2", "tslib": "^2.5.0" }, "engines": { - "node": ">=14.0.0" + "node": ">= 10.0.0" } }, - "node_modules/@aws-sdk/client-cognito-identity/node_modules/@smithy/middleware-serde": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/@smithy/middleware-serde/-/middleware-serde-2.0.6.tgz", - "integrity": "sha512-8/GODBngYbrS28CMZtaHIL4R9rLNSQ/zgb+N1OAZ02NwBUawlnLDcatve9YRzhJC/IWz0/pt+WimJZaO1sGcig==", + "node_modules/@aws-sdk/client-cognito-identity/node_modules/@smithy/util-hex-encoding": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-hex-encoding/-/util-hex-encoding-2.0.0.tgz", + "integrity": "sha512-c5xY+NUnFqG6d7HFh1IFfrm3mGl29lC+vF+geHv4ToiuJCBmIfzx6IeHLg+OgRdPFKDXIw6pvi+p3CsscaMcMA==", "dependencies": { - "@smithy/types": "^2.3.0", "tslib": "^2.5.0" }, "engines": { "node": ">=14.0.0" } }, - "node_modules/@aws-sdk/client-cognito-identity/node_modules/@smithy/middleware-stack": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@smithy/middleware-stack/-/middleware-stack-2.0.0.tgz", - "integrity": "sha512-31XC1xNF65nlbc16yuh3wwTudmqs6qy4EseQUGF8A/p2m/5wdd/cnXJqpniy/XvXVwkHPz/GwV36HqzHtIKATQ==", + "node_modules/@aws-sdk/client-cognito-identity/node_modules/@smithy/util-middleware": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@smithy/util-middleware/-/util-middleware-2.0.1.tgz", + "integrity": "sha512-LnsBMi0Mg3gfz/TpNGLv2Jjcz2ra1OX5HR/4IaCepIYmtPQzqMWDdhX/XTW1LS8OZ0xbQuyQPcHkQ+2XkhWOVQ==", "dependencies": { + "@smithy/types": "^2.3.2", "tslib": "^2.5.0" }, "engines": { "node": ">=14.0.0" } }, - "node_modules/@aws-sdk/client-cognito-identity/node_modules/@smithy/node-config-provider": { - "version": "2.0.9", - "resolved": "https://registry.npmjs.org/@smithy/node-config-provider/-/node-config-provider-2.0.9.tgz", - "integrity": "sha512-TlSPbCwtT/jgNnmPQqKuCR5CFN8UIrCCHRrgUfs3NqRMuaLLeP8TPe1fSKq2J8h1M/jd4BF853gneles0gWevg==", + "node_modules/@aws-sdk/client-cognito-identity/node_modules/@smithy/util-retry": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@smithy/util-retry/-/util-retry-2.0.1.tgz", + "integrity": "sha512-naj4X0IafJ9yJnVJ58QgSMkCNLjyQOnyrnKh/T0f+0UOUxJiT8vuFn/hS7B/pNqbo2STY7PyJ4J4f+5YqxwNtA==", + "dependencies": { + "@smithy/service-error-classification": "^2.0.1", + "@smithy/types": "^2.3.2", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/@aws-sdk/client-cognito-identity/node_modules/@smithy/util-stream": { + "version": "2.0.11", + "resolved": "https://registry.npmjs.org/@smithy/util-stream/-/util-stream-2.0.11.tgz", + "integrity": "sha512-2MeWfqSpZKdmEJ+tH8CJQSgzLWhH5cmdE24X7JB0hiamXrOmswWGGuPvyj/9sQCTclo57pNxLR2p7KrP8Ahiyg==", "dependencies": { - "@smithy/property-provider": "^2.0.7", - "@smithy/shared-ini-file-loader": "^2.0.8", - "@smithy/types": "^2.3.0", + "@smithy/fetch-http-handler": "^2.1.4", + "@smithy/node-http-handler": "^2.1.4", + "@smithy/types": "^2.3.2", + "@smithy/util-base64": "^2.0.0", + "@smithy/util-buffer-from": "^2.0.0", + "@smithy/util-hex-encoding": "^2.0.0", + "@smithy/util-utf8": "^2.0.0", "tslib": "^2.5.0" }, "engines": { "node": ">=14.0.0" } }, - "node_modules/@aws-sdk/client-cognito-identity/node_modules/@smithy/node-http-handler": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/@smithy/node-http-handler/-/node-http-handler-2.1.2.tgz", - "integrity": "sha512-PdEEDCShuM8zxGoaRxmGB/1ikB8oeqz+ZAF9VIA8FCP3E59j8zDTF+wCELoWd1Y6gtxr+RcTAg5sA8nvn5qH/w==", + "node_modules/@aws-sdk/client-cognito-identity/node_modules/@smithy/util-uri-escape": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-uri-escape/-/util-uri-escape-2.0.0.tgz", + "integrity": "sha512-ebkxsqinSdEooQduuk9CbKcI+wheijxEb3utGXkCoYQkJnwTnLbH1JXGimJtUkQwNQbsbuYwG2+aFVyZf5TLaw==", "dependencies": { - "@smithy/abort-controller": "^2.0.6", - "@smithy/protocol-http": "^3.0.2", - "@smithy/querystring-builder": "^2.0.6", - "@smithy/types": "^2.3.0", "tslib": "^2.5.0" }, "engines": { "node": ">=14.0.0" } }, - "node_modules/@aws-sdk/client-cognito-identity/node_modules/@smithy/node-http-handler/node_modules/@smithy/protocol-http": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-3.0.2.tgz", - "integrity": "sha512-LUOWCPRihvJBkdSs+ivK9m1f/rMfF3n9Zpzg8qdry2eIG4HQqqLBMWQyF9bgk7JhsrrOa3//jJKhXzvL7wL5Xw==", + "node_modules/@aws-sdk/client-cognito-identity/node_modules/@smithy/util-utf8": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-2.0.0.tgz", + "integrity": "sha512-rctU1VkziY84n5OXe3bPNpKR001ZCME2JCaBBFgtiM2hfKbHFudc/BkMuPab8hRbLd0j3vbnBTTZ1igBf0wgiQ==", "dependencies": { - "@smithy/types": "^2.3.0", + "@smithy/util-buffer-from": "^2.0.0", "tslib": "^2.5.0" }, "engines": { "node": ">=14.0.0" } }, - "node_modules/@aws-sdk/client-cognito-identity/node_modules/@smithy/property-provider": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/@smithy/property-provider/-/property-provider-2.0.7.tgz", - "integrity": "sha512-XT8Tl7YNxM8tCtGqy7v7DSf6PxyXaPE9cdA/Yj4dEw2b05V3RrPqsP+t5XJiZu0yIsQ7pdeYZWv2sSEWVjNeAg==", + "node_modules/@aws-sdk/client-cognito-identity/node_modules/uuid": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "node_modules/@aws-sdk/client-lambda": { + "version": "3.414.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-lambda/-/client-lambda-3.414.0.tgz", + "integrity": "sha512-Nt2ktmFWKlL19NWcaG9fS2cxjiJvGDIp8Irt1NZngIOfmqm4XsY1AcUjUcdZRED/VjdfM0ziHa9Oj4VVVTdYZA==", "dependencies": { - "@smithy/types": "^2.3.0", + "@aws-crypto/sha256-browser": "3.0.0", + "@aws-crypto/sha256-js": "3.0.0", + "@aws-sdk/client-sts": "3.414.0", + "@aws-sdk/credential-provider-node": "3.414.0", + "@aws-sdk/middleware-host-header": "3.413.0", + "@aws-sdk/middleware-logger": "3.413.0", + "@aws-sdk/middleware-recursion-detection": "3.413.0", + "@aws-sdk/middleware-signing": "3.413.0", + "@aws-sdk/middleware-user-agent": "3.413.0", + "@aws-sdk/region-config-resolver": "3.413.0", + "@aws-sdk/types": "3.413.0", + "@aws-sdk/util-endpoints": "3.413.0", + "@aws-sdk/util-user-agent-browser": "3.413.0", + "@aws-sdk/util-user-agent-node": "3.413.0", + "@smithy/config-resolver": "^2.0.8", + "@smithy/eventstream-serde-browser": "^2.0.7", + "@smithy/eventstream-serde-config-resolver": "^2.0.7", + "@smithy/eventstream-serde-node": "^2.0.7", + "@smithy/fetch-http-handler": "^2.1.3", + "@smithy/hash-node": "^2.0.7", + "@smithy/invalid-dependency": "^2.0.7", + "@smithy/middleware-content-length": "^2.0.9", + "@smithy/middleware-endpoint": "^2.0.7", + "@smithy/middleware-retry": "^2.0.10", + "@smithy/middleware-serde": "^2.0.7", + "@smithy/middleware-stack": "^2.0.0", + "@smithy/node-config-provider": "^2.0.10", + "@smithy/node-http-handler": "^2.1.3", + "@smithy/protocol-http": "^3.0.3", + "@smithy/smithy-client": "^2.1.4", + "@smithy/types": "^2.3.1", + "@smithy/url-parser": "^2.0.7", + "@smithy/util-base64": "^2.0.0", + "@smithy/util-body-length-browser": "^2.0.0", + "@smithy/util-body-length-node": "^2.1.0", + "@smithy/util-defaults-mode-browser": "^2.0.8", + "@smithy/util-defaults-mode-node": "^2.0.10", + "@smithy/util-retry": "^2.0.0", + "@smithy/util-stream": "^2.0.10", + "@smithy/util-utf8": "^2.0.0", + "@smithy/util-waiter": "^2.0.7", "tslib": "^2.5.0" }, "engines": { "node": ">=14.0.0" } }, - "node_modules/@aws-sdk/client-cognito-identity/node_modules/@smithy/protocol-http": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-2.0.5.tgz", - "integrity": "sha512-d2hhHj34mA2V86doiDfrsy2fNTnUOowGaf9hKb0hIPHqvcnShU4/OSc4Uf1FwHkAdYF3cFXTrj5VGUYbEuvMdw==", + "node_modules/@aws-sdk/client-lambda/node_modules/@aws-sdk/types": { + "version": "3.413.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.413.0.tgz", + "integrity": "sha512-j1xib0f/TazIFc5ySIKOlT1ujntRbaoG4LJFeEezz4ji03/wSJMI8Vi4KjzpBp8J1tTu0oRDnsxRIGixsUBeYQ==", "dependencies": { - "@smithy/types": "^2.2.2", + "@smithy/types": "^2.3.1", "tslib": "^2.5.0" }, "engines": { "node": ">=14.0.0" } }, - "node_modules/@aws-sdk/client-cognito-identity/node_modules/@smithy/querystring-builder": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/@smithy/querystring-builder/-/querystring-builder-2.0.6.tgz", - "integrity": "sha512-HnU00shCGoV8vKJZTiNBkNvR9NogU3NIUaVMAGJPSqNGJj3psWo+TUrC0BVCDcwiCljXwXCFGJqIcsWtClrktQ==", + "node_modules/@aws-sdk/client-lambda/node_modules/@smithy/abort-controller": { + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/@smithy/abort-controller/-/abort-controller-2.0.8.tgz", + "integrity": "sha512-2SOdVj5y0zE37Y9scSXoizoxgi6mgnDabi7a/SOfhl0p+50I0rIkuJTfyAuTPDtQ7e5dD6tSZPCLB3c/YM6Zig==", "dependencies": { - "@smithy/types": "^2.3.0", - "@smithy/util-uri-escape": "^2.0.0", + "@smithy/types": "^2.3.2", "tslib": "^2.5.0" }, "engines": { "node": ">=14.0.0" } }, - "node_modules/@aws-sdk/client-cognito-identity/node_modules/@smithy/querystring-parser": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/@smithy/querystring-parser/-/querystring-parser-2.0.6.tgz", - "integrity": "sha512-i4LKoXHP7pTFAPjLIJyQXYOhWokbcFha3WWsX74sAKmuluv0XM2cxONZoFxwEzmWhsNyM6buSwJSZXyPiec0AQ==", + "node_modules/@aws-sdk/client-lambda/node_modules/@smithy/config-resolver": { + "version": "2.0.9", + "resolved": "https://registry.npmjs.org/@smithy/config-resolver/-/config-resolver-2.0.9.tgz", + "integrity": "sha512-QBkGPLUqyPmis9Erz8v4q5lo/ErnF7+GD5WZHa6JZiXopUPfaaM+B21n8gzS5xCkIXZmnwzNQhObP9xQPu8oqQ==", "dependencies": { - "@smithy/types": "^2.3.0", + "@smithy/node-config-provider": "^2.0.11", + "@smithy/types": "^2.3.2", + "@smithy/util-config-provider": "^2.0.0", + "@smithy/util-middleware": "^2.0.1", "tslib": "^2.5.0" }, "engines": { "node": ">=14.0.0" } }, - "node_modules/@aws-sdk/client-cognito-identity/node_modules/@smithy/service-error-classification": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@smithy/service-error-classification/-/service-error-classification-2.0.0.tgz", - "integrity": "sha512-2z5Nafy1O0cTf69wKyNjGW/sNVMiqDnb4jgwfMG8ye8KnFJ5qmJpDccwIbJNhXIfbsxTg9SEec2oe1cexhMJvw==", + "node_modules/@aws-sdk/client-lambda/node_modules/@smithy/credential-provider-imds": { + "version": "2.0.11", + "resolved": "https://registry.npmjs.org/@smithy/credential-provider-imds/-/credential-provider-imds-2.0.11.tgz", + "integrity": "sha512-uJJs8dnM5iXkn8a2GaKvlKMhcOJ+oJPYqY9gY3CM/EieCVObIDjxUtR/g8lU/k/A+OauA78GzScAfulmFjPOYA==", + "dependencies": { + "@smithy/node-config-provider": "^2.0.11", + "@smithy/property-provider": "^2.0.9", + "@smithy/types": "^2.3.2", + "@smithy/url-parser": "^2.0.8", + "tslib": "^2.5.0" + }, "engines": { "node": ">=14.0.0" } }, - "node_modules/@aws-sdk/client-cognito-identity/node_modules/@smithy/shared-ini-file-loader": { + "node_modules/@aws-sdk/client-lambda/node_modules/@smithy/eventstream-codec": { + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/@smithy/eventstream-codec/-/eventstream-codec-2.0.8.tgz", + "integrity": "sha512-onO4to8ujCKn4m5XagReT9Nc6FlNG5vveuvjp1H7AtaG7njdet1LOl6/jmUOkskF2C/w+9jNw3r9Ak+ghOvN0A==", + "dependencies": { + "@aws-crypto/crc32": "3.0.0", + "@smithy/types": "^2.3.2", + "@smithy/util-hex-encoding": "^2.0.0", + "tslib": "^2.5.0" + } + }, + "node_modules/@aws-sdk/client-lambda/node_modules/@smithy/eventstream-serde-browser": { "version": "2.0.8", - "resolved": "https://registry.npmjs.org/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-2.0.8.tgz", - "integrity": "sha512-4u+V+Dv7JGpJ0tppB5rxCem7WhdFux950z4cGPhV0kHTPkKe8DDgINzOlVa2RBu5dI33D02OBJcxFjhW4FPORg==", + "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-browser/-/eventstream-serde-browser-2.0.8.tgz", + "integrity": "sha512-/RGlkKUnC0sd+xKBKH/2APSBRmVMZTeLOKZMhrZmrO+ONoU+DwyMr/RLJ6WnmBKN+2ebjffM4pcIJTKLNNDD8g==", "dependencies": { - "@smithy/types": "^2.3.0", + "@smithy/eventstream-serde-universal": "^2.0.8", + "@smithy/types": "^2.3.2", "tslib": "^2.5.0" }, "engines": { "node": ">=14.0.0" } }, - "node_modules/@aws-sdk/client-cognito-identity/node_modules/@smithy/signature-v4": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/@smithy/signature-v4/-/signature-v4-2.0.6.tgz", - "integrity": "sha512-4zNTi8w4sky07YKq7oYucZt4ogY00IEaS1NFDXxmCN5V/ywE0WiK+WMim+8wtYQmB0qy3oExZR4LoCAml6j/rA==", + "node_modules/@aws-sdk/client-lambda/node_modules/@smithy/eventstream-serde-config-resolver": { + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-config-resolver/-/eventstream-serde-config-resolver-2.0.8.tgz", + "integrity": "sha512-EyAEj258eMUv9zcMvBbqrInh2eHRYuiwQAjXDMxZFCyP+JePzQB6O++3wFwjQeRKMFFgZipNgnEXfReII4+NAw==", "dependencies": { - "@smithy/eventstream-codec": "^2.0.6", - "@smithy/is-array-buffer": "^2.0.0", - "@smithy/types": "^2.3.0", - "@smithy/util-hex-encoding": "^2.0.0", - "@smithy/util-middleware": "^2.0.0", - "@smithy/util-uri-escape": "^2.0.0", - "@smithy/util-utf8": "^2.0.0", + "@smithy/types": "^2.3.2", "tslib": "^2.5.0" }, "engines": { "node": ">=14.0.0" } }, - "node_modules/@aws-sdk/client-cognito-identity/node_modules/@smithy/smithy-client": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/@smithy/smithy-client/-/smithy-client-2.1.2.tgz", - "integrity": "sha512-quUuJ0SsqgG7Flopvfd8iQJLhHfnMYtYPuvImVQzPHXtqUQImtVz5msudMxW3t3jl+L0w8RlR+IN2zT6UqCJ6g==", + "node_modules/@aws-sdk/client-lambda/node_modules/@smithy/eventstream-serde-node": { + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-node/-/eventstream-serde-node-2.0.8.tgz", + "integrity": "sha512-FMBatSUSKwh6aguKVJokXfJaV8nqsuCkCZHb9MP9zah0ZF+ohbTLeeed7DQGeTVBueVIVWEzIsShPxtxBv7MMQ==", "dependencies": { - "@smithy/middleware-stack": "^2.0.0", - "@smithy/types": "^2.3.0", - "@smithy/util-stream": "^2.0.8", + "@smithy/eventstream-serde-universal": "^2.0.8", + "@smithy/types": "^2.3.2", "tslib": "^2.5.0" }, "engines": { "node": ">=14.0.0" } }, - "node_modules/@aws-sdk/client-cognito-identity/node_modules/@smithy/types": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/@smithy/types/-/types-2.3.0.tgz", - "integrity": "sha512-pJce3rd39MElkV57UTPAoSYAApjQLELUxjU5adHNLYk9gnPvyIGbJNJTZVVFu00BrgZH3W/cQe8QuFcknDyodQ==", + "node_modules/@aws-sdk/client-lambda/node_modules/@smithy/eventstream-serde-universal": { + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-universal/-/eventstream-serde-universal-2.0.8.tgz", + "integrity": "sha512-6InMXH8BUKoEDa6CAuxR4Gn8Gf2vBfVtjA9A6zDKZClYHT+ANUJS+2EtOBc5wECJJGk4KLn5ajQyrt9MBv5lcw==", "dependencies": { + "@smithy/eventstream-codec": "^2.0.8", + "@smithy/types": "^2.3.2", "tslib": "^2.5.0" }, "engines": { "node": ">=14.0.0" } }, - "node_modules/@aws-sdk/client-cognito-identity/node_modules/@smithy/url-parser": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/@smithy/url-parser/-/url-parser-2.0.6.tgz", - "integrity": "sha512-9i6j5QW6bapHZ4rtkXOAm0hOUG1+5IVdVJXNSUTcNskwJchZH5IQuDNPCbgUi/u2P8EZazKt4wXT51QxOXCz1A==", + "node_modules/@aws-sdk/client-lambda/node_modules/@smithy/fetch-http-handler": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@smithy/fetch-http-handler/-/fetch-http-handler-2.1.4.tgz", + "integrity": "sha512-SL24M9W5ERByoXaVicRx+bj9GJVujDnPn+QO7GY7adhY0mPGa6DSF58pVKsgIh4r5Tx/k3SWCPlH4BxxSxA/fQ==", "dependencies": { - "@smithy/querystring-parser": "^2.0.6", - "@smithy/types": "^2.3.0", + "@smithy/protocol-http": "^3.0.4", + "@smithy/querystring-builder": "^2.0.8", + "@smithy/types": "^2.3.2", + "@smithy/util-base64": "^2.0.0", "tslib": "^2.5.0" } }, - "node_modules/@aws-sdk/client-cognito-identity/node_modules/@smithy/util-base64": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@smithy/util-base64/-/util-base64-2.0.0.tgz", - "integrity": "sha512-Zb1E4xx+m5Lud8bbeYi5FkcMJMnn+1WUnJF3qD7rAdXpaL7UjkFQLdmW5fHadoKbdHpwH9vSR8EyTJFHJs++tA==", + "node_modules/@aws-sdk/client-lambda/node_modules/@smithy/hash-node": { + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/@smithy/hash-node/-/hash-node-2.0.8.tgz", + "integrity": "sha512-yZL/nmxZzjZV5/QX5JWSgXlt0HxuMTwFO89CS++jOMMPiCMZngf6VYmtNdccs8IIIAMmfQeTzwu07XgUE/Zd3Q==", "dependencies": { + "@smithy/types": "^2.3.2", "@smithy/util-buffer-from": "^2.0.0", + "@smithy/util-utf8": "^2.0.0", "tslib": "^2.5.0" }, "engines": { "node": ">=14.0.0" } }, - "node_modules/@aws-sdk/client-cognito-identity/node_modules/@smithy/util-body-length-browser": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@smithy/util-body-length-browser/-/util-body-length-browser-2.0.0.tgz", - "integrity": "sha512-JdDuS4ircJt+FDnaQj88TzZY3+njZ6O+D3uakS32f2VNnDo3vyEuNdBOh/oFd8Df1zSZOuH1HEChk2AOYDezZg==", + "node_modules/@aws-sdk/client-lambda/node_modules/@smithy/invalid-dependency": { + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/@smithy/invalid-dependency/-/invalid-dependency-2.0.8.tgz", + "integrity": "sha512-88VOS7W3KzUz/bNRc+Sl/F/CDIasFspEE4G39YZRHIh9YmsXF7GUyVaAKURfMNulTie62ayk6BHC9O0nOBAVgQ==", "dependencies": { + "@smithy/types": "^2.3.2", "tslib": "^2.5.0" } }, - "node_modules/@aws-sdk/client-cognito-identity/node_modules/@smithy/util-body-length-node": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@smithy/util-body-length-node/-/util-body-length-node-2.1.0.tgz", - "integrity": "sha512-/li0/kj/y3fQ3vyzn36NTLGmUwAICb7Jbe/CsWCktW363gh1MOcpEcSO3mJ344Gv2dqz8YJCLQpb6hju/0qOWw==", + "node_modules/@aws-sdk/client-lambda/node_modules/@smithy/is-array-buffer": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-2.0.0.tgz", + "integrity": "sha512-z3PjFjMyZNI98JFRJi/U0nGoLWMSJlDjAW4QUX2WNZLas5C0CmVV6LJ01JI0k90l7FvpmixjWxPFmENSClQ7ug==", "dependencies": { "tslib": "^2.5.0" }, @@ -1173,504 +1090,345 @@ "node": ">=14.0.0" } }, - "node_modules/@aws-sdk/client-cognito-identity/node_modules/@smithy/util-buffer-from": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-2.0.0.tgz", - "integrity": "sha512-/YNnLoHsR+4W4Vf2wL5lGv0ksg8Bmk3GEGxn2vEQt52AQaPSCuaO5PM5VM7lP1K9qHRKHwrPGktqVoAHKWHxzw==", + "node_modules/@aws-sdk/client-lambda/node_modules/@smithy/middleware-content-length": { + "version": "2.0.10", + "resolved": "https://registry.npmjs.org/@smithy/middleware-content-length/-/middleware-content-length-2.0.10.tgz", + "integrity": "sha512-EGSbysyA4jH0p3xI6G0jdXoj9Iz9GUnAta6aEaHtXm3wVWtenRf80y2TeVvNkVSr5jwKOdSCjKIRI2l1A/oZLA==", "dependencies": { - "@smithy/is-array-buffer": "^2.0.0", + "@smithy/protocol-http": "^3.0.4", + "@smithy/types": "^2.3.2", "tslib": "^2.5.0" }, "engines": { "node": ">=14.0.0" } }, - "node_modules/@aws-sdk/client-cognito-identity/node_modules/@smithy/util-config-provider": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@smithy/util-config-provider/-/util-config-provider-2.0.0.tgz", - "integrity": "sha512-xCQ6UapcIWKxXHEU4Mcs2s7LcFQRiU3XEluM2WcCjjBtQkUN71Tb+ydGmJFPxMUrW/GWMgQEEGipLym4XG0jZg==", + "node_modules/@aws-sdk/client-lambda/node_modules/@smithy/middleware-endpoint": { + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/@smithy/middleware-endpoint/-/middleware-endpoint-2.0.8.tgz", + "integrity": "sha512-yOpogfG2d2V0cbJdAJ6GLAWkNOc9pVsL5hZUfXcxJu408N3CUCsXzIAFF6+70ZKSE+lCfG3GFErcSXv/UfUbjw==", "dependencies": { + "@smithy/middleware-serde": "^2.0.8", + "@smithy/types": "^2.3.2", + "@smithy/url-parser": "^2.0.8", + "@smithy/util-middleware": "^2.0.1", "tslib": "^2.5.0" }, "engines": { "node": ">=14.0.0" } }, - "node_modules/@aws-sdk/client-cognito-identity/node_modules/@smithy/util-defaults-mode-browser": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-browser/-/util-defaults-mode-browser-2.0.7.tgz", - "integrity": "sha512-s1caKxC7Y87Q72Goll//clZs2WNBfG9WtFDWVRS+Qgk147YPCOUYtkpuD0XZAh/vbayObFz5tQ1fiX4G19HSCA==", + "node_modules/@aws-sdk/client-lambda/node_modules/@smithy/middleware-retry": { + "version": "2.0.11", + "resolved": "https://registry.npmjs.org/@smithy/middleware-retry/-/middleware-retry-2.0.11.tgz", + "integrity": "sha512-pknfokumZ+wvBERSuKAI2vVr+aK3ZgPiWRg6+0ZG4kKJogBRpPmDGWw+Jht0izS9ZaEbIobNzueIb4wD33JJVg==", "dependencies": { - "@smithy/property-provider": "^2.0.7", - "@smithy/types": "^2.3.0", - "bowser": "^2.11.0", - "tslib": "^2.5.0" + "@smithy/node-config-provider": "^2.0.11", + "@smithy/protocol-http": "^3.0.4", + "@smithy/service-error-classification": "^2.0.1", + "@smithy/types": "^2.3.2", + "@smithy/util-middleware": "^2.0.1", + "@smithy/util-retry": "^2.0.1", + "tslib": "^2.5.0", + "uuid": "^8.3.2" }, "engines": { - "node": ">= 10.0.0" + "node": ">=14.0.0" } }, - "node_modules/@aws-sdk/client-cognito-identity/node_modules/@smithy/util-defaults-mode-node": { - "version": "2.0.9", - "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-node/-/util-defaults-mode-node-2.0.9.tgz", - "integrity": "sha512-HlV4iNL3/PgPpmDGs0+XrAKtwFQ8rOs5P2y5Dye8dUYaJauadlzHRrNKk7wH2aBYswvT2HM+PIgXamvrE7xbcw==", + "node_modules/@aws-sdk/client-lambda/node_modules/@smithy/middleware-serde": { + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/@smithy/middleware-serde/-/middleware-serde-2.0.8.tgz", + "integrity": "sha512-Is0sm+LiNlgsc0QpstDzifugzL9ehno1wXp109GgBgpnKTK3j+KphiparBDI4hWTtH9/7OUsxuspNqai2yyhcg==", "dependencies": { - "@smithy/config-resolver": "^2.0.7", - "@smithy/credential-provider-imds": "^2.0.9", - "@smithy/node-config-provider": "^2.0.9", - "@smithy/property-provider": "^2.0.7", - "@smithy/types": "^2.3.0", + "@smithy/types": "^2.3.2", "tslib": "^2.5.0" }, "engines": { - "node": ">= 10.0.0" + "node": ">=14.0.0" } }, - "node_modules/@aws-sdk/client-cognito-identity/node_modules/@smithy/util-hex-encoding": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@smithy/util-hex-encoding/-/util-hex-encoding-2.0.0.tgz", - "integrity": "sha512-c5xY+NUnFqG6d7HFh1IFfrm3mGl29lC+vF+geHv4ToiuJCBmIfzx6IeHLg+OgRdPFKDXIw6pvi+p3CsscaMcMA==", + "node_modules/@aws-sdk/client-lambda/node_modules/@smithy/middleware-stack": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@smithy/middleware-stack/-/middleware-stack-2.0.1.tgz", + "integrity": "sha512-UexsfY6/oQZRjTQL56s9AKtMcR60tBNibSgNYX1I2WXaUaXg97W9JCkFyth85TzBWKDBTyhLfenrukS/kyu54A==", "dependencies": { + "@smithy/types": "^2.3.2", "tslib": "^2.5.0" }, "engines": { "node": ">=14.0.0" } }, - "node_modules/@aws-sdk/client-cognito-identity/node_modules/@smithy/util-middleware": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@smithy/util-middleware/-/util-middleware-2.0.0.tgz", - "integrity": "sha512-eCWX4ECuDHn1wuyyDdGdUWnT4OGyIzV0LN1xRttBFMPI9Ff/4heSHVxneyiMtOB//zpXWCha1/SWHJOZstG7kA==", + "node_modules/@aws-sdk/client-lambda/node_modules/@smithy/node-config-provider": { + "version": "2.0.11", + "resolved": "https://registry.npmjs.org/@smithy/node-config-provider/-/node-config-provider-2.0.11.tgz", + "integrity": "sha512-CaR1dciSSGKttjhcefpytYjsfI/Yd5mqL8am4wfmyFCDxSiPsvnEWHl8UjM/RbcAjX0klt+CeIKPSHEc0wGvJA==", "dependencies": { + "@smithy/property-provider": "^2.0.9", + "@smithy/shared-ini-file-loader": "^2.0.10", + "@smithy/types": "^2.3.2", "tslib": "^2.5.0" }, "engines": { "node": ">=14.0.0" } }, - "node_modules/@aws-sdk/client-cognito-identity/node_modules/@smithy/util-retry": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@smithy/util-retry/-/util-retry-2.0.0.tgz", - "integrity": "sha512-/dvJ8afrElasuiiIttRJeoS2sy8YXpksQwiM/TcepqdRVp7u4ejd9C4IQURHNjlfPUT7Y6lCDSa2zQJbdHhVTg==", + "node_modules/@aws-sdk/client-lambda/node_modules/@smithy/node-http-handler": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@smithy/node-http-handler/-/node-http-handler-2.1.4.tgz", + "integrity": "sha512-8Rw/AusvWDyC6SK8esAcVBeTlQHf94NMFv805suFUJCQ2gwlh0oLDNh+6s2MDOrxcjvLxjjzv1mytM0Mt+0cPQ==", "dependencies": { - "@smithy/service-error-classification": "^2.0.0", + "@smithy/abort-controller": "^2.0.8", + "@smithy/protocol-http": "^3.0.4", + "@smithy/querystring-builder": "^2.0.8", + "@smithy/types": "^2.3.2", "tslib": "^2.5.0" }, "engines": { - "node": ">= 14.0.0" + "node": ">=14.0.0" } }, - "node_modules/@aws-sdk/client-cognito-identity/node_modules/@smithy/util-stream": { - "version": "2.0.8", - "resolved": "https://registry.npmjs.org/@smithy/util-stream/-/util-stream-2.0.8.tgz", - "integrity": "sha512-1JoSHL/AOFRo/RVYdbOOGG5qSkU1IQN+F0f3HOZcwvGeGT5KnGwd4hLzmr0qkjKh4PW7nzuvPMdR7L8THV24Hw==", + "node_modules/@aws-sdk/client-lambda/node_modules/@smithy/property-provider": { + "version": "2.0.9", + "resolved": "https://registry.npmjs.org/@smithy/property-provider/-/property-provider-2.0.9.tgz", + "integrity": "sha512-25pPZ8f8DeRwYI5wbPRZaoMoR+3vrw8DwbA0TjP+GsdiB2KxScndr4HQehiJ5+WJ0giOTWhLz0bd+7Djv1qpUQ==", "dependencies": { - "@smithy/fetch-http-handler": "^2.1.2", - "@smithy/node-http-handler": "^2.1.2", - "@smithy/types": "^2.3.0", - "@smithy/util-base64": "^2.0.0", - "@smithy/util-buffer-from": "^2.0.0", - "@smithy/util-hex-encoding": "^2.0.0", - "@smithy/util-utf8": "^2.0.0", + "@smithy/types": "^2.3.2", "tslib": "^2.5.0" }, "engines": { "node": ">=14.0.0" } }, - "node_modules/@aws-sdk/client-cognito-identity/node_modules/@smithy/util-uri-escape": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@smithy/util-uri-escape/-/util-uri-escape-2.0.0.tgz", - "integrity": "sha512-ebkxsqinSdEooQduuk9CbKcI+wheijxEb3utGXkCoYQkJnwTnLbH1JXGimJtUkQwNQbsbuYwG2+aFVyZf5TLaw==", + "node_modules/@aws-sdk/client-lambda/node_modules/@smithy/protocol-http": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-3.0.4.tgz", + "integrity": "sha512-CGfSWk6TRlbwa8YgrSXdn80Yu7pov3EV/h7TSfiCHhq6/LO3WymmqnzgH1f0qV2bdTDipIkTNp5dGCGN3Af/5g==", "dependencies": { + "@smithy/types": "^2.3.2", "tslib": "^2.5.0" }, "engines": { "node": ">=14.0.0" } }, - "node_modules/@aws-sdk/client-cognito-identity/node_modules/@smithy/util-utf8": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-2.0.0.tgz", - "integrity": "sha512-rctU1VkziY84n5OXe3bPNpKR001ZCME2JCaBBFgtiM2hfKbHFudc/BkMuPab8hRbLd0j3vbnBTTZ1igBf0wgiQ==", + "node_modules/@aws-sdk/client-lambda/node_modules/@smithy/querystring-builder": { + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/@smithy/querystring-builder/-/querystring-builder-2.0.8.tgz", + "integrity": "sha512-+vzIMwjC8Saz97/ptPn+IJRCRRZ+pP95ZIWDRqEqZV/a6hiKbaFoMSa2iCKsnKzR696U2JZXrDqMu3e/FD1+2g==", "dependencies": { - "@smithy/util-buffer-from": "^2.0.0", + "@smithy/types": "^2.3.2", + "@smithy/util-uri-escape": "^2.0.0", "tslib": "^2.5.0" }, "engines": { "node": ">=14.0.0" } }, - "node_modules/@aws-sdk/client-cognito-identity/node_modules/uuid": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", - "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", - "bin": { - "uuid": "dist/bin/uuid" - } - }, - "node_modules/@aws-sdk/client-personalize": { - "version": "3.391.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-personalize/-/client-personalize-3.391.0.tgz", - "integrity": "sha512-Yk9a5qki7m0syyGrXBezk63sJoR9ua8SJwHL2gpKeoQTB7s9ZYtcTxBbCBj3PSpLWGFMFxA53NOG8MdpIsh/Cg==", + "node_modules/@aws-sdk/client-lambda/node_modules/@smithy/querystring-parser": { + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/@smithy/querystring-parser/-/querystring-parser-2.0.8.tgz", + "integrity": "sha512-ArbanNuR7O/MmTd90ZqhDqGOPPDYmxx3huHxD+R3cuCnazcK/1tGQA+SnnR5307T7ZRb5WTpB6qBggERuibVSA==", "dependencies": { - "@aws-crypto/sha256-browser": "3.0.0", - "@aws-crypto/sha256-js": "3.0.0", - "@aws-sdk/client-sts": "3.391.0", - "@aws-sdk/credential-provider-node": "3.391.0", - "@aws-sdk/middleware-host-header": "3.391.0", - "@aws-sdk/middleware-logger": "3.391.0", - "@aws-sdk/middleware-recursion-detection": "3.391.0", - "@aws-sdk/middleware-signing": "3.391.0", - "@aws-sdk/middleware-user-agent": "3.391.0", - "@aws-sdk/types": "3.391.0", - "@aws-sdk/util-endpoints": "3.391.0", - "@aws-sdk/util-user-agent-browser": "3.391.0", - "@aws-sdk/util-user-agent-node": "3.391.0", - "@smithy/config-resolver": "^2.0.3", - "@smithy/fetch-http-handler": "^2.0.3", - "@smithy/hash-node": "^2.0.3", - "@smithy/invalid-dependency": "^2.0.3", - "@smithy/middleware-content-length": "^2.0.3", - "@smithy/middleware-endpoint": "^2.0.3", - "@smithy/middleware-retry": "^2.0.3", - "@smithy/middleware-serde": "^2.0.3", - "@smithy/middleware-stack": "^2.0.0", - "@smithy/node-config-provider": "^2.0.3", - "@smithy/node-http-handler": "^2.0.3", - "@smithy/protocol-http": "^2.0.3", - "@smithy/smithy-client": "^2.0.3", - "@smithy/types": "^2.2.0", - "@smithy/url-parser": "^2.0.3", - "@smithy/util-base64": "^2.0.0", - "@smithy/util-body-length-browser": "^2.0.0", - "@smithy/util-body-length-node": "^2.0.0", - "@smithy/util-defaults-mode-browser": "^2.0.3", - "@smithy/util-defaults-mode-node": "^2.0.3", - "@smithy/util-retry": "^2.0.0", - "@smithy/util-utf8": "^2.0.0", + "@smithy/types": "^2.3.2", "tslib": "^2.5.0" }, "engines": { "node": ">=14.0.0" } }, - "node_modules/@aws-sdk/client-personalize/node_modules/@aws-sdk/client-sso": { - "version": "3.391.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso/-/client-sso-3.391.0.tgz", - "integrity": "sha512-aT+O1CbWIWYlCtWK6g3ZaMvFNImOgFGurOEPscuedqzG5UQc1bRtRrGYShLyzcZgfXP+s0cKYJqgGeRNoWiwqA==", + "node_modules/@aws-sdk/client-lambda/node_modules/@smithy/service-error-classification": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@smithy/service-error-classification/-/service-error-classification-2.0.1.tgz", + "integrity": "sha512-QHa9+t+v4s0cMuDCcbjIJN67mNZ42/+fc3jKe8P6ZMPXZl5ksKk6a8vhZ/m494GZng5eFTc3OePv+NF9cG83yg==", "dependencies": { - "@aws-crypto/sha256-browser": "3.0.0", - "@aws-crypto/sha256-js": "3.0.0", - "@aws-sdk/middleware-host-header": "3.391.0", - "@aws-sdk/middleware-logger": "3.391.0", - "@aws-sdk/middleware-recursion-detection": "3.391.0", - "@aws-sdk/middleware-user-agent": "3.391.0", - "@aws-sdk/types": "3.391.0", - "@aws-sdk/util-endpoints": "3.391.0", - "@aws-sdk/util-user-agent-browser": "3.391.0", - "@aws-sdk/util-user-agent-node": "3.391.0", - "@smithy/config-resolver": "^2.0.3", - "@smithy/fetch-http-handler": "^2.0.3", - "@smithy/hash-node": "^2.0.3", - "@smithy/invalid-dependency": "^2.0.3", - "@smithy/middleware-content-length": "^2.0.3", - "@smithy/middleware-endpoint": "^2.0.3", - "@smithy/middleware-retry": "^2.0.3", - "@smithy/middleware-serde": "^2.0.3", - "@smithy/middleware-stack": "^2.0.0", - "@smithy/node-config-provider": "^2.0.3", - "@smithy/node-http-handler": "^2.0.3", - "@smithy/protocol-http": "^2.0.3", - "@smithy/smithy-client": "^2.0.3", - "@smithy/types": "^2.2.0", - "@smithy/url-parser": "^2.0.3", - "@smithy/util-base64": "^2.0.0", - "@smithy/util-body-length-browser": "^2.0.0", - "@smithy/util-body-length-node": "^2.0.0", - "@smithy/util-defaults-mode-browser": "^2.0.3", - "@smithy/util-defaults-mode-node": "^2.0.3", - "@smithy/util-retry": "^2.0.0", - "@smithy/util-utf8": "^2.0.0", - "tslib": "^2.5.0" + "@smithy/types": "^2.3.2" }, "engines": { "node": ">=14.0.0" } }, - "node_modules/@aws-sdk/client-personalize/node_modules/@aws-sdk/client-sts": { - "version": "3.391.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-sts/-/client-sts-3.391.0.tgz", - "integrity": "sha512-y+KmorcUx9o5O99sXVPbhGUpsLpfhzYRaYCqxArLsyzZTCO6XDXMi8vg/xtS+b703j9lWEl5GxAv2oBaEwEnhQ==", + "node_modules/@aws-sdk/client-lambda/node_modules/@smithy/shared-ini-file-loader": { + "version": "2.0.10", + "resolved": "https://registry.npmjs.org/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-2.0.10.tgz", + "integrity": "sha512-jWASteSezRKohJ7GdA7pHDvmr7Q7tw3b5mu3xLHIkZy/ICftJ+O7aqNaF8wklhI7UNFoQ7flFRM3Rd0KA+1BbQ==", "dependencies": { - "@aws-crypto/sha256-browser": "3.0.0", - "@aws-crypto/sha256-js": "3.0.0", - "@aws-sdk/credential-provider-node": "3.391.0", - "@aws-sdk/middleware-host-header": "3.391.0", - "@aws-sdk/middleware-logger": "3.391.0", - "@aws-sdk/middleware-recursion-detection": "3.391.0", - "@aws-sdk/middleware-sdk-sts": "3.391.0", - "@aws-sdk/middleware-signing": "3.391.0", - "@aws-sdk/middleware-user-agent": "3.391.0", - "@aws-sdk/types": "3.391.0", - "@aws-sdk/util-endpoints": "3.391.0", - "@aws-sdk/util-user-agent-browser": "3.391.0", - "@aws-sdk/util-user-agent-node": "3.391.0", - "@smithy/config-resolver": "^2.0.3", - "@smithy/fetch-http-handler": "^2.0.3", - "@smithy/hash-node": "^2.0.3", - "@smithy/invalid-dependency": "^2.0.3", - "@smithy/middleware-content-length": "^2.0.3", - "@smithy/middleware-endpoint": "^2.0.3", - "@smithy/middleware-retry": "^2.0.3", - "@smithy/middleware-serde": "^2.0.3", - "@smithy/middleware-stack": "^2.0.0", - "@smithy/node-config-provider": "^2.0.3", - "@smithy/node-http-handler": "^2.0.3", - "@smithy/protocol-http": "^2.0.3", - "@smithy/smithy-client": "^2.0.3", - "@smithy/types": "^2.2.0", - "@smithy/url-parser": "^2.0.3", - "@smithy/util-base64": "^2.0.0", - "@smithy/util-body-length-browser": "^2.0.0", - "@smithy/util-body-length-node": "^2.0.0", - "@smithy/util-defaults-mode-browser": "^2.0.3", - "@smithy/util-defaults-mode-node": "^2.0.3", - "@smithy/util-retry": "^2.0.0", - "@smithy/util-utf8": "^2.0.0", - "fast-xml-parser": "4.2.5", + "@smithy/types": "^2.3.2", "tslib": "^2.5.0" }, "engines": { "node": ">=14.0.0" } }, - "node_modules/@aws-sdk/client-personalize/node_modules/@aws-sdk/credential-provider-env": { - "version": "3.391.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-env/-/credential-provider-env-3.391.0.tgz", - "integrity": "sha512-mAzICedcg4bfL0mM5O6QTd9mQ331NLse1DMr6XL21ZZiLB48ej19L7AGV2xq5QwVbqKU3IVv1myRyhvpDM9jMg==", + "node_modules/@aws-sdk/client-lambda/node_modules/@smithy/smithy-client": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@smithy/smithy-client/-/smithy-client-2.1.5.tgz", + "integrity": "sha512-7S865uKzsxApM8W8Q6zkij7tcUFgaG8PuADMFdMt1yL/ku3d0+s6Zwrg3N7iXCPM08Gu/mf0BIfTXIu/9i450Q==", "dependencies": { - "@aws-sdk/types": "3.391.0", - "@smithy/property-provider": "^2.0.0", - "@smithy/types": "^2.2.0", + "@smithy/middleware-stack": "^2.0.1", + "@smithy/types": "^2.3.2", + "@smithy/util-stream": "^2.0.11", "tslib": "^2.5.0" }, "engines": { "node": ">=14.0.0" } }, - "node_modules/@aws-sdk/client-personalize/node_modules/@aws-sdk/credential-provider-ini": { - "version": "3.391.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.391.0.tgz", - "integrity": "sha512-DJZmbmRMqNSfSV7UF8eBVhADz16KAMCTxnFuvgioHHfYUTZQEhCxRHI8jJqYWxhLTriS7AuTBIWr+1AIbwsCTA==", + "node_modules/@aws-sdk/client-lambda/node_modules/@smithy/types": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-2.3.2.tgz", + "integrity": "sha512-iH0cdKi7HQlzfAM3w2shFk/qZYKAqJWswtpmQpPtlruF+uFZeGEpMJjgDRyhWiddfVM4e2oP4nMaOBsMy6lXgg==", "dependencies": { - "@aws-sdk/credential-provider-env": "3.391.0", - "@aws-sdk/credential-provider-process": "3.391.0", - "@aws-sdk/credential-provider-sso": "3.391.0", - "@aws-sdk/credential-provider-web-identity": "3.391.0", - "@aws-sdk/types": "3.391.0", - "@smithy/credential-provider-imds": "^2.0.0", - "@smithy/property-provider": "^2.0.0", - "@smithy/shared-ini-file-loader": "^2.0.0", - "@smithy/types": "^2.2.0", "tslib": "^2.5.0" }, "engines": { "node": ">=14.0.0" } }, - "node_modules/@aws-sdk/client-personalize/node_modules/@aws-sdk/credential-provider-node": { - "version": "3.391.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.391.0.tgz", - "integrity": "sha512-LXHQwsTw4WBwRzD9swu8254Hao5MoIaGXIzbhX4EQ84dtOkKYbwiY4pDpLfcHcw3B1lFKkVclMze8WAs4EdEww==", + "node_modules/@aws-sdk/client-lambda/node_modules/@smithy/url-parser": { + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/@smithy/url-parser/-/url-parser-2.0.8.tgz", + "integrity": "sha512-wQw7j004ScCrBRJ+oNPXlLE9mtofxyadSZ9D8ov/rHkyurS7z1HTNuyaGRj6OvKsEk0SVQsuY0C9+EfM75XTkw==", + "dependencies": { + "@smithy/querystring-parser": "^2.0.8", + "@smithy/types": "^2.3.2", + "tslib": "^2.5.0" + } + }, + "node_modules/@aws-sdk/client-lambda/node_modules/@smithy/util-base64": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-base64/-/util-base64-2.0.0.tgz", + "integrity": "sha512-Zb1E4xx+m5Lud8bbeYi5FkcMJMnn+1WUnJF3qD7rAdXpaL7UjkFQLdmW5fHadoKbdHpwH9vSR8EyTJFHJs++tA==", "dependencies": { - "@aws-sdk/credential-provider-env": "3.391.0", - "@aws-sdk/credential-provider-ini": "3.391.0", - "@aws-sdk/credential-provider-process": "3.391.0", - "@aws-sdk/credential-provider-sso": "3.391.0", - "@aws-sdk/credential-provider-web-identity": "3.391.0", - "@aws-sdk/types": "3.391.0", - "@smithy/credential-provider-imds": "^2.0.0", - "@smithy/property-provider": "^2.0.0", - "@smithy/shared-ini-file-loader": "^2.0.0", - "@smithy/types": "^2.2.0", + "@smithy/util-buffer-from": "^2.0.0", "tslib": "^2.5.0" }, "engines": { "node": ">=14.0.0" } }, - "node_modules/@aws-sdk/client-personalize/node_modules/@aws-sdk/credential-provider-process": { - "version": "3.391.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-process/-/credential-provider-process-3.391.0.tgz", - "integrity": "sha512-KMlzPlBI+hBmXDo+EoFZdLgCVRkRa9B9iEE6x0+hQQ6g9bW6HI7cDRVdceR1ZoPasSaNAZ9QOXMTIBxTpn0sPQ==", + "node_modules/@aws-sdk/client-lambda/node_modules/@smithy/util-body-length-browser": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-body-length-browser/-/util-body-length-browser-2.0.0.tgz", + "integrity": "sha512-JdDuS4ircJt+FDnaQj88TzZY3+njZ6O+D3uakS32f2VNnDo3vyEuNdBOh/oFd8Df1zSZOuH1HEChk2AOYDezZg==", "dependencies": { - "@aws-sdk/types": "3.391.0", - "@smithy/property-provider": "^2.0.0", - "@smithy/shared-ini-file-loader": "^2.0.0", - "@smithy/types": "^2.2.0", "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" } }, - "node_modules/@aws-sdk/client-personalize/node_modules/@aws-sdk/credential-provider-sso": { - "version": "3.391.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.391.0.tgz", - "integrity": "sha512-FT/WoiRHiKys+FcRwvjui0yKuzNtJdn2uGuI1hYE0gpW1wVmW02ouufLckJTmcw09THUZ4w53OoCVU5OY00p8A==", + "node_modules/@aws-sdk/client-lambda/node_modules/@smithy/util-body-length-node": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@smithy/util-body-length-node/-/util-body-length-node-2.1.0.tgz", + "integrity": "sha512-/li0/kj/y3fQ3vyzn36NTLGmUwAICb7Jbe/CsWCktW363gh1MOcpEcSO3mJ344Gv2dqz8YJCLQpb6hju/0qOWw==", "dependencies": { - "@aws-sdk/client-sso": "3.391.0", - "@aws-sdk/token-providers": "3.391.0", - "@aws-sdk/types": "3.391.0", - "@smithy/property-provider": "^2.0.0", - "@smithy/shared-ini-file-loader": "^2.0.0", - "@smithy/types": "^2.2.0", "tslib": "^2.5.0" }, "engines": { "node": ">=14.0.0" } }, - "node_modules/@aws-sdk/client-personalize/node_modules/@aws-sdk/credential-provider-web-identity": { - "version": "3.391.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.391.0.tgz", - "integrity": "sha512-n0vYg82B8bc4rxKltVbVqclev7hx+elyS9pEnZs3YbnbWJq0qqsznXmDfLqd1TcWpa09PGXcah0nsRDolVThsA==", + "node_modules/@aws-sdk/client-lambda/node_modules/@smithy/util-buffer-from": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-2.0.0.tgz", + "integrity": "sha512-/YNnLoHsR+4W4Vf2wL5lGv0ksg8Bmk3GEGxn2vEQt52AQaPSCuaO5PM5VM7lP1K9qHRKHwrPGktqVoAHKWHxzw==", "dependencies": { - "@aws-sdk/types": "3.391.0", - "@smithy/property-provider": "^2.0.0", - "@smithy/types": "^2.2.0", + "@smithy/is-array-buffer": "^2.0.0", "tslib": "^2.5.0" }, "engines": { "node": ">=14.0.0" } }, - "node_modules/@aws-sdk/client-personalize/node_modules/@aws-sdk/middleware-host-header": { - "version": "3.391.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-host-header/-/middleware-host-header-3.391.0.tgz", - "integrity": "sha512-+nyNr0rb2ixY7mU48nibr7L7gsw37y4oELhqgnNKhcjZDJ34imBwKIMFa64n21FdftmhcjR8IdSpzXE9xrkJ8g==", + "node_modules/@aws-sdk/client-lambda/node_modules/@smithy/util-config-provider": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-config-provider/-/util-config-provider-2.0.0.tgz", + "integrity": "sha512-xCQ6UapcIWKxXHEU4Mcs2s7LcFQRiU3XEluM2WcCjjBtQkUN71Tb+ydGmJFPxMUrW/GWMgQEEGipLym4XG0jZg==", "dependencies": { - "@aws-sdk/types": "3.391.0", - "@smithy/protocol-http": "^2.0.3", - "@smithy/types": "^2.2.0", "tslib": "^2.5.0" }, "engines": { "node": ">=14.0.0" } }, - "node_modules/@aws-sdk/client-personalize/node_modules/@aws-sdk/middleware-logger": { - "version": "3.391.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-logger/-/middleware-logger-3.391.0.tgz", - "integrity": "sha512-KOwl5zo16b17JDhqILHBStccBQ2w35em7+/6vdkJdUII6OU8aVIFTlIQT9wOUvd4do6biIRBMZG3IK0Rg7mRDQ==", + "node_modules/@aws-sdk/client-lambda/node_modules/@smithy/util-defaults-mode-browser": { + "version": "2.0.9", + "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-browser/-/util-defaults-mode-browser-2.0.9.tgz", + "integrity": "sha512-JONLJVQWT8165XoSV36ERn3SVlZLJJ4D6IeGsCSePv65Uxa93pzSLE0UMSR9Jwm4zix7rst9AS8W5QIypZWP8Q==", "dependencies": { - "@aws-sdk/types": "3.391.0", - "@smithy/types": "^2.2.0", + "@smithy/property-provider": "^2.0.9", + "@smithy/smithy-client": "^2.1.5", + "@smithy/types": "^2.3.2", + "bowser": "^2.11.0", "tslib": "^2.5.0" }, "engines": { - "node": ">=14.0.0" + "node": ">= 10.0.0" } }, - "node_modules/@aws-sdk/client-personalize/node_modules/@aws-sdk/middleware-recursion-detection": { - "version": "3.391.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.391.0.tgz", - "integrity": "sha512-hVR3z59G7pX4pjDQs9Ag1tMgbLeGXOzeAAaNP9fEtHSd3KBMAGQgN3K3b9WPjzE2W0EoloHRJMK4qxZErdde2g==", - "dependencies": { - "@aws-sdk/types": "3.391.0", - "@smithy/protocol-http": "^2.0.3", - "@smithy/types": "^2.2.0", + "node_modules/@aws-sdk/client-lambda/node_modules/@smithy/util-defaults-mode-node": { + "version": "2.0.11", + "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-node/-/util-defaults-mode-node-2.0.11.tgz", + "integrity": "sha512-tmqjNsfj+bgZN6jXBe6efZnukzILA7BUytHkzqikuRLNtR+0VVchQHvawD0w6vManh76rO81ydhioe7i4oBzuA==", + "dependencies": { + "@smithy/config-resolver": "^2.0.9", + "@smithy/credential-provider-imds": "^2.0.11", + "@smithy/node-config-provider": "^2.0.11", + "@smithy/property-provider": "^2.0.9", + "@smithy/smithy-client": "^2.1.5", + "@smithy/types": "^2.3.2", "tslib": "^2.5.0" }, "engines": { - "node": ">=14.0.0" + "node": ">= 10.0.0" } }, - "node_modules/@aws-sdk/client-personalize/node_modules/@aws-sdk/middleware-sdk-sts": { - "version": "3.391.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-sdk-sts/-/middleware-sdk-sts-3.391.0.tgz", - "integrity": "sha512-6ZXI3Z4QU+TnT5PwKWloGmRHG81tWeI18/zxf9wWzrO2NhYFvITzEJH0vWLLiXdWtn/BYfLULXtDvkTaepbI5A==", + "node_modules/@aws-sdk/client-lambda/node_modules/@smithy/util-hex-encoding": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-hex-encoding/-/util-hex-encoding-2.0.0.tgz", + "integrity": "sha512-c5xY+NUnFqG6d7HFh1IFfrm3mGl29lC+vF+geHv4ToiuJCBmIfzx6IeHLg+OgRdPFKDXIw6pvi+p3CsscaMcMA==", "dependencies": { - "@aws-sdk/middleware-signing": "3.391.0", - "@aws-sdk/types": "3.391.0", - "@smithy/types": "^2.2.0", "tslib": "^2.5.0" }, "engines": { "node": ">=14.0.0" } }, - "node_modules/@aws-sdk/client-personalize/node_modules/@aws-sdk/middleware-signing": { - "version": "3.391.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-signing/-/middleware-signing-3.391.0.tgz", - "integrity": "sha512-2pAJJlZqaHc0d+cz2FTVrQmWi8ygKfqfczHUo/loCtOaMNtWXBHb/JsLEecs6cXdizy6gi3YsLz6VZYwY4Ssxw==", + "node_modules/@aws-sdk/client-lambda/node_modules/@smithy/util-middleware": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@smithy/util-middleware/-/util-middleware-2.0.1.tgz", + "integrity": "sha512-LnsBMi0Mg3gfz/TpNGLv2Jjcz2ra1OX5HR/4IaCepIYmtPQzqMWDdhX/XTW1LS8OZ0xbQuyQPcHkQ+2XkhWOVQ==", "dependencies": { - "@aws-sdk/types": "3.391.0", - "@smithy/property-provider": "^2.0.0", - "@smithy/protocol-http": "^2.0.3", - "@smithy/signature-v4": "^2.0.0", - "@smithy/types": "^2.2.0", - "@smithy/util-middleware": "^2.0.0", + "@smithy/types": "^2.3.2", "tslib": "^2.5.0" }, "engines": { "node": ">=14.0.0" } }, - "node_modules/@aws-sdk/client-personalize/node_modules/@aws-sdk/middleware-user-agent": { - "version": "3.391.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.391.0.tgz", - "integrity": "sha512-LdK9uMNA14zqRw3B79Mhy7GX36qld/GYo93xuu+lr+AQ98leZEdc6GUbrtNDI3fP1Z8TMQcyHUKBml4/B+wXpQ==", + "node_modules/@aws-sdk/client-lambda/node_modules/@smithy/util-retry": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@smithy/util-retry/-/util-retry-2.0.1.tgz", + "integrity": "sha512-naj4X0IafJ9yJnVJ58QgSMkCNLjyQOnyrnKh/T0f+0UOUxJiT8vuFn/hS7B/pNqbo2STY7PyJ4J4f+5YqxwNtA==", "dependencies": { - "@aws-sdk/types": "3.391.0", - "@aws-sdk/util-endpoints": "3.391.0", - "@smithy/protocol-http": "^2.0.3", - "@smithy/types": "^2.2.0", + "@smithy/service-error-classification": "^2.0.1", + "@smithy/types": "^2.3.2", "tslib": "^2.5.0" }, "engines": { - "node": ">=14.0.0" + "node": ">= 14.0.0" } }, - "node_modules/@aws-sdk/client-personalize/node_modules/@aws-sdk/token-providers": { - "version": "3.391.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/token-providers/-/token-providers-3.391.0.tgz", - "integrity": "sha512-kgfArsKLDJE71qQjfXiHiM5cZqgDHlMsqEx35+A65GmTWJaS1PGDqu3ZvVVU8E5mxnCCLw7vho21fsjvH6TBpg==", + "node_modules/@aws-sdk/client-lambda/node_modules/@smithy/util-stream": { + "version": "2.0.11", + "resolved": "https://registry.npmjs.org/@smithy/util-stream/-/util-stream-2.0.11.tgz", + "integrity": "sha512-2MeWfqSpZKdmEJ+tH8CJQSgzLWhH5cmdE24X7JB0hiamXrOmswWGGuPvyj/9sQCTclo57pNxLR2p7KrP8Ahiyg==", "dependencies": { - "@aws-crypto/sha256-browser": "3.0.0", - "@aws-crypto/sha256-js": "3.0.0", - "@aws-sdk/middleware-host-header": "3.391.0", - "@aws-sdk/middleware-logger": "3.391.0", - "@aws-sdk/middleware-recursion-detection": "3.391.0", - "@aws-sdk/middleware-user-agent": "3.391.0", - "@aws-sdk/types": "3.391.0", - "@aws-sdk/util-endpoints": "3.391.0", - "@aws-sdk/util-user-agent-browser": "3.391.0", - "@aws-sdk/util-user-agent-node": "3.391.0", - "@smithy/config-resolver": "^2.0.3", - "@smithy/fetch-http-handler": "^2.0.3", - "@smithy/hash-node": "^2.0.3", - "@smithy/invalid-dependency": "^2.0.3", - "@smithy/middleware-content-length": "^2.0.3", - "@smithy/middleware-endpoint": "^2.0.3", - "@smithy/middleware-retry": "^2.0.3", - "@smithy/middleware-serde": "^2.0.3", - "@smithy/middleware-stack": "^2.0.0", - "@smithy/node-config-provider": "^2.0.3", - "@smithy/node-http-handler": "^2.0.3", - "@smithy/property-provider": "^2.0.0", - "@smithy/protocol-http": "^2.0.3", - "@smithy/shared-ini-file-loader": "^2.0.0", - "@smithy/smithy-client": "^2.0.3", - "@smithy/types": "^2.2.0", - "@smithy/url-parser": "^2.0.3", + "@smithy/fetch-http-handler": "^2.1.4", + "@smithy/node-http-handler": "^2.1.4", + "@smithy/types": "^2.3.2", "@smithy/util-base64": "^2.0.0", - "@smithy/util-body-length-browser": "^2.0.0", - "@smithy/util-body-length-node": "^2.0.0", - "@smithy/util-defaults-mode-browser": "^2.0.3", - "@smithy/util-defaults-mode-node": "^2.0.3", - "@smithy/util-retry": "^2.0.0", + "@smithy/util-buffer-from": "^2.0.0", + "@smithy/util-hex-encoding": "^2.0.0", "@smithy/util-utf8": "^2.0.0", "tslib": "^2.5.0" }, @@ -1678,146 +1436,169 @@ "node": ">=14.0.0" } }, - "node_modules/@aws-sdk/client-personalize/node_modules/@aws-sdk/types": { - "version": "3.391.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.391.0.tgz", - "integrity": "sha512-QpYVFKMOnzHz/JMj/b8wb18qxiT92U/5r5MmtRz2R3LOH6ooTO96k4ozXCrYr0qNed1PAnOj73rPrrH2wnCJKQ==", + "node_modules/@aws-sdk/client-lambda/node_modules/@smithy/util-uri-escape": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-uri-escape/-/util-uri-escape-2.0.0.tgz", + "integrity": "sha512-ebkxsqinSdEooQduuk9CbKcI+wheijxEb3utGXkCoYQkJnwTnLbH1JXGimJtUkQwNQbsbuYwG2+aFVyZf5TLaw==", "dependencies": { - "@smithy/types": "^2.2.0", "tslib": "^2.5.0" }, "engines": { "node": ">=14.0.0" } }, - "node_modules/@aws-sdk/client-personalize/node_modules/@aws-sdk/util-endpoints": { - "version": "3.391.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-endpoints/-/util-endpoints-3.391.0.tgz", - "integrity": "sha512-zv4sYDTQhNxyLoekcE02/nk3xvoo6yCHDy1kDJk0MFxOKaqUB+CvZdQBR4YBLSDlD4o4DUBmdYgKT58FfbM8sQ==", + "node_modules/@aws-sdk/client-lambda/node_modules/@smithy/util-utf8": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-2.0.0.tgz", + "integrity": "sha512-rctU1VkziY84n5OXe3bPNpKR001ZCME2JCaBBFgtiM2hfKbHFudc/BkMuPab8hRbLd0j3vbnBTTZ1igBf0wgiQ==", "dependencies": { - "@aws-sdk/types": "3.391.0", + "@smithy/util-buffer-from": "^2.0.0", "tslib": "^2.5.0" }, "engines": { "node": ">=14.0.0" } }, - "node_modules/@aws-sdk/client-personalize/node_modules/@aws-sdk/util-user-agent-browser": { - "version": "3.391.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.391.0.tgz", - "integrity": "sha512-6ipHOB1WdCBNeAMJauN7l2qNE0WLVaTNhkD290/ElXm1FHGTL8yw6lIDIjhIFO1bmbZxDiKApwDiG7ROhaJoxQ==", + "node_modules/@aws-sdk/client-lambda/node_modules/@smithy/util-waiter": { + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/@smithy/util-waiter/-/util-waiter-2.0.8.tgz", + "integrity": "sha512-t9yaoofNhdEhNlyDeV5al/JJEFJ62HIQBGktgCUE63MvKn6imnbkh1qISsYMyMYVLwhWCpZ3Xa3R1LA+SnWcng==", "dependencies": { - "@aws-sdk/types": "3.391.0", - "@smithy/types": "^2.2.0", - "bowser": "^2.11.0", + "@smithy/abort-controller": "^2.0.8", + "@smithy/types": "^2.3.2", "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-lambda/node_modules/uuid": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", + "bin": { + "uuid": "dist/bin/uuid" } }, - "node_modules/@aws-sdk/client-personalize/node_modules/@aws-sdk/util-user-agent-node": { - "version": "3.391.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.391.0.tgz", - "integrity": "sha512-PVvAK/Lf4BdB1eJIZtyFpGSslGQwKpYt9/hKs5NlR+qxBMXU9T0DnTqH4GiXZaazvXr7OUVWitIF2b7iKBMTow==", + "node_modules/@aws-sdk/client-personalize": { + "version": "3.414.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-personalize/-/client-personalize-3.414.0.tgz", + "integrity": "sha512-KHaNSYI/TPV77/S3Ble3/Qxq5lGJO5tXY8BpfQU4Gdp92MNkPowPdx4Pn3DFYyNovAGUmA/Y2iWP+vJBtyvQSA==", "dependencies": { - "@aws-sdk/types": "3.391.0", - "@smithy/node-config-provider": "^2.0.3", - "@smithy/types": "^2.2.0", + "@aws-crypto/sha256-browser": "3.0.0", + "@aws-crypto/sha256-js": "3.0.0", + "@aws-sdk/client-sts": "3.414.0", + "@aws-sdk/credential-provider-node": "3.414.0", + "@aws-sdk/middleware-host-header": "3.413.0", + "@aws-sdk/middleware-logger": "3.413.0", + "@aws-sdk/middleware-recursion-detection": "3.413.0", + "@aws-sdk/middleware-signing": "3.413.0", + "@aws-sdk/middleware-user-agent": "3.413.0", + "@aws-sdk/region-config-resolver": "3.413.0", + "@aws-sdk/types": "3.413.0", + "@aws-sdk/util-endpoints": "3.413.0", + "@aws-sdk/util-user-agent-browser": "3.413.0", + "@aws-sdk/util-user-agent-node": "3.413.0", + "@smithy/config-resolver": "^2.0.8", + "@smithy/fetch-http-handler": "^2.1.3", + "@smithy/hash-node": "^2.0.7", + "@smithy/invalid-dependency": "^2.0.7", + "@smithy/middleware-content-length": "^2.0.9", + "@smithy/middleware-endpoint": "^2.0.7", + "@smithy/middleware-retry": "^2.0.10", + "@smithy/middleware-serde": "^2.0.7", + "@smithy/middleware-stack": "^2.0.0", + "@smithy/node-config-provider": "^2.0.10", + "@smithy/node-http-handler": "^2.1.3", + "@smithy/protocol-http": "^3.0.3", + "@smithy/smithy-client": "^2.1.4", + "@smithy/types": "^2.3.1", + "@smithy/url-parser": "^2.0.7", + "@smithy/util-base64": "^2.0.0", + "@smithy/util-body-length-browser": "^2.0.0", + "@smithy/util-body-length-node": "^2.1.0", + "@smithy/util-defaults-mode-browser": "^2.0.8", + "@smithy/util-defaults-mode-node": "^2.0.10", + "@smithy/util-retry": "^2.0.0", + "@smithy/util-utf8": "^2.0.0", "tslib": "^2.5.0" }, "engines": { "node": ">=14.0.0" - }, - "peerDependencies": { - "aws-crt": ">=1.0.0" - }, - "peerDependenciesMeta": { - "aws-crt": { - "optional": true - } } }, - "node_modules/@aws-sdk/client-personalize/node_modules/@smithy/abort-controller": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/@smithy/abort-controller/-/abort-controller-2.0.6.tgz", - "integrity": "sha512-4I7g0lyGUlW2onf8mD76IzU37oRWSHsQ5zlW5MjDzgg4I4J9bOK4500Gx6qOuoN7+GulAnGLe1YwyrIluzhakg==", + "node_modules/@aws-sdk/client-personalize/node_modules/@aws-sdk/types": { + "version": "3.413.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.413.0.tgz", + "integrity": "sha512-j1xib0f/TazIFc5ySIKOlT1ujntRbaoG4LJFeEezz4ji03/wSJMI8Vi4KjzpBp8J1tTu0oRDnsxRIGixsUBeYQ==", "dependencies": { - "@smithy/types": "^2.3.0", + "@smithy/types": "^2.3.1", "tslib": "^2.5.0" }, "engines": { "node": ">=14.0.0" } }, - "node_modules/@aws-sdk/client-personalize/node_modules/@smithy/config-resolver": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/@smithy/config-resolver/-/config-resolver-2.0.7.tgz", - "integrity": "sha512-J4J1AWiqaApC+3I9U++SuxAQ3BOoM5VoYnpFzCZcb63aLF80Zpc/nq2pFR1OsEIYyg2UYNdcBKKfHABmwo4WgQ==", + "node_modules/@aws-sdk/client-personalize/node_modules/@smithy/abort-controller": { + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/@smithy/abort-controller/-/abort-controller-2.0.8.tgz", + "integrity": "sha512-2SOdVj5y0zE37Y9scSXoizoxgi6mgnDabi7a/SOfhl0p+50I0rIkuJTfyAuTPDtQ7e5dD6tSZPCLB3c/YM6Zig==", "dependencies": { - "@smithy/node-config-provider": "^2.0.9", - "@smithy/types": "^2.3.0", - "@smithy/util-config-provider": "^2.0.0", - "@smithy/util-middleware": "^2.0.0", + "@smithy/types": "^2.3.2", "tslib": "^2.5.0" }, "engines": { "node": ">=14.0.0" } }, - "node_modules/@aws-sdk/client-personalize/node_modules/@smithy/credential-provider-imds": { + "node_modules/@aws-sdk/client-personalize/node_modules/@smithy/config-resolver": { "version": "2.0.9", - "resolved": "https://registry.npmjs.org/@smithy/credential-provider-imds/-/credential-provider-imds-2.0.9.tgz", - "integrity": "sha512-K7WZRkHS5HZofRgK+O8W4YXXyaVexU1K6hp9vlUL/8CsnrFbZS9quyH/6hTROrYh2PuJr24yii1kc83NJdxMGQ==", + "resolved": "https://registry.npmjs.org/@smithy/config-resolver/-/config-resolver-2.0.9.tgz", + "integrity": "sha512-QBkGPLUqyPmis9Erz8v4q5lo/ErnF7+GD5WZHa6JZiXopUPfaaM+B21n8gzS5xCkIXZmnwzNQhObP9xQPu8oqQ==", "dependencies": { - "@smithy/node-config-provider": "^2.0.9", - "@smithy/property-provider": "^2.0.7", - "@smithy/types": "^2.3.0", - "@smithy/url-parser": "^2.0.6", + "@smithy/node-config-provider": "^2.0.11", + "@smithy/types": "^2.3.2", + "@smithy/util-config-provider": "^2.0.0", + "@smithy/util-middleware": "^2.0.1", "tslib": "^2.5.0" }, "engines": { "node": ">=14.0.0" } }, - "node_modules/@aws-sdk/client-personalize/node_modules/@smithy/eventstream-codec": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/@smithy/eventstream-codec/-/eventstream-codec-2.0.6.tgz", - "integrity": "sha512-J9xL82mlYRUMXFnB9VaThXkD7z2JLr52FIVZMoQQ1dxZG5ub+NOGmzaTTZC/cMmKXI/nwCoFuwDWCTjwQhYhQA==", + "node_modules/@aws-sdk/client-personalize/node_modules/@smithy/credential-provider-imds": { + "version": "2.0.11", + "resolved": "https://registry.npmjs.org/@smithy/credential-provider-imds/-/credential-provider-imds-2.0.11.tgz", + "integrity": "sha512-uJJs8dnM5iXkn8a2GaKvlKMhcOJ+oJPYqY9gY3CM/EieCVObIDjxUtR/g8lU/k/A+OauA78GzScAfulmFjPOYA==", "dependencies": { - "@aws-crypto/crc32": "3.0.0", - "@smithy/types": "^2.3.0", - "@smithy/util-hex-encoding": "^2.0.0", + "@smithy/node-config-provider": "^2.0.11", + "@smithy/property-provider": "^2.0.9", + "@smithy/types": "^2.3.2", + "@smithy/url-parser": "^2.0.8", "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" } }, "node_modules/@aws-sdk/client-personalize/node_modules/@smithy/fetch-http-handler": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/@smithy/fetch-http-handler/-/fetch-http-handler-2.1.2.tgz", - "integrity": "sha512-3Gm3pQm4viUPU+e7KkRScS9t5phBxSNRS8rQSZ+HeCwK/busrX0/2HJZiwLvGblqPqi1laJB0lD18AdiOioJww==", + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@smithy/fetch-http-handler/-/fetch-http-handler-2.1.4.tgz", + "integrity": "sha512-SL24M9W5ERByoXaVicRx+bj9GJVujDnPn+QO7GY7adhY0mPGa6DSF58pVKsgIh4r5Tx/k3SWCPlH4BxxSxA/fQ==", "dependencies": { - "@smithy/protocol-http": "^3.0.2", - "@smithy/querystring-builder": "^2.0.6", - "@smithy/types": "^2.3.0", + "@smithy/protocol-http": "^3.0.4", + "@smithy/querystring-builder": "^2.0.8", + "@smithy/types": "^2.3.2", "@smithy/util-base64": "^2.0.0", "tslib": "^2.5.0" } }, - "node_modules/@aws-sdk/client-personalize/node_modules/@smithy/fetch-http-handler/node_modules/@smithy/protocol-http": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-3.0.2.tgz", - "integrity": "sha512-LUOWCPRihvJBkdSs+ivK9m1f/rMfF3n9Zpzg8qdry2eIG4HQqqLBMWQyF9bgk7JhsrrOa3//jJKhXzvL7wL5Xw==", - "dependencies": { - "@smithy/types": "^2.3.0", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, "node_modules/@aws-sdk/client-personalize/node_modules/@smithy/hash-node": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/@smithy/hash-node/-/hash-node-2.0.6.tgz", - "integrity": "sha512-xz7fzFxSzxohKGGyKPbLReRrY01JOZgRDHIXSks3PxQxG9c8PJMa5nUw0stH8UOySUgkofmMy0n7vTUsF5Mdqg==", + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/@smithy/hash-node/-/hash-node-2.0.8.tgz", + "integrity": "sha512-yZL/nmxZzjZV5/QX5JWSgXlt0HxuMTwFO89CS++jOMMPiCMZngf6VYmtNdccs8IIIAMmfQeTzwu07XgUE/Zd3Q==", "dependencies": { - "@smithy/types": "^2.3.0", + "@smithy/types": "^2.3.2", "@smithy/util-buffer-from": "^2.0.0", "@smithy/util-utf8": "^2.0.0", "tslib": "^2.5.0" @@ -1827,11 +1608,11 @@ } }, "node_modules/@aws-sdk/client-personalize/node_modules/@smithy/invalid-dependency": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/@smithy/invalid-dependency/-/invalid-dependency-2.0.6.tgz", - "integrity": "sha512-L5MUyl9mzawIvBxr0Hg3J/Q5qZFXKcBgMk0PacfK3Mthp4WAR6h7iMxdSQ23Q7X/kxOrpZuoYEdh1BWLKbDc8Q==", + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/@smithy/invalid-dependency/-/invalid-dependency-2.0.8.tgz", + "integrity": "sha512-88VOS7W3KzUz/bNRc+Sl/F/CDIasFspEE4G39YZRHIh9YmsXF7GUyVaAKURfMNulTie62ayk6BHC9O0nOBAVgQ==", "dependencies": { - "@smithy/types": "^2.3.0", + "@smithy/types": "^2.3.2", "tslib": "^2.5.0" } }, @@ -1847,24 +1628,12 @@ } }, "node_modules/@aws-sdk/client-personalize/node_modules/@smithy/middleware-content-length": { - "version": "2.0.8", - "resolved": "https://registry.npmjs.org/@smithy/middleware-content-length/-/middleware-content-length-2.0.8.tgz", - "integrity": "sha512-fHJFsscHXrYhUSWMFJNXfsZW8KsyhWQfBgU3b0nvDfpm+NAeQLqKYNhywGrDwZQc1k+lt7Fw9faAquhNPxTZRA==", - "dependencies": { - "@smithy/protocol-http": "^3.0.2", - "@smithy/types": "^2.3.0", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/client-personalize/node_modules/@smithy/middleware-content-length/node_modules/@smithy/protocol-http": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-3.0.2.tgz", - "integrity": "sha512-LUOWCPRihvJBkdSs+ivK9m1f/rMfF3n9Zpzg8qdry2eIG4HQqqLBMWQyF9bgk7JhsrrOa3//jJKhXzvL7wL5Xw==", + "version": "2.0.10", + "resolved": "https://registry.npmjs.org/@smithy/middleware-content-length/-/middleware-content-length-2.0.10.tgz", + "integrity": "sha512-EGSbysyA4jH0p3xI6G0jdXoj9Iz9GUnAta6aEaHtXm3wVWtenRf80y2TeVvNkVSr5jwKOdSCjKIRI2l1A/oZLA==", "dependencies": { - "@smithy/types": "^2.3.0", + "@smithy/protocol-http": "^3.0.4", + "@smithy/types": "^2.3.2", "tslib": "^2.5.0" }, "engines": { @@ -1872,14 +1641,14 @@ } }, "node_modules/@aws-sdk/client-personalize/node_modules/@smithy/middleware-endpoint": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/@smithy/middleware-endpoint/-/middleware-endpoint-2.0.6.tgz", - "integrity": "sha512-MuSPPtEHFal/M77tR3ffLsdOfX29IZpA990nGuoPj5zQnAYrA4PYBGoqqrASQKm8Xb3C0NwuYzOATT7WX4f5Pg==", + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/@smithy/middleware-endpoint/-/middleware-endpoint-2.0.8.tgz", + "integrity": "sha512-yOpogfG2d2V0cbJdAJ6GLAWkNOc9pVsL5hZUfXcxJu408N3CUCsXzIAFF6+70ZKSE+lCfG3GFErcSXv/UfUbjw==", "dependencies": { - "@smithy/middleware-serde": "^2.0.6", - "@smithy/types": "^2.3.0", - "@smithy/url-parser": "^2.0.6", - "@smithy/util-middleware": "^2.0.0", + "@smithy/middleware-serde": "^2.0.8", + "@smithy/types": "^2.3.2", + "@smithy/url-parser": "^2.0.8", + "@smithy/util-middleware": "^2.0.1", "tslib": "^2.5.0" }, "engines": { @@ -1887,16 +1656,16 @@ } }, "node_modules/@aws-sdk/client-personalize/node_modules/@smithy/middleware-retry": { - "version": "2.0.9", - "resolved": "https://registry.npmjs.org/@smithy/middleware-retry/-/middleware-retry-2.0.9.tgz", - "integrity": "sha512-gneEqWj4l/ZjHdZPk0BFMXoTalRArdQ8i579/KqJgBAc6Ux5vnR/SSppkMCkj2kOQYwdypvzSPeqEW3ZrvIg6g==", + "version": "2.0.11", + "resolved": "https://registry.npmjs.org/@smithy/middleware-retry/-/middleware-retry-2.0.11.tgz", + "integrity": "sha512-pknfokumZ+wvBERSuKAI2vVr+aK3ZgPiWRg6+0ZG4kKJogBRpPmDGWw+Jht0izS9ZaEbIobNzueIb4wD33JJVg==", "dependencies": { - "@smithy/node-config-provider": "^2.0.9", - "@smithy/protocol-http": "^3.0.2", - "@smithy/service-error-classification": "^2.0.0", - "@smithy/types": "^2.3.0", - "@smithy/util-middleware": "^2.0.0", - "@smithy/util-retry": "^2.0.0", + "@smithy/node-config-provider": "^2.0.11", + "@smithy/protocol-http": "^3.0.4", + "@smithy/service-error-classification": "^2.0.1", + "@smithy/types": "^2.3.2", + "@smithy/util-middleware": "^2.0.1", + "@smithy/util-retry": "^2.0.1", "tslib": "^2.5.0", "uuid": "^8.3.2" }, @@ -1904,24 +1673,12 @@ "node": ">=14.0.0" } }, - "node_modules/@aws-sdk/client-personalize/node_modules/@smithy/middleware-retry/node_modules/@smithy/protocol-http": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-3.0.2.tgz", - "integrity": "sha512-LUOWCPRihvJBkdSs+ivK9m1f/rMfF3n9Zpzg8qdry2eIG4HQqqLBMWQyF9bgk7JhsrrOa3//jJKhXzvL7wL5Xw==", - "dependencies": { - "@smithy/types": "^2.3.0", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, "node_modules/@aws-sdk/client-personalize/node_modules/@smithy/middleware-serde": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/@smithy/middleware-serde/-/middleware-serde-2.0.6.tgz", - "integrity": "sha512-8/GODBngYbrS28CMZtaHIL4R9rLNSQ/zgb+N1OAZ02NwBUawlnLDcatve9YRzhJC/IWz0/pt+WimJZaO1sGcig==", + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/@smithy/middleware-serde/-/middleware-serde-2.0.8.tgz", + "integrity": "sha512-Is0sm+LiNlgsc0QpstDzifugzL9ehno1wXp109GgBgpnKTK3j+KphiparBDI4hWTtH9/7OUsxuspNqai2yyhcg==", "dependencies": { - "@smithy/types": "^2.3.0", + "@smithy/types": "^2.3.2", "tslib": "^2.5.0" }, "engines": { @@ -1929,10 +1686,11 @@ } }, "node_modules/@aws-sdk/client-personalize/node_modules/@smithy/middleware-stack": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@smithy/middleware-stack/-/middleware-stack-2.0.0.tgz", - "integrity": "sha512-31XC1xNF65nlbc16yuh3wwTudmqs6qy4EseQUGF8A/p2m/5wdd/cnXJqpniy/XvXVwkHPz/GwV36HqzHtIKATQ==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@smithy/middleware-stack/-/middleware-stack-2.0.1.tgz", + "integrity": "sha512-UexsfY6/oQZRjTQL56s9AKtMcR60tBNibSgNYX1I2WXaUaXg97W9JCkFyth85TzBWKDBTyhLfenrukS/kyu54A==", "dependencies": { + "@smithy/types": "^2.3.2", "tslib": "^2.5.0" }, "engines": { @@ -1940,13 +1698,13 @@ } }, "node_modules/@aws-sdk/client-personalize/node_modules/@smithy/node-config-provider": { - "version": "2.0.9", - "resolved": "https://registry.npmjs.org/@smithy/node-config-provider/-/node-config-provider-2.0.9.tgz", - "integrity": "sha512-TlSPbCwtT/jgNnmPQqKuCR5CFN8UIrCCHRrgUfs3NqRMuaLLeP8TPe1fSKq2J8h1M/jd4BF853gneles0gWevg==", + "version": "2.0.11", + "resolved": "https://registry.npmjs.org/@smithy/node-config-provider/-/node-config-provider-2.0.11.tgz", + "integrity": "sha512-CaR1dciSSGKttjhcefpytYjsfI/Yd5mqL8am4wfmyFCDxSiPsvnEWHl8UjM/RbcAjX0klt+CeIKPSHEc0wGvJA==", "dependencies": { - "@smithy/property-provider": "^2.0.7", - "@smithy/shared-ini-file-loader": "^2.0.8", - "@smithy/types": "^2.3.0", + "@smithy/property-provider": "^2.0.9", + "@smithy/shared-ini-file-loader": "^2.0.10", + "@smithy/types": "^2.3.2", "tslib": "^2.5.0" }, "engines": { @@ -1954,38 +1712,26 @@ } }, "node_modules/@aws-sdk/client-personalize/node_modules/@smithy/node-http-handler": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/@smithy/node-http-handler/-/node-http-handler-2.1.2.tgz", - "integrity": "sha512-PdEEDCShuM8zxGoaRxmGB/1ikB8oeqz+ZAF9VIA8FCP3E59j8zDTF+wCELoWd1Y6gtxr+RcTAg5sA8nvn5qH/w==", + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@smithy/node-http-handler/-/node-http-handler-2.1.4.tgz", + "integrity": "sha512-8Rw/AusvWDyC6SK8esAcVBeTlQHf94NMFv805suFUJCQ2gwlh0oLDNh+6s2MDOrxcjvLxjjzv1mytM0Mt+0cPQ==", "dependencies": { - "@smithy/abort-controller": "^2.0.6", - "@smithy/protocol-http": "^3.0.2", - "@smithy/querystring-builder": "^2.0.6", - "@smithy/types": "^2.3.0", + "@smithy/abort-controller": "^2.0.8", + "@smithy/protocol-http": "^3.0.4", + "@smithy/querystring-builder": "^2.0.8", + "@smithy/types": "^2.3.2", "tslib": "^2.5.0" }, "engines": { "node": ">=14.0.0" } }, - "node_modules/@aws-sdk/client-personalize/node_modules/@smithy/node-http-handler/node_modules/@smithy/protocol-http": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-3.0.2.tgz", - "integrity": "sha512-LUOWCPRihvJBkdSs+ivK9m1f/rMfF3n9Zpzg8qdry2eIG4HQqqLBMWQyF9bgk7JhsrrOa3//jJKhXzvL7wL5Xw==", + "node_modules/@aws-sdk/client-personalize/node_modules/@smithy/property-provider": { + "version": "2.0.9", + "resolved": "https://registry.npmjs.org/@smithy/property-provider/-/property-provider-2.0.9.tgz", + "integrity": "sha512-25pPZ8f8DeRwYI5wbPRZaoMoR+3vrw8DwbA0TjP+GsdiB2KxScndr4HQehiJ5+WJ0giOTWhLz0bd+7Djv1qpUQ==", "dependencies": { - "@smithy/types": "^2.3.0", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/client-personalize/node_modules/@smithy/property-provider": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/@smithy/property-provider/-/property-provider-2.0.7.tgz", - "integrity": "sha512-XT8Tl7YNxM8tCtGqy7v7DSf6PxyXaPE9cdA/Yj4dEw2b05V3RrPqsP+t5XJiZu0yIsQ7pdeYZWv2sSEWVjNeAg==", - "dependencies": { - "@smithy/types": "^2.3.0", + "@smithy/types": "^2.3.2", "tslib": "^2.5.0" }, "engines": { @@ -1993,11 +1739,11 @@ } }, "node_modules/@aws-sdk/client-personalize/node_modules/@smithy/protocol-http": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-2.0.5.tgz", - "integrity": "sha512-d2hhHj34mA2V86doiDfrsy2fNTnUOowGaf9hKb0hIPHqvcnShU4/OSc4Uf1FwHkAdYF3cFXTrj5VGUYbEuvMdw==", + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-3.0.4.tgz", + "integrity": "sha512-CGfSWk6TRlbwa8YgrSXdn80Yu7pov3EV/h7TSfiCHhq6/LO3WymmqnzgH1f0qV2bdTDipIkTNp5dGCGN3Af/5g==", "dependencies": { - "@smithy/types": "^2.2.2", + "@smithy/types": "^2.3.2", "tslib": "^2.5.0" }, "engines": { @@ -2005,11 +1751,11 @@ } }, "node_modules/@aws-sdk/client-personalize/node_modules/@smithy/querystring-builder": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/@smithy/querystring-builder/-/querystring-builder-2.0.6.tgz", - "integrity": "sha512-HnU00shCGoV8vKJZTiNBkNvR9NogU3NIUaVMAGJPSqNGJj3psWo+TUrC0BVCDcwiCljXwXCFGJqIcsWtClrktQ==", + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/@smithy/querystring-builder/-/querystring-builder-2.0.8.tgz", + "integrity": "sha512-+vzIMwjC8Saz97/ptPn+IJRCRRZ+pP95ZIWDRqEqZV/a6hiKbaFoMSa2iCKsnKzR696U2JZXrDqMu3e/FD1+2g==", "dependencies": { - "@smithy/types": "^2.3.0", + "@smithy/types": "^2.3.2", "@smithy/util-uri-escape": "^2.0.0", "tslib": "^2.5.0" }, @@ -2018,11 +1764,11 @@ } }, "node_modules/@aws-sdk/client-personalize/node_modules/@smithy/querystring-parser": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/@smithy/querystring-parser/-/querystring-parser-2.0.6.tgz", - "integrity": "sha512-i4LKoXHP7pTFAPjLIJyQXYOhWokbcFha3WWsX74sAKmuluv0XM2cxONZoFxwEzmWhsNyM6buSwJSZXyPiec0AQ==", + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/@smithy/querystring-parser/-/querystring-parser-2.0.8.tgz", + "integrity": "sha512-ArbanNuR7O/MmTd90ZqhDqGOPPDYmxx3huHxD+R3cuCnazcK/1tGQA+SnnR5307T7ZRb5WTpB6qBggERuibVSA==", "dependencies": { - "@smithy/types": "^2.3.0", + "@smithy/types": "^2.3.2", "tslib": "^2.5.0" }, "engines": { @@ -2030,37 +1776,22 @@ } }, "node_modules/@aws-sdk/client-personalize/node_modules/@smithy/service-error-classification": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@smithy/service-error-classification/-/service-error-classification-2.0.0.tgz", - "integrity": "sha512-2z5Nafy1O0cTf69wKyNjGW/sNVMiqDnb4jgwfMG8ye8KnFJ5qmJpDccwIbJNhXIfbsxTg9SEec2oe1cexhMJvw==", - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/client-personalize/node_modules/@smithy/shared-ini-file-loader": { - "version": "2.0.8", - "resolved": "https://registry.npmjs.org/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-2.0.8.tgz", - "integrity": "sha512-4u+V+Dv7JGpJ0tppB5rxCem7WhdFux950z4cGPhV0kHTPkKe8DDgINzOlVa2RBu5dI33D02OBJcxFjhW4FPORg==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@smithy/service-error-classification/-/service-error-classification-2.0.1.tgz", + "integrity": "sha512-QHa9+t+v4s0cMuDCcbjIJN67mNZ42/+fc3jKe8P6ZMPXZl5ksKk6a8vhZ/m494GZng5eFTc3OePv+NF9cG83yg==", "dependencies": { - "@smithy/types": "^2.3.0", - "tslib": "^2.5.0" + "@smithy/types": "^2.3.2" }, "engines": { "node": ">=14.0.0" } }, - "node_modules/@aws-sdk/client-personalize/node_modules/@smithy/signature-v4": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/@smithy/signature-v4/-/signature-v4-2.0.6.tgz", - "integrity": "sha512-4zNTi8w4sky07YKq7oYucZt4ogY00IEaS1NFDXxmCN5V/ywE0WiK+WMim+8wtYQmB0qy3oExZR4LoCAml6j/rA==", + "node_modules/@aws-sdk/client-personalize/node_modules/@smithy/shared-ini-file-loader": { + "version": "2.0.10", + "resolved": "https://registry.npmjs.org/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-2.0.10.tgz", + "integrity": "sha512-jWASteSezRKohJ7GdA7pHDvmr7Q7tw3b5mu3xLHIkZy/ICftJ+O7aqNaF8wklhI7UNFoQ7flFRM3Rd0KA+1BbQ==", "dependencies": { - "@smithy/eventstream-codec": "^2.0.6", - "@smithy/is-array-buffer": "^2.0.0", - "@smithy/types": "^2.3.0", - "@smithy/util-hex-encoding": "^2.0.0", - "@smithy/util-middleware": "^2.0.0", - "@smithy/util-uri-escape": "^2.0.0", - "@smithy/util-utf8": "^2.0.0", + "@smithy/types": "^2.3.2", "tslib": "^2.5.0" }, "engines": { @@ -2068,13 +1799,13 @@ } }, "node_modules/@aws-sdk/client-personalize/node_modules/@smithy/smithy-client": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/@smithy/smithy-client/-/smithy-client-2.1.2.tgz", - "integrity": "sha512-quUuJ0SsqgG7Flopvfd8iQJLhHfnMYtYPuvImVQzPHXtqUQImtVz5msudMxW3t3jl+L0w8RlR+IN2zT6UqCJ6g==", + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@smithy/smithy-client/-/smithy-client-2.1.5.tgz", + "integrity": "sha512-7S865uKzsxApM8W8Q6zkij7tcUFgaG8PuADMFdMt1yL/ku3d0+s6Zwrg3N7iXCPM08Gu/mf0BIfTXIu/9i450Q==", "dependencies": { - "@smithy/middleware-stack": "^2.0.0", - "@smithy/types": "^2.3.0", - "@smithy/util-stream": "^2.0.8", + "@smithy/middleware-stack": "^2.0.1", + "@smithy/types": "^2.3.2", + "@smithy/util-stream": "^2.0.11", "tslib": "^2.5.0" }, "engines": { @@ -2082,9 +1813,9 @@ } }, "node_modules/@aws-sdk/client-personalize/node_modules/@smithy/types": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/@smithy/types/-/types-2.3.0.tgz", - "integrity": "sha512-pJce3rd39MElkV57UTPAoSYAApjQLELUxjU5adHNLYk9gnPvyIGbJNJTZVVFu00BrgZH3W/cQe8QuFcknDyodQ==", + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-2.3.2.tgz", + "integrity": "sha512-iH0cdKi7HQlzfAM3w2shFk/qZYKAqJWswtpmQpPtlruF+uFZeGEpMJjgDRyhWiddfVM4e2oP4nMaOBsMy6lXgg==", "dependencies": { "tslib": "^2.5.0" }, @@ -2093,12 +1824,12 @@ } }, "node_modules/@aws-sdk/client-personalize/node_modules/@smithy/url-parser": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/@smithy/url-parser/-/url-parser-2.0.6.tgz", - "integrity": "sha512-9i6j5QW6bapHZ4rtkXOAm0hOUG1+5IVdVJXNSUTcNskwJchZH5IQuDNPCbgUi/u2P8EZazKt4wXT51QxOXCz1A==", + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/@smithy/url-parser/-/url-parser-2.0.8.tgz", + "integrity": "sha512-wQw7j004ScCrBRJ+oNPXlLE9mtofxyadSZ9D8ov/rHkyurS7z1HTNuyaGRj6OvKsEk0SVQsuY0C9+EfM75XTkw==", "dependencies": { - "@smithy/querystring-parser": "^2.0.6", - "@smithy/types": "^2.3.0", + "@smithy/querystring-parser": "^2.0.8", + "@smithy/types": "^2.3.2", "tslib": "^2.5.0" } }, @@ -2157,12 +1888,13 @@ } }, "node_modules/@aws-sdk/client-personalize/node_modules/@smithy/util-defaults-mode-browser": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-browser/-/util-defaults-mode-browser-2.0.7.tgz", - "integrity": "sha512-s1caKxC7Y87Q72Goll//clZs2WNBfG9WtFDWVRS+Qgk147YPCOUYtkpuD0XZAh/vbayObFz5tQ1fiX4G19HSCA==", + "version": "2.0.9", + "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-browser/-/util-defaults-mode-browser-2.0.9.tgz", + "integrity": "sha512-JONLJVQWT8165XoSV36ERn3SVlZLJJ4D6IeGsCSePv65Uxa93pzSLE0UMSR9Jwm4zix7rst9AS8W5QIypZWP8Q==", "dependencies": { - "@smithy/property-provider": "^2.0.7", - "@smithy/types": "^2.3.0", + "@smithy/property-provider": "^2.0.9", + "@smithy/smithy-client": "^2.1.5", + "@smithy/types": "^2.3.2", "bowser": "^2.11.0", "tslib": "^2.5.0" }, @@ -2171,15 +1903,16 @@ } }, "node_modules/@aws-sdk/client-personalize/node_modules/@smithy/util-defaults-mode-node": { - "version": "2.0.9", - "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-node/-/util-defaults-mode-node-2.0.9.tgz", - "integrity": "sha512-HlV4iNL3/PgPpmDGs0+XrAKtwFQ8rOs5P2y5Dye8dUYaJauadlzHRrNKk7wH2aBYswvT2HM+PIgXamvrE7xbcw==", - "dependencies": { - "@smithy/config-resolver": "^2.0.7", - "@smithy/credential-provider-imds": "^2.0.9", - "@smithy/node-config-provider": "^2.0.9", - "@smithy/property-provider": "^2.0.7", - "@smithy/types": "^2.3.0", + "version": "2.0.11", + "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-node/-/util-defaults-mode-node-2.0.11.tgz", + "integrity": "sha512-tmqjNsfj+bgZN6jXBe6efZnukzILA7BUytHkzqikuRLNtR+0VVchQHvawD0w6vManh76rO81ydhioe7i4oBzuA==", + "dependencies": { + "@smithy/config-resolver": "^2.0.9", + "@smithy/credential-provider-imds": "^2.0.11", + "@smithy/node-config-provider": "^2.0.11", + "@smithy/property-provider": "^2.0.9", + "@smithy/smithy-client": "^2.1.5", + "@smithy/types": "^2.3.2", "tslib": "^2.5.0" }, "engines": { @@ -2198,10 +1931,11 @@ } }, "node_modules/@aws-sdk/client-personalize/node_modules/@smithy/util-middleware": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@smithy/util-middleware/-/util-middleware-2.0.0.tgz", - "integrity": "sha512-eCWX4ECuDHn1wuyyDdGdUWnT4OGyIzV0LN1xRttBFMPI9Ff/4heSHVxneyiMtOB//zpXWCha1/SWHJOZstG7kA==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@smithy/util-middleware/-/util-middleware-2.0.1.tgz", + "integrity": "sha512-LnsBMi0Mg3gfz/TpNGLv2Jjcz2ra1OX5HR/4IaCepIYmtPQzqMWDdhX/XTW1LS8OZ0xbQuyQPcHkQ+2XkhWOVQ==", "dependencies": { + "@smithy/types": "^2.3.2", "tslib": "^2.5.0" }, "engines": { @@ -2209,11 +1943,12 @@ } }, "node_modules/@aws-sdk/client-personalize/node_modules/@smithy/util-retry": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@smithy/util-retry/-/util-retry-2.0.0.tgz", - "integrity": "sha512-/dvJ8afrElasuiiIttRJeoS2sy8YXpksQwiM/TcepqdRVp7u4ejd9C4IQURHNjlfPUT7Y6lCDSa2zQJbdHhVTg==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@smithy/util-retry/-/util-retry-2.0.1.tgz", + "integrity": "sha512-naj4X0IafJ9yJnVJ58QgSMkCNLjyQOnyrnKh/T0f+0UOUxJiT8vuFn/hS7B/pNqbo2STY7PyJ4J4f+5YqxwNtA==", "dependencies": { - "@smithy/service-error-classification": "^2.0.0", + "@smithy/service-error-classification": "^2.0.1", + "@smithy/types": "^2.3.2", "tslib": "^2.5.0" }, "engines": { @@ -2221,13 +1956,13 @@ } }, "node_modules/@aws-sdk/client-personalize/node_modules/@smithy/util-stream": { - "version": "2.0.8", - "resolved": "https://registry.npmjs.org/@smithy/util-stream/-/util-stream-2.0.8.tgz", - "integrity": "sha512-1JoSHL/AOFRo/RVYdbOOGG5qSkU1IQN+F0f3HOZcwvGeGT5KnGwd4hLzmr0qkjKh4PW7nzuvPMdR7L8THV24Hw==", + "version": "2.0.11", + "resolved": "https://registry.npmjs.org/@smithy/util-stream/-/util-stream-2.0.11.tgz", + "integrity": "sha512-2MeWfqSpZKdmEJ+tH8CJQSgzLWhH5cmdE24X7JB0hiamXrOmswWGGuPvyj/9sQCTclo57pNxLR2p7KrP8Ahiyg==", "dependencies": { - "@smithy/fetch-http-handler": "^2.1.2", - "@smithy/node-http-handler": "^2.1.2", - "@smithy/types": "^2.3.0", + "@smithy/fetch-http-handler": "^2.1.4", + "@smithy/node-http-handler": "^2.1.4", + "@smithy/types": "^2.3.2", "@smithy/util-base64": "^2.0.0", "@smithy/util-buffer-from": "^2.0.0", "@smithy/util-hex-encoding": "^2.0.0", @@ -2715,117 +2450,123 @@ } } }, - "node_modules/@aws-sdk/credential-provider-cognito-identity": { - "version": "3.391.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-cognito-identity/-/credential-provider-cognito-identity-3.391.0.tgz", - "integrity": "sha512-60B2WDGJOijluCzeTQDzPWgGuAhYKTcYnK5fNMi9xzHBqw+IhPaGYcmAx1bQGY7SuoZBqVgt1h6fiNxY8TWO5w==", + "node_modules/@aws-sdk/client-sso": { + "version": "3.414.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso/-/client-sso-3.414.0.tgz", + "integrity": "sha512-GvRwQ7wA3edzsQEKS70ZPhkOUZ62PAiXasjp6GxrsADEb8sV1z4FxXNl9Un/7fQxKkh9QYaK1Wu1PmhLi9MLMg==", "dependencies": { - "@aws-sdk/client-cognito-identity": "3.391.0", - "@aws-sdk/types": "3.391.0", - "@smithy/property-provider": "^2.0.0", - "@smithy/types": "^2.2.0", + "@aws-crypto/sha256-browser": "3.0.0", + "@aws-crypto/sha256-js": "3.0.0", + "@aws-sdk/middleware-host-header": "3.413.0", + "@aws-sdk/middleware-logger": "3.413.0", + "@aws-sdk/middleware-recursion-detection": "3.413.0", + "@aws-sdk/middleware-user-agent": "3.413.0", + "@aws-sdk/region-config-resolver": "3.413.0", + "@aws-sdk/types": "3.413.0", + "@aws-sdk/util-endpoints": "3.413.0", + "@aws-sdk/util-user-agent-browser": "3.413.0", + "@aws-sdk/util-user-agent-node": "3.413.0", + "@smithy/config-resolver": "^2.0.8", + "@smithy/fetch-http-handler": "^2.1.3", + "@smithy/hash-node": "^2.0.7", + "@smithy/invalid-dependency": "^2.0.7", + "@smithy/middleware-content-length": "^2.0.9", + "@smithy/middleware-endpoint": "^2.0.7", + "@smithy/middleware-retry": "^2.0.10", + "@smithy/middleware-serde": "^2.0.7", + "@smithy/middleware-stack": "^2.0.0", + "@smithy/node-config-provider": "^2.0.10", + "@smithy/node-http-handler": "^2.1.3", + "@smithy/protocol-http": "^3.0.3", + "@smithy/smithy-client": "^2.1.4", + "@smithy/types": "^2.3.1", + "@smithy/url-parser": "^2.0.7", + "@smithy/util-base64": "^2.0.0", + "@smithy/util-body-length-browser": "^2.0.0", + "@smithy/util-body-length-node": "^2.1.0", + "@smithy/util-defaults-mode-browser": "^2.0.8", + "@smithy/util-defaults-mode-node": "^2.0.10", + "@smithy/util-retry": "^2.0.0", + "@smithy/util-utf8": "^2.0.0", "tslib": "^2.5.0" }, "engines": { "node": ">=14.0.0" } }, - "node_modules/@aws-sdk/credential-provider-cognito-identity/node_modules/@aws-sdk/types": { - "version": "3.391.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.391.0.tgz", - "integrity": "sha512-QpYVFKMOnzHz/JMj/b8wb18qxiT92U/5r5MmtRz2R3LOH6ooTO96k4ozXCrYr0qNed1PAnOj73rPrrH2wnCJKQ==", + "node_modules/@aws-sdk/client-sso/node_modules/@aws-sdk/types": { + "version": "3.413.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.413.0.tgz", + "integrity": "sha512-j1xib0f/TazIFc5ySIKOlT1ujntRbaoG4LJFeEezz4ji03/wSJMI8Vi4KjzpBp8J1tTu0oRDnsxRIGixsUBeYQ==", "dependencies": { - "@smithy/types": "^2.2.0", + "@smithy/types": "^2.3.1", "tslib": "^2.5.0" }, "engines": { "node": ">=14.0.0" } }, - "node_modules/@aws-sdk/credential-provider-cognito-identity/node_modules/@smithy/property-provider": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/@smithy/property-provider/-/property-provider-2.0.7.tgz", - "integrity": "sha512-XT8Tl7YNxM8tCtGqy7v7DSf6PxyXaPE9cdA/Yj4dEw2b05V3RrPqsP+t5XJiZu0yIsQ7pdeYZWv2sSEWVjNeAg==", + "node_modules/@aws-sdk/client-sso/node_modules/@smithy/abort-controller": { + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/@smithy/abort-controller/-/abort-controller-2.0.8.tgz", + "integrity": "sha512-2SOdVj5y0zE37Y9scSXoizoxgi6mgnDabi7a/SOfhl0p+50I0rIkuJTfyAuTPDtQ7e5dD6tSZPCLB3c/YM6Zig==", "dependencies": { - "@smithy/types": "^2.3.0", + "@smithy/types": "^2.3.2", "tslib": "^2.5.0" }, "engines": { "node": ">=14.0.0" } }, - "node_modules/@aws-sdk/credential-provider-cognito-identity/node_modules/@smithy/types": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/@smithy/types/-/types-2.3.0.tgz", - "integrity": "sha512-pJce3rd39MElkV57UTPAoSYAApjQLELUxjU5adHNLYk9gnPvyIGbJNJTZVVFu00BrgZH3W/cQe8QuFcknDyodQ==", + "node_modules/@aws-sdk/client-sso/node_modules/@smithy/config-resolver": { + "version": "2.0.9", + "resolved": "https://registry.npmjs.org/@smithy/config-resolver/-/config-resolver-2.0.9.tgz", + "integrity": "sha512-QBkGPLUqyPmis9Erz8v4q5lo/ErnF7+GD5WZHa6JZiXopUPfaaM+B21n8gzS5xCkIXZmnwzNQhObP9xQPu8oqQ==", "dependencies": { + "@smithy/node-config-provider": "^2.0.11", + "@smithy/types": "^2.3.2", + "@smithy/util-config-provider": "^2.0.0", + "@smithy/util-middleware": "^2.0.1", "tslib": "^2.5.0" }, "engines": { "node": ">=14.0.0" } }, - "node_modules/@aws-sdk/credential-providers": { - "version": "3.391.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-providers/-/credential-providers-3.391.0.tgz", - "integrity": "sha512-J2fh74zUC3qZnbZol95T9w9PTgmx9NfyIy5JVs43rISdvgnAkD9fXd6YbBfQOxl9Xx9HiZW7Fa3hTxma7d/zlA==", - "dependencies": { - "@aws-sdk/client-cognito-identity": "3.391.0", - "@aws-sdk/client-sso": "3.391.0", - "@aws-sdk/client-sts": "3.391.0", - "@aws-sdk/credential-provider-cognito-identity": "3.391.0", - "@aws-sdk/credential-provider-env": "3.391.0", - "@aws-sdk/credential-provider-ini": "3.391.0", - "@aws-sdk/credential-provider-node": "3.391.0", - "@aws-sdk/credential-provider-process": "3.391.0", - "@aws-sdk/credential-provider-sso": "3.391.0", - "@aws-sdk/credential-provider-web-identity": "3.391.0", - "@aws-sdk/types": "3.391.0", - "@smithy/credential-provider-imds": "^2.0.0", - "@smithy/property-provider": "^2.0.0", - "@smithy/types": "^2.2.0", + "node_modules/@aws-sdk/client-sso/node_modules/@smithy/credential-provider-imds": { + "version": "2.0.11", + "resolved": "https://registry.npmjs.org/@smithy/credential-provider-imds/-/credential-provider-imds-2.0.11.tgz", + "integrity": "sha512-uJJs8dnM5iXkn8a2GaKvlKMhcOJ+oJPYqY9gY3CM/EieCVObIDjxUtR/g8lU/k/A+OauA78GzScAfulmFjPOYA==", + "dependencies": { + "@smithy/node-config-provider": "^2.0.11", + "@smithy/property-provider": "^2.0.9", + "@smithy/types": "^2.3.2", + "@smithy/url-parser": "^2.0.8", "tslib": "^2.5.0" }, "engines": { "node": ">=14.0.0" } }, - "node_modules/@aws-sdk/credential-providers/node_modules/@aws-sdk/client-sso": { - "version": "3.391.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso/-/client-sso-3.391.0.tgz", - "integrity": "sha512-aT+O1CbWIWYlCtWK6g3ZaMvFNImOgFGurOEPscuedqzG5UQc1bRtRrGYShLyzcZgfXP+s0cKYJqgGeRNoWiwqA==", + "node_modules/@aws-sdk/client-sso/node_modules/@smithy/fetch-http-handler": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@smithy/fetch-http-handler/-/fetch-http-handler-2.1.4.tgz", + "integrity": "sha512-SL24M9W5ERByoXaVicRx+bj9GJVujDnPn+QO7GY7adhY0mPGa6DSF58pVKsgIh4r5Tx/k3SWCPlH4BxxSxA/fQ==", "dependencies": { - "@aws-crypto/sha256-browser": "3.0.0", - "@aws-crypto/sha256-js": "3.0.0", - "@aws-sdk/middleware-host-header": "3.391.0", - "@aws-sdk/middleware-logger": "3.391.0", - "@aws-sdk/middleware-recursion-detection": "3.391.0", - "@aws-sdk/middleware-user-agent": "3.391.0", - "@aws-sdk/types": "3.391.0", - "@aws-sdk/util-endpoints": "3.391.0", - "@aws-sdk/util-user-agent-browser": "3.391.0", - "@aws-sdk/util-user-agent-node": "3.391.0", - "@smithy/config-resolver": "^2.0.3", - "@smithy/fetch-http-handler": "^2.0.3", - "@smithy/hash-node": "^2.0.3", - "@smithy/invalid-dependency": "^2.0.3", - "@smithy/middleware-content-length": "^2.0.3", - "@smithy/middleware-endpoint": "^2.0.3", - "@smithy/middleware-retry": "^2.0.3", - "@smithy/middleware-serde": "^2.0.3", - "@smithy/middleware-stack": "^2.0.0", - "@smithy/node-config-provider": "^2.0.3", - "@smithy/node-http-handler": "^2.0.3", - "@smithy/protocol-http": "^2.0.3", - "@smithy/smithy-client": "^2.0.3", - "@smithy/types": "^2.2.0", - "@smithy/url-parser": "^2.0.3", + "@smithy/protocol-http": "^3.0.4", + "@smithy/querystring-builder": "^2.0.8", + "@smithy/types": "^2.3.2", "@smithy/util-base64": "^2.0.0", - "@smithy/util-body-length-browser": "^2.0.0", - "@smithy/util-body-length-node": "^2.0.0", - "@smithy/util-defaults-mode-browser": "^2.0.3", - "@smithy/util-defaults-mode-node": "^2.0.3", - "@smithy/util-retry": "^2.0.0", + "tslib": "^2.5.0" + } + }, + "node_modules/@aws-sdk/client-sso/node_modules/@smithy/hash-node": { + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/@smithy/hash-node/-/hash-node-2.0.8.tgz", + "integrity": "sha512-yZL/nmxZzjZV5/QX5JWSgXlt0HxuMTwFO89CS++jOMMPiCMZngf6VYmtNdccs8IIIAMmfQeTzwu07XgUE/Zd3Q==", + "dependencies": { + "@smithy/types": "^2.3.2", + "@smithy/util-buffer-from": "^2.0.0", "@smithy/util-utf8": "^2.0.0", "tslib": "^2.5.0" }, @@ -2833,540 +2574,2167 @@ "node": ">=14.0.0" } }, - "node_modules/@aws-sdk/credential-providers/node_modules/@aws-sdk/client-sts": { - "version": "3.391.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-sts/-/client-sts-3.391.0.tgz", - "integrity": "sha512-y+KmorcUx9o5O99sXVPbhGUpsLpfhzYRaYCqxArLsyzZTCO6XDXMi8vg/xtS+b703j9lWEl5GxAv2oBaEwEnhQ==", + "node_modules/@aws-sdk/client-sso/node_modules/@smithy/invalid-dependency": { + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/@smithy/invalid-dependency/-/invalid-dependency-2.0.8.tgz", + "integrity": "sha512-88VOS7W3KzUz/bNRc+Sl/F/CDIasFspEE4G39YZRHIh9YmsXF7GUyVaAKURfMNulTie62ayk6BHC9O0nOBAVgQ==", + "dependencies": { + "@smithy/types": "^2.3.2", + "tslib": "^2.5.0" + } + }, + "node_modules/@aws-sdk/client-sso/node_modules/@smithy/is-array-buffer": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-2.0.0.tgz", + "integrity": "sha512-z3PjFjMyZNI98JFRJi/U0nGoLWMSJlDjAW4QUX2WNZLas5C0CmVV6LJ01JI0k90l7FvpmixjWxPFmENSClQ7ug==", "dependencies": { - "@aws-crypto/sha256-browser": "3.0.0", - "@aws-crypto/sha256-js": "3.0.0", - "@aws-sdk/credential-provider-node": "3.391.0", - "@aws-sdk/middleware-host-header": "3.391.0", - "@aws-sdk/middleware-logger": "3.391.0", - "@aws-sdk/middleware-recursion-detection": "3.391.0", - "@aws-sdk/middleware-sdk-sts": "3.391.0", - "@aws-sdk/middleware-signing": "3.391.0", - "@aws-sdk/middleware-user-agent": "3.391.0", - "@aws-sdk/types": "3.391.0", - "@aws-sdk/util-endpoints": "3.391.0", - "@aws-sdk/util-user-agent-browser": "3.391.0", - "@aws-sdk/util-user-agent-node": "3.391.0", - "@smithy/config-resolver": "^2.0.3", - "@smithy/fetch-http-handler": "^2.0.3", - "@smithy/hash-node": "^2.0.3", - "@smithy/invalid-dependency": "^2.0.3", - "@smithy/middleware-content-length": "^2.0.3", - "@smithy/middleware-endpoint": "^2.0.3", - "@smithy/middleware-retry": "^2.0.3", - "@smithy/middleware-serde": "^2.0.3", - "@smithy/middleware-stack": "^2.0.0", - "@smithy/node-config-provider": "^2.0.3", - "@smithy/node-http-handler": "^2.0.3", - "@smithy/protocol-http": "^2.0.3", - "@smithy/smithy-client": "^2.0.3", - "@smithy/types": "^2.2.0", - "@smithy/url-parser": "^2.0.3", - "@smithy/util-base64": "^2.0.0", - "@smithy/util-body-length-browser": "^2.0.0", - "@smithy/util-body-length-node": "^2.0.0", - "@smithy/util-defaults-mode-browser": "^2.0.3", - "@smithy/util-defaults-mode-node": "^2.0.3", - "@smithy/util-retry": "^2.0.0", - "@smithy/util-utf8": "^2.0.0", - "fast-xml-parser": "4.2.5", "tslib": "^2.5.0" }, "engines": { "node": ">=14.0.0" } }, - "node_modules/@aws-sdk/credential-providers/node_modules/@aws-sdk/credential-provider-env": { - "version": "3.391.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-env/-/credential-provider-env-3.391.0.tgz", - "integrity": "sha512-mAzICedcg4bfL0mM5O6QTd9mQ331NLse1DMr6XL21ZZiLB48ej19L7AGV2xq5QwVbqKU3IVv1myRyhvpDM9jMg==", + "node_modules/@aws-sdk/client-sso/node_modules/@smithy/middleware-content-length": { + "version": "2.0.10", + "resolved": "https://registry.npmjs.org/@smithy/middleware-content-length/-/middleware-content-length-2.0.10.tgz", + "integrity": "sha512-EGSbysyA4jH0p3xI6G0jdXoj9Iz9GUnAta6aEaHtXm3wVWtenRf80y2TeVvNkVSr5jwKOdSCjKIRI2l1A/oZLA==", "dependencies": { - "@aws-sdk/types": "3.391.0", - "@smithy/property-provider": "^2.0.0", - "@smithy/types": "^2.2.0", + "@smithy/protocol-http": "^3.0.4", + "@smithy/types": "^2.3.2", "tslib": "^2.5.0" }, "engines": { "node": ">=14.0.0" } }, - "node_modules/@aws-sdk/credential-providers/node_modules/@aws-sdk/credential-provider-ini": { - "version": "3.391.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.391.0.tgz", - "integrity": "sha512-DJZmbmRMqNSfSV7UF8eBVhADz16KAMCTxnFuvgioHHfYUTZQEhCxRHI8jJqYWxhLTriS7AuTBIWr+1AIbwsCTA==", + "node_modules/@aws-sdk/client-sso/node_modules/@smithy/middleware-endpoint": { + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/@smithy/middleware-endpoint/-/middleware-endpoint-2.0.8.tgz", + "integrity": "sha512-yOpogfG2d2V0cbJdAJ6GLAWkNOc9pVsL5hZUfXcxJu408N3CUCsXzIAFF6+70ZKSE+lCfG3GFErcSXv/UfUbjw==", "dependencies": { - "@aws-sdk/credential-provider-env": "3.391.0", - "@aws-sdk/credential-provider-process": "3.391.0", - "@aws-sdk/credential-provider-sso": "3.391.0", - "@aws-sdk/credential-provider-web-identity": "3.391.0", - "@aws-sdk/types": "3.391.0", - "@smithy/credential-provider-imds": "^2.0.0", - "@smithy/property-provider": "^2.0.0", - "@smithy/shared-ini-file-loader": "^2.0.0", - "@smithy/types": "^2.2.0", + "@smithy/middleware-serde": "^2.0.8", + "@smithy/types": "^2.3.2", + "@smithy/url-parser": "^2.0.8", + "@smithy/util-middleware": "^2.0.1", "tslib": "^2.5.0" }, "engines": { "node": ">=14.0.0" } }, - "node_modules/@aws-sdk/credential-providers/node_modules/@aws-sdk/credential-provider-node": { - "version": "3.391.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.391.0.tgz", - "integrity": "sha512-LXHQwsTw4WBwRzD9swu8254Hao5MoIaGXIzbhX4EQ84dtOkKYbwiY4pDpLfcHcw3B1lFKkVclMze8WAs4EdEww==", + "node_modules/@aws-sdk/client-sso/node_modules/@smithy/middleware-retry": { + "version": "2.0.11", + "resolved": "https://registry.npmjs.org/@smithy/middleware-retry/-/middleware-retry-2.0.11.tgz", + "integrity": "sha512-pknfokumZ+wvBERSuKAI2vVr+aK3ZgPiWRg6+0ZG4kKJogBRpPmDGWw+Jht0izS9ZaEbIobNzueIb4wD33JJVg==", "dependencies": { - "@aws-sdk/credential-provider-env": "3.391.0", - "@aws-sdk/credential-provider-ini": "3.391.0", - "@aws-sdk/credential-provider-process": "3.391.0", - "@aws-sdk/credential-provider-sso": "3.391.0", - "@aws-sdk/credential-provider-web-identity": "3.391.0", - "@aws-sdk/types": "3.391.0", - "@smithy/credential-provider-imds": "^2.0.0", - "@smithy/property-provider": "^2.0.0", - "@smithy/shared-ini-file-loader": "^2.0.0", - "@smithy/types": "^2.2.0", + "@smithy/node-config-provider": "^2.0.11", + "@smithy/protocol-http": "^3.0.4", + "@smithy/service-error-classification": "^2.0.1", + "@smithy/types": "^2.3.2", + "@smithy/util-middleware": "^2.0.1", + "@smithy/util-retry": "^2.0.1", + "tslib": "^2.5.0", + "uuid": "^8.3.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-sso/node_modules/@smithy/middleware-serde": { + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/@smithy/middleware-serde/-/middleware-serde-2.0.8.tgz", + "integrity": "sha512-Is0sm+LiNlgsc0QpstDzifugzL9ehno1wXp109GgBgpnKTK3j+KphiparBDI4hWTtH9/7OUsxuspNqai2yyhcg==", + "dependencies": { + "@smithy/types": "^2.3.2", "tslib": "^2.5.0" }, "engines": { "node": ">=14.0.0" } }, - "node_modules/@aws-sdk/credential-providers/node_modules/@aws-sdk/credential-provider-process": { - "version": "3.391.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-process/-/credential-provider-process-3.391.0.tgz", - "integrity": "sha512-KMlzPlBI+hBmXDo+EoFZdLgCVRkRa9B9iEE6x0+hQQ6g9bW6HI7cDRVdceR1ZoPasSaNAZ9QOXMTIBxTpn0sPQ==", + "node_modules/@aws-sdk/client-sso/node_modules/@smithy/middleware-stack": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@smithy/middleware-stack/-/middleware-stack-2.0.1.tgz", + "integrity": "sha512-UexsfY6/oQZRjTQL56s9AKtMcR60tBNibSgNYX1I2WXaUaXg97W9JCkFyth85TzBWKDBTyhLfenrukS/kyu54A==", "dependencies": { - "@aws-sdk/types": "3.391.0", - "@smithy/property-provider": "^2.0.0", - "@smithy/shared-ini-file-loader": "^2.0.0", - "@smithy/types": "^2.2.0", + "@smithy/types": "^2.3.2", "tslib": "^2.5.0" }, "engines": { "node": ">=14.0.0" } }, - "node_modules/@aws-sdk/credential-providers/node_modules/@aws-sdk/credential-provider-sso": { - "version": "3.391.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.391.0.tgz", - "integrity": "sha512-FT/WoiRHiKys+FcRwvjui0yKuzNtJdn2uGuI1hYE0gpW1wVmW02ouufLckJTmcw09THUZ4w53OoCVU5OY00p8A==", + "node_modules/@aws-sdk/client-sso/node_modules/@smithy/node-config-provider": { + "version": "2.0.11", + "resolved": "https://registry.npmjs.org/@smithy/node-config-provider/-/node-config-provider-2.0.11.tgz", + "integrity": "sha512-CaR1dciSSGKttjhcefpytYjsfI/Yd5mqL8am4wfmyFCDxSiPsvnEWHl8UjM/RbcAjX0klt+CeIKPSHEc0wGvJA==", "dependencies": { - "@aws-sdk/client-sso": "3.391.0", - "@aws-sdk/token-providers": "3.391.0", - "@aws-sdk/types": "3.391.0", - "@smithy/property-provider": "^2.0.0", - "@smithy/shared-ini-file-loader": "^2.0.0", - "@smithy/types": "^2.2.0", + "@smithy/property-provider": "^2.0.9", + "@smithy/shared-ini-file-loader": "^2.0.10", + "@smithy/types": "^2.3.2", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-sso/node_modules/@smithy/node-http-handler": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@smithy/node-http-handler/-/node-http-handler-2.1.4.tgz", + "integrity": "sha512-8Rw/AusvWDyC6SK8esAcVBeTlQHf94NMFv805suFUJCQ2gwlh0oLDNh+6s2MDOrxcjvLxjjzv1mytM0Mt+0cPQ==", + "dependencies": { + "@smithy/abort-controller": "^2.0.8", + "@smithy/protocol-http": "^3.0.4", + "@smithy/querystring-builder": "^2.0.8", + "@smithy/types": "^2.3.2", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-sso/node_modules/@smithy/property-provider": { + "version": "2.0.9", + "resolved": "https://registry.npmjs.org/@smithy/property-provider/-/property-provider-2.0.9.tgz", + "integrity": "sha512-25pPZ8f8DeRwYI5wbPRZaoMoR+3vrw8DwbA0TjP+GsdiB2KxScndr4HQehiJ5+WJ0giOTWhLz0bd+7Djv1qpUQ==", + "dependencies": { + "@smithy/types": "^2.3.2", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-sso/node_modules/@smithy/protocol-http": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-3.0.4.tgz", + "integrity": "sha512-CGfSWk6TRlbwa8YgrSXdn80Yu7pov3EV/h7TSfiCHhq6/LO3WymmqnzgH1f0qV2bdTDipIkTNp5dGCGN3Af/5g==", + "dependencies": { + "@smithy/types": "^2.3.2", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-sso/node_modules/@smithy/querystring-builder": { + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/@smithy/querystring-builder/-/querystring-builder-2.0.8.tgz", + "integrity": "sha512-+vzIMwjC8Saz97/ptPn+IJRCRRZ+pP95ZIWDRqEqZV/a6hiKbaFoMSa2iCKsnKzR696U2JZXrDqMu3e/FD1+2g==", + "dependencies": { + "@smithy/types": "^2.3.2", + "@smithy/util-uri-escape": "^2.0.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-sso/node_modules/@smithy/querystring-parser": { + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/@smithy/querystring-parser/-/querystring-parser-2.0.8.tgz", + "integrity": "sha512-ArbanNuR7O/MmTd90ZqhDqGOPPDYmxx3huHxD+R3cuCnazcK/1tGQA+SnnR5307T7ZRb5WTpB6qBggERuibVSA==", + "dependencies": { + "@smithy/types": "^2.3.2", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-sso/node_modules/@smithy/service-error-classification": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@smithy/service-error-classification/-/service-error-classification-2.0.1.tgz", + "integrity": "sha512-QHa9+t+v4s0cMuDCcbjIJN67mNZ42/+fc3jKe8P6ZMPXZl5ksKk6a8vhZ/m494GZng5eFTc3OePv+NF9cG83yg==", + "dependencies": { + "@smithy/types": "^2.3.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-sso/node_modules/@smithy/shared-ini-file-loader": { + "version": "2.0.10", + "resolved": "https://registry.npmjs.org/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-2.0.10.tgz", + "integrity": "sha512-jWASteSezRKohJ7GdA7pHDvmr7Q7tw3b5mu3xLHIkZy/ICftJ+O7aqNaF8wklhI7UNFoQ7flFRM3Rd0KA+1BbQ==", + "dependencies": { + "@smithy/types": "^2.3.2", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-sso/node_modules/@smithy/smithy-client": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@smithy/smithy-client/-/smithy-client-2.1.5.tgz", + "integrity": "sha512-7S865uKzsxApM8W8Q6zkij7tcUFgaG8PuADMFdMt1yL/ku3d0+s6Zwrg3N7iXCPM08Gu/mf0BIfTXIu/9i450Q==", + "dependencies": { + "@smithy/middleware-stack": "^2.0.1", + "@smithy/types": "^2.3.2", + "@smithy/util-stream": "^2.0.11", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-sso/node_modules/@smithy/types": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-2.3.2.tgz", + "integrity": "sha512-iH0cdKi7HQlzfAM3w2shFk/qZYKAqJWswtpmQpPtlruF+uFZeGEpMJjgDRyhWiddfVM4e2oP4nMaOBsMy6lXgg==", + "dependencies": { + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-sso/node_modules/@smithy/url-parser": { + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/@smithy/url-parser/-/url-parser-2.0.8.tgz", + "integrity": "sha512-wQw7j004ScCrBRJ+oNPXlLE9mtofxyadSZ9D8ov/rHkyurS7z1HTNuyaGRj6OvKsEk0SVQsuY0C9+EfM75XTkw==", + "dependencies": { + "@smithy/querystring-parser": "^2.0.8", + "@smithy/types": "^2.3.2", + "tslib": "^2.5.0" + } + }, + "node_modules/@aws-sdk/client-sso/node_modules/@smithy/util-base64": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-base64/-/util-base64-2.0.0.tgz", + "integrity": "sha512-Zb1E4xx+m5Lud8bbeYi5FkcMJMnn+1WUnJF3qD7rAdXpaL7UjkFQLdmW5fHadoKbdHpwH9vSR8EyTJFHJs++tA==", + "dependencies": { + "@smithy/util-buffer-from": "^2.0.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-sso/node_modules/@smithy/util-body-length-browser": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-body-length-browser/-/util-body-length-browser-2.0.0.tgz", + "integrity": "sha512-JdDuS4ircJt+FDnaQj88TzZY3+njZ6O+D3uakS32f2VNnDo3vyEuNdBOh/oFd8Df1zSZOuH1HEChk2AOYDezZg==", + "dependencies": { + "tslib": "^2.5.0" + } + }, + "node_modules/@aws-sdk/client-sso/node_modules/@smithy/util-body-length-node": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@smithy/util-body-length-node/-/util-body-length-node-2.1.0.tgz", + "integrity": "sha512-/li0/kj/y3fQ3vyzn36NTLGmUwAICb7Jbe/CsWCktW363gh1MOcpEcSO3mJ344Gv2dqz8YJCLQpb6hju/0qOWw==", + "dependencies": { + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-sso/node_modules/@smithy/util-buffer-from": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-2.0.0.tgz", + "integrity": "sha512-/YNnLoHsR+4W4Vf2wL5lGv0ksg8Bmk3GEGxn2vEQt52AQaPSCuaO5PM5VM7lP1K9qHRKHwrPGktqVoAHKWHxzw==", + "dependencies": { + "@smithy/is-array-buffer": "^2.0.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-sso/node_modules/@smithy/util-config-provider": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-config-provider/-/util-config-provider-2.0.0.tgz", + "integrity": "sha512-xCQ6UapcIWKxXHEU4Mcs2s7LcFQRiU3XEluM2WcCjjBtQkUN71Tb+ydGmJFPxMUrW/GWMgQEEGipLym4XG0jZg==", + "dependencies": { + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-sso/node_modules/@smithy/util-defaults-mode-browser": { + "version": "2.0.9", + "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-browser/-/util-defaults-mode-browser-2.0.9.tgz", + "integrity": "sha512-JONLJVQWT8165XoSV36ERn3SVlZLJJ4D6IeGsCSePv65Uxa93pzSLE0UMSR9Jwm4zix7rst9AS8W5QIypZWP8Q==", + "dependencies": { + "@smithy/property-provider": "^2.0.9", + "@smithy/smithy-client": "^2.1.5", + "@smithy/types": "^2.3.2", + "bowser": "^2.11.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/@aws-sdk/client-sso/node_modules/@smithy/util-defaults-mode-node": { + "version": "2.0.11", + "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-node/-/util-defaults-mode-node-2.0.11.tgz", + "integrity": "sha512-tmqjNsfj+bgZN6jXBe6efZnukzILA7BUytHkzqikuRLNtR+0VVchQHvawD0w6vManh76rO81ydhioe7i4oBzuA==", + "dependencies": { + "@smithy/config-resolver": "^2.0.9", + "@smithy/credential-provider-imds": "^2.0.11", + "@smithy/node-config-provider": "^2.0.11", + "@smithy/property-provider": "^2.0.9", + "@smithy/smithy-client": "^2.1.5", + "@smithy/types": "^2.3.2", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/@aws-sdk/client-sso/node_modules/@smithy/util-hex-encoding": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-hex-encoding/-/util-hex-encoding-2.0.0.tgz", + "integrity": "sha512-c5xY+NUnFqG6d7HFh1IFfrm3mGl29lC+vF+geHv4ToiuJCBmIfzx6IeHLg+OgRdPFKDXIw6pvi+p3CsscaMcMA==", + "dependencies": { + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-sso/node_modules/@smithy/util-middleware": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@smithy/util-middleware/-/util-middleware-2.0.1.tgz", + "integrity": "sha512-LnsBMi0Mg3gfz/TpNGLv2Jjcz2ra1OX5HR/4IaCepIYmtPQzqMWDdhX/XTW1LS8OZ0xbQuyQPcHkQ+2XkhWOVQ==", + "dependencies": { + "@smithy/types": "^2.3.2", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-sso/node_modules/@smithy/util-retry": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@smithy/util-retry/-/util-retry-2.0.1.tgz", + "integrity": "sha512-naj4X0IafJ9yJnVJ58QgSMkCNLjyQOnyrnKh/T0f+0UOUxJiT8vuFn/hS7B/pNqbo2STY7PyJ4J4f+5YqxwNtA==", + "dependencies": { + "@smithy/service-error-classification": "^2.0.1", + "@smithy/types": "^2.3.2", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/@aws-sdk/client-sso/node_modules/@smithy/util-stream": { + "version": "2.0.11", + "resolved": "https://registry.npmjs.org/@smithy/util-stream/-/util-stream-2.0.11.tgz", + "integrity": "sha512-2MeWfqSpZKdmEJ+tH8CJQSgzLWhH5cmdE24X7JB0hiamXrOmswWGGuPvyj/9sQCTclo57pNxLR2p7KrP8Ahiyg==", + "dependencies": { + "@smithy/fetch-http-handler": "^2.1.4", + "@smithy/node-http-handler": "^2.1.4", + "@smithy/types": "^2.3.2", + "@smithy/util-base64": "^2.0.0", + "@smithy/util-buffer-from": "^2.0.0", + "@smithy/util-hex-encoding": "^2.0.0", + "@smithy/util-utf8": "^2.0.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-sso/node_modules/@smithy/util-uri-escape": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-uri-escape/-/util-uri-escape-2.0.0.tgz", + "integrity": "sha512-ebkxsqinSdEooQduuk9CbKcI+wheijxEb3utGXkCoYQkJnwTnLbH1JXGimJtUkQwNQbsbuYwG2+aFVyZf5TLaw==", + "dependencies": { + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-sso/node_modules/@smithy/util-utf8": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-2.0.0.tgz", + "integrity": "sha512-rctU1VkziY84n5OXe3bPNpKR001ZCME2JCaBBFgtiM2hfKbHFudc/BkMuPab8hRbLd0j3vbnBTTZ1igBf0wgiQ==", + "dependencies": { + "@smithy/util-buffer-from": "^2.0.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-sso/node_modules/uuid": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "node_modules/@aws-sdk/client-sts": { + "version": "3.414.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-sts/-/client-sts-3.414.0.tgz", + "integrity": "sha512-xeYH3si6Imp1EWolWn1zuxJJu2AXKwXl1HDftQULwC5AWkm1mNFbXYSJN4hQul1IM+kn+JTRB0XRHByQkKhe+Q==", + "dependencies": { + "@aws-crypto/sha256-browser": "3.0.0", + "@aws-crypto/sha256-js": "3.0.0", + "@aws-sdk/credential-provider-node": "3.414.0", + "@aws-sdk/middleware-host-header": "3.413.0", + "@aws-sdk/middleware-logger": "3.413.0", + "@aws-sdk/middleware-recursion-detection": "3.413.0", + "@aws-sdk/middleware-sdk-sts": "3.413.0", + "@aws-sdk/middleware-signing": "3.413.0", + "@aws-sdk/middleware-user-agent": "3.413.0", + "@aws-sdk/region-config-resolver": "3.413.0", + "@aws-sdk/types": "3.413.0", + "@aws-sdk/util-endpoints": "3.413.0", + "@aws-sdk/util-user-agent-browser": "3.413.0", + "@aws-sdk/util-user-agent-node": "3.413.0", + "@smithy/config-resolver": "^2.0.8", + "@smithy/fetch-http-handler": "^2.1.3", + "@smithy/hash-node": "^2.0.7", + "@smithy/invalid-dependency": "^2.0.7", + "@smithy/middleware-content-length": "^2.0.9", + "@smithy/middleware-endpoint": "^2.0.7", + "@smithy/middleware-retry": "^2.0.10", + "@smithy/middleware-serde": "^2.0.7", + "@smithy/middleware-stack": "^2.0.0", + "@smithy/node-config-provider": "^2.0.10", + "@smithy/node-http-handler": "^2.1.3", + "@smithy/protocol-http": "^3.0.3", + "@smithy/smithy-client": "^2.1.4", + "@smithy/types": "^2.3.1", + "@smithy/url-parser": "^2.0.7", + "@smithy/util-base64": "^2.0.0", + "@smithy/util-body-length-browser": "^2.0.0", + "@smithy/util-body-length-node": "^2.1.0", + "@smithy/util-defaults-mode-browser": "^2.0.8", + "@smithy/util-defaults-mode-node": "^2.0.10", + "@smithy/util-retry": "^2.0.0", + "@smithy/util-utf8": "^2.0.0", + "fast-xml-parser": "4.2.5", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-sts/node_modules/@aws-sdk/types": { + "version": "3.413.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.413.0.tgz", + "integrity": "sha512-j1xib0f/TazIFc5ySIKOlT1ujntRbaoG4LJFeEezz4ji03/wSJMI8Vi4KjzpBp8J1tTu0oRDnsxRIGixsUBeYQ==", + "dependencies": { + "@smithy/types": "^2.3.1", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-sts/node_modules/@smithy/abort-controller": { + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/@smithy/abort-controller/-/abort-controller-2.0.8.tgz", + "integrity": "sha512-2SOdVj5y0zE37Y9scSXoizoxgi6mgnDabi7a/SOfhl0p+50I0rIkuJTfyAuTPDtQ7e5dD6tSZPCLB3c/YM6Zig==", + "dependencies": { + "@smithy/types": "^2.3.2", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-sts/node_modules/@smithy/config-resolver": { + "version": "2.0.9", + "resolved": "https://registry.npmjs.org/@smithy/config-resolver/-/config-resolver-2.0.9.tgz", + "integrity": "sha512-QBkGPLUqyPmis9Erz8v4q5lo/ErnF7+GD5WZHa6JZiXopUPfaaM+B21n8gzS5xCkIXZmnwzNQhObP9xQPu8oqQ==", + "dependencies": { + "@smithy/node-config-provider": "^2.0.11", + "@smithy/types": "^2.3.2", + "@smithy/util-config-provider": "^2.0.0", + "@smithy/util-middleware": "^2.0.1", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-sts/node_modules/@smithy/credential-provider-imds": { + "version": "2.0.11", + "resolved": "https://registry.npmjs.org/@smithy/credential-provider-imds/-/credential-provider-imds-2.0.11.tgz", + "integrity": "sha512-uJJs8dnM5iXkn8a2GaKvlKMhcOJ+oJPYqY9gY3CM/EieCVObIDjxUtR/g8lU/k/A+OauA78GzScAfulmFjPOYA==", + "dependencies": { + "@smithy/node-config-provider": "^2.0.11", + "@smithy/property-provider": "^2.0.9", + "@smithy/types": "^2.3.2", + "@smithy/url-parser": "^2.0.8", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-sts/node_modules/@smithy/fetch-http-handler": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@smithy/fetch-http-handler/-/fetch-http-handler-2.1.4.tgz", + "integrity": "sha512-SL24M9W5ERByoXaVicRx+bj9GJVujDnPn+QO7GY7adhY0mPGa6DSF58pVKsgIh4r5Tx/k3SWCPlH4BxxSxA/fQ==", + "dependencies": { + "@smithy/protocol-http": "^3.0.4", + "@smithy/querystring-builder": "^2.0.8", + "@smithy/types": "^2.3.2", + "@smithy/util-base64": "^2.0.0", + "tslib": "^2.5.0" + } + }, + "node_modules/@aws-sdk/client-sts/node_modules/@smithy/hash-node": { + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/@smithy/hash-node/-/hash-node-2.0.8.tgz", + "integrity": "sha512-yZL/nmxZzjZV5/QX5JWSgXlt0HxuMTwFO89CS++jOMMPiCMZngf6VYmtNdccs8IIIAMmfQeTzwu07XgUE/Zd3Q==", + "dependencies": { + "@smithy/types": "^2.3.2", + "@smithy/util-buffer-from": "^2.0.0", + "@smithy/util-utf8": "^2.0.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-sts/node_modules/@smithy/invalid-dependency": { + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/@smithy/invalid-dependency/-/invalid-dependency-2.0.8.tgz", + "integrity": "sha512-88VOS7W3KzUz/bNRc+Sl/F/CDIasFspEE4G39YZRHIh9YmsXF7GUyVaAKURfMNulTie62ayk6BHC9O0nOBAVgQ==", + "dependencies": { + "@smithy/types": "^2.3.2", + "tslib": "^2.5.0" + } + }, + "node_modules/@aws-sdk/client-sts/node_modules/@smithy/is-array-buffer": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-2.0.0.tgz", + "integrity": "sha512-z3PjFjMyZNI98JFRJi/U0nGoLWMSJlDjAW4QUX2WNZLas5C0CmVV6LJ01JI0k90l7FvpmixjWxPFmENSClQ7ug==", + "dependencies": { + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-sts/node_modules/@smithy/middleware-content-length": { + "version": "2.0.10", + "resolved": "https://registry.npmjs.org/@smithy/middleware-content-length/-/middleware-content-length-2.0.10.tgz", + "integrity": "sha512-EGSbysyA4jH0p3xI6G0jdXoj9Iz9GUnAta6aEaHtXm3wVWtenRf80y2TeVvNkVSr5jwKOdSCjKIRI2l1A/oZLA==", + "dependencies": { + "@smithy/protocol-http": "^3.0.4", + "@smithy/types": "^2.3.2", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-sts/node_modules/@smithy/middleware-endpoint": { + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/@smithy/middleware-endpoint/-/middleware-endpoint-2.0.8.tgz", + "integrity": "sha512-yOpogfG2d2V0cbJdAJ6GLAWkNOc9pVsL5hZUfXcxJu408N3CUCsXzIAFF6+70ZKSE+lCfG3GFErcSXv/UfUbjw==", + "dependencies": { + "@smithy/middleware-serde": "^2.0.8", + "@smithy/types": "^2.3.2", + "@smithy/url-parser": "^2.0.8", + "@smithy/util-middleware": "^2.0.1", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-sts/node_modules/@smithy/middleware-retry": { + "version": "2.0.11", + "resolved": "https://registry.npmjs.org/@smithy/middleware-retry/-/middleware-retry-2.0.11.tgz", + "integrity": "sha512-pknfokumZ+wvBERSuKAI2vVr+aK3ZgPiWRg6+0ZG4kKJogBRpPmDGWw+Jht0izS9ZaEbIobNzueIb4wD33JJVg==", + "dependencies": { + "@smithy/node-config-provider": "^2.0.11", + "@smithy/protocol-http": "^3.0.4", + "@smithy/service-error-classification": "^2.0.1", + "@smithy/types": "^2.3.2", + "@smithy/util-middleware": "^2.0.1", + "@smithy/util-retry": "^2.0.1", + "tslib": "^2.5.0", + "uuid": "^8.3.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-sts/node_modules/@smithy/middleware-serde": { + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/@smithy/middleware-serde/-/middleware-serde-2.0.8.tgz", + "integrity": "sha512-Is0sm+LiNlgsc0QpstDzifugzL9ehno1wXp109GgBgpnKTK3j+KphiparBDI4hWTtH9/7OUsxuspNqai2yyhcg==", + "dependencies": { + "@smithy/types": "^2.3.2", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-sts/node_modules/@smithy/middleware-stack": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@smithy/middleware-stack/-/middleware-stack-2.0.1.tgz", + "integrity": "sha512-UexsfY6/oQZRjTQL56s9AKtMcR60tBNibSgNYX1I2WXaUaXg97W9JCkFyth85TzBWKDBTyhLfenrukS/kyu54A==", + "dependencies": { + "@smithy/types": "^2.3.2", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-sts/node_modules/@smithy/node-config-provider": { + "version": "2.0.11", + "resolved": "https://registry.npmjs.org/@smithy/node-config-provider/-/node-config-provider-2.0.11.tgz", + "integrity": "sha512-CaR1dciSSGKttjhcefpytYjsfI/Yd5mqL8am4wfmyFCDxSiPsvnEWHl8UjM/RbcAjX0klt+CeIKPSHEc0wGvJA==", + "dependencies": { + "@smithy/property-provider": "^2.0.9", + "@smithy/shared-ini-file-loader": "^2.0.10", + "@smithy/types": "^2.3.2", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-sts/node_modules/@smithy/node-http-handler": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@smithy/node-http-handler/-/node-http-handler-2.1.4.tgz", + "integrity": "sha512-8Rw/AusvWDyC6SK8esAcVBeTlQHf94NMFv805suFUJCQ2gwlh0oLDNh+6s2MDOrxcjvLxjjzv1mytM0Mt+0cPQ==", + "dependencies": { + "@smithy/abort-controller": "^2.0.8", + "@smithy/protocol-http": "^3.0.4", + "@smithy/querystring-builder": "^2.0.8", + "@smithy/types": "^2.3.2", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-sts/node_modules/@smithy/property-provider": { + "version": "2.0.9", + "resolved": "https://registry.npmjs.org/@smithy/property-provider/-/property-provider-2.0.9.tgz", + "integrity": "sha512-25pPZ8f8DeRwYI5wbPRZaoMoR+3vrw8DwbA0TjP+GsdiB2KxScndr4HQehiJ5+WJ0giOTWhLz0bd+7Djv1qpUQ==", + "dependencies": { + "@smithy/types": "^2.3.2", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-sts/node_modules/@smithy/protocol-http": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-3.0.4.tgz", + "integrity": "sha512-CGfSWk6TRlbwa8YgrSXdn80Yu7pov3EV/h7TSfiCHhq6/LO3WymmqnzgH1f0qV2bdTDipIkTNp5dGCGN3Af/5g==", + "dependencies": { + "@smithy/types": "^2.3.2", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-sts/node_modules/@smithy/querystring-builder": { + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/@smithy/querystring-builder/-/querystring-builder-2.0.8.tgz", + "integrity": "sha512-+vzIMwjC8Saz97/ptPn+IJRCRRZ+pP95ZIWDRqEqZV/a6hiKbaFoMSa2iCKsnKzR696U2JZXrDqMu3e/FD1+2g==", + "dependencies": { + "@smithy/types": "^2.3.2", + "@smithy/util-uri-escape": "^2.0.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-sts/node_modules/@smithy/querystring-parser": { + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/@smithy/querystring-parser/-/querystring-parser-2.0.8.tgz", + "integrity": "sha512-ArbanNuR7O/MmTd90ZqhDqGOPPDYmxx3huHxD+R3cuCnazcK/1tGQA+SnnR5307T7ZRb5WTpB6qBggERuibVSA==", + "dependencies": { + "@smithy/types": "^2.3.2", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-sts/node_modules/@smithy/service-error-classification": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@smithy/service-error-classification/-/service-error-classification-2.0.1.tgz", + "integrity": "sha512-QHa9+t+v4s0cMuDCcbjIJN67mNZ42/+fc3jKe8P6ZMPXZl5ksKk6a8vhZ/m494GZng5eFTc3OePv+NF9cG83yg==", + "dependencies": { + "@smithy/types": "^2.3.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-sts/node_modules/@smithy/shared-ini-file-loader": { + "version": "2.0.10", + "resolved": "https://registry.npmjs.org/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-2.0.10.tgz", + "integrity": "sha512-jWASteSezRKohJ7GdA7pHDvmr7Q7tw3b5mu3xLHIkZy/ICftJ+O7aqNaF8wklhI7UNFoQ7flFRM3Rd0KA+1BbQ==", + "dependencies": { + "@smithy/types": "^2.3.2", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-sts/node_modules/@smithy/smithy-client": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@smithy/smithy-client/-/smithy-client-2.1.5.tgz", + "integrity": "sha512-7S865uKzsxApM8W8Q6zkij7tcUFgaG8PuADMFdMt1yL/ku3d0+s6Zwrg3N7iXCPM08Gu/mf0BIfTXIu/9i450Q==", + "dependencies": { + "@smithy/middleware-stack": "^2.0.1", + "@smithy/types": "^2.3.2", + "@smithy/util-stream": "^2.0.11", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-sts/node_modules/@smithy/types": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-2.3.2.tgz", + "integrity": "sha512-iH0cdKi7HQlzfAM3w2shFk/qZYKAqJWswtpmQpPtlruF+uFZeGEpMJjgDRyhWiddfVM4e2oP4nMaOBsMy6lXgg==", + "dependencies": { + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-sts/node_modules/@smithy/url-parser": { + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/@smithy/url-parser/-/url-parser-2.0.8.tgz", + "integrity": "sha512-wQw7j004ScCrBRJ+oNPXlLE9mtofxyadSZ9D8ov/rHkyurS7z1HTNuyaGRj6OvKsEk0SVQsuY0C9+EfM75XTkw==", + "dependencies": { + "@smithy/querystring-parser": "^2.0.8", + "@smithy/types": "^2.3.2", + "tslib": "^2.5.0" + } + }, + "node_modules/@aws-sdk/client-sts/node_modules/@smithy/util-base64": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-base64/-/util-base64-2.0.0.tgz", + "integrity": "sha512-Zb1E4xx+m5Lud8bbeYi5FkcMJMnn+1WUnJF3qD7rAdXpaL7UjkFQLdmW5fHadoKbdHpwH9vSR8EyTJFHJs++tA==", + "dependencies": { + "@smithy/util-buffer-from": "^2.0.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-sts/node_modules/@smithy/util-body-length-browser": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-body-length-browser/-/util-body-length-browser-2.0.0.tgz", + "integrity": "sha512-JdDuS4ircJt+FDnaQj88TzZY3+njZ6O+D3uakS32f2VNnDo3vyEuNdBOh/oFd8Df1zSZOuH1HEChk2AOYDezZg==", + "dependencies": { + "tslib": "^2.5.0" + } + }, + "node_modules/@aws-sdk/client-sts/node_modules/@smithy/util-body-length-node": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@smithy/util-body-length-node/-/util-body-length-node-2.1.0.tgz", + "integrity": "sha512-/li0/kj/y3fQ3vyzn36NTLGmUwAICb7Jbe/CsWCktW363gh1MOcpEcSO3mJ344Gv2dqz8YJCLQpb6hju/0qOWw==", + "dependencies": { + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-sts/node_modules/@smithy/util-buffer-from": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-2.0.0.tgz", + "integrity": "sha512-/YNnLoHsR+4W4Vf2wL5lGv0ksg8Bmk3GEGxn2vEQt52AQaPSCuaO5PM5VM7lP1K9qHRKHwrPGktqVoAHKWHxzw==", + "dependencies": { + "@smithy/is-array-buffer": "^2.0.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-sts/node_modules/@smithy/util-config-provider": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-config-provider/-/util-config-provider-2.0.0.tgz", + "integrity": "sha512-xCQ6UapcIWKxXHEU4Mcs2s7LcFQRiU3XEluM2WcCjjBtQkUN71Tb+ydGmJFPxMUrW/GWMgQEEGipLym4XG0jZg==", + "dependencies": { + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-sts/node_modules/@smithy/util-defaults-mode-browser": { + "version": "2.0.9", + "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-browser/-/util-defaults-mode-browser-2.0.9.tgz", + "integrity": "sha512-JONLJVQWT8165XoSV36ERn3SVlZLJJ4D6IeGsCSePv65Uxa93pzSLE0UMSR9Jwm4zix7rst9AS8W5QIypZWP8Q==", + "dependencies": { + "@smithy/property-provider": "^2.0.9", + "@smithy/smithy-client": "^2.1.5", + "@smithy/types": "^2.3.2", + "bowser": "^2.11.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/@aws-sdk/client-sts/node_modules/@smithy/util-defaults-mode-node": { + "version": "2.0.11", + "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-node/-/util-defaults-mode-node-2.0.11.tgz", + "integrity": "sha512-tmqjNsfj+bgZN6jXBe6efZnukzILA7BUytHkzqikuRLNtR+0VVchQHvawD0w6vManh76rO81ydhioe7i4oBzuA==", + "dependencies": { + "@smithy/config-resolver": "^2.0.9", + "@smithy/credential-provider-imds": "^2.0.11", + "@smithy/node-config-provider": "^2.0.11", + "@smithy/property-provider": "^2.0.9", + "@smithy/smithy-client": "^2.1.5", + "@smithy/types": "^2.3.2", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/@aws-sdk/client-sts/node_modules/@smithy/util-hex-encoding": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-hex-encoding/-/util-hex-encoding-2.0.0.tgz", + "integrity": "sha512-c5xY+NUnFqG6d7HFh1IFfrm3mGl29lC+vF+geHv4ToiuJCBmIfzx6IeHLg+OgRdPFKDXIw6pvi+p3CsscaMcMA==", + "dependencies": { + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-sts/node_modules/@smithy/util-middleware": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@smithy/util-middleware/-/util-middleware-2.0.1.tgz", + "integrity": "sha512-LnsBMi0Mg3gfz/TpNGLv2Jjcz2ra1OX5HR/4IaCepIYmtPQzqMWDdhX/XTW1LS8OZ0xbQuyQPcHkQ+2XkhWOVQ==", + "dependencies": { + "@smithy/types": "^2.3.2", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-sts/node_modules/@smithy/util-retry": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@smithy/util-retry/-/util-retry-2.0.1.tgz", + "integrity": "sha512-naj4X0IafJ9yJnVJ58QgSMkCNLjyQOnyrnKh/T0f+0UOUxJiT8vuFn/hS7B/pNqbo2STY7PyJ4J4f+5YqxwNtA==", + "dependencies": { + "@smithy/service-error-classification": "^2.0.1", + "@smithy/types": "^2.3.2", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/@aws-sdk/client-sts/node_modules/@smithy/util-stream": { + "version": "2.0.11", + "resolved": "https://registry.npmjs.org/@smithy/util-stream/-/util-stream-2.0.11.tgz", + "integrity": "sha512-2MeWfqSpZKdmEJ+tH8CJQSgzLWhH5cmdE24X7JB0hiamXrOmswWGGuPvyj/9sQCTclo57pNxLR2p7KrP8Ahiyg==", + "dependencies": { + "@smithy/fetch-http-handler": "^2.1.4", + "@smithy/node-http-handler": "^2.1.4", + "@smithy/types": "^2.3.2", + "@smithy/util-base64": "^2.0.0", + "@smithy/util-buffer-from": "^2.0.0", + "@smithy/util-hex-encoding": "^2.0.0", + "@smithy/util-utf8": "^2.0.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-sts/node_modules/@smithy/util-uri-escape": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-uri-escape/-/util-uri-escape-2.0.0.tgz", + "integrity": "sha512-ebkxsqinSdEooQduuk9CbKcI+wheijxEb3utGXkCoYQkJnwTnLbH1JXGimJtUkQwNQbsbuYwG2+aFVyZf5TLaw==", + "dependencies": { + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-sts/node_modules/@smithy/util-utf8": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-2.0.0.tgz", + "integrity": "sha512-rctU1VkziY84n5OXe3bPNpKR001ZCME2JCaBBFgtiM2hfKbHFudc/BkMuPab8hRbLd0j3vbnBTTZ1igBf0wgiQ==", + "dependencies": { + "@smithy/util-buffer-from": "^2.0.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-sts/node_modules/uuid": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "node_modules/@aws-sdk/credential-provider-cognito-identity": { + "version": "3.414.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-cognito-identity/-/credential-provider-cognito-identity-3.414.0.tgz", + "integrity": "sha512-sAbp5HVy0YmvXUKkkTt8Tr5a5XNQMxshxI+pmXHLCHNpRATS9A6i7YHVNMGmERKGriFWZG0Q8qgKh1E+rvN7fQ==", + "dependencies": { + "@aws-sdk/client-cognito-identity": "3.414.0", + "@aws-sdk/types": "3.413.0", + "@smithy/property-provider": "^2.0.0", + "@smithy/types": "^2.3.1", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-cognito-identity/node_modules/@aws-sdk/types": { + "version": "3.413.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.413.0.tgz", + "integrity": "sha512-j1xib0f/TazIFc5ySIKOlT1ujntRbaoG4LJFeEezz4ji03/wSJMI8Vi4KjzpBp8J1tTu0oRDnsxRIGixsUBeYQ==", + "dependencies": { + "@smithy/types": "^2.3.1", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-cognito-identity/node_modules/@smithy/property-provider": { + "version": "2.0.9", + "resolved": "https://registry.npmjs.org/@smithy/property-provider/-/property-provider-2.0.9.tgz", + "integrity": "sha512-25pPZ8f8DeRwYI5wbPRZaoMoR+3vrw8DwbA0TjP+GsdiB2KxScndr4HQehiJ5+WJ0giOTWhLz0bd+7Djv1qpUQ==", + "dependencies": { + "@smithy/types": "^2.3.2", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-cognito-identity/node_modules/@smithy/types": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-2.3.2.tgz", + "integrity": "sha512-iH0cdKi7HQlzfAM3w2shFk/qZYKAqJWswtpmQpPtlruF+uFZeGEpMJjgDRyhWiddfVM4e2oP4nMaOBsMy6lXgg==", + "dependencies": { + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-env": { + "version": "3.413.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-env/-/credential-provider-env-3.413.0.tgz", + "integrity": "sha512-yeMOkfG20/RlzfPMtQuDB647AcPEvFEVYOWZzAWVJfldYQ5ybKr0d7sBkgG9sdAzGkK3Aw9dE4rigYI8EIqc1Q==", + "dependencies": { + "@aws-sdk/types": "3.413.0", + "@smithy/property-provider": "^2.0.0", + "@smithy/types": "^2.3.1", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-env/node_modules/@aws-sdk/types": { + "version": "3.413.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.413.0.tgz", + "integrity": "sha512-j1xib0f/TazIFc5ySIKOlT1ujntRbaoG4LJFeEezz4ji03/wSJMI8Vi4KjzpBp8J1tTu0oRDnsxRIGixsUBeYQ==", + "dependencies": { + "@smithy/types": "^2.3.1", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-env/node_modules/@smithy/property-provider": { + "version": "2.0.9", + "resolved": "https://registry.npmjs.org/@smithy/property-provider/-/property-provider-2.0.9.tgz", + "integrity": "sha512-25pPZ8f8DeRwYI5wbPRZaoMoR+3vrw8DwbA0TjP+GsdiB2KxScndr4HQehiJ5+WJ0giOTWhLz0bd+7Djv1qpUQ==", + "dependencies": { + "@smithy/types": "^2.3.2", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-env/node_modules/@smithy/types": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-2.3.2.tgz", + "integrity": "sha512-iH0cdKi7HQlzfAM3w2shFk/qZYKAqJWswtpmQpPtlruF+uFZeGEpMJjgDRyhWiddfVM4e2oP4nMaOBsMy6lXgg==", + "dependencies": { + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-ini": { + "version": "3.414.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.414.0.tgz", + "integrity": "sha512-rlpLLx70roJL/t40opWC96LbIASejdMbRlgSCRpK8b/hKngYDe5A7SRVacaw08vYrAywxRiybxpQOwOt9b++rA==", + "dependencies": { + "@aws-sdk/credential-provider-env": "3.413.0", + "@aws-sdk/credential-provider-process": "3.413.0", + "@aws-sdk/credential-provider-sso": "3.414.0", + "@aws-sdk/credential-provider-web-identity": "3.413.0", + "@aws-sdk/types": "3.413.0", + "@smithy/credential-provider-imds": "^2.0.0", + "@smithy/property-provider": "^2.0.0", + "@smithy/shared-ini-file-loader": "^2.0.6", + "@smithy/types": "^2.3.1", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-ini/node_modules/@aws-sdk/types": { + "version": "3.413.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.413.0.tgz", + "integrity": "sha512-j1xib0f/TazIFc5ySIKOlT1ujntRbaoG4LJFeEezz4ji03/wSJMI8Vi4KjzpBp8J1tTu0oRDnsxRIGixsUBeYQ==", + "dependencies": { + "@smithy/types": "^2.3.1", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-ini/node_modules/@smithy/credential-provider-imds": { + "version": "2.0.11", + "resolved": "https://registry.npmjs.org/@smithy/credential-provider-imds/-/credential-provider-imds-2.0.11.tgz", + "integrity": "sha512-uJJs8dnM5iXkn8a2GaKvlKMhcOJ+oJPYqY9gY3CM/EieCVObIDjxUtR/g8lU/k/A+OauA78GzScAfulmFjPOYA==", + "dependencies": { + "@smithy/node-config-provider": "^2.0.11", + "@smithy/property-provider": "^2.0.9", + "@smithy/types": "^2.3.2", + "@smithy/url-parser": "^2.0.8", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-ini/node_modules/@smithy/node-config-provider": { + "version": "2.0.11", + "resolved": "https://registry.npmjs.org/@smithy/node-config-provider/-/node-config-provider-2.0.11.tgz", + "integrity": "sha512-CaR1dciSSGKttjhcefpytYjsfI/Yd5mqL8am4wfmyFCDxSiPsvnEWHl8UjM/RbcAjX0klt+CeIKPSHEc0wGvJA==", + "dependencies": { + "@smithy/property-provider": "^2.0.9", + "@smithy/shared-ini-file-loader": "^2.0.10", + "@smithy/types": "^2.3.2", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-ini/node_modules/@smithy/property-provider": { + "version": "2.0.9", + "resolved": "https://registry.npmjs.org/@smithy/property-provider/-/property-provider-2.0.9.tgz", + "integrity": "sha512-25pPZ8f8DeRwYI5wbPRZaoMoR+3vrw8DwbA0TjP+GsdiB2KxScndr4HQehiJ5+WJ0giOTWhLz0bd+7Djv1qpUQ==", + "dependencies": { + "@smithy/types": "^2.3.2", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-ini/node_modules/@smithy/querystring-parser": { + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/@smithy/querystring-parser/-/querystring-parser-2.0.8.tgz", + "integrity": "sha512-ArbanNuR7O/MmTd90ZqhDqGOPPDYmxx3huHxD+R3cuCnazcK/1tGQA+SnnR5307T7ZRb5WTpB6qBggERuibVSA==", + "dependencies": { + "@smithy/types": "^2.3.2", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-ini/node_modules/@smithy/shared-ini-file-loader": { + "version": "2.0.10", + "resolved": "https://registry.npmjs.org/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-2.0.10.tgz", + "integrity": "sha512-jWASteSezRKohJ7GdA7pHDvmr7Q7tw3b5mu3xLHIkZy/ICftJ+O7aqNaF8wklhI7UNFoQ7flFRM3Rd0KA+1BbQ==", + "dependencies": { + "@smithy/types": "^2.3.2", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-ini/node_modules/@smithy/types": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-2.3.2.tgz", + "integrity": "sha512-iH0cdKi7HQlzfAM3w2shFk/qZYKAqJWswtpmQpPtlruF+uFZeGEpMJjgDRyhWiddfVM4e2oP4nMaOBsMy6lXgg==", + "dependencies": { + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-ini/node_modules/@smithy/url-parser": { + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/@smithy/url-parser/-/url-parser-2.0.8.tgz", + "integrity": "sha512-wQw7j004ScCrBRJ+oNPXlLE9mtofxyadSZ9D8ov/rHkyurS7z1HTNuyaGRj6OvKsEk0SVQsuY0C9+EfM75XTkw==", + "dependencies": { + "@smithy/querystring-parser": "^2.0.8", + "@smithy/types": "^2.3.2", + "tslib": "^2.5.0" + } + }, + "node_modules/@aws-sdk/credential-provider-node": { + "version": "3.414.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.414.0.tgz", + "integrity": "sha512-xlkcOUKeGHInxWKKrZKIPSBCUL/ozyCldJBjmMKEj7ZmBAEiDcjpMe3pZ//LibMkCSy0b/7jtyQBE/eaIT2o0A==", + "dependencies": { + "@aws-sdk/credential-provider-env": "3.413.0", + "@aws-sdk/credential-provider-ini": "3.414.0", + "@aws-sdk/credential-provider-process": "3.413.0", + "@aws-sdk/credential-provider-sso": "3.414.0", + "@aws-sdk/credential-provider-web-identity": "3.413.0", + "@aws-sdk/types": "3.413.0", + "@smithy/credential-provider-imds": "^2.0.0", + "@smithy/property-provider": "^2.0.0", + "@smithy/shared-ini-file-loader": "^2.0.6", + "@smithy/types": "^2.3.1", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-node/node_modules/@aws-sdk/types": { + "version": "3.413.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.413.0.tgz", + "integrity": "sha512-j1xib0f/TazIFc5ySIKOlT1ujntRbaoG4LJFeEezz4ji03/wSJMI8Vi4KjzpBp8J1tTu0oRDnsxRIGixsUBeYQ==", + "dependencies": { + "@smithy/types": "^2.3.1", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-node/node_modules/@smithy/credential-provider-imds": { + "version": "2.0.11", + "resolved": "https://registry.npmjs.org/@smithy/credential-provider-imds/-/credential-provider-imds-2.0.11.tgz", + "integrity": "sha512-uJJs8dnM5iXkn8a2GaKvlKMhcOJ+oJPYqY9gY3CM/EieCVObIDjxUtR/g8lU/k/A+OauA78GzScAfulmFjPOYA==", + "dependencies": { + "@smithy/node-config-provider": "^2.0.11", + "@smithy/property-provider": "^2.0.9", + "@smithy/types": "^2.3.2", + "@smithy/url-parser": "^2.0.8", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-node/node_modules/@smithy/node-config-provider": { + "version": "2.0.11", + "resolved": "https://registry.npmjs.org/@smithy/node-config-provider/-/node-config-provider-2.0.11.tgz", + "integrity": "sha512-CaR1dciSSGKttjhcefpytYjsfI/Yd5mqL8am4wfmyFCDxSiPsvnEWHl8UjM/RbcAjX0klt+CeIKPSHEc0wGvJA==", + "dependencies": { + "@smithy/property-provider": "^2.0.9", + "@smithy/shared-ini-file-loader": "^2.0.10", + "@smithy/types": "^2.3.2", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-node/node_modules/@smithy/property-provider": { + "version": "2.0.9", + "resolved": "https://registry.npmjs.org/@smithy/property-provider/-/property-provider-2.0.9.tgz", + "integrity": "sha512-25pPZ8f8DeRwYI5wbPRZaoMoR+3vrw8DwbA0TjP+GsdiB2KxScndr4HQehiJ5+WJ0giOTWhLz0bd+7Djv1qpUQ==", + "dependencies": { + "@smithy/types": "^2.3.2", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-node/node_modules/@smithy/querystring-parser": { + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/@smithy/querystring-parser/-/querystring-parser-2.0.8.tgz", + "integrity": "sha512-ArbanNuR7O/MmTd90ZqhDqGOPPDYmxx3huHxD+R3cuCnazcK/1tGQA+SnnR5307T7ZRb5WTpB6qBggERuibVSA==", + "dependencies": { + "@smithy/types": "^2.3.2", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-node/node_modules/@smithy/shared-ini-file-loader": { + "version": "2.0.10", + "resolved": "https://registry.npmjs.org/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-2.0.10.tgz", + "integrity": "sha512-jWASteSezRKohJ7GdA7pHDvmr7Q7tw3b5mu3xLHIkZy/ICftJ+O7aqNaF8wklhI7UNFoQ7flFRM3Rd0KA+1BbQ==", + "dependencies": { + "@smithy/types": "^2.3.2", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-node/node_modules/@smithy/types": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-2.3.2.tgz", + "integrity": "sha512-iH0cdKi7HQlzfAM3w2shFk/qZYKAqJWswtpmQpPtlruF+uFZeGEpMJjgDRyhWiddfVM4e2oP4nMaOBsMy6lXgg==", + "dependencies": { + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-node/node_modules/@smithy/url-parser": { + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/@smithy/url-parser/-/url-parser-2.0.8.tgz", + "integrity": "sha512-wQw7j004ScCrBRJ+oNPXlLE9mtofxyadSZ9D8ov/rHkyurS7z1HTNuyaGRj6OvKsEk0SVQsuY0C9+EfM75XTkw==", + "dependencies": { + "@smithy/querystring-parser": "^2.0.8", + "@smithy/types": "^2.3.2", + "tslib": "^2.5.0" + } + }, + "node_modules/@aws-sdk/credential-provider-process": { + "version": "3.413.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-process/-/credential-provider-process-3.413.0.tgz", + "integrity": "sha512-GFJdgS14GzJ1wc2DEnS44Z/34iBZ05CAkvDsLN2CMwcDgH4eZuif9/x0lwzIJBK3xVFHzYUeVvEzsqRPbCHRsw==", + "dependencies": { + "@aws-sdk/types": "3.413.0", + "@smithy/property-provider": "^2.0.0", + "@smithy/shared-ini-file-loader": "^2.0.6", + "@smithy/types": "^2.3.1", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-process/node_modules/@aws-sdk/types": { + "version": "3.413.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.413.0.tgz", + "integrity": "sha512-j1xib0f/TazIFc5ySIKOlT1ujntRbaoG4LJFeEezz4ji03/wSJMI8Vi4KjzpBp8J1tTu0oRDnsxRIGixsUBeYQ==", + "dependencies": { + "@smithy/types": "^2.3.1", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-process/node_modules/@smithy/property-provider": { + "version": "2.0.9", + "resolved": "https://registry.npmjs.org/@smithy/property-provider/-/property-provider-2.0.9.tgz", + "integrity": "sha512-25pPZ8f8DeRwYI5wbPRZaoMoR+3vrw8DwbA0TjP+GsdiB2KxScndr4HQehiJ5+WJ0giOTWhLz0bd+7Djv1qpUQ==", + "dependencies": { + "@smithy/types": "^2.3.2", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-process/node_modules/@smithy/shared-ini-file-loader": { + "version": "2.0.10", + "resolved": "https://registry.npmjs.org/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-2.0.10.tgz", + "integrity": "sha512-jWASteSezRKohJ7GdA7pHDvmr7Q7tw3b5mu3xLHIkZy/ICftJ+O7aqNaF8wklhI7UNFoQ7flFRM3Rd0KA+1BbQ==", + "dependencies": { + "@smithy/types": "^2.3.2", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-process/node_modules/@smithy/types": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-2.3.2.tgz", + "integrity": "sha512-iH0cdKi7HQlzfAM3w2shFk/qZYKAqJWswtpmQpPtlruF+uFZeGEpMJjgDRyhWiddfVM4e2oP4nMaOBsMy6lXgg==", + "dependencies": { + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-sso": { + "version": "3.414.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.414.0.tgz", + "integrity": "sha512-w9g2hlkZn7WekWICRqk+L33py7KrjYMFryVpkKXOx2pjDchCfZDr6pL1ml782GZ0L3qsob4SbNpbtp13JprnWQ==", + "dependencies": { + "@aws-sdk/client-sso": "3.414.0", + "@aws-sdk/token-providers": "3.413.0", + "@aws-sdk/types": "3.413.0", + "@smithy/property-provider": "^2.0.0", + "@smithy/shared-ini-file-loader": "^2.0.6", + "@smithy/types": "^2.3.1", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-sso/node_modules/@aws-sdk/types": { + "version": "3.413.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.413.0.tgz", + "integrity": "sha512-j1xib0f/TazIFc5ySIKOlT1ujntRbaoG4LJFeEezz4ji03/wSJMI8Vi4KjzpBp8J1tTu0oRDnsxRIGixsUBeYQ==", + "dependencies": { + "@smithy/types": "^2.3.1", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-sso/node_modules/@smithy/property-provider": { + "version": "2.0.9", + "resolved": "https://registry.npmjs.org/@smithy/property-provider/-/property-provider-2.0.9.tgz", + "integrity": "sha512-25pPZ8f8DeRwYI5wbPRZaoMoR+3vrw8DwbA0TjP+GsdiB2KxScndr4HQehiJ5+WJ0giOTWhLz0bd+7Djv1qpUQ==", + "dependencies": { + "@smithy/types": "^2.3.2", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-sso/node_modules/@smithy/shared-ini-file-loader": { + "version": "2.0.10", + "resolved": "https://registry.npmjs.org/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-2.0.10.tgz", + "integrity": "sha512-jWASteSezRKohJ7GdA7pHDvmr7Q7tw3b5mu3xLHIkZy/ICftJ+O7aqNaF8wklhI7UNFoQ7flFRM3Rd0KA+1BbQ==", + "dependencies": { + "@smithy/types": "^2.3.2", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-sso/node_modules/@smithy/types": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-2.3.2.tgz", + "integrity": "sha512-iH0cdKi7HQlzfAM3w2shFk/qZYKAqJWswtpmQpPtlruF+uFZeGEpMJjgDRyhWiddfVM4e2oP4nMaOBsMy6lXgg==", + "dependencies": { + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-web-identity": { + "version": "3.413.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.413.0.tgz", + "integrity": "sha512-5cdA1Iq9JeEHtg59ERV9fdMQ7cS0JF6gH/BWA7HYEUGdSVPXCuwyEggPtG64QgpNU7SmxH+QdDG+Ldxz09ycIA==", + "dependencies": { + "@aws-sdk/types": "3.413.0", + "@smithy/property-provider": "^2.0.0", + "@smithy/types": "^2.3.1", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-web-identity/node_modules/@aws-sdk/types": { + "version": "3.413.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.413.0.tgz", + "integrity": "sha512-j1xib0f/TazIFc5ySIKOlT1ujntRbaoG4LJFeEezz4ji03/wSJMI8Vi4KjzpBp8J1tTu0oRDnsxRIGixsUBeYQ==", + "dependencies": { + "@smithy/types": "^2.3.1", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-web-identity/node_modules/@smithy/property-provider": { + "version": "2.0.9", + "resolved": "https://registry.npmjs.org/@smithy/property-provider/-/property-provider-2.0.9.tgz", + "integrity": "sha512-25pPZ8f8DeRwYI5wbPRZaoMoR+3vrw8DwbA0TjP+GsdiB2KxScndr4HQehiJ5+WJ0giOTWhLz0bd+7Djv1qpUQ==", + "dependencies": { + "@smithy/types": "^2.3.2", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-web-identity/node_modules/@smithy/types": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-2.3.2.tgz", + "integrity": "sha512-iH0cdKi7HQlzfAM3w2shFk/qZYKAqJWswtpmQpPtlruF+uFZeGEpMJjgDRyhWiddfVM4e2oP4nMaOBsMy6lXgg==", + "dependencies": { + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/credential-providers": { + "version": "3.414.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-providers/-/credential-providers-3.414.0.tgz", + "integrity": "sha512-xv3cN/lu+HRroGWYWtqwBQ+guykyjSKHzYq6FlyfBZyjC6u8hoeNSNilFobIooJOXfrDM0LKr9L+uUlPE+0+lg==", + "dependencies": { + "@aws-sdk/client-cognito-identity": "3.414.0", + "@aws-sdk/client-sso": "3.414.0", + "@aws-sdk/client-sts": "3.414.0", + "@aws-sdk/credential-provider-cognito-identity": "3.414.0", + "@aws-sdk/credential-provider-env": "3.413.0", + "@aws-sdk/credential-provider-ini": "3.414.0", + "@aws-sdk/credential-provider-node": "3.414.0", + "@aws-sdk/credential-provider-process": "3.413.0", + "@aws-sdk/credential-provider-sso": "3.414.0", + "@aws-sdk/credential-provider-web-identity": "3.413.0", + "@aws-sdk/types": "3.413.0", + "@smithy/credential-provider-imds": "^2.0.0", + "@smithy/property-provider": "^2.0.0", + "@smithy/types": "^2.3.1", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/credential-providers/node_modules/@aws-sdk/types": { + "version": "3.413.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.413.0.tgz", + "integrity": "sha512-j1xib0f/TazIFc5ySIKOlT1ujntRbaoG4LJFeEezz4ji03/wSJMI8Vi4KjzpBp8J1tTu0oRDnsxRIGixsUBeYQ==", + "dependencies": { + "@smithy/types": "^2.3.1", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/credential-providers/node_modules/@smithy/credential-provider-imds": { + "version": "2.0.11", + "resolved": "https://registry.npmjs.org/@smithy/credential-provider-imds/-/credential-provider-imds-2.0.11.tgz", + "integrity": "sha512-uJJs8dnM5iXkn8a2GaKvlKMhcOJ+oJPYqY9gY3CM/EieCVObIDjxUtR/g8lU/k/A+OauA78GzScAfulmFjPOYA==", + "dependencies": { + "@smithy/node-config-provider": "^2.0.11", + "@smithy/property-provider": "^2.0.9", + "@smithy/types": "^2.3.2", + "@smithy/url-parser": "^2.0.8", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/credential-providers/node_modules/@smithy/node-config-provider": { + "version": "2.0.11", + "resolved": "https://registry.npmjs.org/@smithy/node-config-provider/-/node-config-provider-2.0.11.tgz", + "integrity": "sha512-CaR1dciSSGKttjhcefpytYjsfI/Yd5mqL8am4wfmyFCDxSiPsvnEWHl8UjM/RbcAjX0klt+CeIKPSHEc0wGvJA==", + "dependencies": { + "@smithy/property-provider": "^2.0.9", + "@smithy/shared-ini-file-loader": "^2.0.10", + "@smithy/types": "^2.3.2", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/credential-providers/node_modules/@smithy/property-provider": { + "version": "2.0.9", + "resolved": "https://registry.npmjs.org/@smithy/property-provider/-/property-provider-2.0.9.tgz", + "integrity": "sha512-25pPZ8f8DeRwYI5wbPRZaoMoR+3vrw8DwbA0TjP+GsdiB2KxScndr4HQehiJ5+WJ0giOTWhLz0bd+7Djv1qpUQ==", + "dependencies": { + "@smithy/types": "^2.3.2", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/credential-providers/node_modules/@smithy/querystring-parser": { + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/@smithy/querystring-parser/-/querystring-parser-2.0.8.tgz", + "integrity": "sha512-ArbanNuR7O/MmTd90ZqhDqGOPPDYmxx3huHxD+R3cuCnazcK/1tGQA+SnnR5307T7ZRb5WTpB6qBggERuibVSA==", + "dependencies": { + "@smithy/types": "^2.3.2", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/credential-providers/node_modules/@smithy/shared-ini-file-loader": { + "version": "2.0.10", + "resolved": "https://registry.npmjs.org/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-2.0.10.tgz", + "integrity": "sha512-jWASteSezRKohJ7GdA7pHDvmr7Q7tw3b5mu3xLHIkZy/ICftJ+O7aqNaF8wklhI7UNFoQ7flFRM3Rd0KA+1BbQ==", + "dependencies": { + "@smithy/types": "^2.3.2", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/credential-providers/node_modules/@smithy/types": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-2.3.2.tgz", + "integrity": "sha512-iH0cdKi7HQlzfAM3w2shFk/qZYKAqJWswtpmQpPtlruF+uFZeGEpMJjgDRyhWiddfVM4e2oP4nMaOBsMy6lXgg==", + "dependencies": { + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/credential-providers/node_modules/@smithy/url-parser": { + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/@smithy/url-parser/-/url-parser-2.0.8.tgz", + "integrity": "sha512-wQw7j004ScCrBRJ+oNPXlLE9mtofxyadSZ9D8ov/rHkyurS7z1HTNuyaGRj6OvKsEk0SVQsuY0C9+EfM75XTkw==", + "dependencies": { + "@smithy/querystring-parser": "^2.0.8", + "@smithy/types": "^2.3.2", + "tslib": "^2.5.0" + } + }, + "node_modules/@aws-sdk/hash-blob-browser": { + "version": "3.370.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/hash-blob-browser/-/hash-blob-browser-3.370.0.tgz", + "integrity": "sha512-DyStaznfloyF9jN3KvG6puOAjt25alXoBNeHBF2FyLlEEbrOqUmso39JB5LVAw2/KB4UmCNsbAXFb6WktX/yHQ==", + "dependencies": { + "@aws-sdk/chunked-blob-reader": "3.310.0", + "@aws-sdk/chunked-blob-reader-native": "3.310.0", + "@aws-sdk/types": "3.370.0", + "tslib": "^2.5.0" + } + }, + "node_modules/@aws-sdk/hash-stream-node": { + "version": "3.370.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/hash-stream-node/-/hash-stream-node-3.370.0.tgz", + "integrity": "sha512-ExsbBiIMiL9AN1VpWlD8+xaO5s0cXUZJC2UONiQbgMb1jz7Wq9fa1GmKUDyaGXOuQTT7DDhAmalb9fIpauZKuA==", + "dependencies": { + "@aws-sdk/types": "3.370.0", + "@aws-sdk/util-utf8": "3.310.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/is-array-buffer": { + "version": "3.310.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/is-array-buffer/-/is-array-buffer-3.310.0.tgz", + "integrity": "sha512-urnbcCR+h9NWUnmOtet/s4ghvzsidFmspfhYaHAmSRdy9yDjdjBJMFjjsn85A1ODUktztm+cVncXjQ38WCMjMQ==", + "dependencies": { + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/lib-storage": { + "version": "3.414.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/lib-storage/-/lib-storage-3.414.0.tgz", + "integrity": "sha512-R2ZdLVWa+EhMYrta61c0fNgnRpsIWr4zj1rCnC0ZlTwP5J3jiAaRHPMVgd9Jgo1u91y8nHVYaLdIJ6EQDN0scg==", + "dependencies": { + "@smithy/abort-controller": "^2.0.1", + "@smithy/middleware-endpoint": "^2.0.7", + "@smithy/smithy-client": "^2.1.4", + "buffer": "5.6.0", + "events": "3.3.0", + "stream-browserify": "3.0.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "@aws-sdk/client-s3": "^3.0.0" + } + }, + "node_modules/@aws-sdk/lib-storage/node_modules/@smithy/abort-controller": { + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/@smithy/abort-controller/-/abort-controller-2.0.8.tgz", + "integrity": "sha512-2SOdVj5y0zE37Y9scSXoizoxgi6mgnDabi7a/SOfhl0p+50I0rIkuJTfyAuTPDtQ7e5dD6tSZPCLB3c/YM6Zig==", + "dependencies": { + "@smithy/types": "^2.3.2", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/lib-storage/node_modules/@smithy/fetch-http-handler": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@smithy/fetch-http-handler/-/fetch-http-handler-2.1.4.tgz", + "integrity": "sha512-SL24M9W5ERByoXaVicRx+bj9GJVujDnPn+QO7GY7adhY0mPGa6DSF58pVKsgIh4r5Tx/k3SWCPlH4BxxSxA/fQ==", + "dependencies": { + "@smithy/protocol-http": "^3.0.4", + "@smithy/querystring-builder": "^2.0.8", + "@smithy/types": "^2.3.2", + "@smithy/util-base64": "^2.0.0", + "tslib": "^2.5.0" + } + }, + "node_modules/@aws-sdk/lib-storage/node_modules/@smithy/is-array-buffer": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-2.0.0.tgz", + "integrity": "sha512-z3PjFjMyZNI98JFRJi/U0nGoLWMSJlDjAW4QUX2WNZLas5C0CmVV6LJ01JI0k90l7FvpmixjWxPFmENSClQ7ug==", + "dependencies": { + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/lib-storage/node_modules/@smithy/middleware-endpoint": { + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/@smithy/middleware-endpoint/-/middleware-endpoint-2.0.8.tgz", + "integrity": "sha512-yOpogfG2d2V0cbJdAJ6GLAWkNOc9pVsL5hZUfXcxJu408N3CUCsXzIAFF6+70ZKSE+lCfG3GFErcSXv/UfUbjw==", + "dependencies": { + "@smithy/middleware-serde": "^2.0.8", + "@smithy/types": "^2.3.2", + "@smithy/url-parser": "^2.0.8", + "@smithy/util-middleware": "^2.0.1", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/lib-storage/node_modules/@smithy/middleware-serde": { + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/@smithy/middleware-serde/-/middleware-serde-2.0.8.tgz", + "integrity": "sha512-Is0sm+LiNlgsc0QpstDzifugzL9ehno1wXp109GgBgpnKTK3j+KphiparBDI4hWTtH9/7OUsxuspNqai2yyhcg==", + "dependencies": { + "@smithy/types": "^2.3.2", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/lib-storage/node_modules/@smithy/middleware-stack": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@smithy/middleware-stack/-/middleware-stack-2.0.1.tgz", + "integrity": "sha512-UexsfY6/oQZRjTQL56s9AKtMcR60tBNibSgNYX1I2WXaUaXg97W9JCkFyth85TzBWKDBTyhLfenrukS/kyu54A==", + "dependencies": { + "@smithy/types": "^2.3.2", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/lib-storage/node_modules/@smithy/node-http-handler": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@smithy/node-http-handler/-/node-http-handler-2.1.4.tgz", + "integrity": "sha512-8Rw/AusvWDyC6SK8esAcVBeTlQHf94NMFv805suFUJCQ2gwlh0oLDNh+6s2MDOrxcjvLxjjzv1mytM0Mt+0cPQ==", + "dependencies": { + "@smithy/abort-controller": "^2.0.8", + "@smithy/protocol-http": "^3.0.4", + "@smithy/querystring-builder": "^2.0.8", + "@smithy/types": "^2.3.2", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/lib-storage/node_modules/@smithy/protocol-http": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-3.0.4.tgz", + "integrity": "sha512-CGfSWk6TRlbwa8YgrSXdn80Yu7pov3EV/h7TSfiCHhq6/LO3WymmqnzgH1f0qV2bdTDipIkTNp5dGCGN3Af/5g==", + "dependencies": { + "@smithy/types": "^2.3.2", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/lib-storage/node_modules/@smithy/querystring-builder": { + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/@smithy/querystring-builder/-/querystring-builder-2.0.8.tgz", + "integrity": "sha512-+vzIMwjC8Saz97/ptPn+IJRCRRZ+pP95ZIWDRqEqZV/a6hiKbaFoMSa2iCKsnKzR696U2JZXrDqMu3e/FD1+2g==", + "dependencies": { + "@smithy/types": "^2.3.2", + "@smithy/util-uri-escape": "^2.0.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/lib-storage/node_modules/@smithy/querystring-parser": { + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/@smithy/querystring-parser/-/querystring-parser-2.0.8.tgz", + "integrity": "sha512-ArbanNuR7O/MmTd90ZqhDqGOPPDYmxx3huHxD+R3cuCnazcK/1tGQA+SnnR5307T7ZRb5WTpB6qBggERuibVSA==", + "dependencies": { + "@smithy/types": "^2.3.2", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/lib-storage/node_modules/@smithy/smithy-client": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@smithy/smithy-client/-/smithy-client-2.1.5.tgz", + "integrity": "sha512-7S865uKzsxApM8W8Q6zkij7tcUFgaG8PuADMFdMt1yL/ku3d0+s6Zwrg3N7iXCPM08Gu/mf0BIfTXIu/9i450Q==", + "dependencies": { + "@smithy/middleware-stack": "^2.0.1", + "@smithy/types": "^2.3.2", + "@smithy/util-stream": "^2.0.11", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/lib-storage/node_modules/@smithy/types": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-2.3.2.tgz", + "integrity": "sha512-iH0cdKi7HQlzfAM3w2shFk/qZYKAqJWswtpmQpPtlruF+uFZeGEpMJjgDRyhWiddfVM4e2oP4nMaOBsMy6lXgg==", + "dependencies": { + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/lib-storage/node_modules/@smithy/url-parser": { + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/@smithy/url-parser/-/url-parser-2.0.8.tgz", + "integrity": "sha512-wQw7j004ScCrBRJ+oNPXlLE9mtofxyadSZ9D8ov/rHkyurS7z1HTNuyaGRj6OvKsEk0SVQsuY0C9+EfM75XTkw==", + "dependencies": { + "@smithy/querystring-parser": "^2.0.8", + "@smithy/types": "^2.3.2", + "tslib": "^2.5.0" + } + }, + "node_modules/@aws-sdk/lib-storage/node_modules/@smithy/util-base64": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-base64/-/util-base64-2.0.0.tgz", + "integrity": "sha512-Zb1E4xx+m5Lud8bbeYi5FkcMJMnn+1WUnJF3qD7rAdXpaL7UjkFQLdmW5fHadoKbdHpwH9vSR8EyTJFHJs++tA==", + "dependencies": { + "@smithy/util-buffer-from": "^2.0.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/lib-storage/node_modules/@smithy/util-buffer-from": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-2.0.0.tgz", + "integrity": "sha512-/YNnLoHsR+4W4Vf2wL5lGv0ksg8Bmk3GEGxn2vEQt52AQaPSCuaO5PM5VM7lP1K9qHRKHwrPGktqVoAHKWHxzw==", + "dependencies": { + "@smithy/is-array-buffer": "^2.0.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/lib-storage/node_modules/@smithy/util-hex-encoding": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-hex-encoding/-/util-hex-encoding-2.0.0.tgz", + "integrity": "sha512-c5xY+NUnFqG6d7HFh1IFfrm3mGl29lC+vF+geHv4ToiuJCBmIfzx6IeHLg+OgRdPFKDXIw6pvi+p3CsscaMcMA==", + "dependencies": { + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/lib-storage/node_modules/@smithy/util-middleware": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@smithy/util-middleware/-/util-middleware-2.0.1.tgz", + "integrity": "sha512-LnsBMi0Mg3gfz/TpNGLv2Jjcz2ra1OX5HR/4IaCepIYmtPQzqMWDdhX/XTW1LS8OZ0xbQuyQPcHkQ+2XkhWOVQ==", + "dependencies": { + "@smithy/types": "^2.3.2", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/lib-storage/node_modules/@smithy/util-stream": { + "version": "2.0.11", + "resolved": "https://registry.npmjs.org/@smithy/util-stream/-/util-stream-2.0.11.tgz", + "integrity": "sha512-2MeWfqSpZKdmEJ+tH8CJQSgzLWhH5cmdE24X7JB0hiamXrOmswWGGuPvyj/9sQCTclo57pNxLR2p7KrP8Ahiyg==", + "dependencies": { + "@smithy/fetch-http-handler": "^2.1.4", + "@smithy/node-http-handler": "^2.1.4", + "@smithy/types": "^2.3.2", + "@smithy/util-base64": "^2.0.0", + "@smithy/util-buffer-from": "^2.0.0", + "@smithy/util-hex-encoding": "^2.0.0", + "@smithy/util-utf8": "^2.0.0", "tslib": "^2.5.0" }, "engines": { "node": ">=14.0.0" } }, - "node_modules/@aws-sdk/credential-providers/node_modules/@aws-sdk/credential-provider-web-identity": { - "version": "3.391.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.391.0.tgz", - "integrity": "sha512-n0vYg82B8bc4rxKltVbVqclev7hx+elyS9pEnZs3YbnbWJq0qqsznXmDfLqd1TcWpa09PGXcah0nsRDolVThsA==", + "node_modules/@aws-sdk/lib-storage/node_modules/@smithy/util-uri-escape": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-uri-escape/-/util-uri-escape-2.0.0.tgz", + "integrity": "sha512-ebkxsqinSdEooQduuk9CbKcI+wheijxEb3utGXkCoYQkJnwTnLbH1JXGimJtUkQwNQbsbuYwG2+aFVyZf5TLaw==", "dependencies": { - "@aws-sdk/types": "3.391.0", - "@smithy/property-provider": "^2.0.0", - "@smithy/types": "^2.2.0", "tslib": "^2.5.0" }, "engines": { "node": ">=14.0.0" } }, - "node_modules/@aws-sdk/credential-providers/node_modules/@aws-sdk/middleware-host-header": { - "version": "3.391.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-host-header/-/middleware-host-header-3.391.0.tgz", - "integrity": "sha512-+nyNr0rb2ixY7mU48nibr7L7gsw37y4oELhqgnNKhcjZDJ34imBwKIMFa64n21FdftmhcjR8IdSpzXE9xrkJ8g==", + "node_modules/@aws-sdk/lib-storage/node_modules/@smithy/util-utf8": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-2.0.0.tgz", + "integrity": "sha512-rctU1VkziY84n5OXe3bPNpKR001ZCME2JCaBBFgtiM2hfKbHFudc/BkMuPab8hRbLd0j3vbnBTTZ1igBf0wgiQ==", "dependencies": { - "@aws-sdk/types": "3.391.0", - "@smithy/protocol-http": "^2.0.3", - "@smithy/types": "^2.2.0", + "@smithy/util-buffer-from": "^2.0.0", "tslib": "^2.5.0" }, "engines": { "node": ">=14.0.0" } }, - "node_modules/@aws-sdk/credential-providers/node_modules/@aws-sdk/middleware-logger": { - "version": "3.391.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-logger/-/middleware-logger-3.391.0.tgz", - "integrity": "sha512-KOwl5zo16b17JDhqILHBStccBQ2w35em7+/6vdkJdUII6OU8aVIFTlIQT9wOUvd4do6biIRBMZG3IK0Rg7mRDQ==", + "node_modules/@aws-sdk/md5-js": { + "version": "3.370.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/md5-js/-/md5-js-3.370.0.tgz", + "integrity": "sha512-wch3+hiRdFGsu5E+w3WU9qmumQErKshtgetd6wMgFYm2MPSksFU58rM/aiwiWRA6knpcaShKaPKMmGnuX3HwhQ==", "dependencies": { - "@aws-sdk/types": "3.391.0", - "@smithy/types": "^2.2.0", + "@aws-sdk/types": "3.370.0", + "@aws-sdk/util-utf8": "3.310.0", "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" } }, - "node_modules/@aws-sdk/credential-providers/node_modules/@aws-sdk/middleware-recursion-detection": { - "version": "3.391.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.391.0.tgz", - "integrity": "sha512-hVR3z59G7pX4pjDQs9Ag1tMgbLeGXOzeAAaNP9fEtHSd3KBMAGQgN3K3b9WPjzE2W0EoloHRJMK4qxZErdde2g==", + "node_modules/@aws-sdk/middleware-bucket-endpoint": { + "version": "3.370.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-bucket-endpoint/-/middleware-bucket-endpoint-3.370.0.tgz", + "integrity": "sha512-B36+fOeJVO0D9cjR92Ob6Ki2FTzyTQ/uKk8w+xtur6W6zYVOPU4IQNpNZvN3Ykt4jitR2uUnVSlBb3sXHHhdFA==", "dependencies": { - "@aws-sdk/types": "3.391.0", - "@smithy/protocol-http": "^2.0.3", - "@smithy/types": "^2.2.0", + "@aws-sdk/types": "3.370.0", + "@aws-sdk/util-arn-parser": "3.310.0", + "@smithy/protocol-http": "^1.1.0", + "@smithy/types": "^1.1.0", + "@smithy/util-config-provider": "^1.0.1", "tslib": "^2.5.0" }, "engines": { "node": ">=14.0.0" } }, - "node_modules/@aws-sdk/credential-providers/node_modules/@aws-sdk/middleware-sdk-sts": { - "version": "3.391.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-sdk-sts/-/middleware-sdk-sts-3.391.0.tgz", - "integrity": "sha512-6ZXI3Z4QU+TnT5PwKWloGmRHG81tWeI18/zxf9wWzrO2NhYFvITzEJH0vWLLiXdWtn/BYfLULXtDvkTaepbI5A==", + "node_modules/@aws-sdk/middleware-expect-continue": { + "version": "3.370.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-expect-continue/-/middleware-expect-continue-3.370.0.tgz", + "integrity": "sha512-OlFIpXa53obLryHyrqedE2Cp8lp2k+1Vjd++hlZFDFJncRlWZMxoXSyl6shQPqhIiGnNW4vt7tG5xE4jg4NAvw==", "dependencies": { - "@aws-sdk/middleware-signing": "3.391.0", - "@aws-sdk/types": "3.391.0", - "@smithy/types": "^2.2.0", + "@aws-sdk/types": "3.370.0", + "@smithy/protocol-http": "^1.1.0", + "@smithy/types": "^1.1.0", "tslib": "^2.5.0" }, "engines": { "node": ">=14.0.0" } }, - "node_modules/@aws-sdk/credential-providers/node_modules/@aws-sdk/middleware-signing": { - "version": "3.391.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-signing/-/middleware-signing-3.391.0.tgz", - "integrity": "sha512-2pAJJlZqaHc0d+cz2FTVrQmWi8ygKfqfczHUo/loCtOaMNtWXBHb/JsLEecs6cXdizy6gi3YsLz6VZYwY4Ssxw==", + "node_modules/@aws-sdk/middleware-flexible-checksums": { + "version": "3.370.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-flexible-checksums/-/middleware-flexible-checksums-3.370.0.tgz", + "integrity": "sha512-62fyW4hZxppvkQKSXdkzjHQ95dXyVCuL18Sfnlciy9pr9f/t5w6LhZIxsNIW+Ge9mbgc661SVRKTwxlZj6FuLQ==", "dependencies": { - "@aws-sdk/types": "3.391.0", - "@smithy/property-provider": "^2.0.0", - "@smithy/protocol-http": "^2.0.3", - "@smithy/signature-v4": "^2.0.0", - "@smithy/types": "^2.2.0", - "@smithy/util-middleware": "^2.0.0", + "@aws-crypto/crc32": "3.0.0", + "@aws-crypto/crc32c": "3.0.0", + "@aws-sdk/types": "3.370.0", + "@smithy/is-array-buffer": "^1.0.1", + "@smithy/protocol-http": "^1.1.0", + "@smithy/types": "^1.1.0", + "@smithy/util-utf8": "^1.0.1", "tslib": "^2.5.0" }, "engines": { "node": ">=14.0.0" } }, - "node_modules/@aws-sdk/credential-providers/node_modules/@aws-sdk/middleware-user-agent": { - "version": "3.391.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.391.0.tgz", - "integrity": "sha512-LdK9uMNA14zqRw3B79Mhy7GX36qld/GYo93xuu+lr+AQ98leZEdc6GUbrtNDI3fP1Z8TMQcyHUKBml4/B+wXpQ==", + "node_modules/@aws-sdk/middleware-host-header": { + "version": "3.413.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-host-header/-/middleware-host-header-3.413.0.tgz", + "integrity": "sha512-r9PQx468EzPHo9wRzZLfgROpKtVdbkteMrdhsuM12bifVHjU1OHr7yfhc1OdWv39X8Xiv6F8n5r+RBQEM0S6+g==", "dependencies": { - "@aws-sdk/types": "3.391.0", - "@aws-sdk/util-endpoints": "3.391.0", - "@smithy/protocol-http": "^2.0.3", - "@smithy/types": "^2.2.0", + "@aws-sdk/types": "3.413.0", + "@smithy/protocol-http": "^3.0.3", + "@smithy/types": "^2.3.1", "tslib": "^2.5.0" }, "engines": { "node": ">=14.0.0" } }, - "node_modules/@aws-sdk/credential-providers/node_modules/@aws-sdk/token-providers": { - "version": "3.391.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/token-providers/-/token-providers-3.391.0.tgz", - "integrity": "sha512-kgfArsKLDJE71qQjfXiHiM5cZqgDHlMsqEx35+A65GmTWJaS1PGDqu3ZvVVU8E5mxnCCLw7vho21fsjvH6TBpg==", + "node_modules/@aws-sdk/middleware-host-header/node_modules/@aws-sdk/types": { + "version": "3.413.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.413.0.tgz", + "integrity": "sha512-j1xib0f/TazIFc5ySIKOlT1ujntRbaoG4LJFeEezz4ji03/wSJMI8Vi4KjzpBp8J1tTu0oRDnsxRIGixsUBeYQ==", "dependencies": { - "@aws-crypto/sha256-browser": "3.0.0", - "@aws-crypto/sha256-js": "3.0.0", - "@aws-sdk/middleware-host-header": "3.391.0", - "@aws-sdk/middleware-logger": "3.391.0", - "@aws-sdk/middleware-recursion-detection": "3.391.0", - "@aws-sdk/middleware-user-agent": "3.391.0", - "@aws-sdk/types": "3.391.0", - "@aws-sdk/util-endpoints": "3.391.0", - "@aws-sdk/util-user-agent-browser": "3.391.0", - "@aws-sdk/util-user-agent-node": "3.391.0", - "@smithy/config-resolver": "^2.0.3", - "@smithy/fetch-http-handler": "^2.0.3", - "@smithy/hash-node": "^2.0.3", - "@smithy/invalid-dependency": "^2.0.3", - "@smithy/middleware-content-length": "^2.0.3", - "@smithy/middleware-endpoint": "^2.0.3", - "@smithy/middleware-retry": "^2.0.3", - "@smithy/middleware-serde": "^2.0.3", - "@smithy/middleware-stack": "^2.0.0", - "@smithy/node-config-provider": "^2.0.3", - "@smithy/node-http-handler": "^2.0.3", - "@smithy/property-provider": "^2.0.0", - "@smithy/protocol-http": "^2.0.3", - "@smithy/shared-ini-file-loader": "^2.0.0", - "@smithy/smithy-client": "^2.0.3", - "@smithy/types": "^2.2.0", - "@smithy/url-parser": "^2.0.3", - "@smithy/util-base64": "^2.0.0", - "@smithy/util-body-length-browser": "^2.0.0", - "@smithy/util-body-length-node": "^2.0.0", - "@smithy/util-defaults-mode-browser": "^2.0.3", - "@smithy/util-defaults-mode-node": "^2.0.3", - "@smithy/util-retry": "^2.0.0", - "@smithy/util-utf8": "^2.0.0", + "@smithy/types": "^2.3.1", "tslib": "^2.5.0" }, "engines": { "node": ">=14.0.0" } }, - "node_modules/@aws-sdk/credential-providers/node_modules/@aws-sdk/types": { - "version": "3.391.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.391.0.tgz", - "integrity": "sha512-QpYVFKMOnzHz/JMj/b8wb18qxiT92U/5r5MmtRz2R3LOH6ooTO96k4ozXCrYr0qNed1PAnOj73rPrrH2wnCJKQ==", + "node_modules/@aws-sdk/middleware-host-header/node_modules/@smithy/protocol-http": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-3.0.4.tgz", + "integrity": "sha512-CGfSWk6TRlbwa8YgrSXdn80Yu7pov3EV/h7TSfiCHhq6/LO3WymmqnzgH1f0qV2bdTDipIkTNp5dGCGN3Af/5g==", "dependencies": { - "@smithy/types": "^2.2.0", + "@smithy/types": "^2.3.2", "tslib": "^2.5.0" }, "engines": { "node": ">=14.0.0" } }, - "node_modules/@aws-sdk/credential-providers/node_modules/@aws-sdk/util-endpoints": { - "version": "3.391.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-endpoints/-/util-endpoints-3.391.0.tgz", - "integrity": "sha512-zv4sYDTQhNxyLoekcE02/nk3xvoo6yCHDy1kDJk0MFxOKaqUB+CvZdQBR4YBLSDlD4o4DUBmdYgKT58FfbM8sQ==", + "node_modules/@aws-sdk/middleware-host-header/node_modules/@smithy/types": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-2.3.2.tgz", + "integrity": "sha512-iH0cdKi7HQlzfAM3w2shFk/qZYKAqJWswtpmQpPtlruF+uFZeGEpMJjgDRyhWiddfVM4e2oP4nMaOBsMy6lXgg==", "dependencies": { - "@aws-sdk/types": "3.391.0", "tslib": "^2.5.0" }, "engines": { "node": ">=14.0.0" } }, - "node_modules/@aws-sdk/credential-providers/node_modules/@aws-sdk/util-user-agent-browser": { - "version": "3.391.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.391.0.tgz", - "integrity": "sha512-6ipHOB1WdCBNeAMJauN7l2qNE0WLVaTNhkD290/ElXm1FHGTL8yw6lIDIjhIFO1bmbZxDiKApwDiG7ROhaJoxQ==", - "dependencies": { - "@aws-sdk/types": "3.391.0", - "@smithy/types": "^2.2.0", - "bowser": "^2.11.0", - "tslib": "^2.5.0" - } - }, - "node_modules/@aws-sdk/credential-providers/node_modules/@aws-sdk/util-user-agent-node": { - "version": "3.391.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.391.0.tgz", - "integrity": "sha512-PVvAK/Lf4BdB1eJIZtyFpGSslGQwKpYt9/hKs5NlR+qxBMXU9T0DnTqH4GiXZaazvXr7OUVWitIF2b7iKBMTow==", + "node_modules/@aws-sdk/middleware-location-constraint": { + "version": "3.370.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-location-constraint/-/middleware-location-constraint-3.370.0.tgz", + "integrity": "sha512-NlDZEbBOF1IN7svUTcjbLodkUctt9zsfDI8+DqNlklRs5lsPb91WYvahOfjFO/EvACixa+a5d3cCumMCaIq4Cw==", "dependencies": { - "@aws-sdk/types": "3.391.0", - "@smithy/node-config-provider": "^2.0.3", - "@smithy/types": "^2.2.0", + "@aws-sdk/types": "3.370.0", + "@smithy/types": "^1.1.0", "tslib": "^2.5.0" }, "engines": { "node": ">=14.0.0" - }, - "peerDependencies": { - "aws-crt": ">=1.0.0" - }, - "peerDependenciesMeta": { - "aws-crt": { - "optional": true - } } }, - "node_modules/@aws-sdk/credential-providers/node_modules/@smithy/abort-controller": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/@smithy/abort-controller/-/abort-controller-2.0.6.tgz", - "integrity": "sha512-4I7g0lyGUlW2onf8mD76IzU37oRWSHsQ5zlW5MjDzgg4I4J9bOK4500Gx6qOuoN7+GulAnGLe1YwyrIluzhakg==", + "node_modules/@aws-sdk/middleware-logger": { + "version": "3.413.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-logger/-/middleware-logger-3.413.0.tgz", + "integrity": "sha512-jqcXDubcKvoqBy+kkEa0WoNjG6SveDeyNy+gdGnTV+DEtYjkcHrHJei4q0W5zFl0mzc+dP+z8tJF44rv95ZY3Q==", "dependencies": { - "@smithy/types": "^2.3.0", + "@aws-sdk/types": "3.413.0", + "@smithy/types": "^2.3.1", "tslib": "^2.5.0" }, "engines": { "node": ">=14.0.0" } }, - "node_modules/@aws-sdk/credential-providers/node_modules/@smithy/config-resolver": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/@smithy/config-resolver/-/config-resolver-2.0.7.tgz", - "integrity": "sha512-J4J1AWiqaApC+3I9U++SuxAQ3BOoM5VoYnpFzCZcb63aLF80Zpc/nq2pFR1OsEIYyg2UYNdcBKKfHABmwo4WgQ==", + "node_modules/@aws-sdk/middleware-logger/node_modules/@aws-sdk/types": { + "version": "3.413.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.413.0.tgz", + "integrity": "sha512-j1xib0f/TazIFc5ySIKOlT1ujntRbaoG4LJFeEezz4ji03/wSJMI8Vi4KjzpBp8J1tTu0oRDnsxRIGixsUBeYQ==", "dependencies": { - "@smithy/node-config-provider": "^2.0.9", - "@smithy/types": "^2.3.0", - "@smithy/util-config-provider": "^2.0.0", - "@smithy/util-middleware": "^2.0.0", + "@smithy/types": "^2.3.1", "tslib": "^2.5.0" }, "engines": { "node": ">=14.0.0" } }, - "node_modules/@aws-sdk/credential-providers/node_modules/@smithy/credential-provider-imds": { - "version": "2.0.9", - "resolved": "https://registry.npmjs.org/@smithy/credential-provider-imds/-/credential-provider-imds-2.0.9.tgz", - "integrity": "sha512-K7WZRkHS5HZofRgK+O8W4YXXyaVexU1K6hp9vlUL/8CsnrFbZS9quyH/6hTROrYh2PuJr24yii1kc83NJdxMGQ==", + "node_modules/@aws-sdk/middleware-logger/node_modules/@smithy/types": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-2.3.2.tgz", + "integrity": "sha512-iH0cdKi7HQlzfAM3w2shFk/qZYKAqJWswtpmQpPtlruF+uFZeGEpMJjgDRyhWiddfVM4e2oP4nMaOBsMy6lXgg==", "dependencies": { - "@smithy/node-config-provider": "^2.0.9", - "@smithy/property-provider": "^2.0.7", - "@smithy/types": "^2.3.0", - "@smithy/url-parser": "^2.0.6", "tslib": "^2.5.0" }, "engines": { "node": ">=14.0.0" } }, - "node_modules/@aws-sdk/credential-providers/node_modules/@smithy/eventstream-codec": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/@smithy/eventstream-codec/-/eventstream-codec-2.0.6.tgz", - "integrity": "sha512-J9xL82mlYRUMXFnB9VaThXkD7z2JLr52FIVZMoQQ1dxZG5ub+NOGmzaTTZC/cMmKXI/nwCoFuwDWCTjwQhYhQA==", - "dependencies": { - "@aws-crypto/crc32": "3.0.0", - "@smithy/types": "^2.3.0", - "@smithy/util-hex-encoding": "^2.0.0", - "tslib": "^2.5.0" - } - }, - "node_modules/@aws-sdk/credential-providers/node_modules/@smithy/fetch-http-handler": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/@smithy/fetch-http-handler/-/fetch-http-handler-2.1.2.tgz", - "integrity": "sha512-3Gm3pQm4viUPU+e7KkRScS9t5phBxSNRS8rQSZ+HeCwK/busrX0/2HJZiwLvGblqPqi1laJB0lD18AdiOioJww==", + "node_modules/@aws-sdk/middleware-recursion-detection": { + "version": "3.413.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.413.0.tgz", + "integrity": "sha512-C6k0IKJk/A4/VBGwUjxEPG+WOjjnmWAZVRBUzaeM7PqRh+g5rLcuIV356ntV3pREVxyiSTePTYVYIHU9YXkLKQ==", "dependencies": { - "@smithy/protocol-http": "^3.0.2", - "@smithy/querystring-builder": "^2.0.6", - "@smithy/types": "^2.3.0", - "@smithy/util-base64": "^2.0.0", + "@aws-sdk/types": "3.413.0", + "@smithy/protocol-http": "^3.0.3", + "@smithy/types": "^2.3.1", "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" } }, - "node_modules/@aws-sdk/credential-providers/node_modules/@smithy/fetch-http-handler/node_modules/@smithy/protocol-http": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-3.0.2.tgz", - "integrity": "sha512-LUOWCPRihvJBkdSs+ivK9m1f/rMfF3n9Zpzg8qdry2eIG4HQqqLBMWQyF9bgk7JhsrrOa3//jJKhXzvL7wL5Xw==", + "node_modules/@aws-sdk/middleware-recursion-detection/node_modules/@aws-sdk/types": { + "version": "3.413.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.413.0.tgz", + "integrity": "sha512-j1xib0f/TazIFc5ySIKOlT1ujntRbaoG4LJFeEezz4ji03/wSJMI8Vi4KjzpBp8J1tTu0oRDnsxRIGixsUBeYQ==", "dependencies": { - "@smithy/types": "^2.3.0", + "@smithy/types": "^2.3.1", "tslib": "^2.5.0" }, "engines": { "node": ">=14.0.0" } }, - "node_modules/@aws-sdk/credential-providers/node_modules/@smithy/hash-node": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/@smithy/hash-node/-/hash-node-2.0.6.tgz", - "integrity": "sha512-xz7fzFxSzxohKGGyKPbLReRrY01JOZgRDHIXSks3PxQxG9c8PJMa5nUw0stH8UOySUgkofmMy0n7vTUsF5Mdqg==", + "node_modules/@aws-sdk/middleware-recursion-detection/node_modules/@smithy/protocol-http": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-3.0.4.tgz", + "integrity": "sha512-CGfSWk6TRlbwa8YgrSXdn80Yu7pov3EV/h7TSfiCHhq6/LO3WymmqnzgH1f0qV2bdTDipIkTNp5dGCGN3Af/5g==", "dependencies": { - "@smithy/types": "^2.3.0", - "@smithy/util-buffer-from": "^2.0.0", - "@smithy/util-utf8": "^2.0.0", + "@smithy/types": "^2.3.2", "tslib": "^2.5.0" }, "engines": { "node": ">=14.0.0" } }, - "node_modules/@aws-sdk/credential-providers/node_modules/@smithy/invalid-dependency": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/@smithy/invalid-dependency/-/invalid-dependency-2.0.6.tgz", - "integrity": "sha512-L5MUyl9mzawIvBxr0Hg3J/Q5qZFXKcBgMk0PacfK3Mthp4WAR6h7iMxdSQ23Q7X/kxOrpZuoYEdh1BWLKbDc8Q==", + "node_modules/@aws-sdk/middleware-recursion-detection/node_modules/@smithy/types": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-2.3.2.tgz", + "integrity": "sha512-iH0cdKi7HQlzfAM3w2shFk/qZYKAqJWswtpmQpPtlruF+uFZeGEpMJjgDRyhWiddfVM4e2oP4nMaOBsMy6lXgg==", "dependencies": { - "@smithy/types": "^2.3.0", "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" } }, - "node_modules/@aws-sdk/credential-providers/node_modules/@smithy/is-array-buffer": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-2.0.0.tgz", - "integrity": "sha512-z3PjFjMyZNI98JFRJi/U0nGoLWMSJlDjAW4QUX2WNZLas5C0CmVV6LJ01JI0k90l7FvpmixjWxPFmENSClQ7ug==", + "node_modules/@aws-sdk/middleware-sdk-s3": { + "version": "3.370.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-sdk-s3/-/middleware-sdk-s3-3.370.0.tgz", + "integrity": "sha512-DPYXtveWBDS5MzSHWTThg2KkLaOzZkCgPejjEuw3yl4ljsHawDs/ZIVCtmWXlBIS2lLCaBMpCV+t9psuJ/6/zQ==", "dependencies": { + "@aws-sdk/types": "3.370.0", + "@aws-sdk/util-arn-parser": "3.310.0", + "@smithy/protocol-http": "^1.1.0", + "@smithy/types": "^1.1.0", "tslib": "^2.5.0" }, "engines": { "node": ">=14.0.0" } }, - "node_modules/@aws-sdk/credential-providers/node_modules/@smithy/middleware-content-length": { - "version": "2.0.8", - "resolved": "https://registry.npmjs.org/@smithy/middleware-content-length/-/middleware-content-length-2.0.8.tgz", - "integrity": "sha512-fHJFsscHXrYhUSWMFJNXfsZW8KsyhWQfBgU3b0nvDfpm+NAeQLqKYNhywGrDwZQc1k+lt7Fw9faAquhNPxTZRA==", + "node_modules/@aws-sdk/middleware-sdk-sts": { + "version": "3.413.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-sdk-sts/-/middleware-sdk-sts-3.413.0.tgz", + "integrity": "sha512-t0u//JUyaEZRVnH5q+Ur3tWnuyIsTdwA0XOdDCZXcSlLYzGp2MI/tScLjn9IydRrceIFpFfmbjk4Nf/Q6TeBTQ==", "dependencies": { - "@smithy/protocol-http": "^3.0.2", - "@smithy/types": "^2.3.0", + "@aws-sdk/middleware-signing": "3.413.0", + "@aws-sdk/types": "3.413.0", + "@smithy/types": "^2.3.1", "tslib": "^2.5.0" }, "engines": { "node": ">=14.0.0" } }, - "node_modules/@aws-sdk/credential-providers/node_modules/@smithy/middleware-content-length/node_modules/@smithy/protocol-http": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-3.0.2.tgz", - "integrity": "sha512-LUOWCPRihvJBkdSs+ivK9m1f/rMfF3n9Zpzg8qdry2eIG4HQqqLBMWQyF9bgk7JhsrrOa3//jJKhXzvL7wL5Xw==", + "node_modules/@aws-sdk/middleware-sdk-sts/node_modules/@aws-sdk/types": { + "version": "3.413.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.413.0.tgz", + "integrity": "sha512-j1xib0f/TazIFc5ySIKOlT1ujntRbaoG4LJFeEezz4ji03/wSJMI8Vi4KjzpBp8J1tTu0oRDnsxRIGixsUBeYQ==", "dependencies": { - "@smithy/types": "^2.3.0", + "@smithy/types": "^2.3.1", "tslib": "^2.5.0" }, "engines": { "node": ">=14.0.0" } }, - "node_modules/@aws-sdk/credential-providers/node_modules/@smithy/middleware-endpoint": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/@smithy/middleware-endpoint/-/middleware-endpoint-2.0.6.tgz", - "integrity": "sha512-MuSPPtEHFal/M77tR3ffLsdOfX29IZpA990nGuoPj5zQnAYrA4PYBGoqqrASQKm8Xb3C0NwuYzOATT7WX4f5Pg==", + "node_modules/@aws-sdk/middleware-sdk-sts/node_modules/@smithy/types": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-2.3.2.tgz", + "integrity": "sha512-iH0cdKi7HQlzfAM3w2shFk/qZYKAqJWswtpmQpPtlruF+uFZeGEpMJjgDRyhWiddfVM4e2oP4nMaOBsMy6lXgg==", "dependencies": { - "@smithy/middleware-serde": "^2.0.6", - "@smithy/types": "^2.3.0", - "@smithy/url-parser": "^2.0.6", - "@smithy/util-middleware": "^2.0.0", "tslib": "^2.5.0" }, "engines": { "node": ">=14.0.0" } }, - "node_modules/@aws-sdk/credential-providers/node_modules/@smithy/middleware-retry": { - "version": "2.0.9", - "resolved": "https://registry.npmjs.org/@smithy/middleware-retry/-/middleware-retry-2.0.9.tgz", - "integrity": "sha512-gneEqWj4l/ZjHdZPk0BFMXoTalRArdQ8i579/KqJgBAc6Ux5vnR/SSppkMCkj2kOQYwdypvzSPeqEW3ZrvIg6g==", + "node_modules/@aws-sdk/middleware-signing": { + "version": "3.413.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-signing/-/middleware-signing-3.413.0.tgz", + "integrity": "sha512-QFEnVvIKYPCermM+ESxEztgUgXzGSKpnPnohMYNvSZySqmOLu/4VvxiZbRO/BX9J3ZHcUgaw4vKm5VBZRrycxw==", "dependencies": { - "@smithy/node-config-provider": "^2.0.9", - "@smithy/protocol-http": "^3.0.2", - "@smithy/service-error-classification": "^2.0.0", - "@smithy/types": "^2.3.0", + "@aws-sdk/types": "3.413.0", + "@smithy/property-provider": "^2.0.0", + "@smithy/protocol-http": "^3.0.3", + "@smithy/signature-v4": "^2.0.0", + "@smithy/types": "^2.3.1", "@smithy/util-middleware": "^2.0.0", - "@smithy/util-retry": "^2.0.0", - "tslib": "^2.5.0", - "uuid": "^8.3.2" + "tslib": "^2.5.0" }, "engines": { "node": ">=14.0.0" } }, - "node_modules/@aws-sdk/credential-providers/node_modules/@smithy/middleware-retry/node_modules/@smithy/protocol-http": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-3.0.2.tgz", - "integrity": "sha512-LUOWCPRihvJBkdSs+ivK9m1f/rMfF3n9Zpzg8qdry2eIG4HQqqLBMWQyF9bgk7JhsrrOa3//jJKhXzvL7wL5Xw==", + "node_modules/@aws-sdk/middleware-signing/node_modules/@aws-sdk/types": { + "version": "3.413.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.413.0.tgz", + "integrity": "sha512-j1xib0f/TazIFc5ySIKOlT1ujntRbaoG4LJFeEezz4ji03/wSJMI8Vi4KjzpBp8J1tTu0oRDnsxRIGixsUBeYQ==", "dependencies": { - "@smithy/types": "^2.3.0", + "@smithy/types": "^2.3.1", "tslib": "^2.5.0" }, "engines": { "node": ">=14.0.0" } }, - "node_modules/@aws-sdk/credential-providers/node_modules/@smithy/middleware-serde": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/@smithy/middleware-serde/-/middleware-serde-2.0.6.tgz", - "integrity": "sha512-8/GODBngYbrS28CMZtaHIL4R9rLNSQ/zgb+N1OAZ02NwBUawlnLDcatve9YRzhJC/IWz0/pt+WimJZaO1sGcig==", + "node_modules/@aws-sdk/middleware-signing/node_modules/@smithy/eventstream-codec": { + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/@smithy/eventstream-codec/-/eventstream-codec-2.0.8.tgz", + "integrity": "sha512-onO4to8ujCKn4m5XagReT9Nc6FlNG5vveuvjp1H7AtaG7njdet1LOl6/jmUOkskF2C/w+9jNw3r9Ak+ghOvN0A==", "dependencies": { - "@smithy/types": "^2.3.0", + "@aws-crypto/crc32": "3.0.0", + "@smithy/types": "^2.3.2", + "@smithy/util-hex-encoding": "^2.0.0", "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" } }, - "node_modules/@aws-sdk/credential-providers/node_modules/@smithy/middleware-stack": { + "node_modules/@aws-sdk/middleware-signing/node_modules/@smithy/is-array-buffer": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@smithy/middleware-stack/-/middleware-stack-2.0.0.tgz", - "integrity": "sha512-31XC1xNF65nlbc16yuh3wwTudmqs6qy4EseQUGF8A/p2m/5wdd/cnXJqpniy/XvXVwkHPz/GwV36HqzHtIKATQ==", + "resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-2.0.0.tgz", + "integrity": "sha512-z3PjFjMyZNI98JFRJi/U0nGoLWMSJlDjAW4QUX2WNZLas5C0CmVV6LJ01JI0k90l7FvpmixjWxPFmENSClQ7ug==", "dependencies": { "tslib": "^2.5.0" }, @@ -3374,268 +4742,237 @@ "node": ">=14.0.0" } }, - "node_modules/@aws-sdk/credential-providers/node_modules/@smithy/node-config-provider": { + "node_modules/@aws-sdk/middleware-signing/node_modules/@smithy/property-provider": { "version": "2.0.9", - "resolved": "https://registry.npmjs.org/@smithy/node-config-provider/-/node-config-provider-2.0.9.tgz", - "integrity": "sha512-TlSPbCwtT/jgNnmPQqKuCR5CFN8UIrCCHRrgUfs3NqRMuaLLeP8TPe1fSKq2J8h1M/jd4BF853gneles0gWevg==", + "resolved": "https://registry.npmjs.org/@smithy/property-provider/-/property-provider-2.0.9.tgz", + "integrity": "sha512-25pPZ8f8DeRwYI5wbPRZaoMoR+3vrw8DwbA0TjP+GsdiB2KxScndr4HQehiJ5+WJ0giOTWhLz0bd+7Djv1qpUQ==", "dependencies": { - "@smithy/property-provider": "^2.0.7", - "@smithy/shared-ini-file-loader": "^2.0.8", - "@smithy/types": "^2.3.0", + "@smithy/types": "^2.3.2", "tslib": "^2.5.0" }, "engines": { "node": ">=14.0.0" } }, - "node_modules/@aws-sdk/credential-providers/node_modules/@smithy/node-http-handler": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/@smithy/node-http-handler/-/node-http-handler-2.1.2.tgz", - "integrity": "sha512-PdEEDCShuM8zxGoaRxmGB/1ikB8oeqz+ZAF9VIA8FCP3E59j8zDTF+wCELoWd1Y6gtxr+RcTAg5sA8nvn5qH/w==", + "node_modules/@aws-sdk/middleware-signing/node_modules/@smithy/protocol-http": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-3.0.4.tgz", + "integrity": "sha512-CGfSWk6TRlbwa8YgrSXdn80Yu7pov3EV/h7TSfiCHhq6/LO3WymmqnzgH1f0qV2bdTDipIkTNp5dGCGN3Af/5g==", "dependencies": { - "@smithy/abort-controller": "^2.0.6", - "@smithy/protocol-http": "^3.0.2", - "@smithy/querystring-builder": "^2.0.6", - "@smithy/types": "^2.3.0", + "@smithy/types": "^2.3.2", "tslib": "^2.5.0" }, "engines": { "node": ">=14.0.0" } }, - "node_modules/@aws-sdk/credential-providers/node_modules/@smithy/node-http-handler/node_modules/@smithy/protocol-http": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-3.0.2.tgz", - "integrity": "sha512-LUOWCPRihvJBkdSs+ivK9m1f/rMfF3n9Zpzg8qdry2eIG4HQqqLBMWQyF9bgk7JhsrrOa3//jJKhXzvL7wL5Xw==", + "node_modules/@aws-sdk/middleware-signing/node_modules/@smithy/signature-v4": { + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/@smithy/signature-v4/-/signature-v4-2.0.8.tgz", + "integrity": "sha512-qrtiYMzaLlQ5HSJOaFwnyTQ3JLjmPY+3+pr9IBDpCVM6YtVj22cBLVB9bPOiZMIpkdI7ZRdxLBFlIjh5CO1Bhw==", "dependencies": { - "@smithy/types": "^2.3.0", + "@smithy/eventstream-codec": "^2.0.8", + "@smithy/is-array-buffer": "^2.0.0", + "@smithy/types": "^2.3.2", + "@smithy/util-hex-encoding": "^2.0.0", + "@smithy/util-middleware": "^2.0.1", + "@smithy/util-uri-escape": "^2.0.0", + "@smithy/util-utf8": "^2.0.0", "tslib": "^2.5.0" }, "engines": { "node": ">=14.0.0" } }, - "node_modules/@aws-sdk/credential-providers/node_modules/@smithy/property-provider": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/@smithy/property-provider/-/property-provider-2.0.7.tgz", - "integrity": "sha512-XT8Tl7YNxM8tCtGqy7v7DSf6PxyXaPE9cdA/Yj4dEw2b05V3RrPqsP+t5XJiZu0yIsQ7pdeYZWv2sSEWVjNeAg==", + "node_modules/@aws-sdk/middleware-signing/node_modules/@smithy/types": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-2.3.2.tgz", + "integrity": "sha512-iH0cdKi7HQlzfAM3w2shFk/qZYKAqJWswtpmQpPtlruF+uFZeGEpMJjgDRyhWiddfVM4e2oP4nMaOBsMy6lXgg==", "dependencies": { - "@smithy/types": "^2.3.0", "tslib": "^2.5.0" }, "engines": { "node": ">=14.0.0" } }, - "node_modules/@aws-sdk/credential-providers/node_modules/@smithy/protocol-http": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-2.0.5.tgz", - "integrity": "sha512-d2hhHj34mA2V86doiDfrsy2fNTnUOowGaf9hKb0hIPHqvcnShU4/OSc4Uf1FwHkAdYF3cFXTrj5VGUYbEuvMdw==", + "node_modules/@aws-sdk/middleware-signing/node_modules/@smithy/util-buffer-from": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-2.0.0.tgz", + "integrity": "sha512-/YNnLoHsR+4W4Vf2wL5lGv0ksg8Bmk3GEGxn2vEQt52AQaPSCuaO5PM5VM7lP1K9qHRKHwrPGktqVoAHKWHxzw==", "dependencies": { - "@smithy/types": "^2.2.2", + "@smithy/is-array-buffer": "^2.0.0", "tslib": "^2.5.0" }, "engines": { "node": ">=14.0.0" } }, - "node_modules/@aws-sdk/credential-providers/node_modules/@smithy/querystring-builder": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/@smithy/querystring-builder/-/querystring-builder-2.0.6.tgz", - "integrity": "sha512-HnU00shCGoV8vKJZTiNBkNvR9NogU3NIUaVMAGJPSqNGJj3psWo+TUrC0BVCDcwiCljXwXCFGJqIcsWtClrktQ==", + "node_modules/@aws-sdk/middleware-signing/node_modules/@smithy/util-hex-encoding": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-hex-encoding/-/util-hex-encoding-2.0.0.tgz", + "integrity": "sha512-c5xY+NUnFqG6d7HFh1IFfrm3mGl29lC+vF+geHv4ToiuJCBmIfzx6IeHLg+OgRdPFKDXIw6pvi+p3CsscaMcMA==", "dependencies": { - "@smithy/types": "^2.3.0", - "@smithy/util-uri-escape": "^2.0.0", "tslib": "^2.5.0" }, "engines": { "node": ">=14.0.0" } }, - "node_modules/@aws-sdk/credential-providers/node_modules/@smithy/querystring-parser": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/@smithy/querystring-parser/-/querystring-parser-2.0.6.tgz", - "integrity": "sha512-i4LKoXHP7pTFAPjLIJyQXYOhWokbcFha3WWsX74sAKmuluv0XM2cxONZoFxwEzmWhsNyM6buSwJSZXyPiec0AQ==", + "node_modules/@aws-sdk/middleware-signing/node_modules/@smithy/util-middleware": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@smithy/util-middleware/-/util-middleware-2.0.1.tgz", + "integrity": "sha512-LnsBMi0Mg3gfz/TpNGLv2Jjcz2ra1OX5HR/4IaCepIYmtPQzqMWDdhX/XTW1LS8OZ0xbQuyQPcHkQ+2XkhWOVQ==", "dependencies": { - "@smithy/types": "^2.3.0", + "@smithy/types": "^2.3.2", "tslib": "^2.5.0" }, "engines": { "node": ">=14.0.0" } }, - "node_modules/@aws-sdk/credential-providers/node_modules/@smithy/service-error-classification": { + "node_modules/@aws-sdk/middleware-signing/node_modules/@smithy/util-uri-escape": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@smithy/service-error-classification/-/service-error-classification-2.0.0.tgz", - "integrity": "sha512-2z5Nafy1O0cTf69wKyNjGW/sNVMiqDnb4jgwfMG8ye8KnFJ5qmJpDccwIbJNhXIfbsxTg9SEec2oe1cexhMJvw==", - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/credential-providers/node_modules/@smithy/shared-ini-file-loader": { - "version": "2.0.8", - "resolved": "https://registry.npmjs.org/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-2.0.8.tgz", - "integrity": "sha512-4u+V+Dv7JGpJ0tppB5rxCem7WhdFux950z4cGPhV0kHTPkKe8DDgINzOlVa2RBu5dI33D02OBJcxFjhW4FPORg==", + "resolved": "https://registry.npmjs.org/@smithy/util-uri-escape/-/util-uri-escape-2.0.0.tgz", + "integrity": "sha512-ebkxsqinSdEooQduuk9CbKcI+wheijxEb3utGXkCoYQkJnwTnLbH1JXGimJtUkQwNQbsbuYwG2+aFVyZf5TLaw==", "dependencies": { - "@smithy/types": "^2.3.0", "tslib": "^2.5.0" }, "engines": { "node": ">=14.0.0" } }, - "node_modules/@aws-sdk/credential-providers/node_modules/@smithy/signature-v4": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/@smithy/signature-v4/-/signature-v4-2.0.6.tgz", - "integrity": "sha512-4zNTi8w4sky07YKq7oYucZt4ogY00IEaS1NFDXxmCN5V/ywE0WiK+WMim+8wtYQmB0qy3oExZR4LoCAml6j/rA==", + "node_modules/@aws-sdk/middleware-signing/node_modules/@smithy/util-utf8": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-2.0.0.tgz", + "integrity": "sha512-rctU1VkziY84n5OXe3bPNpKR001ZCME2JCaBBFgtiM2hfKbHFudc/BkMuPab8hRbLd0j3vbnBTTZ1igBf0wgiQ==", "dependencies": { - "@smithy/eventstream-codec": "^2.0.6", - "@smithy/is-array-buffer": "^2.0.0", - "@smithy/types": "^2.3.0", - "@smithy/util-hex-encoding": "^2.0.0", - "@smithy/util-middleware": "^2.0.0", - "@smithy/util-uri-escape": "^2.0.0", - "@smithy/util-utf8": "^2.0.0", + "@smithy/util-buffer-from": "^2.0.0", "tslib": "^2.5.0" }, "engines": { "node": ">=14.0.0" } }, - "node_modules/@aws-sdk/credential-providers/node_modules/@smithy/smithy-client": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/@smithy/smithy-client/-/smithy-client-2.1.2.tgz", - "integrity": "sha512-quUuJ0SsqgG7Flopvfd8iQJLhHfnMYtYPuvImVQzPHXtqUQImtVz5msudMxW3t3jl+L0w8RlR+IN2zT6UqCJ6g==", + "node_modules/@aws-sdk/middleware-ssec": { + "version": "3.370.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-ssec/-/middleware-ssec-3.370.0.tgz", + "integrity": "sha512-NIosfLS7mxCNdGYnuy76W9qP3f3YWVTusUA+uv+s6rnwG+Z2UheXCf1wpnJKzxORA8pioSP7ylZ8w2A0reCgYQ==", "dependencies": { - "@smithy/middleware-stack": "^2.0.0", - "@smithy/types": "^2.3.0", - "@smithy/util-stream": "^2.0.8", + "@aws-sdk/types": "3.370.0", + "@smithy/types": "^1.1.0", "tslib": "^2.5.0" }, "engines": { "node": ">=14.0.0" } }, - "node_modules/@aws-sdk/credential-providers/node_modules/@smithy/types": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/@smithy/types/-/types-2.3.0.tgz", - "integrity": "sha512-pJce3rd39MElkV57UTPAoSYAApjQLELUxjU5adHNLYk9gnPvyIGbJNJTZVVFu00BrgZH3W/cQe8QuFcknDyodQ==", + "node_modules/@aws-sdk/middleware-user-agent": { + "version": "3.413.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.413.0.tgz", + "integrity": "sha512-eVMJyeWxNBqerhfD+sE9sTjDtwQiECrfU6wpUQP5fGPhJD2cVVZPxuTuJGDZCu/4k/V61dF85IYlsPUNLdVQ6w==", "dependencies": { + "@aws-sdk/types": "3.413.0", + "@aws-sdk/util-endpoints": "3.413.0", + "@smithy/protocol-http": "^3.0.3", + "@smithy/types": "^2.3.1", "tslib": "^2.5.0" }, "engines": { "node": ">=14.0.0" } }, - "node_modules/@aws-sdk/credential-providers/node_modules/@smithy/url-parser": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/@smithy/url-parser/-/url-parser-2.0.6.tgz", - "integrity": "sha512-9i6j5QW6bapHZ4rtkXOAm0hOUG1+5IVdVJXNSUTcNskwJchZH5IQuDNPCbgUi/u2P8EZazKt4wXT51QxOXCz1A==", - "dependencies": { - "@smithy/querystring-parser": "^2.0.6", - "@smithy/types": "^2.3.0", - "tslib": "^2.5.0" - } - }, - "node_modules/@aws-sdk/credential-providers/node_modules/@smithy/util-base64": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@smithy/util-base64/-/util-base64-2.0.0.tgz", - "integrity": "sha512-Zb1E4xx+m5Lud8bbeYi5FkcMJMnn+1WUnJF3qD7rAdXpaL7UjkFQLdmW5fHadoKbdHpwH9vSR8EyTJFHJs++tA==", + "node_modules/@aws-sdk/middleware-user-agent/node_modules/@aws-sdk/types": { + "version": "3.413.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.413.0.tgz", + "integrity": "sha512-j1xib0f/TazIFc5ySIKOlT1ujntRbaoG4LJFeEezz4ji03/wSJMI8Vi4KjzpBp8J1tTu0oRDnsxRIGixsUBeYQ==", "dependencies": { - "@smithy/util-buffer-from": "^2.0.0", + "@smithy/types": "^2.3.1", "tslib": "^2.5.0" }, "engines": { "node": ">=14.0.0" } }, - "node_modules/@aws-sdk/credential-providers/node_modules/@smithy/util-body-length-browser": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@smithy/util-body-length-browser/-/util-body-length-browser-2.0.0.tgz", - "integrity": "sha512-JdDuS4ircJt+FDnaQj88TzZY3+njZ6O+D3uakS32f2VNnDo3vyEuNdBOh/oFd8Df1zSZOuH1HEChk2AOYDezZg==", - "dependencies": { - "tslib": "^2.5.0" - } - }, - "node_modules/@aws-sdk/credential-providers/node_modules/@smithy/util-body-length-node": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@smithy/util-body-length-node/-/util-body-length-node-2.1.0.tgz", - "integrity": "sha512-/li0/kj/y3fQ3vyzn36NTLGmUwAICb7Jbe/CsWCktW363gh1MOcpEcSO3mJ344Gv2dqz8YJCLQpb6hju/0qOWw==", + "node_modules/@aws-sdk/middleware-user-agent/node_modules/@smithy/protocol-http": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-3.0.4.tgz", + "integrity": "sha512-CGfSWk6TRlbwa8YgrSXdn80Yu7pov3EV/h7TSfiCHhq6/LO3WymmqnzgH1f0qV2bdTDipIkTNp5dGCGN3Af/5g==", "dependencies": { + "@smithy/types": "^2.3.2", "tslib": "^2.5.0" }, "engines": { "node": ">=14.0.0" } }, - "node_modules/@aws-sdk/credential-providers/node_modules/@smithy/util-buffer-from": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-2.0.0.tgz", - "integrity": "sha512-/YNnLoHsR+4W4Vf2wL5lGv0ksg8Bmk3GEGxn2vEQt52AQaPSCuaO5PM5VM7lP1K9qHRKHwrPGktqVoAHKWHxzw==", + "node_modules/@aws-sdk/middleware-user-agent/node_modules/@smithy/types": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-2.3.2.tgz", + "integrity": "sha512-iH0cdKi7HQlzfAM3w2shFk/qZYKAqJWswtpmQpPtlruF+uFZeGEpMJjgDRyhWiddfVM4e2oP4nMaOBsMy6lXgg==", "dependencies": { - "@smithy/is-array-buffer": "^2.0.0", "tslib": "^2.5.0" }, "engines": { "node": ">=14.0.0" } - }, - "node_modules/@aws-sdk/credential-providers/node_modules/@smithy/util-config-provider": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@smithy/util-config-provider/-/util-config-provider-2.0.0.tgz", - "integrity": "sha512-xCQ6UapcIWKxXHEU4Mcs2s7LcFQRiU3XEluM2WcCjjBtQkUN71Tb+ydGmJFPxMUrW/GWMgQEEGipLym4XG0jZg==", + }, + "node_modules/@aws-sdk/region-config-resolver": { + "version": "3.413.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/region-config-resolver/-/region-config-resolver-3.413.0.tgz", + "integrity": "sha512-h90e6yyOhvoc+1F5vFk3C5mxwB8RSDEMKTO/fxexyur94seczZ1yxyYkTMZv30oc9RUiToABlHNrh/wxL7TZPQ==", "dependencies": { + "@smithy/node-config-provider": "^2.0.10", + "@smithy/types": "^2.3.1", + "@smithy/util-config-provider": "^2.0.0", + "@smithy/util-middleware": "^2.0.0", "tslib": "^2.5.0" }, "engines": { "node": ">=14.0.0" } }, - "node_modules/@aws-sdk/credential-providers/node_modules/@smithy/util-defaults-mode-browser": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-browser/-/util-defaults-mode-browser-2.0.7.tgz", - "integrity": "sha512-s1caKxC7Y87Q72Goll//clZs2WNBfG9WtFDWVRS+Qgk147YPCOUYtkpuD0XZAh/vbayObFz5tQ1fiX4G19HSCA==", + "node_modules/@aws-sdk/region-config-resolver/node_modules/@smithy/node-config-provider": { + "version": "2.0.11", + "resolved": "https://registry.npmjs.org/@smithy/node-config-provider/-/node-config-provider-2.0.11.tgz", + "integrity": "sha512-CaR1dciSSGKttjhcefpytYjsfI/Yd5mqL8am4wfmyFCDxSiPsvnEWHl8UjM/RbcAjX0klt+CeIKPSHEc0wGvJA==", "dependencies": { - "@smithy/property-provider": "^2.0.7", - "@smithy/types": "^2.3.0", - "bowser": "^2.11.0", + "@smithy/property-provider": "^2.0.9", + "@smithy/shared-ini-file-loader": "^2.0.10", + "@smithy/types": "^2.3.2", "tslib": "^2.5.0" }, "engines": { - "node": ">= 10.0.0" + "node": ">=14.0.0" } }, - "node_modules/@aws-sdk/credential-providers/node_modules/@smithy/util-defaults-mode-node": { + "node_modules/@aws-sdk/region-config-resolver/node_modules/@smithy/property-provider": { "version": "2.0.9", - "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-node/-/util-defaults-mode-node-2.0.9.tgz", - "integrity": "sha512-HlV4iNL3/PgPpmDGs0+XrAKtwFQ8rOs5P2y5Dye8dUYaJauadlzHRrNKk7wH2aBYswvT2HM+PIgXamvrE7xbcw==", + "resolved": "https://registry.npmjs.org/@smithy/property-provider/-/property-provider-2.0.9.tgz", + "integrity": "sha512-25pPZ8f8DeRwYI5wbPRZaoMoR+3vrw8DwbA0TjP+GsdiB2KxScndr4HQehiJ5+WJ0giOTWhLz0bd+7Djv1qpUQ==", "dependencies": { - "@smithy/config-resolver": "^2.0.7", - "@smithy/credential-provider-imds": "^2.0.9", - "@smithy/node-config-provider": "^2.0.9", - "@smithy/property-provider": "^2.0.7", - "@smithy/types": "^2.3.0", + "@smithy/types": "^2.3.2", "tslib": "^2.5.0" }, "engines": { - "node": ">= 10.0.0" + "node": ">=14.0.0" } }, - "node_modules/@aws-sdk/credential-providers/node_modules/@smithy/util-hex-encoding": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@smithy/util-hex-encoding/-/util-hex-encoding-2.0.0.tgz", - "integrity": "sha512-c5xY+NUnFqG6d7HFh1IFfrm3mGl29lC+vF+geHv4ToiuJCBmIfzx6IeHLg+OgRdPFKDXIw6pvi+p3CsscaMcMA==", + "node_modules/@aws-sdk/region-config-resolver/node_modules/@smithy/shared-ini-file-loader": { + "version": "2.0.10", + "resolved": "https://registry.npmjs.org/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-2.0.10.tgz", + "integrity": "sha512-jWASteSezRKohJ7GdA7pHDvmr7Q7tw3b5mu3xLHIkZy/ICftJ+O7aqNaF8wklhI7UNFoQ7flFRM3Rd0KA+1BbQ==", "dependencies": { + "@smithy/types": "^2.3.2", "tslib": "^2.5.0" }, "engines": { "node": ">=14.0.0" } }, - "node_modules/@aws-sdk/credential-providers/node_modules/@smithy/util-middleware": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@smithy/util-middleware/-/util-middleware-2.0.0.tgz", - "integrity": "sha512-eCWX4ECuDHn1wuyyDdGdUWnT4OGyIzV0LN1xRttBFMPI9Ff/4heSHVxneyiMtOB//zpXWCha1/SWHJOZstG7kA==", + "node_modules/@aws-sdk/region-config-resolver/node_modules/@smithy/types": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-2.3.2.tgz", + "integrity": "sha512-iH0cdKi7HQlzfAM3w2shFk/qZYKAqJWswtpmQpPtlruF+uFZeGEpMJjgDRyhWiddfVM4e2oP4nMaOBsMy6lXgg==", "dependencies": { "tslib": "^2.5.0" }, @@ -3643,135 +4980,152 @@ "node": ">=14.0.0" } }, - "node_modules/@aws-sdk/credential-providers/node_modules/@smithy/util-retry": { + "node_modules/@aws-sdk/region-config-resolver/node_modules/@smithy/util-config-provider": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@smithy/util-retry/-/util-retry-2.0.0.tgz", - "integrity": "sha512-/dvJ8afrElasuiiIttRJeoS2sy8YXpksQwiM/TcepqdRVp7u4ejd9C4IQURHNjlfPUT7Y6lCDSa2zQJbdHhVTg==", + "resolved": "https://registry.npmjs.org/@smithy/util-config-provider/-/util-config-provider-2.0.0.tgz", + "integrity": "sha512-xCQ6UapcIWKxXHEU4Mcs2s7LcFQRiU3XEluM2WcCjjBtQkUN71Tb+ydGmJFPxMUrW/GWMgQEEGipLym4XG0jZg==", "dependencies": { - "@smithy/service-error-classification": "^2.0.0", "tslib": "^2.5.0" }, "engines": { - "node": ">= 14.0.0" + "node": ">=14.0.0" } }, - "node_modules/@aws-sdk/credential-providers/node_modules/@smithy/util-stream": { - "version": "2.0.8", - "resolved": "https://registry.npmjs.org/@smithy/util-stream/-/util-stream-2.0.8.tgz", - "integrity": "sha512-1JoSHL/AOFRo/RVYdbOOGG5qSkU1IQN+F0f3HOZcwvGeGT5KnGwd4hLzmr0qkjKh4PW7nzuvPMdR7L8THV24Hw==", + "node_modules/@aws-sdk/region-config-resolver/node_modules/@smithy/util-middleware": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@smithy/util-middleware/-/util-middleware-2.0.1.tgz", + "integrity": "sha512-LnsBMi0Mg3gfz/TpNGLv2Jjcz2ra1OX5HR/4IaCepIYmtPQzqMWDdhX/XTW1LS8OZ0xbQuyQPcHkQ+2XkhWOVQ==", "dependencies": { - "@smithy/fetch-http-handler": "^2.1.2", - "@smithy/node-http-handler": "^2.1.2", - "@smithy/types": "^2.3.0", - "@smithy/util-base64": "^2.0.0", - "@smithy/util-buffer-from": "^2.0.0", - "@smithy/util-hex-encoding": "^2.0.0", - "@smithy/util-utf8": "^2.0.0", + "@smithy/types": "^2.3.2", "tslib": "^2.5.0" }, "engines": { "node": ">=14.0.0" } }, - "node_modules/@aws-sdk/credential-providers/node_modules/@smithy/util-uri-escape": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@smithy/util-uri-escape/-/util-uri-escape-2.0.0.tgz", - "integrity": "sha512-ebkxsqinSdEooQduuk9CbKcI+wheijxEb3utGXkCoYQkJnwTnLbH1JXGimJtUkQwNQbsbuYwG2+aFVyZf5TLaw==", + "node_modules/@aws-sdk/signature-v4-multi-region": { + "version": "3.370.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/signature-v4-multi-region/-/signature-v4-multi-region-3.370.0.tgz", + "integrity": "sha512-Q3NQopPDnHbJXMhtYl0Mfy5U2o76K6tzhdnYRcrYImY0ze/zOkCQI7KPC4588PuyvAXCdQ02cmCPPjYD55UeNg==", "dependencies": { + "@aws-sdk/types": "3.370.0", + "@smithy/protocol-http": "^1.1.0", + "@smithy/signature-v4": "^1.0.1", + "@smithy/types": "^1.1.0", "tslib": "^2.5.0" }, "engines": { "node": ">=14.0.0" + }, + "peerDependencies": { + "@aws-sdk/signature-v4-crt": "^3.118.0" + }, + "peerDependenciesMeta": { + "@aws-sdk/signature-v4-crt": { + "optional": true + } } }, - "node_modules/@aws-sdk/credential-providers/node_modules/@smithy/util-utf8": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-2.0.0.tgz", - "integrity": "sha512-rctU1VkziY84n5OXe3bPNpKR001ZCME2JCaBBFgtiM2hfKbHFudc/BkMuPab8hRbLd0j3vbnBTTZ1igBf0wgiQ==", + "node_modules/@aws-sdk/token-providers": { + "version": "3.413.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/token-providers/-/token-providers-3.413.0.tgz", + "integrity": "sha512-NfP1Ib9LAWVLMTOa/1aJwt4TRrlRrNyukCpVZGfNaMnNNEoP5Rakdbcs8KFVHe/MJzU+GdKVzxQ4TgRkLOGTrA==", "dependencies": { - "@smithy/util-buffer-from": "^2.0.0", + "@aws-crypto/sha256-browser": "3.0.0", + "@aws-crypto/sha256-js": "3.0.0", + "@aws-sdk/middleware-host-header": "3.413.0", + "@aws-sdk/middleware-logger": "3.413.0", + "@aws-sdk/middleware-recursion-detection": "3.413.0", + "@aws-sdk/middleware-user-agent": "3.413.0", + "@aws-sdk/types": "3.413.0", + "@aws-sdk/util-endpoints": "3.413.0", + "@aws-sdk/util-user-agent-browser": "3.413.0", + "@aws-sdk/util-user-agent-node": "3.413.0", + "@smithy/config-resolver": "^2.0.8", + "@smithy/fetch-http-handler": "^2.1.3", + "@smithy/hash-node": "^2.0.7", + "@smithy/invalid-dependency": "^2.0.7", + "@smithy/middleware-content-length": "^2.0.9", + "@smithy/middleware-endpoint": "^2.0.7", + "@smithy/middleware-retry": "^2.0.10", + "@smithy/middleware-serde": "^2.0.7", + "@smithy/middleware-stack": "^2.0.0", + "@smithy/node-config-provider": "^2.0.10", + "@smithy/node-http-handler": "^2.1.3", + "@smithy/property-provider": "^2.0.0", + "@smithy/protocol-http": "^3.0.3", + "@smithy/shared-ini-file-loader": "^2.0.6", + "@smithy/smithy-client": "^2.1.4", + "@smithy/types": "^2.3.1", + "@smithy/url-parser": "^2.0.7", + "@smithy/util-base64": "^2.0.0", + "@smithy/util-body-length-browser": "^2.0.0", + "@smithy/util-body-length-node": "^2.1.0", + "@smithy/util-defaults-mode-browser": "^2.0.8", + "@smithy/util-defaults-mode-node": "^2.0.10", + "@smithy/util-retry": "^2.0.0", + "@smithy/util-utf8": "^2.0.0", "tslib": "^2.5.0" }, "engines": { "node": ">=14.0.0" } }, - "node_modules/@aws-sdk/credential-providers/node_modules/uuid": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", - "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", - "bin": { - "uuid": "dist/bin/uuid" - } - }, - "node_modules/@aws-sdk/hash-blob-browser": { - "version": "3.370.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/hash-blob-browser/-/hash-blob-browser-3.370.0.tgz", - "integrity": "sha512-DyStaznfloyF9jN3KvG6puOAjt25alXoBNeHBF2FyLlEEbrOqUmso39JB5LVAw2/KB4UmCNsbAXFb6WktX/yHQ==", - "dependencies": { - "@aws-sdk/chunked-blob-reader": "3.310.0", - "@aws-sdk/chunked-blob-reader-native": "3.310.0", - "@aws-sdk/types": "3.370.0", - "tslib": "^2.5.0" - } - }, - "node_modules/@aws-sdk/hash-stream-node": { - "version": "3.370.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/hash-stream-node/-/hash-stream-node-3.370.0.tgz", - "integrity": "sha512-ExsbBiIMiL9AN1VpWlD8+xaO5s0cXUZJC2UONiQbgMb1jz7Wq9fa1GmKUDyaGXOuQTT7DDhAmalb9fIpauZKuA==", + "node_modules/@aws-sdk/token-providers/node_modules/@aws-sdk/types": { + "version": "3.413.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.413.0.tgz", + "integrity": "sha512-j1xib0f/TazIFc5ySIKOlT1ujntRbaoG4LJFeEezz4ji03/wSJMI8Vi4KjzpBp8J1tTu0oRDnsxRIGixsUBeYQ==", "dependencies": { - "@aws-sdk/types": "3.370.0", - "@aws-sdk/util-utf8": "3.310.0", + "@smithy/types": "^2.3.1", "tslib": "^2.5.0" }, "engines": { "node": ">=14.0.0" } }, - "node_modules/@aws-sdk/is-array-buffer": { - "version": "3.310.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/is-array-buffer/-/is-array-buffer-3.310.0.tgz", - "integrity": "sha512-urnbcCR+h9NWUnmOtet/s4ghvzsidFmspfhYaHAmSRdy9yDjdjBJMFjjsn85A1ODUktztm+cVncXjQ38WCMjMQ==", + "node_modules/@aws-sdk/token-providers/node_modules/@smithy/abort-controller": { + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/@smithy/abort-controller/-/abort-controller-2.0.8.tgz", + "integrity": "sha512-2SOdVj5y0zE37Y9scSXoizoxgi6mgnDabi7a/SOfhl0p+50I0rIkuJTfyAuTPDtQ7e5dD6tSZPCLB3c/YM6Zig==", "dependencies": { + "@smithy/types": "^2.3.2", "tslib": "^2.5.0" }, "engines": { "node": ">=14.0.0" } }, - "node_modules/@aws-sdk/lib-storage": { - "version": "3.414.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/lib-storage/-/lib-storage-3.414.0.tgz", - "integrity": "sha512-R2ZdLVWa+EhMYrta61c0fNgnRpsIWr4zj1rCnC0ZlTwP5J3jiAaRHPMVgd9Jgo1u91y8nHVYaLdIJ6EQDN0scg==", + "node_modules/@aws-sdk/token-providers/node_modules/@smithy/config-resolver": { + "version": "2.0.9", + "resolved": "https://registry.npmjs.org/@smithy/config-resolver/-/config-resolver-2.0.9.tgz", + "integrity": "sha512-QBkGPLUqyPmis9Erz8v4q5lo/ErnF7+GD5WZHa6JZiXopUPfaaM+B21n8gzS5xCkIXZmnwzNQhObP9xQPu8oqQ==", "dependencies": { - "@smithy/abort-controller": "^2.0.1", - "@smithy/middleware-endpoint": "^2.0.7", - "@smithy/smithy-client": "^2.1.4", - "buffer": "5.6.0", - "events": "3.3.0", - "stream-browserify": "3.0.0", + "@smithy/node-config-provider": "^2.0.11", + "@smithy/types": "^2.3.2", + "@smithy/util-config-provider": "^2.0.0", + "@smithy/util-middleware": "^2.0.1", "tslib": "^2.5.0" }, "engines": { "node": ">=14.0.0" - }, - "peerDependencies": { - "@aws-sdk/client-s3": "^3.0.0" } }, - "node_modules/@aws-sdk/lib-storage/node_modules/@smithy/abort-controller": { - "version": "2.0.8", - "resolved": "https://registry.npmjs.org/@smithy/abort-controller/-/abort-controller-2.0.8.tgz", - "integrity": "sha512-2SOdVj5y0zE37Y9scSXoizoxgi6mgnDabi7a/SOfhl0p+50I0rIkuJTfyAuTPDtQ7e5dD6tSZPCLB3c/YM6Zig==", + "node_modules/@aws-sdk/token-providers/node_modules/@smithy/credential-provider-imds": { + "version": "2.0.11", + "resolved": "https://registry.npmjs.org/@smithy/credential-provider-imds/-/credential-provider-imds-2.0.11.tgz", + "integrity": "sha512-uJJs8dnM5iXkn8a2GaKvlKMhcOJ+oJPYqY9gY3CM/EieCVObIDjxUtR/g8lU/k/A+OauA78GzScAfulmFjPOYA==", "dependencies": { + "@smithy/node-config-provider": "^2.0.11", + "@smithy/property-provider": "^2.0.9", "@smithy/types": "^2.3.2", + "@smithy/url-parser": "^2.0.8", "tslib": "^2.5.0" }, "engines": { "node": ">=14.0.0" } }, - "node_modules/@aws-sdk/lib-storage/node_modules/@smithy/fetch-http-handler": { + "node_modules/@aws-sdk/token-providers/node_modules/@smithy/fetch-http-handler": { "version": "2.1.4", "resolved": "https://registry.npmjs.org/@smithy/fetch-http-handler/-/fetch-http-handler-2.1.4.tgz", "integrity": "sha512-SL24M9W5ERByoXaVicRx+bj9GJVujDnPn+QO7GY7adhY0mPGa6DSF58pVKsgIh4r5Tx/k3SWCPlH4BxxSxA/fQ==", @@ -3783,7 +5137,30 @@ "tslib": "^2.5.0" } }, - "node_modules/@aws-sdk/lib-storage/node_modules/@smithy/is-array-buffer": { + "node_modules/@aws-sdk/token-providers/node_modules/@smithy/hash-node": { + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/@smithy/hash-node/-/hash-node-2.0.8.tgz", + "integrity": "sha512-yZL/nmxZzjZV5/QX5JWSgXlt0HxuMTwFO89CS++jOMMPiCMZngf6VYmtNdccs8IIIAMmfQeTzwu07XgUE/Zd3Q==", + "dependencies": { + "@smithy/types": "^2.3.2", + "@smithy/util-buffer-from": "^2.0.0", + "@smithy/util-utf8": "^2.0.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/token-providers/node_modules/@smithy/invalid-dependency": { + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/@smithy/invalid-dependency/-/invalid-dependency-2.0.8.tgz", + "integrity": "sha512-88VOS7W3KzUz/bNRc+Sl/F/CDIasFspEE4G39YZRHIh9YmsXF7GUyVaAKURfMNulTie62ayk6BHC9O0nOBAVgQ==", + "dependencies": { + "@smithy/types": "^2.3.2", + "tslib": "^2.5.0" + } + }, + "node_modules/@aws-sdk/token-providers/node_modules/@smithy/is-array-buffer": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-2.0.0.tgz", "integrity": "sha512-z3PjFjMyZNI98JFRJi/U0nGoLWMSJlDjAW4QUX2WNZLas5C0CmVV6LJ01JI0k90l7FvpmixjWxPFmENSClQ7ug==", @@ -3794,7 +5171,20 @@ "node": ">=14.0.0" } }, - "node_modules/@aws-sdk/lib-storage/node_modules/@smithy/middleware-endpoint": { + "node_modules/@aws-sdk/token-providers/node_modules/@smithy/middleware-content-length": { + "version": "2.0.10", + "resolved": "https://registry.npmjs.org/@smithy/middleware-content-length/-/middleware-content-length-2.0.10.tgz", + "integrity": "sha512-EGSbysyA4jH0p3xI6G0jdXoj9Iz9GUnAta6aEaHtXm3wVWtenRf80y2TeVvNkVSr5jwKOdSCjKIRI2l1A/oZLA==", + "dependencies": { + "@smithy/protocol-http": "^3.0.4", + "@smithy/types": "^2.3.2", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/token-providers/node_modules/@smithy/middleware-endpoint": { "version": "2.0.8", "resolved": "https://registry.npmjs.org/@smithy/middleware-endpoint/-/middleware-endpoint-2.0.8.tgz", "integrity": "sha512-yOpogfG2d2V0cbJdAJ6GLAWkNOc9pVsL5hZUfXcxJu408N3CUCsXzIAFF6+70ZKSE+lCfG3GFErcSXv/UfUbjw==", @@ -3809,7 +5199,25 @@ "node": ">=14.0.0" } }, - "node_modules/@aws-sdk/lib-storage/node_modules/@smithy/middleware-serde": { + "node_modules/@aws-sdk/token-providers/node_modules/@smithy/middleware-retry": { + "version": "2.0.11", + "resolved": "https://registry.npmjs.org/@smithy/middleware-retry/-/middleware-retry-2.0.11.tgz", + "integrity": "sha512-pknfokumZ+wvBERSuKAI2vVr+aK3ZgPiWRg6+0ZG4kKJogBRpPmDGWw+Jht0izS9ZaEbIobNzueIb4wD33JJVg==", + "dependencies": { + "@smithy/node-config-provider": "^2.0.11", + "@smithy/protocol-http": "^3.0.4", + "@smithy/service-error-classification": "^2.0.1", + "@smithy/types": "^2.3.2", + "@smithy/util-middleware": "^2.0.1", + "@smithy/util-retry": "^2.0.1", + "tslib": "^2.5.0", + "uuid": "^8.3.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/token-providers/node_modules/@smithy/middleware-serde": { "version": "2.0.8", "resolved": "https://registry.npmjs.org/@smithy/middleware-serde/-/middleware-serde-2.0.8.tgz", "integrity": "sha512-Is0sm+LiNlgsc0QpstDzifugzL9ehno1wXp109GgBgpnKTK3j+KphiparBDI4hWTtH9/7OUsxuspNqai2yyhcg==", @@ -3821,7 +5229,7 @@ "node": ">=14.0.0" } }, - "node_modules/@aws-sdk/lib-storage/node_modules/@smithy/middleware-stack": { + "node_modules/@aws-sdk/token-providers/node_modules/@smithy/middleware-stack": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/@smithy/middleware-stack/-/middleware-stack-2.0.1.tgz", "integrity": "sha512-UexsfY6/oQZRjTQL56s9AKtMcR60tBNibSgNYX1I2WXaUaXg97W9JCkFyth85TzBWKDBTyhLfenrukS/kyu54A==", @@ -3833,7 +5241,21 @@ "node": ">=14.0.0" } }, - "node_modules/@aws-sdk/lib-storage/node_modules/@smithy/node-http-handler": { + "node_modules/@aws-sdk/token-providers/node_modules/@smithy/node-config-provider": { + "version": "2.0.11", + "resolved": "https://registry.npmjs.org/@smithy/node-config-provider/-/node-config-provider-2.0.11.tgz", + "integrity": "sha512-CaR1dciSSGKttjhcefpytYjsfI/Yd5mqL8am4wfmyFCDxSiPsvnEWHl8UjM/RbcAjX0klt+CeIKPSHEc0wGvJA==", + "dependencies": { + "@smithy/property-provider": "^2.0.9", + "@smithy/shared-ini-file-loader": "^2.0.10", + "@smithy/types": "^2.3.2", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/token-providers/node_modules/@smithy/node-http-handler": { "version": "2.1.4", "resolved": "https://registry.npmjs.org/@smithy/node-http-handler/-/node-http-handler-2.1.4.tgz", "integrity": "sha512-8Rw/AusvWDyC6SK8esAcVBeTlQHf94NMFv805suFUJCQ2gwlh0oLDNh+6s2MDOrxcjvLxjjzv1mytM0Mt+0cPQ==", @@ -3848,7 +5270,19 @@ "node": ">=14.0.0" } }, - "node_modules/@aws-sdk/lib-storage/node_modules/@smithy/protocol-http": { + "node_modules/@aws-sdk/token-providers/node_modules/@smithy/property-provider": { + "version": "2.0.9", + "resolved": "https://registry.npmjs.org/@smithy/property-provider/-/property-provider-2.0.9.tgz", + "integrity": "sha512-25pPZ8f8DeRwYI5wbPRZaoMoR+3vrw8DwbA0TjP+GsdiB2KxScndr4HQehiJ5+WJ0giOTWhLz0bd+7Djv1qpUQ==", + "dependencies": { + "@smithy/types": "^2.3.2", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/token-providers/node_modules/@smithy/protocol-http": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-3.0.4.tgz", "integrity": "sha512-CGfSWk6TRlbwa8YgrSXdn80Yu7pov3EV/h7TSfiCHhq6/LO3WymmqnzgH1f0qV2bdTDipIkTNp5dGCGN3Af/5g==", @@ -3860,7 +5294,7 @@ "node": ">=14.0.0" } }, - "node_modules/@aws-sdk/lib-storage/node_modules/@smithy/querystring-builder": { + "node_modules/@aws-sdk/token-providers/node_modules/@smithy/querystring-builder": { "version": "2.0.8", "resolved": "https://registry.npmjs.org/@smithy/querystring-builder/-/querystring-builder-2.0.8.tgz", "integrity": "sha512-+vzIMwjC8Saz97/ptPn+IJRCRRZ+pP95ZIWDRqEqZV/a6hiKbaFoMSa2iCKsnKzR696U2JZXrDqMu3e/FD1+2g==", @@ -3873,7 +5307,7 @@ "node": ">=14.0.0" } }, - "node_modules/@aws-sdk/lib-storage/node_modules/@smithy/querystring-parser": { + "node_modules/@aws-sdk/token-providers/node_modules/@smithy/querystring-parser": { "version": "2.0.8", "resolved": "https://registry.npmjs.org/@smithy/querystring-parser/-/querystring-parser-2.0.8.tgz", "integrity": "sha512-ArbanNuR7O/MmTd90ZqhDqGOPPDYmxx3huHxD+R3cuCnazcK/1tGQA+SnnR5307T7ZRb5WTpB6qBggERuibVSA==", @@ -3885,7 +5319,30 @@ "node": ">=14.0.0" } }, - "node_modules/@aws-sdk/lib-storage/node_modules/@smithy/smithy-client": { + "node_modules/@aws-sdk/token-providers/node_modules/@smithy/service-error-classification": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@smithy/service-error-classification/-/service-error-classification-2.0.1.tgz", + "integrity": "sha512-QHa9+t+v4s0cMuDCcbjIJN67mNZ42/+fc3jKe8P6ZMPXZl5ksKk6a8vhZ/m494GZng5eFTc3OePv+NF9cG83yg==", + "dependencies": { + "@smithy/types": "^2.3.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/token-providers/node_modules/@smithy/shared-ini-file-loader": { + "version": "2.0.10", + "resolved": "https://registry.npmjs.org/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-2.0.10.tgz", + "integrity": "sha512-jWASteSezRKohJ7GdA7pHDvmr7Q7tw3b5mu3xLHIkZy/ICftJ+O7aqNaF8wklhI7UNFoQ7flFRM3Rd0KA+1BbQ==", + "dependencies": { + "@smithy/types": "^2.3.2", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/token-providers/node_modules/@smithy/smithy-client": { "version": "2.1.5", "resolved": "https://registry.npmjs.org/@smithy/smithy-client/-/smithy-client-2.1.5.tgz", "integrity": "sha512-7S865uKzsxApM8W8Q6zkij7tcUFgaG8PuADMFdMt1yL/ku3d0+s6Zwrg3N7iXCPM08Gu/mf0BIfTXIu/9i450Q==", @@ -3899,7 +5356,7 @@ "node": ">=14.0.0" } }, - "node_modules/@aws-sdk/lib-storage/node_modules/@smithy/types": { + "node_modules/@aws-sdk/token-providers/node_modules/@smithy/types": { "version": "2.3.2", "resolved": "https://registry.npmjs.org/@smithy/types/-/types-2.3.2.tgz", "integrity": "sha512-iH0cdKi7HQlzfAM3w2shFk/qZYKAqJWswtpmQpPtlruF+uFZeGEpMJjgDRyhWiddfVM4e2oP4nMaOBsMy6lXgg==", @@ -3910,7 +5367,7 @@ "node": ">=14.0.0" } }, - "node_modules/@aws-sdk/lib-storage/node_modules/@smithy/url-parser": { + "node_modules/@aws-sdk/token-providers/node_modules/@smithy/url-parser": { "version": "2.0.8", "resolved": "https://registry.npmjs.org/@smithy/url-parser/-/url-parser-2.0.8.tgz", "integrity": "sha512-wQw7j004ScCrBRJ+oNPXlLE9mtofxyadSZ9D8ov/rHkyurS7z1HTNuyaGRj6OvKsEk0SVQsuY0C9+EfM75XTkw==", @@ -3920,7 +5377,7 @@ "tslib": "^2.5.0" } }, - "node_modules/@aws-sdk/lib-storage/node_modules/@smithy/util-base64": { + "node_modules/@aws-sdk/token-providers/node_modules/@smithy/util-base64": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/@smithy/util-base64/-/util-base64-2.0.0.tgz", "integrity": "sha512-Zb1E4xx+m5Lud8bbeYi5FkcMJMnn+1WUnJF3qD7rAdXpaL7UjkFQLdmW5fHadoKbdHpwH9vSR8EyTJFHJs++tA==", @@ -3929,22 +5386,84 @@ "tslib": "^2.5.0" }, "engines": { - "node": ">=14.0.0" + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/token-providers/node_modules/@smithy/util-body-length-browser": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-body-length-browser/-/util-body-length-browser-2.0.0.tgz", + "integrity": "sha512-JdDuS4ircJt+FDnaQj88TzZY3+njZ6O+D3uakS32f2VNnDo3vyEuNdBOh/oFd8Df1zSZOuH1HEChk2AOYDezZg==", + "dependencies": { + "tslib": "^2.5.0" + } + }, + "node_modules/@aws-sdk/token-providers/node_modules/@smithy/util-body-length-node": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@smithy/util-body-length-node/-/util-body-length-node-2.1.0.tgz", + "integrity": "sha512-/li0/kj/y3fQ3vyzn36NTLGmUwAICb7Jbe/CsWCktW363gh1MOcpEcSO3mJ344Gv2dqz8YJCLQpb6hju/0qOWw==", + "dependencies": { + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/token-providers/node_modules/@smithy/util-buffer-from": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-2.0.0.tgz", + "integrity": "sha512-/YNnLoHsR+4W4Vf2wL5lGv0ksg8Bmk3GEGxn2vEQt52AQaPSCuaO5PM5VM7lP1K9qHRKHwrPGktqVoAHKWHxzw==", + "dependencies": { + "@smithy/is-array-buffer": "^2.0.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/token-providers/node_modules/@smithy/util-config-provider": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-config-provider/-/util-config-provider-2.0.0.tgz", + "integrity": "sha512-xCQ6UapcIWKxXHEU4Mcs2s7LcFQRiU3XEluM2WcCjjBtQkUN71Tb+ydGmJFPxMUrW/GWMgQEEGipLym4XG0jZg==", + "dependencies": { + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/token-providers/node_modules/@smithy/util-defaults-mode-browser": { + "version": "2.0.9", + "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-browser/-/util-defaults-mode-browser-2.0.9.tgz", + "integrity": "sha512-JONLJVQWT8165XoSV36ERn3SVlZLJJ4D6IeGsCSePv65Uxa93pzSLE0UMSR9Jwm4zix7rst9AS8W5QIypZWP8Q==", + "dependencies": { + "@smithy/property-provider": "^2.0.9", + "@smithy/smithy-client": "^2.1.5", + "@smithy/types": "^2.3.2", + "bowser": "^2.11.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">= 10.0.0" } }, - "node_modules/@aws-sdk/lib-storage/node_modules/@smithy/util-buffer-from": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-2.0.0.tgz", - "integrity": "sha512-/YNnLoHsR+4W4Vf2wL5lGv0ksg8Bmk3GEGxn2vEQt52AQaPSCuaO5PM5VM7lP1K9qHRKHwrPGktqVoAHKWHxzw==", - "dependencies": { - "@smithy/is-array-buffer": "^2.0.0", + "node_modules/@aws-sdk/token-providers/node_modules/@smithy/util-defaults-mode-node": { + "version": "2.0.11", + "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-node/-/util-defaults-mode-node-2.0.11.tgz", + "integrity": "sha512-tmqjNsfj+bgZN6jXBe6efZnukzILA7BUytHkzqikuRLNtR+0VVchQHvawD0w6vManh76rO81ydhioe7i4oBzuA==", + "dependencies": { + "@smithy/config-resolver": "^2.0.9", + "@smithy/credential-provider-imds": "^2.0.11", + "@smithy/node-config-provider": "^2.0.11", + "@smithy/property-provider": "^2.0.9", + "@smithy/smithy-client": "^2.1.5", + "@smithy/types": "^2.3.2", "tslib": "^2.5.0" }, "engines": { - "node": ">=14.0.0" + "node": ">= 10.0.0" } }, - "node_modules/@aws-sdk/lib-storage/node_modules/@smithy/util-hex-encoding": { + "node_modules/@aws-sdk/token-providers/node_modules/@smithy/util-hex-encoding": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/@smithy/util-hex-encoding/-/util-hex-encoding-2.0.0.tgz", "integrity": "sha512-c5xY+NUnFqG6d7HFh1IFfrm3mGl29lC+vF+geHv4ToiuJCBmIfzx6IeHLg+OgRdPFKDXIw6pvi+p3CsscaMcMA==", @@ -3955,7 +5474,7 @@ "node": ">=14.0.0" } }, - "node_modules/@aws-sdk/lib-storage/node_modules/@smithy/util-middleware": { + "node_modules/@aws-sdk/token-providers/node_modules/@smithy/util-middleware": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/@smithy/util-middleware/-/util-middleware-2.0.1.tgz", "integrity": "sha512-LnsBMi0Mg3gfz/TpNGLv2Jjcz2ra1OX5HR/4IaCepIYmtPQzqMWDdhX/XTW1LS8OZ0xbQuyQPcHkQ+2XkhWOVQ==", @@ -3967,7 +5486,20 @@ "node": ">=14.0.0" } }, - "node_modules/@aws-sdk/lib-storage/node_modules/@smithy/util-stream": { + "node_modules/@aws-sdk/token-providers/node_modules/@smithy/util-retry": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@smithy/util-retry/-/util-retry-2.0.1.tgz", + "integrity": "sha512-naj4X0IafJ9yJnVJ58QgSMkCNLjyQOnyrnKh/T0f+0UOUxJiT8vuFn/hS7B/pNqbo2STY7PyJ4J4f+5YqxwNtA==", + "dependencies": { + "@smithy/service-error-classification": "^2.0.1", + "@smithy/types": "^2.3.2", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/@aws-sdk/token-providers/node_modules/@smithy/util-stream": { "version": "2.0.11", "resolved": "https://registry.npmjs.org/@smithy/util-stream/-/util-stream-2.0.11.tgz", "integrity": "sha512-2MeWfqSpZKdmEJ+tH8CJQSgzLWhH5cmdE24X7JB0hiamXrOmswWGGuPvyj/9sQCTclo57pNxLR2p7KrP8Ahiyg==", @@ -3985,7 +5517,7 @@ "node": ">=14.0.0" } }, - "node_modules/@aws-sdk/lib-storage/node_modules/@smithy/util-uri-escape": { + "node_modules/@aws-sdk/token-providers/node_modules/@smithy/util-uri-escape": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/@smithy/util-uri-escape/-/util-uri-escape-2.0.0.tgz", "integrity": "sha512-ebkxsqinSdEooQduuk9CbKcI+wheijxEb3utGXkCoYQkJnwTnLbH1JXGimJtUkQwNQbsbuYwG2+aFVyZf5TLaw==", @@ -3996,7 +5528,7 @@ "node": ">=14.0.0" } }, - "node_modules/@aws-sdk/lib-storage/node_modules/@smithy/util-utf8": { + "node_modules/@aws-sdk/token-providers/node_modules/@smithy/util-utf8": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-2.0.0.tgz", "integrity": "sha512-rctU1VkziY84n5OXe3bPNpKR001ZCME2JCaBBFgtiM2hfKbHFudc/BkMuPab8hRbLd0j3vbnBTTZ1igBf0wgiQ==", @@ -4008,179 +5540,217 @@ "node": ">=14.0.0" } }, - "node_modules/@aws-sdk/md5-js": { + "node_modules/@aws-sdk/token-providers/node_modules/uuid": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "node_modules/@aws-sdk/types": { "version": "3.370.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/md5-js/-/md5-js-3.370.0.tgz", - "integrity": "sha512-wch3+hiRdFGsu5E+w3WU9qmumQErKshtgetd6wMgFYm2MPSksFU58rM/aiwiWRA6knpcaShKaPKMmGnuX3HwhQ==", + "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.370.0.tgz", + "integrity": "sha512-8PGMKklSkRKjunFhzM2y5Jm0H2TBu7YRNISdYzXLUHKSP9zlMEYagseKVdmox0zKHf1LXVNuSlUV2b6SRrieCQ==", "dependencies": { - "@aws-sdk/types": "3.370.0", - "@aws-sdk/util-utf8": "3.310.0", + "@smithy/types": "^1.1.0", "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" } }, - "node_modules/@aws-sdk/middleware-bucket-endpoint": { - "version": "3.370.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-bucket-endpoint/-/middleware-bucket-endpoint-3.370.0.tgz", - "integrity": "sha512-B36+fOeJVO0D9cjR92Ob6Ki2FTzyTQ/uKk8w+xtur6W6zYVOPU4IQNpNZvN3Ykt4jitR2uUnVSlBb3sXHHhdFA==", + "node_modules/@aws-sdk/util-arn-parser": { + "version": "3.310.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-arn-parser/-/util-arn-parser-3.310.0.tgz", + "integrity": "sha512-jL8509owp/xB9+Or0pvn3Fe+b94qfklc2yPowZZIFAkFcCSIdkIglz18cPDWnYAcy9JGewpMS1COXKIUhZkJsA==", "dependencies": { - "@aws-sdk/types": "3.370.0", - "@aws-sdk/util-arn-parser": "3.310.0", - "@smithy/protocol-http": "^1.1.0", - "@smithy/types": "^1.1.0", - "@smithy/util-config-provider": "^1.0.1", "tslib": "^2.5.0" }, "engines": { "node": ">=14.0.0" } }, - "node_modules/@aws-sdk/middleware-expect-continue": { - "version": "3.370.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-expect-continue/-/middleware-expect-continue-3.370.0.tgz", - "integrity": "sha512-OlFIpXa53obLryHyrqedE2Cp8lp2k+1Vjd++hlZFDFJncRlWZMxoXSyl6shQPqhIiGnNW4vt7tG5xE4jg4NAvw==", + "node_modules/@aws-sdk/util-base64": { + "version": "3.310.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-base64/-/util-base64-3.310.0.tgz", + "integrity": "sha512-v3+HBKQvqgdzcbL+pFswlx5HQsd9L6ZTlyPVL2LS9nNXnCcR3XgGz9jRskikRUuUvUXtkSG1J88GAOnJ/apTPg==", "dependencies": { - "@aws-sdk/types": "3.370.0", - "@smithy/protocol-http": "^1.1.0", - "@smithy/types": "^1.1.0", + "@aws-sdk/util-buffer-from": "3.310.0", "tslib": "^2.5.0" }, "engines": { "node": ">=14.0.0" } }, - "node_modules/@aws-sdk/middleware-flexible-checksums": { - "version": "3.370.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-flexible-checksums/-/middleware-flexible-checksums-3.370.0.tgz", - "integrity": "sha512-62fyW4hZxppvkQKSXdkzjHQ95dXyVCuL18Sfnlciy9pr9f/t5w6LhZIxsNIW+Ge9mbgc661SVRKTwxlZj6FuLQ==", + "node_modules/@aws-sdk/util-buffer-from": { + "version": "3.310.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-buffer-from/-/util-buffer-from-3.310.0.tgz", + "integrity": "sha512-i6LVeXFtGih5Zs8enLrt+ExXY92QV25jtEnTKHsmlFqFAuL3VBeod6boeMXkN2p9lbSVVQ1sAOOYZOHYbYkntw==", "dependencies": { - "@aws-crypto/crc32": "3.0.0", - "@aws-crypto/crc32c": "3.0.0", - "@aws-sdk/types": "3.370.0", - "@smithy/is-array-buffer": "^1.0.1", - "@smithy/protocol-http": "^1.1.0", - "@smithy/types": "^1.1.0", - "@smithy/util-utf8": "^1.0.1", + "@aws-sdk/is-array-buffer": "3.310.0", "tslib": "^2.5.0" }, "engines": { "node": ">=14.0.0" } }, - "node_modules/@aws-sdk/middleware-location-constraint": { - "version": "3.370.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-location-constraint/-/middleware-location-constraint-3.370.0.tgz", - "integrity": "sha512-NlDZEbBOF1IN7svUTcjbLodkUctt9zsfDI8+DqNlklRs5lsPb91WYvahOfjFO/EvACixa+a5d3cCumMCaIq4Cw==", + "node_modules/@aws-sdk/util-endpoints": { + "version": "3.413.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-endpoints/-/util-endpoints-3.413.0.tgz", + "integrity": "sha512-VAwr7cITNb1L6/2XUPIbCOuhKGm0VtKCRblurrfUF2bxqG/wtuw/2Fm4ahYJPyxklOSXAMSq+RHdFWcir0YB/g==", "dependencies": { - "@aws-sdk/types": "3.370.0", - "@smithy/types": "^1.1.0", + "@aws-sdk/types": "3.413.0", "tslib": "^2.5.0" }, "engines": { "node": ">=14.0.0" } }, - "node_modules/@aws-sdk/middleware-sdk-s3": { - "version": "3.370.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-sdk-s3/-/middleware-sdk-s3-3.370.0.tgz", - "integrity": "sha512-DPYXtveWBDS5MzSHWTThg2KkLaOzZkCgPejjEuw3yl4ljsHawDs/ZIVCtmWXlBIS2lLCaBMpCV+t9psuJ/6/zQ==", + "node_modules/@aws-sdk/util-endpoints/node_modules/@aws-sdk/types": { + "version": "3.413.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.413.0.tgz", + "integrity": "sha512-j1xib0f/TazIFc5ySIKOlT1ujntRbaoG4LJFeEezz4ji03/wSJMI8Vi4KjzpBp8J1tTu0oRDnsxRIGixsUBeYQ==", "dependencies": { - "@aws-sdk/types": "3.370.0", - "@aws-sdk/util-arn-parser": "3.310.0", - "@smithy/protocol-http": "^1.1.0", - "@smithy/types": "^1.1.0", + "@smithy/types": "^2.3.1", "tslib": "^2.5.0" }, "engines": { "node": ">=14.0.0" } }, - "node_modules/@aws-sdk/middleware-ssec": { - "version": "3.370.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-ssec/-/middleware-ssec-3.370.0.tgz", - "integrity": "sha512-NIosfLS7mxCNdGYnuy76W9qP3f3YWVTusUA+uv+s6rnwG+Z2UheXCf1wpnJKzxORA8pioSP7ylZ8w2A0reCgYQ==", + "node_modules/@aws-sdk/util-endpoints/node_modules/@smithy/types": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-2.3.2.tgz", + "integrity": "sha512-iH0cdKi7HQlzfAM3w2shFk/qZYKAqJWswtpmQpPtlruF+uFZeGEpMJjgDRyhWiddfVM4e2oP4nMaOBsMy6lXgg==", "dependencies": { - "@aws-sdk/types": "3.370.0", - "@smithy/types": "^1.1.0", "tslib": "^2.5.0" }, "engines": { "node": ">=14.0.0" } }, - "node_modules/@aws-sdk/signature-v4-multi-region": { - "version": "3.370.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/signature-v4-multi-region/-/signature-v4-multi-region-3.370.0.tgz", - "integrity": "sha512-Q3NQopPDnHbJXMhtYl0Mfy5U2o76K6tzhdnYRcrYImY0ze/zOkCQI7KPC4588PuyvAXCdQ02cmCPPjYD55UeNg==", + "node_modules/@aws-sdk/util-locate-window": { + "version": "3.310.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-locate-window/-/util-locate-window-3.310.0.tgz", + "integrity": "sha512-qo2t/vBTnoXpjKxlsC2e1gBrRm80M3bId27r0BRB2VniSSe7bL1mmzM+/HFtujm0iAxtPM+aLEflLJlJeDPg0w==", "dependencies": { - "@aws-sdk/types": "3.370.0", - "@smithy/protocol-http": "^1.1.0", - "@smithy/signature-v4": "^1.0.1", - "@smithy/types": "^1.1.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/util-user-agent-browser": { + "version": "3.413.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.413.0.tgz", + "integrity": "sha512-7j/qWcRO2OBZBre2fC6V6M0PAS9n7k6i+VtofPkkhxC2DZszLJElqnooF9hGmVGYK3zR47Np4WjURXKIEZclWg==", + "dependencies": { + "@aws-sdk/types": "3.413.0", + "@smithy/types": "^2.3.1", + "bowser": "^2.11.0", + "tslib": "^2.5.0" + } + }, + "node_modules/@aws-sdk/util-user-agent-browser/node_modules/@aws-sdk/types": { + "version": "3.413.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.413.0.tgz", + "integrity": "sha512-j1xib0f/TazIFc5ySIKOlT1ujntRbaoG4LJFeEezz4ji03/wSJMI8Vi4KjzpBp8J1tTu0oRDnsxRIGixsUBeYQ==", + "dependencies": { + "@smithy/types": "^2.3.1", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/util-user-agent-browser/node_modules/@smithy/types": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-2.3.2.tgz", + "integrity": "sha512-iH0cdKi7HQlzfAM3w2shFk/qZYKAqJWswtpmQpPtlruF+uFZeGEpMJjgDRyhWiddfVM4e2oP4nMaOBsMy6lXgg==", + "dependencies": { + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/util-user-agent-node": { + "version": "3.413.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.413.0.tgz", + "integrity": "sha512-vHm9TVZIzfWMeDvdmoOky6VarqOt8Pr68CESHN0jyuO6XbhCDnr9rpaXiBhbSR+N1Qm7R/AfJgAhQyTMu2G1OA==", + "dependencies": { + "@aws-sdk/types": "3.413.0", + "@smithy/node-config-provider": "^2.0.10", + "@smithy/types": "^2.3.1", "tslib": "^2.5.0" }, "engines": { "node": ">=14.0.0" }, "peerDependencies": { - "@aws-sdk/signature-v4-crt": "^3.118.0" + "aws-crt": ">=1.0.0" }, "peerDependenciesMeta": { - "@aws-sdk/signature-v4-crt": { + "aws-crt": { "optional": true } } }, - "node_modules/@aws-sdk/types": { - "version": "3.370.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.370.0.tgz", - "integrity": "sha512-8PGMKklSkRKjunFhzM2y5Jm0H2TBu7YRNISdYzXLUHKSP9zlMEYagseKVdmox0zKHf1LXVNuSlUV2b6SRrieCQ==", + "node_modules/@aws-sdk/util-user-agent-node/node_modules/@aws-sdk/types": { + "version": "3.413.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.413.0.tgz", + "integrity": "sha512-j1xib0f/TazIFc5ySIKOlT1ujntRbaoG4LJFeEezz4ji03/wSJMI8Vi4KjzpBp8J1tTu0oRDnsxRIGixsUBeYQ==", "dependencies": { - "@smithy/types": "^1.1.0", + "@smithy/types": "^2.3.1", "tslib": "^2.5.0" }, "engines": { "node": ">=14.0.0" } }, - "node_modules/@aws-sdk/util-arn-parser": { - "version": "3.310.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-arn-parser/-/util-arn-parser-3.310.0.tgz", - "integrity": "sha512-jL8509owp/xB9+Or0pvn3Fe+b94qfklc2yPowZZIFAkFcCSIdkIglz18cPDWnYAcy9JGewpMS1COXKIUhZkJsA==", + "node_modules/@aws-sdk/util-user-agent-node/node_modules/@smithy/node-config-provider": { + "version": "2.0.11", + "resolved": "https://registry.npmjs.org/@smithy/node-config-provider/-/node-config-provider-2.0.11.tgz", + "integrity": "sha512-CaR1dciSSGKttjhcefpytYjsfI/Yd5mqL8am4wfmyFCDxSiPsvnEWHl8UjM/RbcAjX0klt+CeIKPSHEc0wGvJA==", "dependencies": { + "@smithy/property-provider": "^2.0.9", + "@smithy/shared-ini-file-loader": "^2.0.10", + "@smithy/types": "^2.3.2", "tslib": "^2.5.0" }, "engines": { "node": ">=14.0.0" } }, - "node_modules/@aws-sdk/util-base64": { - "version": "3.310.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-base64/-/util-base64-3.310.0.tgz", - "integrity": "sha512-v3+HBKQvqgdzcbL+pFswlx5HQsd9L6ZTlyPVL2LS9nNXnCcR3XgGz9jRskikRUuUvUXtkSG1J88GAOnJ/apTPg==", + "node_modules/@aws-sdk/util-user-agent-node/node_modules/@smithy/property-provider": { + "version": "2.0.9", + "resolved": "https://registry.npmjs.org/@smithy/property-provider/-/property-provider-2.0.9.tgz", + "integrity": "sha512-25pPZ8f8DeRwYI5wbPRZaoMoR+3vrw8DwbA0TjP+GsdiB2KxScndr4HQehiJ5+WJ0giOTWhLz0bd+7Djv1qpUQ==", "dependencies": { - "@aws-sdk/util-buffer-from": "3.310.0", + "@smithy/types": "^2.3.2", "tslib": "^2.5.0" }, "engines": { "node": ">=14.0.0" } }, - "node_modules/@aws-sdk/util-buffer-from": { - "version": "3.310.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-buffer-from/-/util-buffer-from-3.310.0.tgz", - "integrity": "sha512-i6LVeXFtGih5Zs8enLrt+ExXY92QV25jtEnTKHsmlFqFAuL3VBeod6boeMXkN2p9lbSVVQ1sAOOYZOHYbYkntw==", + "node_modules/@aws-sdk/util-user-agent-node/node_modules/@smithy/shared-ini-file-loader": { + "version": "2.0.10", + "resolved": "https://registry.npmjs.org/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-2.0.10.tgz", + "integrity": "sha512-jWASteSezRKohJ7GdA7pHDvmr7Q7tw3b5mu3xLHIkZy/ICftJ+O7aqNaF8wklhI7UNFoQ7flFRM3Rd0KA+1BbQ==", "dependencies": { - "@aws-sdk/is-array-buffer": "3.310.0", + "@smithy/types": "^2.3.2", "tslib": "^2.5.0" }, "engines": { "node": ">=14.0.0" } }, - "node_modules/@aws-sdk/util-locate-window": { - "version": "3.310.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-locate-window/-/util-locate-window-3.310.0.tgz", - "integrity": "sha512-qo2t/vBTnoXpjKxlsC2e1gBrRm80M3bId27r0BRB2VniSSe7bL1mmzM+/HFtujm0iAxtPM+aLEflLJlJeDPg0w==", + "node_modules/@aws-sdk/util-user-agent-node/node_modules/@smithy/types": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-2.3.2.tgz", + "integrity": "sha512-iH0cdKi7HQlzfAM3w2shFk/qZYKAqJWswtpmQpPtlruF+uFZeGEpMJjgDRyhWiddfVM4e2oP4nMaOBsMy6lXgg==", "dependencies": { "tslib": "^2.5.0" }, @@ -7879,7 +9449,6 @@ "version": "1.0.5", "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz", "integrity": "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==", - "dev": true, "engines": { "node": ">= 0.4" }, @@ -7892,6 +9461,57 @@ "resolved": "https://registry.npmjs.org/await-handler/-/await-handler-1.1.2.tgz", "integrity": "sha512-dihteGhwbJpT89kVbacWiyKeAZr+En0YGK6pAKQJLR0En9ZxSH2H4TTvfG4bBjzFq9gDAma4y9BrpDns6j5UiQ==" }, + "node_modules/aws-sdk": { + "version": "2.1460.0", + "resolved": "https://registry.npmjs.org/aws-sdk/-/aws-sdk-2.1460.0.tgz", + "integrity": "sha512-7K+aTMKtCAyR3cWxyGFd9YP1U4go4IaRsiFO8JLNpy2fSqlGC5XENGyLhmIQQOBwqb2WOwz5e1BftaKycmreWw==", + "dependencies": { + "buffer": "4.9.2", + "events": "1.1.1", + "ieee754": "1.1.13", + "jmespath": "0.16.0", + "querystring": "0.2.0", + "sax": "1.2.1", + "url": "0.10.3", + "util": "^0.12.4", + "uuid": "8.0.0", + "xml2js": "0.5.0" + }, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/aws-sdk/node_modules/buffer": { + "version": "4.9.2", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.2.tgz", + "integrity": "sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg==", + "dependencies": { + "base64-js": "^1.0.2", + "ieee754": "^1.1.4", + "isarray": "^1.0.0" + } + }, + "node_modules/aws-sdk/node_modules/events": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/events/-/events-1.1.1.tgz", + "integrity": "sha512-kEcvvCBByWXGnZy6JUlgAp2gBIUjfCAV6P6TgT1/aaQKcmuAEC4OZTV1I4EWQLz2gxZw76atuVyvHhTxvi0Flw==", + "engines": { + "node": ">=0.4.x" + } + }, + "node_modules/aws-sdk/node_modules/ieee754": { + "version": "1.1.13", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.13.tgz", + "integrity": "sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg==" + }, + "node_modules/aws-sdk/node_modules/uuid": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.0.0.tgz", + "integrity": "sha512-jOXGuXZAWdsTH7eZLtyXMqUb9EcWMGZNbL9YcGBJl4MH4nrxHmZJhEHvyLFrkxo+28uLb/NYRcStH48fnD0Vzw==", + "bin": { + "uuid": "dist/bin/uuid" + } + }, "node_modules/axios": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/axios/-/axios-1.4.0.tgz", @@ -12520,7 +14140,6 @@ "version": "0.3.3", "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", - "dev": true, "dependencies": { "is-callable": "^1.1.3" } @@ -13177,7 +14796,6 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", - "dev": true, "dependencies": { "get-intrinsic": "^1.1.3" }, @@ -13823,6 +15441,21 @@ "node": "*" } }, + "node_modules/is-arguments": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz", + "integrity": "sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==", + "dependencies": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-array-buffer": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.1.tgz", @@ -13894,7 +15527,6 @@ "version": "1.2.7", "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", - "dev": true, "engines": { "node": ">= 0.4" }, @@ -14222,7 +15854,6 @@ "version": "1.1.10", "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.10.tgz", "integrity": "sha512-PJqgEHiWZvMpaFZ3uTc8kHPM4+4ADTlDniuQL7cU/UDA0Ql7F70yGfHph3cLNe+c9toaigv+DFzTJKhc2CtO6A==", - "dev": true, "dependencies": { "available-typed-arrays": "^1.0.5", "call-bind": "^1.0.2", @@ -14309,8 +15940,7 @@ "node_modules/isarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", - "dev": true + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==" }, "node_modules/iserror": { "version": "0.0.2", @@ -15061,6 +16691,14 @@ "url": "https://github.com/chalk/supports-color?sponsor=1" } }, + "node_modules/jmespath": { + "version": "0.16.0", + "resolved": "https://registry.npmjs.org/jmespath/-/jmespath-0.16.0.tgz", + "integrity": "sha512-9FzQjJ7MATs1tSpnco1K6ayiYE3figslrXA72G2HQ/n76RzvYlofyi5QM+iX4YRs/pu3yzxlVQSST23+dMDknw==", + "engines": { + "node": ">= 0.6.0" + } + }, "node_modules/joi": { "version": "17.9.2", "resolved": "https://registry.npmjs.org/joi/-/joi-17.9.2.tgz", @@ -16677,9 +18315,9 @@ } }, "node_modules/node-fetch": { - "version": "2.6.12", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.12.tgz", - "integrity": "sha512-C/fGU2E8ToujUivIO0H+tpQ6HWo4eEmchoPIoXtxCrVghxdKq+QOHqEZW7tuP3KlV3bC8FRMO5nMCC7Zm1VP6g==", + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", + "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", "dependencies": { "whatwg-url": "^5.0.0" }, @@ -18027,6 +19665,15 @@ "node": ">=0.10.0" } }, + "node_modules/querystring": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", + "integrity": "sha512-X/xY82scca2tau62i9mDyU9K+I+djTMUsvwf7xnUX5GLvVzgJybOJf4Y6o9Zx3oJK/LSXg5tTZBjwzqVPaPO2g==", + "deprecated": "The querystring API is considered Legacy. new code should use the URLSearchParams API instead.", + "engines": { + "node": ">=0.4.x" + } + }, "node_modules/queue-microtask": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", @@ -18716,6 +20363,11 @@ "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", "dev": true }, + "node_modules/sax": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.1.tgz", + "integrity": "sha512-8I2a3LovHTOpm7NV5yOyO8IHqgVsfK4+UuySrXU8YXkSRX7k6hCV9b3HrkKCr3nMpgj+0bmocaJJWpvp1oc7ZA==" + }, "node_modules/semver": { "version": "7.5.3", "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.3.tgz", @@ -20341,6 +21993,15 @@ "punycode": "^2.1.0" } }, + "node_modules/url": { + "version": "0.10.3", + "resolved": "https://registry.npmjs.org/url/-/url-0.10.3.tgz", + "integrity": "sha512-hzSUW2q06EqL1gKM/a+obYHLIO6ct2hwPuviqTTOcfFVc61UbfJ2Q32+uGL/HCPxKqrdGB5QUwIe7UqlDgwsOQ==", + "dependencies": { + "punycode": "1.3.2", + "querystring": "0.2.0" + } + }, "node_modules/url-parse-lax": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-3.0.0.tgz", @@ -20362,6 +22023,11 @@ "node": ">= 4" } }, + "node_modules/url/node_modules/punycode": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz", + "integrity": "sha512-RofWgt/7fL5wP1Y7fxE7/EmTLzQVnB0ycyibJ0OOHIlJqTNzglYFxVwETOcIoJqJmpDXJ9xImDv+Fq34F/d4Dw==" + }, "node_modules/utf8-byte-length": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/utf8-byte-length/-/utf8-byte-length-1.0.4.tgz", @@ -20372,6 +22038,18 @@ "resolved": "https://registry.npmjs.org/utf8-length/-/utf8-length-0.0.1.tgz", "integrity": "sha512-j/XH2ftofBiobnyApxlN/J6j/ixwT89WEjDcjT66d2i0+GIn9RZfzt8lpEXXE4jUe4NsjBSUq70kS2euQ4nnMw==" }, + "node_modules/util": { + "version": "0.12.5", + "resolved": "https://registry.npmjs.org/util/-/util-0.12.5.tgz", + "integrity": "sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA==", + "dependencies": { + "inherits": "^2.0.3", + "is-arguments": "^1.0.4", + "is-generator-function": "^1.0.7", + "is-typed-array": "^1.1.3", + "which-typed-array": "^1.1.2" + } + }, "node_modules/util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", @@ -20531,7 +22209,6 @@ "version": "1.1.9", "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.9.tgz", "integrity": "sha512-w9c4xkx6mPidwp7180ckYWfMmvxpjlZuIudNtDf4N/tTAUB8VJbX25qZoAsrtGuYNnGw3pa0AXgbGKRB8/EceA==", - "dev": true, "dependencies": { "available-typed-arrays": "^1.0.5", "call-bind": "^1.0.2", @@ -20681,6 +22358,26 @@ "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" }, + "node_modules/xml2js": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.5.0.tgz", + "integrity": "sha512-drPFnkQJik/O+uPKpqSgr22mpuFHqKdbS835iAQrUC73L2F5WkboIRd63ai/2Yg6I1jzifPFKH2NTK+cfglkIA==", + "dependencies": { + "sax": ">=0.6.0", + "xmlbuilder": "~11.0.0" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/xmlbuilder": { + "version": "11.0.1", + "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-11.0.1.tgz", + "integrity": "sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==", + "engines": { + "node": ">=4.0" + } + }, "node_modules/xtend": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", diff --git a/package.json b/package.json index 264ba226c0..5a17a4d524 100644 --- a/package.json +++ b/package.json @@ -55,8 +55,11 @@ "@aws-sdk/client-s3": "^3.370.0", "@aws-sdk/credential-providers": "^3.391.0", "@aws-sdk/lib-storage": "^3.391.0", + "@aws-sdk/client-lambda": "^3.276.0", + "aws-sdk": "^2.1354.0", "@bugsnag/js": "^7.20.2", "@datadog/pprof": "^3.1.0", + "pprof": "^3.2.1", "@koa/router": "^12.0.0", "@ndhoule/extend": "^2.0.0", "@pyroscope/nodejs": "^0.2.6",